[automerger skipped] Merge "Revert "Prevent exfiltration of system files via user image settings."" into qt-dev am: b9bafa0d3d am: 05031cc574 am: 03b1a52977 am: e2815b7e11 -s ours am: 48046cf4ae -s ours am: 141dc63796 -s ours am: 40ec6382a0 -s ours am: bb562d7426 -s ours am: 80cdde7ce8 -s ours
am skip reason: Merged-In I15e15ad88b768a5b679de32c5429d921d850a3cb with SHA-1 2ac45dd49e is already in history. Merged-In was found from reverted change.
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/19449016
Change-Id: Idac34b4a807a9cda12ad28cfa38a9a195cec12c8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/Android.bp b/Android.bp
index 619a390..5bf5514 100644
--- a/Android.bp
+++ b/Android.bp
@@ -35,6 +35,15 @@
],
}
+java_library {
+ name: "Settings-change-ids",
+ srcs: ["src/com/android/settings/ChangeIds.java"],
+ libs: [
+ "app-compat-annotations",
+ ],
+}
+
+
// Build the Settings APK
android_library {
name: "Settings-core",
@@ -77,18 +86,18 @@
"lottie",
"WifiTrackerLib",
"SettingsLibActivityEmbedding",
+ "Settings-change-ids",
],
libs: [
"telephony-common",
"ims-common",
- "app-compat-annotations",
],
}
platform_compat_config {
name: "settings-platform-compat-config",
- src: ":Settings-core",
+ src: ":Settings-change-ids",
system_ext_specific: true,
}
@@ -126,7 +135,7 @@
// over all the sources together.
filegroup {
name: "Settings_srcs",
- srcs: ["src/**/*.java"],
+ srcs: ["src/**/*.java", "src/**/*.kt"],
}
filegroup {
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a8e0390..e280b83 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2475,33 +2475,41 @@
<!-- Exported for SystemUI to launch into -->
<activity android:name=".deviceinfo.StorageWizardInit"
- android:theme="@style/GlifV3Theme.Light"
+ android:theme="@style/GlifTheme.Light"
android:exported="true"
+ android:configChanges="keyboardHidden|orientation|screenSize"
android:permission="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<activity android:name=".deviceinfo.StorageWizardFormatProgress"
- android:theme="@style/GlifV3Theme.Light"
- android:exported="false" />
+ android:theme="@style/GlifTheme.Light"
+ android:exported="false"
+ android:configChanges="keyboardHidden|orientation|screenSize"/>
<activity android:name=".deviceinfo.StorageWizardFormatSlow"
- android:theme="@style/GlifV3Theme.Light"
- android:exported="false" />
+ android:theme="@style/GlifTheme.Light"
+ android:exported="false"
+ android:configChanges="keyboardHidden|orientation|screenSize"/>
<activity android:name=".deviceinfo.StorageWizardMigrateConfirm"
- android:theme="@style/GlifV3Theme.Light"
- android:exported="false" />
+ android:theme="@style/GlifTheme.Light"
+ android:exported="false"
+ android:configChanges="keyboardHidden|orientation|screenSize"/>
<activity android:name=".deviceinfo.StorageWizardMigrateProgress"
- android:theme="@style/GlifV3Theme.Light"
+ android:theme="@style/GlifTheme.Light"
android:exported="true"
+ android:configChanges="keyboardHidden|orientation|screenSize"
android:permission="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<activity android:name=".deviceinfo.StorageWizardReady"
- android:theme="@style/GlifV3Theme.Light"
+ android:theme="@style/GlifTheme.Light"
android:exported="true"
+ android:configChanges="keyboardHidden|orientation|screenSize"
android:permission="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<activity android:name=".deviceinfo.StorageWizardMoveConfirm"
- android:theme="@style/GlifV3Theme.Light"
- android:exported="false" />
+ android:theme="@style/GlifTheme.Light"
+ android:exported="false"
+ android:configChanges="keyboardHidden|orientation|screenSize"/>
<activity android:name=".deviceinfo.StorageWizardMoveProgress"
- android:theme="@style/GlifV3Theme.Light"
+ android:theme="@style/GlifTheme.Light"
android:exported="true"
+ android:configChanges="keyboardHidden|orientation|screenSize"
android:permission="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- Exported for SystemUI to trigger -->
@@ -2848,7 +2856,7 @@
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.fuelgauge.PowerUsageSummary" />
+ android:value="com.android.settings.fuelgauge.batteryusage.PowerUsageSummary" />
<meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
android:value="@string/menu_key_battery"/>
</activity>
@@ -4054,6 +4062,20 @@
android:value="true"/>
</service>
+ <service
+ android:name=".development.qstile.DevelopmentTiles$DesktopMode"
+ android:label="@string/desktop_mode"
+ android:icon="@drawable/tile_icon_desktop_mode"
+ android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
+ android:exported="true"
+ android:enabled="false">
+ <intent-filter>
+ <action android:name="android.service.quicksettings.action.QS_TILE" />
+ </intent-filter>
+ <meta-data android:name="android.service.quicksettings.TOGGLEABLE_TILE"
+ android:value="true"/>
+ </service>
+
<activity
android:name=".HelpTrampoline"
android:exported="true"
diff --git a/color-check-baseline.xml b/color-check-baseline.xml
index edd2d59..b4915b9 100644
--- a/color-check-baseline.xml
+++ b/color-check-baseline.xml
@@ -4405,27 +4405,11 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
- errorLine1=" <string name="sync_plug" msgid="7956982719077985381">""<font fgcolor="#ffffffff">"Welcome to Google sync!"</font>" \nA Google approach to syncing data to allow access to your contacts, appointments, and more from wherever you are."</string>"
- errorLine2=" ~~~~~~~~~~~~~~~~~~~">
- <location
- file="res/values-en-rXC/strings.xml"
- line="3152"
- column="170"/>
- </issue>
-
- <issue
- id="HardCodedColor"
- severity="Error"
- message="Avoid using hardcoded color"
- category="Correctness"
- priority="4"
- summary="Using hardcoded color"
- explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <string name="sync_plug" msgid="7956982719077985381"><font fgcolor="#ffffffff">"Welcome to Google sync!"</font>" \nA Google approach to syncing data to allow access to your contacts, appointments and more from wherever you are."</string>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rAU/strings.xml"
- line="3157"
+ line="3173"
column="64"/>
</issue>
@@ -4441,7 +4425,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rCA/strings.xml"
- line="3157"
+ line="3173"
column="64"/>
</issue>
@@ -4457,7 +4441,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rGB/strings.xml"
- line="3157"
+ line="3173"
column="64"/>
</issue>
@@ -4473,7 +4457,7 @@
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values-en-rIN/strings.xml"
- line="3157"
+ line="3173"
column="64"/>
</issue>
@@ -4485,11 +4469,27 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <string name="sync_plug" msgid="7956982719077985381">""<font fgcolor="#ffffffff">"Welcome to Google sync!"</font>" \nA Google approach to syncing data to allow access to your contacts, appointments, and more from wherever you are."</string>"
+ errorLine2=" ~~~~~~~~~~~~~~~~~~~">
+ <location
+ file="res/values-en-rXC/strings.xml"
+ line="3173"
+ column="170"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <string name="sync_plug"><font fgcolor="#ffffffff">Welcome to Google sync!</font>"
errorLine2=" ~~~~~~~~~~~~~~~~~~~">
<location
file="res/values/strings.xml"
- line="7160"
+ line="7204"
column="36"/>
</issue>
@@ -4757,11 +4757,43 @@
priority="4"
summary="Using hardcoded color"
explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <item name="wifi_signal_color">@color/setup_wizard_wifi_color_dark</item>"
+ errorLine2=" ^">
+ <location
+ file="res/values/themes_suw.xml"
+ line="145"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
+ errorLine1=" <item name="wifi_signal_color">@color/setup_wizard_wifi_color_light</item>"
+ errorLine2=" ^">
+ <location
+ file="res/values/themes_suw.xml"
+ line="164"
+ column="40"/>
+ </issue>
+
+ <issue
+ id="HardCodedColor"
+ severity="Error"
+ message="Avoid using hardcoded color"
+ category="Correctness"
+ priority="4"
+ summary="Using hardcoded color"
+ explanation="Hardcoded color values are bad because theme changes cannot be uniformly applied.Instead use the theme specific colors such as `?android:attr/textColorPrimary` in attributes.
This ensures that a theme change from a light to a dark theme can be uniformlyapplied across the app."
errorLine1=" <item name="android:colorPrimary">@color/material_grey_100</item>"
errorLine2=" ^">
<location
file="res/values/themes_suw.xml"
- line="196"
+ line="233"
column="43"/>
</issue>
@@ -4777,7 +4809,7 @@
errorLine2=" ^">
<location
file="res/values/themes_suw.xml"
- line="197"
+ line="234"
column="42"/>
</issue>
@@ -4793,7 +4825,7 @@
errorLine2=" ^">
<location
file="res/values/themes_suw.xml"
- line="198"
+ line="235"
column="45"/>
</issue>
diff --git a/res/drawable/button_ripple_radius.xml b/res/drawable/button_ripple_radius.xml
deleted file mode 100644
index 511520c..0000000
--- a/res/drawable/button_ripple_radius.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2019 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-<ripple
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="?android:attr/colorControlHighlight">
- <item android:id="@android:id/mask">
- <shape android:shape="rectangle">
- <solid android:color="@android:color/white" />
- <corners android:radius="@dimen/rect_button_radius" />
- </shape>
- </item>
-</ripple>
\ No newline at end of file
diff --git a/res/drawable/ic_guest_exit.xml b/res/drawable/ic_guest_exit.xml
new file mode 100644
index 0000000..2f7ca09
--- /dev/null
+++ b/res/drawable/ic_guest_exit.xml
@@ -0,0 +1,25 @@
+<!--
+Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M3,13v-2h8.65L9.1,8.45 10.5,7l5,5 -5,5 -1.4,-1.45L11.65,13zM5,15v4h14L19,5L5,5v4L3,9L3,5q0,-0.825 0.587,-1.413Q4.175,3 5,3h14q0.825,0 1.413,0.587Q21,4.175 21,5v14q0,0.825 -0.587,1.413Q19.825,21 19,21L5,21q-0.825,0 -1.413,-0.587Q3,19.825 3,19v-4z"/>
+</vector>
diff --git a/res/drawable/ic_guest_reset.xml b/res/drawable/ic_guest_reset.xml
new file mode 100644
index 0000000..243a322
--- /dev/null
+++ b/res/drawable/ic_guest_reset.xml
@@ -0,0 +1,25 @@
+<!--
+Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24"
+ android:tint="?android:attr/colorControlNormal">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M11,20.95q-3.025,-0.375 -5.013,-2.637Q4,16.05 4,13q0,-1.65 0.65,-3.163Q5.3,8.325 6.5,7.2l1.425,1.425q-0.95,0.85 -1.438,1.975Q6,11.725 6,13q0,2.2 1.4,3.887 1.4,1.688 3.6,2.063zM13,20.95v-2q2.175,-0.4 3.587,-2.075Q18,15.2 18,13q0,-2.5 -1.75,-4.25T12,7h-0.075l1.1,1.1 -1.4,1.4 -3.5,-3.5 3.5,-3.5 1.4,1.4 -1.1,1.1L12,5q3.35,0 5.675,2.325Q20,9.65 20,13q0,3.025 -1.988,5.288Q16.026,20.55 13,20.95z"/>
+</vector>
diff --git a/res/drawable/ic_storage_wizard_external.xml b/res/drawable/ic_storage_wizard_external.xml
index 99e2698..c6fefa1 100644
--- a/res/drawable/ic_storage_wizard_external.xml
+++ b/res/drawable/ic_storage_wizard_external.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2018 The Android Open Source Project
@@ -14,80 +15,101 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="144dp"
- android:height="144dp"
- android:viewportWidth="144.0"
- android:viewportHeight="144.0">
+ android:width="360dp"
+ android:height="262dp"
+ android:viewportWidth="360"
+ android:viewportHeight="262">
+
<path
- android:pathData="M64,64m-64,0a64,64 0,1 1,128 0a64,64 0,1 1,-128 0"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="#FFFFFF"
- android:strokeWidth="1"/>
+ android:fillColor="@android:color/transparent"
+ android:pathData="M335.709 262H24.2913C10.9223 262 0 250.821 0 237.11V24.89C0 11.1787 10.9223 0 24.2913 0H335.796C349.078 0 360 11.1787 360 24.89V237.285C360 250.821 349.078 262 335.709 262Z" />
<path
- android:pathData="M18.98,95C17.88,95 17,94.12 17,93.03L17,34.97C17,33.88 17.88,33 18.98,33L47.02,33C48.12,33 49,33.88 49,34.97L49,93.03C49,94.12 48.12,95 47.02,95L18.98,95Z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="#FFFFFF"
- android:strokeWidth="1"/>
+ android:fillColor="@android:color/transparent"
+ android:pathData="M153.786 66.0239H319.806C322.777 66.0239 325.223 68.4693 325.311 71.4386V183.575H148.282V71.4386C148.282 68.4693 150.728 66.0239 153.786 66.0239Z"
+ android:strokeWidth="5"
+ android:strokeColor="#E8EAED"/>
<path
- android:pathData="M18.98,96C17.33,96 16,94.68 16,93.03L16,34.97C16,33.32 17.33,32 18.98,32L47.02,32C48.67,32 50,33.32 50,34.97L50,93.03C50,94.68 48.67,96 47.02,96L18.98,96Z"
- android:fillType="nonZero"
- android:strokeColor="#DADCE0"
- android:fillColor="#00000000"
- android:strokeWidth="2"/>
+ android:fillColor="#BDC1C6"
+ android:pathData="M182.272 180.605H171.961V183.4H182.272V180.605Z" />
<path
- android:pathData="M18.98,94L47.02,94C47.57,94 48,93.57 48,93.03L48,34.97C48,34.43 47.57,34 47.02,34L18.98,34C18.43,34 18,34.43 18,34.97L18,93.03C18,93.57 18.43,94 18.98,94Z"
- android:fillType="nonZero"
- android:strokeColor="#F1F3F4"
- android:fillColor="#00000000"
- android:strokeWidth="2"/>
+ android:fillColor="#BDC1C6"
+ android:pathData="M195.204 180.605H184.893V183.4H195.204V180.605Z" />
<path
- android:pathData="M73,87L123.02,87L118.03,97L73,97C72.45,97 72,96.55 72,96L72,88C72,87.45 72.45,87 73,87Z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="#F1F3F4"
- android:strokeWidth="1"/>
- <path
- android:pathData="M74,89L74,95L119.11,95L121.99,89L74,89ZM73,87L122.59,87C122.26,87.73 120.83,90.87 118.29,96.42C118.13,96.77 117.77,97 117.38,97L73,97C72.45,97 72,96.55 72,96L72,88C72,87.45 72.45,87 73,87Z"
- android:strokeColor="#00000000"
- android:fillType="nonZero"
android:fillColor="#DADCE0"
- android:strokeWidth="1"/>
+ android:pathData="M78.8155 104.538V100.521C78.8155 99.9967 78.3786 99.5601 77.8544 99.5601V78.6001C77.8544 75.8054 75.5825 73.6221 72.8738 73.6221H26.8252C24.0291 73.6221 21.8447 75.8054 21.8447 78.6001V174.492C21.8447 177.287 24.1165 179.47 26.8252 179.47H72.7864C75.5825 179.47 77.767 177.199 77.767 174.492V125.585C78.2913 125.585 78.7282 125.149 78.7282 124.625V114.581C78.7282 114.057 78.2913 113.621 77.767 113.621V105.586C78.3786 105.499 78.8155 105.062 78.8155 104.538ZM76.8058 174.492C76.8058 176.675 74.9709 178.509 72.7864 178.509H26.8252C24.6408 178.509 22.8058 176.675 22.8058 174.492V78.6001C22.8058 76.4167 24.5534 74.5827 26.8252 74.5827H72.7864C74.9709 74.5827 76.8058 76.3294 76.8058 78.6001V174.492Z" />
<path
- android:pathData="M89,27L115.06,27C116.17,27 127.49,47.66 127.49,60.45C127.49,75.69 123.39,87.18 122.57,89L87,89L87,29C87,27.9 87.9,27 89,27Z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="#F1F3F4"
- android:strokeWidth="1"/>
+ android:fillColor="#81C995"
+ android:pathData="M35.2136 102.18H47.534V89.8658H35.2136V102.18ZM35.2136 103.926C34.2524 103.926 33.466 103.14 33.466 102.18V89.8658C33.466 88.9051 34.2524 88.1191 35.2136 88.1191H47.534C47.9709 88.1191 48.4077 88.2938 48.7573 88.6431C49.1068 88.9925 49.2815 89.4291 49.2815 89.8658V102.18C49.2815 103.14 48.4951 103.926 47.534 103.926H35.2136ZM36.0874 100.433H46.5728L43.2524 96.0665L40.6311 99.5598L38.6213 96.9398L36.0874 100.433ZM35.2136 89.8658V102.18V89.8658Z" />
<path
- android:pathData="M89,87L122.96,87C126.83,74.93 128.26,64.56 127.26,55.89C126.26,47.22 122.76,38.26 116.78,29L89,29L89,87ZM89,27L115.53,27C116.63,27 128.29,48.2 127.36,60.95C125.65,84.63 123.1,89 122,89L87,89L87,29C87,27.9 87.9,27 89,27Z"
- android:strokeColor="#00000000"
- android:fillType="nonZero"
+ android:fillColor="#F28B82"
+ android:pathData="M44.5631 111.787H42.0291L43.6893 115.105H41.2427L39.5825 111.787H37.9223L39.5825 115.105H37.1359L35.4757 111.787H33.8155L35.4757 115.105H33.0291L31.3689 111.787C30.4951 111.787 29.7087 112.485 29.7087 113.359V123.227C29.7087 124.101 30.4078 124.887 31.3689 124.887H44.5631C45.4369 124.887 46.2233 124.101 46.2233 123.227V113.359C46.2233 112.485 45.4369 111.787 44.5631 111.787Z" />
+ <path
+ android:fillColor="#FDD663"
+ android:pathData="M69.9903 122.965H58.9806V121.568C58.9806 121.044 58.5437 120.607 58.0194 120.607H54.7864C54.2622 120.607 53.8253 121.044 53.8253 121.568V134.319C53.8253 135.367 54.699 136.24 55.7476 136.24H69.0291C70.0777 136.24 70.9515 135.367 70.9515 134.319V123.839C70.9515 123.315 70.5146 122.878 69.9903 122.965Z" />
+ <path
+ android:fillColor="#8AB4F8"
+ android:pathData="M69.2912 98.8613H56.8835V107.769H55.398C53.9126 107.769 52.7767 108.992 52.7767 110.389C52.7767 111.874 54 113.009 55.398 113.009H56.0097C57.4077 113.009 58.4563 111.961 58.5437 110.564V101.481H65.8835V107.769H64.398C62.9126 107.769 61.7767 108.992 61.7767 110.389C61.7767 111.874 63 113.009 64.398 113.009H65.0097C66.4077 113.009 67.4563 111.961 67.5437 110.564V101.219C68.5922 100.87 69.2912 99.9093 69.2912 98.8613Z" />
+ <path
+ android:fillColor="#81C995"
+ android:pathData="M65.0097 144.449C64.7476 144.187 64.4854 144.1 64.1359 144.1H55.2233C54.5242 144.1 53.9126 144.711 53.9126 145.41V154.318C53.9126 154.667 54.0874 154.929 54.2621 155.191C54.5242 155.453 54.7864 155.541 55.1359 155.541H62.2136L65.4466 152.309V145.323C65.4466 145.061 65.2718 144.711 65.0097 144.449ZM64.1359 151.785H62.8252C62.1262 151.785 61.5145 152.397 61.5145 153.095V154.405H55.1359V145.497H64.0485L64.1359 151.785Z" />
+ <path
+ android:fillColor="#F28B82"
+ android:pathData="M55.5728 162.964L48.233 158.772C47.7961 158.51 47.2718 158.685 47.0097 159.034C47.0097 159.034 47.0097 159.121 46.9223 159.121C46.7476 159.209 46.7476 159.383 46.7476 159.645V167.942C46.7476 168.466 47.0971 168.815 47.6213 168.815C47.7961 168.815 47.9709 168.815 48.1456 168.728L55.3107 164.536C55.7476 164.361 55.9223 163.837 55.7476 163.401C55.7476 163.401 55.7476 163.313 55.6602 163.313C55.8349 163.139 55.7476 163.051 55.5728 162.964Z" />
+ <path
+ android:fillColor="#8AB4F8"
+ android:pathData="M42.3787 133.445H35.9126C35.0389 133.445 34.3398 134.144 34.3398 135.017V137.725H32.3301C31.4563 137.725 30.7573 138.423 30.7573 139.297L30.6699 151.698C30.6699 152.135 30.8447 152.484 31.1068 152.833C31.369 153.095 31.8058 153.27 32.1554 153.27L41.4175 153.357C41.8544 153.357 42.2039 153.183 42.5534 152.921C42.8156 152.659 42.9903 152.222 42.9903 151.873V149.689H45.4369C46.3107 149.689 47.0971 148.991 47.0971 148.117C47.0971 148.117 47.0971 148.117 47.0971 148.03V138.336L42.3787 133.445ZM41.5049 151.698L32.2427 151.611L32.3301 139.209H34.3398V147.855C34.3398 148.729 35.0389 149.427 35.9126 149.427H41.5049V151.698ZM43.9515 146.371H37.5728V144.711H44.0389L43.9515 146.371ZM43.9515 143.139H37.5728V141.48H44.0389L43.9515 143.139ZM45.5243 139.035H41.5049V135.017L45.5243 139.035Z" />
+ <path
+ android:fillColor="#BDC1C6"
+ android:pathData="M276.728 180.605H197.738V183.4H276.728V180.605Z" />
+ <path
+ android:fillColor="@android:color/transparent"
+ android:pathData="M317.184 74.3208H156.32V171.697H317.184V74.3208Z" />
+ <path
+ android:fillColor="#BDC1C6"
+ android:pathData="M289.136 180.605H278.825V183.4H289.136V180.605Z" />
+ <path
android:fillColor="#DADCE0"
- android:strokeWidth="1"/>
+ android:pathData="M134.65 182.09H338.854V184.186C338.854 185.758 337.631 186.981 336.058 186.981H137.447C135.874 186.981 134.65 185.758 134.65 184.186V182.09Z" />
<path
- android:pathData="M94,33L119.52,33C119.9,33 120.26,33.23 120.42,33.58C125.14,43.7 127.67,51.84 128,58C128.33,64.11 127.47,72.18 125.4,82.2L125.4,82.2C125.3,82.67 124.9,83 124.42,83L94,83C93.45,83 93,82.55 93,82L93,34C93,33.45 93.45,33 94,33C94,33 94,33 94,33Z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="#FFFFFF"
- android:strokeWidth="1"/>
+ android:fillColor="#81C995"
+ android:pathData="M177.204 129.69H193.456V113.446H177.204V129.69ZM177.204 132.048C175.893 132.048 174.845 131 174.845 129.69V113.446C174.845 112.136 175.893 111.088 177.204 111.088H193.456C194.767 111.088 195.816 112.136 195.816 113.446V129.69C195.816 131 194.767 132.048 193.456 132.048H177.204ZM178.34 127.332H192.32L187.951 121.481L184.456 126.109L181.835 122.616L178.34 127.332ZM177.204 113.359V129.69V113.359Z" />
<path
- android:pathData="M73.63,41L68.13,41L64.01,45.2L64,53.6C64,54.37 64.62,55 65.38,55L73.63,55C74.38,55 75,54.37 75,53.6L75,42.4C75,41.63 74.38,41 73.63,41ZM69.5,45.2L68.13,45.2L68.13,42.4L69.5,42.4L69.5,45.2ZM71.56,45.2L70.19,45.2L70.19,42.4L71.56,42.4L71.56,45.2ZM73.63,45.2L72.25,45.2L72.25,42.4L73.63,42.4L73.63,45.2Z"
- android:strokeColor="#00000000"
- android:fillType="nonZero"
+ android:fillColor="#F28B82"
+ android:pathData="M266.68 129.865H262.485L265.282 135.454H261.087L258.291 129.865H255.495L258.291 135.454H254.097L251.301 129.865H248.505L251.301 135.454H247.107L244.311 129.865C242.738 129.865 241.515 131.087 241.515 132.659V149.34C241.515 150.912 242.738 152.135 244.311 152.135H266.68C268.252 152.135 269.476 150.912 269.476 149.34V132.659C269.476 131.087 268.252 129.865 266.68 129.865Z" />
+ <path
+ android:fillColor="#FDD663"
+ android:pathData="M257.155 98.9488H240.204V96.8528C240.204 96.0668 239.592 95.3682 238.718 95.3682H233.825C233.039 95.3682 232.34 95.9795 232.34 96.8528V116.416C232.34 118.075 233.65 119.385 235.223 119.385H255.67C257.33 119.385 258.641 118.075 258.641 116.503V100.434C258.553 99.5602 257.854 98.9488 257.155 98.9488Z" />
+ <path
+ android:fillColor="#8AB4F8"
+ android:pathData="M295.34 97.4639H274.631V112.311H272.184C269.738 112.223 267.641 114.057 267.553 116.503C267.466 118.948 269.301 121.044 271.748 121.131C271.835 121.131 272.01 121.131 272.184 121.131H273.146C275.417 121.131 277.34 119.385 277.427 117.114V102.005H289.748V112.398H287.301C284.854 112.398 282.845 114.407 282.845 116.852C282.845 119.297 284.854 121.306 287.301 121.306H288.262C290.534 121.306 292.456 119.559 292.544 117.289V101.743C294.204 100.957 295.252 99.2979 295.34 97.4639Z" />
+ <path
+ android:fillColor="#81C995"
+ android:pathData="M293.854 146.196H283.282C282.233 146.196 281.359 145.322 281.359 144.274V130.825C281.359 129.777 282.233 128.904 283.282 128.904H296.738C297.786 128.904 298.66 129.777 298.66 130.825V141.392L293.854 146.196Z" />
+ <path
+ android:fillColor="#81C995"
+ android:pathData="M292.893 144.275V142.353C292.893 141.305 293.767 140.432 294.816 140.432H296.738V130.825H283.282V144.275H292.893Z" />
+ <path
+ android:fillColor="#81C995"
+ android:pathData="M292.893 144.275L296.738 140.432H294.816C293.767 140.432 292.893 141.305 292.893 142.353V144.275Z" />
+ <path
+ android:fillColor="@android:color/transparent"
+ android:pathData="M292.893 144.275H283.282V130.825H296.738V140.432H294.816C293.767 140.432 292.893 141.305 292.893 142.353V144.275Z" />
+ <path
+ android:fillColor="#F28B82"
+ android:pathData="M219.146 103.49L206.651 96.4158C205.951 95.9791 205.078 96.1538 204.641 96.8525C204.641 96.9398 204.553 96.9398 204.553 97.0271C204.379 97.2018 204.379 97.4638 204.379 97.9005V112.048C204.379 112.834 204.99 113.533 205.777 113.533H205.864C206.214 113.533 206.476 113.533 206.738 113.358L218.971 106.284C219.757 105.935 220.019 105.062 219.67 104.276C219.67 104.188 219.583 104.188 219.583 104.101C219.583 103.926 219.408 103.664 219.146 103.49Z" />
+ <path
+ android:fillColor="#8AB4F8"
+ android:pathData="M222.116 123.053H211.893C210.495 123.053 209.359 124.188 209.359 125.585V129.865H206.126C204.728 129.865 203.68 130.913 203.68 132.31L203.592 151.96C203.592 152.659 203.854 153.27 204.291 153.707C204.728 154.143 205.34 154.405 206.039 154.405L220.806 154.493C221.505 154.493 222.116 154.231 222.553 153.794C222.99 153.357 223.252 152.746 223.252 152.047V148.554H227.184C228.583 148.554 229.806 147.419 229.806 146.021C229.806 146.021 229.806 146.021 229.806 145.934V130.563L222.116 123.053ZM220.718 152.135L205.951 152.047L206.039 132.397H209.272V146.109C209.272 146.807 209.534 147.419 210.058 147.943C210.495 148.467 211.194 148.729 211.893 148.729H220.806L220.718 152.135ZM224.65 143.576H214.427V141.043H224.65V143.576ZM224.65 138.423H214.427V135.891H224.65V138.423ZM227.184 132.048H220.806V125.673L227.184 132.048Z" />
+ <path
android:fillColor="?android:attr/colorAccent"
- android:strokeWidth="1"/>
+ android:pathData="M107.126 114.669H109.66V112.136H107.126V114.669ZM117.087 114.669H119.621V112.136H117.087V114.669ZM107.126 109.691H109.66V104.713H107.126V109.691ZM112.107 114.669H114.641V109.691H112.107V114.669ZM112.107 107.158H114.641V104.626H112.107V107.158ZM117.087 109.691H119.621V104.713H117.087V109.691ZM105.903 118.424C105.204 118.424 104.592 118.162 104.155 117.726C103.718 117.289 103.456 116.678 103.456 115.979V101.045L110.971 93.5342H120.932C121.631 93.5342 122.243 93.7962 122.68 94.2328C123.204 94.7568 123.379 95.2808 123.379 95.9795V115.892C123.379 116.59 123.116 117.202 122.68 117.638C122.155 118.162 121.631 118.337 120.932 118.337L105.903 118.424ZM105.903 115.892H120.845V95.9795H111.932L105.903 102.006V115.892ZM105.903 115.892V102.006L111.932 95.9795H120.845V115.892H105.903Z" />
<path
- android:pathData="M63.99,69L60,73L63.99,77L63.99,74L71,74L71,72L63.99,72L63.99,69ZM78,67L74.01,63L74.01,66L67,66L67,68L74.01,68L74.01,71L78,67Z"
- android:strokeColor="#00000000"
- android:fillType="nonZero"
android:fillColor="?android:attr/colorAccent"
- android:strokeWidth="1"/>
+ android:pathData="M96.7281 150.388L101.447 145.672L98.8252 143.052L89.7379 152.222L98.8252 161.305L101.447 158.772L96.7281 154.056H137.01V150.388H96.7281Z" />
<path
- android:pathData="M64,126.08C98.29,126.08 126.08,98.29 126.08,64C126.08,29.71 98.29,1.92 64,1.92C29.71,1.92 1.92,29.71 1.92,64C1.92,98.29 29.71,126.08 64,126.08ZM64,128C28.65,128 0,99.35 0,64C0,28.65 28.65,0 64,0C99.35,0 128,28.65 128,64C128,99.35 99.35,128 64,128Z"
- android:strokeColor="#00000000"
- android:fillType="nonZero"
- android:fillColor="#DADCE0"
- android:strokeWidth="1"/>
-</vector>
+ android:fillColor="?android:attr/colorAccent"
+ android:pathData="M130.019 137.026L125.301 141.742L127.922 144.362L137.01 135.192L127.922 126.109L125.301 128.642L130.019 133.358H89.7379V137.026H130.019Z" />
+ <path
+ android:fillColor="#BDC1C6"
+ android:pathData="M237.67 71.1767C238.201 71.1767 238.631 70.7466 238.631 70.216C238.631 69.6855 238.201 69.2554 237.67 69.2554C237.139 69.2554 236.709 69.6855 236.709 70.216C236.709 70.7466 237.139 71.1767 237.67 71.1767Z" />
+</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_storage_wizard_internal.xml b/res/drawable/ic_storage_wizard_internal.xml
index 41768f7..70bafa9 100644
--- a/res/drawable/ic_storage_wizard_internal.xml
+++ b/res/drawable/ic_storage_wizard_internal.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2018 The Android Open Source Project
@@ -14,62 +15,48 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="144dp"
- android:height="144dp"
- android:viewportWidth="144.0"
- android:viewportHeight="144.0">
+ android:width="360dp"
+ android:height="262dp"
+ android:viewportWidth="360"
+ android:viewportHeight="262">
+
<path
- android:pathData="M28,4h72v140h-72z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="#FFFFFF"
- android:strokeWidth="1"/>
+ android:fillColor="@android:color/transparent"
+ android:pathData="M335.691 262H24.3087C10.9485 262 0 250.795 0 237.127V24.9075C0 11.2049 10.9485 0 24.3087 0H335.787C349.051 0 360 11.2049 360 24.8725V237.224C360 250.795 349.051 262 335.691 262Z" />
<path
- android:pathData="M65,62L68,62L68,64L65,64L65,67L63,67L63,64L60,64L60,62L63,62L63,59L65,59L65,62Z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
+ android:fillColor="#DADCE0"
+ android:pathData="M239.199 85.3246V77.0192C239.199 76.4695 238.981 75.9421 238.593 75.5526C238.205 75.163 237.678 74.943 237.128 74.9407V31.3439C237.126 28.5906 236.031 25.9508 234.083 24.0039C232.135 22.057 229.494 20.9623 226.739 20.96H131.182C128.428 20.9646 125.789 22.0604 123.843 24.007C121.897 25.9536 120.803 28.5921 120.801 31.3439V230.656C120.803 233.408 121.897 236.046 123.843 237.993C125.789 239.94 128.428 241.035 131.182 241.04H226.739C229.494 241.038 232.135 239.943 234.083 237.996C236.031 236.049 237.126 233.409 237.128 230.656V128.921C237.677 128.921 238.204 128.703 238.592 128.315C238.981 127.927 239.199 127.401 239.199 126.852V106.084C239.199 105.534 238.981 105.007 238.593 104.617C238.205 104.228 237.678 104.008 237.128 104.005V87.4119C237.401 87.4108 237.671 87.3559 237.923 87.2503C238.175 87.1448 238.404 86.9908 238.596 86.7969C238.788 86.6031 238.941 86.3733 239.044 86.1207C239.148 85.8681 239.2 85.5976 239.199 85.3246ZM235.049 230.656C235.046 232.858 234.17 234.969 232.612 236.526C231.054 238.083 228.942 238.959 226.739 238.961H131.182C128.978 238.959 126.866 238.083 125.308 236.526C123.75 234.969 122.874 232.858 122.872 230.656V31.3439C122.874 29.1419 123.75 27.0307 125.308 25.4736C126.866 23.9166 128.978 23.0408 131.182 23.0385H226.739C228.942 23.0408 231.054 23.9166 232.612 25.4736C234.17 27.0307 235.046 29.1419 235.049 31.3439V230.656Z" />
+ <path
+ android:fillColor="#81C995"
+ android:pathData="M209.91 52.243H226.424V35.737H209.91V52.243ZM209.91 54.601C209.599 54.6045 209.29 54.5443 209.003 54.4242C208.716 54.304 208.457 54.1264 208.241 53.9023C208.018 53.6879 207.842 53.4299 207.723 53.1444C207.604 52.8589 207.545 52.5521 207.55 52.243V35.737C207.55 35.1116 207.799 34.5118 208.241 34.0696C208.684 33.6274 209.284 33.379 209.91 33.379H226.424C226.729 33.3764 227.03 33.4355 227.311 33.5526C227.592 33.6696 227.846 33.8423 228.058 34.0602C228.282 34.2758 228.46 34.5351 228.58 34.822C228.701 35.1088 228.761 35.4173 228.757 35.7283V52.2343C228.75 52.8575 228.5 53.4533 228.059 53.8941C227.618 54.3348 227.022 54.5854 226.398 54.5923L209.91 54.601ZM211.089 49.885H225.245L220.815 43.99L217.319 48.706L214.698 45.169L211.089 49.885ZM209.91 35.737V52.243V35.737Z" />
+ <path
+ android:fillColor="#8AB4F8"
+ android:pathData="M176.208 36.1475H148.247V56.2341H144.97C144.185 56.2341 143.408 56.3886 142.683 56.6888C141.958 56.989 141.299 57.429 140.744 57.9837C140.189 58.5384 139.749 59.197 139.448 59.9217C139.148 60.6465 138.993 61.4233 138.993 62.2077C138.993 62.9922 139.148 63.769 139.448 64.4937C139.749 65.2185 140.189 65.877 140.744 66.4317C141.299 66.9864 141.958 67.4264 142.683 67.7266C143.408 68.0268 144.185 68.1813 144.97 68.1813H146.316C147.789 68.1973 149.212 67.6454 150.289 66.6404C151.366 65.6354 152.015 64.2544 152.1 62.7841V42.3132H168.702V56.3826H165.425C163.84 56.3826 162.32 57.012 161.199 58.1322C160.078 59.2525 159.449 60.7719 159.449 62.3562C159.449 63.9405 160.078 65.4599 161.199 66.5802C162.32 67.7004 163.84 68.3298 165.425 68.3298H166.771C168.244 68.3457 169.667 67.7939 170.744 66.7889C171.822 65.7839 172.47 64.4029 172.555 62.9326V41.9202C173.622 41.3688 174.523 40.5434 175.165 39.5288C175.807 38.5143 176.167 37.3472 176.208 36.1475Z" />
+ <path
+ android:fillColor="#F28B82"
+ android:pathData="M160.96 79.0195H156.958L159.623 84.3556H155.621L152.913 79.0195H150.291L152.913 84.3556H148.911L146.237 79.0195H143.572L146.237 84.3556H142.235L139.561 79.0195C138.866 79.0195 138.199 79.2956 137.708 79.7869C137.216 80.2783 136.94 80.9447 136.94 81.6395V97.6565C136.94 98.3562 137.214 99.0282 137.704 99.5278C138.194 100.028 138.861 100.315 139.561 100.329H160.925C161.634 100.327 162.312 100.044 162.813 99.5436C163.314 99.0429 163.597 98.3645 163.599 97.6565V81.6832C163.597 80.982 163.319 80.3097 162.825 79.8114C162.332 79.3131 161.662 79.0287 160.96 79.0195Z" />
+ <path
+ android:fillColor="#8AB4F8"
+ android:pathData="M220.544 165.934H208.957C208.19 165.934 207.455 166.238 206.912 166.78C206.37 167.322 206.065 168.058 206.065 168.824V173.706H202.413C202.047 173.701 201.684 173.77 201.346 173.91C201.008 174.05 200.702 174.257 200.447 174.518C200.17 174.766 199.949 175.069 199.799 175.407C199.648 175.746 199.571 176.113 199.573 176.483L199.468 198.78C199.466 199.146 199.535 199.508 199.673 199.847C199.811 200.186 200.015 200.494 200.272 200.755C200.529 201.015 200.835 201.222 201.172 201.364C201.51 201.506 201.872 201.581 202.238 201.583L218.971 201.662C219.71 201.662 220.42 201.37 220.945 200.85C221.47 200.33 221.769 199.623 221.776 198.884V194.928H226.311C227.079 194.926 227.816 194.62 228.359 194.076C228.903 193.533 229.209 192.797 229.212 192.029V174.58L220.544 165.934ZM219.032 198.858L202.299 198.78L202.404 176.475H206.065V191.994C206.064 192.374 206.138 192.751 206.283 193.103C206.428 193.455 206.64 193.774 206.909 194.044C207.178 194.313 207.497 194.527 207.848 194.672C208.2 194.818 208.577 194.893 208.957 194.893H219.05L219.032 198.858ZM223.401 189.112H211.858V186.221H223.436L223.401 189.112ZM223.401 183.322H211.858V180.422H223.436L223.401 183.322ZM226.293 176.073H219.058V168.824L226.311 176.073H226.293Z" />
+ <path
+ android:fillColor="#CEEAD6"
+ android:pathData="M149.068 201.827C158.908 201.827 166.884 193.855 166.884 184.02C166.884 174.185 158.908 166.213 149.068 166.213C139.228 166.213 131.251 174.185 131.251 184.02C131.251 193.855 139.228 201.827 149.068 201.827Z" />
+ <path
+ android:fillColor="#5BB974"
+ android:pathData="M141.125 191.479C140.725 191.499 140.326 191.423 139.961 191.257C139.596 191.092 139.276 190.841 139.028 190.527C138.778 190.205 138.598 189.834 138.502 189.438C138.406 189.042 138.394 188.63 138.469 188.23L139.587 180.239C139.726 179.221 140.233 178.289 141.012 177.619C141.775 176.936 142.766 176.565 143.79 176.58H154.346C155.37 176.565 156.361 176.936 157.124 177.619C157.903 178.289 158.41 179.221 158.549 180.239L159.667 188.23C159.742 188.63 159.73 189.042 159.634 189.438C159.537 189.834 159.358 190.205 159.108 190.527C158.859 190.842 158.538 191.094 158.171 191.26C157.805 191.425 157.404 191.5 157.002 191.479C156.648 191.48 156.298 191.412 155.971 191.278C155.641 191.14 155.343 190.935 155.097 190.675L152.703 188.282H145.45L143.056 190.675C142.809 190.933 142.512 191.139 142.183 191.278C141.847 191.415 141.488 191.483 141.125 191.479ZM141.553 189.182L144.594 186.151H153.542L156.583 189.182C156.71 189.264 156.853 189.321 157.002 189.348C157.088 189.352 157.175 189.339 157.256 189.309C157.337 189.279 157.411 189.233 157.474 189.173C157.531 189.112 157.573 189.038 157.594 188.957C157.616 188.876 157.616 188.791 157.596 188.71L156.408 180.51C156.34 180.008 156.093 179.548 155.713 179.214C155.332 178.88 154.843 178.695 154.337 178.693H143.79C143.284 178.695 142.795 178.88 142.414 179.214C142.034 179.548 141.787 180.008 141.719 180.51L140.54 188.71C140.52 188.791 140.52 188.876 140.542 188.957C140.563 189.038 140.604 189.112 140.662 189.173C140.723 189.232 140.796 189.278 140.876 189.308C140.955 189.338 141.04 189.351 141.125 189.348C141.274 189.311 141.418 189.255 141.553 189.182ZM154.398 185.086C154.539 185.087 154.678 185.061 154.809 185.009C154.939 184.956 155.058 184.879 155.158 184.78C155.258 184.681 155.337 184.563 155.39 184.432C155.443 184.301 155.468 184.161 155.464 184.02C155.466 183.88 155.44 183.74 155.388 183.61C155.335 183.479 155.257 183.361 155.157 183.262C155.058 183.162 154.939 183.084 154.809 183.031C154.678 182.978 154.539 182.952 154.398 182.955C154.257 182.952 154.118 182.978 153.987 183.031C153.857 183.084 153.738 183.162 153.639 183.262C153.54 183.361 153.461 183.479 153.408 183.61C153.356 183.74 153.33 183.88 153.332 184.02C153.327 184.161 153.351 184.302 153.404 184.433C153.457 184.564 153.536 184.682 153.638 184.78C153.737 184.88 153.856 184.959 153.986 185.012C154.117 185.064 154.257 185.089 154.398 185.086ZM152.266 181.889C152.407 181.891 152.546 181.865 152.677 181.812C152.807 181.76 152.926 181.682 153.026 181.584C153.126 181.485 153.205 181.366 153.258 181.235C153.31 181.105 153.336 180.965 153.332 180.824C153.334 180.683 153.308 180.544 153.256 180.413C153.203 180.283 153.125 180.165 153.025 180.065C152.926 179.966 152.807 179.887 152.677 179.835C152.546 179.782 152.407 179.756 152.266 179.758C152.125 179.755 151.985 179.78 151.854 179.833C151.723 179.885 151.605 179.964 151.506 180.064C151.407 180.164 151.329 180.283 151.277 180.413C151.224 180.544 151.198 180.683 151.2 180.824C151.198 180.964 151.224 181.104 151.276 181.234C151.329 181.365 151.407 181.483 151.507 181.583C151.606 181.682 151.725 181.76 151.855 181.813C151.986 181.866 152.125 181.892 152.266 181.889ZM144.542 185.086H146.141V183.226H148.002V181.654H146.141V179.785H144.542V181.654H142.672V183.252H144.542V185.086ZM141.553 189.182C141.504 189.238 141.441 189.28 141.37 189.304C141.292 189.333 141.209 189.348 141.125 189.348C141.04 189.351 140.955 189.338 140.876 189.308C140.796 189.278 140.723 189.232 140.662 189.173C140.604 189.112 140.563 189.038 140.542 188.957C140.52 188.876 140.52 188.791 140.54 188.71L141.719 180.51C141.787 180.008 142.034 179.548 142.414 179.214C142.795 178.88 143.284 178.695 143.79 178.693H154.346C154.852 178.695 155.341 178.88 155.721 179.214C156.102 179.548 156.349 180.008 156.417 180.51L157.596 188.71C157.616 188.791 157.616 188.876 157.594 188.957C157.573 189.038 157.531 189.112 157.474 189.173C157.411 189.233 157.337 189.279 157.256 189.309C157.175 189.339 157.088 189.352 157.002 189.348C156.921 189.348 156.841 189.333 156.766 189.304C156.695 189.28 156.632 189.238 156.583 189.182L153.542 186.151H144.594L141.553 189.182Z" />
+ <path
+ android:fillColor="#FEEFC3"
+ android:pathData="M197.301 94.1194C207.141 94.1194 215.117 86.1468 215.117 76.3121C215.117 66.4775 207.141 58.5049 197.301 58.5049C187.461 58.5049 179.484 66.4775 179.484 76.3121C179.484 86.1468 187.461 94.1194 197.301 94.1194Z" />
+ <path
+ android:fillColor="#FBBC04"
+ android:pathData="M202.22 85.2464V78.1025H199.538V71.8407C199.537 71.2536 199.652 70.672 199.876 70.1295C200.101 69.587 200.43 69.0941 200.846 68.6794C201.262 68.2646 201.756 67.9362 202.299 67.7128C202.842 67.4895 203.424 67.3757 204.012 67.378V85.2464H202.22ZM193.282 85.2464V77.072C192.524 76.871 191.851 76.4334 191.359 75.8231C190.849 75.2077 190.576 74.4301 190.59 73.631V67.378H192.338V73.631H193.212V67.378H194.959V73.631H195.833V67.378H197.581V73.631C197.594 74.4301 197.322 75.2077 196.812 75.8231C196.323 76.4319 195.652 76.8693 194.898 77.072V85.2464H193.282Z" />
+ <path
+ android:fillColor="#FAD2CF"
+ android:pathData="M179.38 231.914C189.219 231.914 197.196 223.941 197.196 214.107C197.196 204.272 189.219 196.299 179.38 196.299C169.54 196.299 161.563 204.272 161.563 214.107C161.563 223.941 169.54 231.914 179.38 231.914Z" />
+ <path
+ android:fillColor="#EE675C"
+ android:pathData="M187.611 212.814L176.077 206.255C175.911 206.151 175.724 206.082 175.53 206.056C175.335 206.029 175.138 206.044 174.95 206.101C174.762 206.157 174.588 206.253 174.44 206.382C174.292 206.511 174.174 206.671 174.093 206.849C173.892 207.05 173.892 207.251 173.892 207.653V220.753C173.887 220.936 173.92 221.119 173.988 221.29C174.056 221.46 174.158 221.615 174.288 221.745C174.418 221.875 174.574 221.977 174.744 222.045C174.915 222.113 175.098 222.146 175.282 222.141C175.561 222.171 175.842 222.103 176.077 221.949L187.436 215.39C187.615 215.308 187.774 215.189 187.903 215.041C188.033 214.893 188.129 214.719 188.186 214.531C188.243 214.342 188.26 214.144 188.234 213.949C188.209 213.754 188.142 213.567 188.039 213.399C188.013 213.216 187.812 213.015 187.611 212.814Z" />
+ <path
android:fillColor="?android:attr/colorAccent"
- android:strokeWidth="1"/>
- <path
- android:pathData="M81.63,56L76.13,56L72.01,60.2L72,68.6C72,69.37 72.62,70 73.38,70L81.63,70C82.38,70 83,69.37 83,68.6L83,57.4C83,56.63 82.38,56 81.63,56ZM77.5,60.2L76.13,60.2L76.13,57.4L77.5,57.4L77.5,60.2ZM79.56,60.2L78.19,60.2L78.19,57.4L79.56,57.4L79.56,60.2ZM81.63,60.2L80.25,60.2L80.25,57.4L81.63,57.4L81.63,60.2Z"
- android:strokeColor="#00000000"
- android:fillType="nonZero"
- android:fillColor="?android:attr/colorAccent"
- android:strokeWidth="1"/>
- <path
- android:pathData="M39,77L87,77A4,4 0,0 1,91 81L91,81A4,4 0,0 1,87 85L39,85A4,4 0,0 1,35 81L35,81A4,4 0,0 1,39 77z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="?android:attr/colorAccent"
- android:strokeWidth="1"/>
- <path
- android:pathData="M32,77h31v8h-31z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="#DADCE0"
- android:strokeWidth="1"/>
- <path
- android:pathData="M29,144L97,144L97,6L29,6L29,144ZM27.95,150C25.21,150 23,147.88 23,145.24L23,4.76C23,2.12 25.21,0 27.95,0L98.05,0C100.79,0 103,2.12 103,4.76L103,145.24C103,147.88 100.79,150 98.05,150L27.95,150Z"
- android:strokeColor="#00000000"
- android:fillType="nonZero"
- android:fillColor="#F1F3F4"
- android:strokeWidth="1"/>
- <path
- android:pathData="M27.95,148L98.05,148C99.7,148 101,146.75 101,145.24L101,4.76C101,3.25 99.7,2 98.05,2L27.95,2C26.3,2 25,3.25 25,4.76L25,145.24C25,146.75 26.3,148 27.95,148ZM27.95,150C25.21,150 23,147.88 23,145.24L23,4.76C23,2.12 25.21,0 27.95,0L98.05,0C100.79,0 103,2.12 103,4.76L103,145.24C103,147.88 100.79,150 98.05,150L27.95,150Z"
- android:strokeColor="#00000000"
- android:fillType="nonZero"
- android:fillColor="#DADCE0"
- android:strokeWidth="1"/>
- <path
- android:pathData="M103,58L103,58C104.1,58 105,58.9 105,60L105,76C105,77.1 104.1,78 103,78L103,58Z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="#DADCE0"
- android:strokeWidth="1"/>
- <path
- android:pathData="M103,32L103,32C104.1,32 105,32.9 105,34L105,40C105,41.1 104.1,42 103,42L103,32Z"
- android:strokeColor="#00000000"
- android:fillType="evenOdd"
- android:fillColor="#DADCE0"
- android:strokeWidth="1"/>
-</vector>
+ android:pathData="M164.604 152.545H170.764V146.432H164.604V152.545ZM189.236 152.545H195.396V146.432H189.236V152.545ZM164.604 140.231H170.764V127.926H164.604V140.231ZM176.924 152.545H183.041V140.231H176.924V152.545ZM176.924 134.074H183.041V127.961H176.924V134.074ZM189.236 140.187H195.396V127.926H189.236V140.187ZM161.528 161.733C159.896 161.728 158.332 161.078 157.177 159.924C156.023 158.77 155.373 157.207 155.368 155.576V118.695L173.883 100.224H198.516C200.14 100.228 201.698 100.872 202.851 102.017C204.004 103.161 204.66 104.713 204.676 106.337V155.576C204.671 157.207 204.021 158.77 202.866 159.924C201.712 161.078 200.148 161.728 198.516 161.733H161.528ZM161.528 155.576H198.472V106.381H176.505L161.528 121.306V155.619V155.576ZM161.528 155.576V121.306L176.505 106.381H198.516V155.619H161.528V155.576Z" />
+</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_storage_wizard_ready.xml b/res/drawable/ic_storage_wizard_ready.xml
new file mode 100644
index 0000000..c09c9ec
--- /dev/null
+++ b/res/drawable/ic_storage_wizard_ready.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="360dp"
+ android:height="262dp"
+ android:viewportWidth="360"
+ android:viewportHeight="262">
+
+ <path
+ android:fillColor="?android:attr/colorBackground"
+ android:pathData="M335.709 262H24.2913C10.9223 262 0 250.821 0 237.11V24.89C0 11.1787 10.9223 0 24.2913 0H335.796C349.078 0 360 11.1787 360 24.89V237.285C360 250.821 349.078 262 335.709 262Z" />
+ <path
+ android:fillColor="?android:attr/colorAccent"
+ android:pathData="M157.282 160.169H165.67V151.785H157.282V160.169ZM190.835 160.169H199.223V151.785H190.835V160.169ZM157.282 143.401H165.67V126.633H157.282V143.401ZM174.058 160.169H182.447V143.401H174.058V160.169ZM174.058 135.017H182.447V126.633H174.058V135.017ZM190.835 143.401H199.223V126.633H190.835V143.401ZM153.087 172.745C148.456 172.745 144.699 168.99 144.699 164.361V114.057L169.864 88.9053H203.417C208.049 88.9053 211.806 92.6606 211.806 97.2893V164.449C211.806 169.077 208.049 172.833 203.417 172.833L153.087 172.745ZM153.087 164.361H203.417V97.2019H173.359L153 117.551L153.087 164.361ZM153.087 164.361V117.551L173.447 97.2019H203.417V164.361H153.087Z" />
+ <path
+ android:fillColor="?android:attr/colorAccent"
+ android:pathData="M273.233 130.825C273.146 79.386 231.466 37.728 180 37.728C128.534 37.728 86.8544 79.4734 86.8544 130.913C86.8544 182.352 128.534 223.923 180 223.923C231.466 223.923 273.233 182.265 273.233 130.825ZM180 215.189C133.34 215.189 95.5922 177.374 95.5922 130.738C95.5922 84.102 133.427 46.374 180.087 46.374C226.748 46.374 264.495 84.1894 264.495 130.738C264.408 177.374 226.66 215.189 180 215.189Z" />
+ <path
+ android:fillColor="?android:attr/colorBackground"
+ android:pathData="M264.043 194.685C265.976 182.783 257.889 171.568 245.98 169.636C234.071 167.704 222.85 175.787 220.917 187.69C218.985 199.593 227.072 210.808 238.981 212.739C250.89 214.671 262.11 206.588 264.043 194.685Z" />
+ <path
+ android:fillColor="?android:attr/colorAccent"
+ android:pathData="M242.476 166.981C229.107 166.981 218.184 177.811 218.184 191.26C218.184 204.709 229.019 215.539 242.476 215.539C255.845 215.539 266.68 204.709 266.767 191.347C266.68 177.898 255.845 166.981 242.476 166.981ZM242.476 210.648C231.728 210.648 223.078 202.002 223.078 191.26C223.078 180.518 231.728 171.872 242.476 171.872C253.223 171.872 261.874 180.518 261.874 191.26C261.786 201.915 253.136 210.648 242.476 210.648ZM237.582 196.587L231.291 190.299L227.883 193.705L237.582 203.399L256.981 184.011L253.573 180.605L237.582 196.587Z" />
+</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_swap_horiz.xml b/res/drawable/ic_swap_horiz.xml
index a38833b..c41c9a3 100644
--- a/res/drawable/ic_swap_horiz.xml
+++ b/res/drawable/ic_swap_horiz.xml
@@ -20,5 +20,5 @@
android:viewportHeight="24.0">
<path
android:pathData="M6.99,11L3,15l3.99,4v-3H14v-2H6.99v-3zM21,9l-3.99,-4v3H10v2h7.01v3L21,9z"
- android:fillColor="#000000"/>
+ android:fillColor="?android:attr/textColorPrimary"/>
</vector>
diff --git a/res/drawable/ic_test_tick.xml b/res/drawable/ic_test_tick.xml
new file mode 100644
index 0000000..9585806
--- /dev/null
+++ b/res/drawable/ic_test_tick.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="48dp"
+ android:height="48dp"
+ android:viewportWidth="48"
+ android:viewportHeight="48">
+
+ <path
+ android:fillColor="?android:attr/colorAccent"
+ android:pathData="M7.99999 14.6L2.39999 8.99999L0.533325 10.8667L7.99999 18.3333L24 2.33333L22.1333 0.46666L7.99999 14.6Z" />
+</vector>
\ No newline at end of file
diff --git a/res/drawable/tile_icon_desktop_mode.xml b/res/drawable/tile_icon_desktop_mode.xml
new file mode 100644
index 0000000..2ccd81f
--- /dev/null
+++ b/res/drawable/tile_icon_desktop_mode.xml
@@ -0,0 +1,25 @@
+<!--
+Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:tint="?android:attr/colorControlNormal"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0">
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M18,15V20Q18,20.825 17.413,21.413Q16.825,22 16,22H4Q3.175,22 2.588,21.413Q2,20.825 2,20V11Q2,10.175 2.588,9.587Q3.175,9 4,9H6V4Q6,3.175 6.588,2.587Q7.175,2 8,2H20Q20.825,2 21.413,2.587Q22,3.175 22,4V13Q22,13.825 21.413,14.412Q20.825,15 20,15ZM4,13V20Q4,20 4,20Q4,20 4,20H16Q16,20 16,20Q16,20 16,20V13ZM18,13H20Q20,13 20,13Q20,13 20,13V6H8V9H16Q16.825,9 17.413,9.587Q18,10.175 18,11Z" />
+</vector>
diff --git a/res/layout-land/udfps_enroll_enrolling_land.xml b/res/layout-land/udfps_enroll_enrolling.xml
similarity index 93%
rename from res/layout-land/udfps_enroll_enrolling_land.xml
rename to res/layout-land/udfps_enroll_enrolling.xml
index 776f8a9..f323788 100644
--- a/res/layout-land/udfps_enroll_enrolling_land.xml
+++ b/res/layout-land/udfps_enroll_enrolling.xml
@@ -33,11 +33,15 @@
<!-- Both texts are kept as separate text views so it doesn't jump around in portrait.
See layouts/fingerprint_enroll_enrolling_base.xml. -->
<LinearLayout
+ android:id="@+id/layout_container"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_marginStart="?attr/sudMarginStart"
+ android:layout_marginEnd="@dimen/enroll_margin_end"
android:layout_marginBottom="@dimen/sud_content_frame_padding_bottom"
+ android:paddingStart="@dimen/enroll_padding_start"
+ android:paddingEnd="@dimen/enroll_padding_end"
android:clipChildren="false"
android:clipToPadding="false"
android:orientation="vertical">
diff --git a/res/layout/accessibility_launch_activity_preference.xml b/res/layout/accessibility_launch_activity_preference.xml
index 0e3e225..26a1c33 100644
--- a/res/layout/accessibility_launch_activity_preference.xml
+++ b/res/layout/accessibility_launch_activity_preference.xml
@@ -34,5 +34,6 @@
android:ellipsize="end"
android:textAppearance="?android:attr/textAppearanceListItem"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
style="@style/MainSwitchText.Settingslib" />
</LinearLayout>
diff --git a/res/layout/accessibility_shortcut_secondary_action.xml b/res/layout/accessibility_shortcut_secondary_action.xml
index ddbadb5..b3b81fe 100644
--- a/res/layout/accessibility_shortcut_secondary_action.xml
+++ b/res/layout/accessibility_shortcut_secondary_action.xml
@@ -60,6 +60,7 @@
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItem"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:ellipsize="marquee" />
<TextView
@@ -71,6 +72,7 @@
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:maxLines="10" />
</RelativeLayout>
diff --git a/res/layout/apn_preference_layout.xml b/res/layout/apn_preference_layout.xml
index 2c453aa..241be74 100644
--- a/res/layout/apn_preference_layout.xml
+++ b/res/layout/apn_preference_layout.xml
@@ -52,6 +52,7 @@
android:textColor="?android:attr/textColorSecondary"
android:focusable="false"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:maxLines="2" />
</RelativeLayout>
diff --git a/res/layout/app_preference_item.xml b/res/layout/app_preference_item.xml
index c685760..7e7ff39 100755
--- a/res/layout/app_preference_item.xml
+++ b/res/layout/app_preference_item.xml
@@ -57,6 +57,7 @@
android:ellipsize="marquee"
android:duplicateParentState="true"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
/>
<TextView
android:id="@android:id/summary"
@@ -69,6 +70,7 @@
android:visibility="gone"
android:duplicateParentState="true"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
/>
</LinearLayout>
<TextView
diff --git a/res/layout/battery_active_view.xml b/res/layout/battery_active_view.xml
index 1583b95..306fc4b 100644
--- a/res/layout/battery_active_view.xml
+++ b/res/layout/battery_active_view.xml
@@ -29,6 +29,7 @@
android:textAlignment="viewStart"
android:textAppearance="?android:attr/textAppearanceMedium"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textColor="?android:attr/textColorSecondary" />
<com.android.settings.fuelgauge.BatteryActiveView
diff --git a/res/layout/battery_chart_graph.xml b/res/layout/battery_chart_graph.xml
index e89c912..b95c660 100644
--- a/res/layout/battery_chart_graph.xml
+++ b/res/layout/battery_chart_graph.xml
@@ -29,14 +29,24 @@
android:layout_marginVertical="16dp"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
- android:text="@string/battery_usage_chart_graph_hint" />
+ android:text="@string/battery_usage_chart_graph_hint_last_full_charge" />
- <com.android.settings.fuelgauge.BatteryChartView
- android:id="@+id/battery_chart"
+ <com.android.settings.fuelgauge.batteryusage.BatteryChartView
+ android:id="@+id/daily_battery_chart"
android:layout_width="match_parent"
android:layout_height="170dp"
- android:layout_marginBottom="6dp"
- android:visibility="invisible"
+ android:layout_marginBottom="16dp"
+ android:visibility="gone"
+ android:contentDescription="@string/battery_usage_chart"
+ android:textAppearance="?android:attr/textAppearanceSmall"
+ settings:textColor="?android:attr/textColorSecondary" />
+
+ <com.android.settings.fuelgauge.batteryusage.BatteryChartView
+ android:id="@+id/hourly_battery_chart"
+ android:layout_width="match_parent"
+ android:layout_height="170dp"
+ android:layout_marginBottom="16dp"
+ android:visibility="visible"
android:contentDescription="@string/battery_usage_chart"
android:textAppearance="?android:attr/textAppearanceSmall"
settings:textColor="?android:attr/textColorSecondary" />
diff --git a/res/layout/bluetooth_audio_codec_dialog.xml b/res/layout/bluetooth_audio_codec_dialog.xml
index 9636427..3a260a6 100644
--- a/res/layout/bluetooth_audio_codec_dialog.xml
+++ b/res/layout/bluetooth_audio_codec_dialog.xml
@@ -54,6 +54,15 @@
<include
android:id="@+id/bluetooth_audio_codec_ldac"
layout="@layout/preference_widget_dialog_radiobutton"/>
+
+ <include
+ android:id="@+id/bluetooth_audio_codec_lc3"
+ layout="@layout/preference_widget_dialog_radiobutton"/>
+
+ <include
+ android:id="@+id/bluetooth_audio_codec_opus"
+ layout="@layout/preference_widget_dialog_radiobutton"/>
+
</RadioGroup>
<include
diff --git a/res/layout/card_preference.xml b/res/layout/card_preference.xml
index be49ca3..39523eb 100644
--- a/res/layout/card_preference.xml
+++ b/res/layout/card_preference.xml
@@ -57,6 +57,30 @@
android:maxLines="10"
style="@style/PreferenceSummaryTextStyle"/>
+ <RelativeLayout
+ android:id="@+id/card_preference_buttons"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:layout_below="@android:id/summary"
+ android:visibility="gone">
+ <Button
+ android:id="@android:id/button1"
+ style="@style/CardPreferencePrimaryButton"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:layout_marginHorizontal="4dp"
+ android:layout_toStartOf="@android:id/button2"
+ android:visibility="gone"/>
+ <Button
+ android:id="@android:id/button2"
+ style="@style/CardPreferenceBorderlessButton"
+ android:layout_height="wrap_content"
+ android:layout_width="wrap_content"
+ android:layout_marginHorizontal="4dp"
+ android:layout_alignParentEnd="true"
+ android:visibility="gone"/>
+ </RelativeLayout>
</RelativeLayout>
<!-- Preference should place its actual preference widget here. -->
diff --git a/res/layout/dream_preference_layout.xml b/res/layout/dream_preference_layout.xml
index dc52328..f7281c1 100644
--- a/res/layout/dream_preference_layout.xml
+++ b/res/layout/dream_preference_layout.xml
@@ -59,7 +59,8 @@
android:layout_height="wrap_content"
android:visibility="gone"
android:text="@string/customize_button_title"
- android:hyphenationFrequency="full"
+ android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
app:layout_constraintTop_toTopOf="@+id/preview"
app:layout_constraintBottom_toBottomOf="@+id/preview"
app:layout_constraintStart_toStartOf="@+id/preview"
diff --git a/res/layout/face_enroll_education.xml b/res/layout/face_enroll_education.xml
index 2a78f99..fec6d53 100644
--- a/res/layout/face_enroll_education.xml
+++ b/res/layout/face_enroll_education.xml
@@ -54,7 +54,7 @@
android:layout_width="match_parent"
android:layout_height="440dp"
android:layout_marginTop="-52dp"
- android:scaleType="centerCrop"
+ android:scaleType="centerInside"
android:visibility="gone"
app:lottie_autoPlay="true"
app:lottie_loop="true"
@@ -66,7 +66,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:visibility="invisible"
- android:background="@drawable/face_enroll_icon_large"/>
+ android:src="@drawable/face_enroll_icon_large"/>
</FrameLayout>
@@ -83,7 +83,8 @@
<FrameLayout
android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:layout_marginTop="-24dp">
<Button
android:id="@+id/accessibility_button"
diff --git a/res/layout/homepage_preference.xml b/res/layout/homepage_preference.xml
index 97557b0..ed1a2f1 100644
--- a/res/layout/homepage_preference.xml
+++ b/res/layout/homepage_preference.xml
@@ -63,6 +63,7 @@
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItem"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:ellipsize="marquee"/>
<TextView
@@ -77,6 +78,7 @@
android:textColor="?android:attr/textColorSecondary"
android:maxLines="4"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
style="@style/PreferenceSummaryTextStyle"/>
</RelativeLayout>
</LinearLayout>
diff --git a/res/layout/horizontal_preference.xml b/res/layout/horizontal_preference.xml
index d87963c..922143b 100644
--- a/res/layout/horizontal_preference.xml
+++ b/res/layout/horizontal_preference.xml
@@ -31,6 +31,7 @@
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:layout_weight="1" />
<TextView
@@ -41,6 +42,7 @@
android:layout_width="wrap_content"
android:layout_weight="1"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:gravity="end|bottom" />
</LinearLayout>
diff --git a/res/layout/notification_app.xml b/res/layout/notification_app.xml
index 2d17c8d..15e83f1 100644
--- a/res/layout/notification_app.xml
+++ b/res/layout/notification_app.xml
@@ -39,6 +39,7 @@
android:singleLine="true"
android:textAlignment="viewStart"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
@@ -52,6 +53,7 @@
android:textAlignment="viewStart"
android:textColor="?android:attr/textColorSecondary"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textAppearance="?android:attr/textAppearanceSmall" />
<View
diff --git a/res/layout/notification_history_app_layout.xml b/res/layout/notification_history_app_layout.xml
index 52c0e42..7d53b4d 100644
--- a/res/layout/notification_history_app_layout.xml
+++ b/res/layout/notification_history_app_layout.xml
@@ -21,63 +21,79 @@
android:layout_height="wrap_content"
android:orientation="vertical">
- <RelativeLayout
+ <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/app_header"
- android:layout_height="wrap_content"
android:layout_width="match_parent"
- android:clipChildren="true"
- android:background="@drawable/button_ripple_radius"
+ android:layout_height="wrap_content"
android:paddingTop="20dp"
- android:orientation="horizontal"
android:paddingBottom="18dp"
- android:paddingStart="16dp">
+ android:paddingStart="16dp"
+ android:background="?android:attr/selectableItemBackground"
+ android:clipChildren="true">
+
<ImageView
android:id="@+id/icon"
- android:layout_height="24dp"
android:layout_width="24dp"
- android:layout_gravity="center_vertical|start"
+ android:layout_height="24dp"
android:layout_marginEnd="14dp"
- android:layout_centerVertical="true"
- android:scaleType="centerInside"/>
+ android:scaleType="centerInside"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/text_start_guideline"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
- <LinearLayout
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/text_start_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:id="@+id/text"
- android:layout_toEndOf="@+id/icon"
- android:layout_gravity="center_vertical"
- android:layout_centerVertical="true"
- android:orientation="vertical">
- <TextView
- android:id="@+id/label"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="center_vertical"
- android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"/>
- <TextView
- android:id="@+id/count"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:layout_gravity="start|center_vertical"
- android:textDirection="locale"
- android:paddingTop="4dp"
- android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification"/>
- </LinearLayout>
+ android:orientation="vertical"
+ app:layout_constraintStart_toEndOf="@id/icon" />
- <include layout="@*android:layout/notification_expand_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentEnd="true"
- android:layout_centerVertical="true"
- android:layout_gravity="center_vertical"
- />
+ <TextView
+ android:id="@+id/label"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:ellipsize="end"
+ android:lines="1"
+ android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification.Title"
+ app:layout_constraintBottom_toTopOf="@id/count"
+ app:layout_constraintEnd_toStartOf="@id/expand_button_wrapper"
+ app:layout_constraintStart_toEndOf="@id/text_start_guideline"
+ app:layout_constraintTop_toTopOf="parent" />
- </RelativeLayout>
+ <TextView
+ android:id="@+id/count"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:paddingTop="4dp"
+ android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Notification"
+ android:textDirection="locale"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toStartOf="@id/expand_button_wrapper"
+ app:layout_constraintStart_toEndOf="@id/text_start_guideline"
+ app:layout_constraintTop_toBottomOf="@id/label" />
+
+ <FrameLayout
+ android:id="@+id/expand_button_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent">
+
+ <include
+ layout="@*android:layout/notification_expand_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ </FrameLayout>
+
+ </androidx.constraintlayout.widget.ConstraintLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
- android:background="?android:attr/listDivider"/>
+ android:background="?android:attr/listDivider" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/notification_list_wrapper"
@@ -85,20 +101,20 @@
android:layout_height="wrap_content">
<com.android.settings.notification.history.NotificationHistoryRecyclerView
+ android:id="@+id/notification_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:id="@+id/notification_list"
android:clipChildren="true"
- android:clipToPadding="true"
android:clipToOutline="true"
+ android:clipToPadding="true"
android:importantForAccessibility="yes"
app:layout_constrainedHeight="true"
- app:layout_constraintHeight_min="48dp"
- app:layout_constraintHeight_max="500dp"
- app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintHeight_max="500dp"
+ app:layout_constraintHeight_min="48dp"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintBottom_toBottomOf="parent"/>
+ app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/preference_app_restrictions.xml b/res/layout/preference_app_restrictions.xml
index f92f683..28effe7 100644
--- a/res/layout/preference_app_restrictions.xml
+++ b/res/layout/preference_app_restrictions.xml
@@ -62,6 +62,7 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:ellipsize="marquee"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:fadingEdge="horizontal"/>
<TextView
android:id="@android:id/summary"
@@ -76,6 +77,7 @@
android:textColor="?android:attr/textColorSecondary"
android:focusable="false"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:maxLines="4" />
</RelativeLayout>
</LinearLayout>
diff --git a/res/layout/preference_balance_slider.xml b/res/layout/preference_balance_slider.xml
index 3f1c4ed..278cf79 100644
--- a/res/layout/preference_balance_slider.xml
+++ b/res/layout/preference_balance_slider.xml
@@ -46,6 +46,7 @@
android:textColor="?android:attr/textColorPrimary"
android:ellipsize="marquee"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:fadingEdge="horizontal"/>
<LinearLayout
android:id="@android:id/widget_frame"
diff --git a/res/layout/preference_icon.xml b/res/layout/preference_icon.xml
index 1312979..9a81db9 100644
--- a/res/layout/preference_icon.xml
+++ b/res/layout/preference_icon.xml
@@ -58,6 +58,7 @@
android:layout_alignStart="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:maxLines="2" />
</RelativeLayout>
diff --git a/res/layout/preference_labeled_slider.xml b/res/layout/preference_labeled_slider.xml
index 610b79f..a11d574 100644
--- a/res/layout/preference_labeled_slider.xml
+++ b/res/layout/preference_labeled_slider.xml
@@ -36,6 +36,7 @@
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItem"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textColor="?android:attr/textColorPrimary" />
<TextView
@@ -46,6 +47,7 @@
android:textAppearance="?android:attr/textAppearanceSmall"
android:textAlignment="viewStart"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textColor="?android:attr/textColorSecondary" />
<include
diff --git a/res/layout/preference_multiline_title.xml b/res/layout/preference_multiline_title.xml
index d68e8c1..9612a57 100644
--- a/res/layout/preference_multiline_title.xml
+++ b/res/layout/preference_multiline_title.xml
@@ -39,6 +39,7 @@
android:textAlignment="center"
android:ellipsize="marquee"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:fadingEdge="horizontal" />
<TextView
@@ -52,6 +53,7 @@
android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body1"
android:textColor="?android:attr/textColorSecondary"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:maxLines="10" />
</RelativeLayout>
diff --git a/res/layout/preference_progress_category.xml b/res/layout/preference_progress_category.xml
index 9e33c5d..b04f5be 100644
--- a/res/layout/preference_progress_category.xml
+++ b/res/layout/preference_progress_category.xml
@@ -48,6 +48,7 @@
android:layout_gravity="start|center"
android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body2"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textColor="?android:attr/colorAccent"/>
<ProgressBar
diff --git a/res/layout/preference_radio_with_extra_widget.xml b/res/layout/preference_radio_with_extra_widget.xml
index a03f556..9b7e178 100644
--- a/res/layout/preference_radio_with_extra_widget.xml
+++ b/res/layout/preference_radio_with_extra_widget.xml
@@ -76,6 +76,7 @@
android:textAppearance="?android:attr/textAppearanceSmall"
android:textAlignment="viewStart"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textColor="?android:attr/textColorSecondary" />
</LinearLayout>
<LinearLayout
diff --git a/res/layout/preference_single_target.xml b/res/layout/preference_single_target.xml
index ae40fd3..5b0bf05 100644
--- a/res/layout/preference_single_target.xml
+++ b/res/layout/preference_single_target.xml
@@ -77,6 +77,7 @@
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:maxLines="10" />
</RelativeLayout>
diff --git a/res/layout/preference_two_target_radio.xml b/res/layout/preference_two_target_radio.xml
index e5e6d4a..ece0746 100644
--- a/res/layout/preference_two_target_radio.xml
+++ b/res/layout/preference_two_target_radio.xml
@@ -74,6 +74,7 @@
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:maxLines="10" />
</RelativeLayout>
diff --git a/res/layout/radio_with_summary.xml b/res/layout/radio_with_summary.xml
index 2f39e67..ac65a0e 100644
--- a/res/layout/radio_with_summary.xml
+++ b/res/layout/radio_with_summary.xml
@@ -34,6 +34,7 @@
android:paddingStart="20dp"
android:drawableStart="?android:attr/listChoiceIndicatorSingle"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:ellipsize="marquee" />
@@ -45,6 +46,7 @@
android:textAppearance="?android:attr/textAppearanceListItemSecondary"
android:textColor="?android:attr/textColorSecondary"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:maxLines="10" />
</com.android.settings.CheckableLinearLayout>
diff --git a/res/layout/running_services_app_item.xml b/res/layout/running_services_app_item.xml
index f258530..65328ba 100644
--- a/res/layout/running_services_app_item.xml
+++ b/res/layout/running_services_app_item.xml
@@ -56,6 +56,7 @@
android:fadingEdge="horizontal"
android:maxLines="2"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textAppearance="?android:attr/textAppearanceListItem"/>
<TextView
@@ -65,6 +66,7 @@
android:textDirection="locale"
android:textAppearance="?android:attr/textAppearanceSmall"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textColor="?android:attr/textColorSecondary"/>
</LinearLayout>
diff --git a/res/layout/settings_summary_preference.xml b/res/layout/settings_summary_preference.xml
index 2f899e1..894a5e5 100644
--- a/res/layout/settings_summary_preference.xml
+++ b/res/layout/settings_summary_preference.xml
@@ -33,7 +33,8 @@
android:textColor="?android:attr/textColorPrimary"
android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Display1"
android:hyphenationFrequency="normalFast"
- />
+ android:lineBreakWordStyle="phrase"
+ />
<TextView android:id="@android:id/summary"
android:layout_width="match_parent"
@@ -42,6 +43,7 @@
android:textColor="?android:attr/textColorSecondary"
android:paddingBottom="5dp"
android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:maxLines="10" />
<ProgressBar
diff --git a/res/layout/storage_internal_format.xml b/res/layout/storage_internal_format.xml
index 0b49d7e..f8224c4 100644
--- a/res/layout/storage_internal_format.xml
+++ b/res/layout/storage_internal_format.xml
@@ -14,16 +14,16 @@
limitations under the License.
-->
-<LinearLayout
+<androidx.core.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ android:layout_height="wrap_content"
+ android:fillViewport="true">
- <androidx.core.widget.NestedScrollView
+ <LinearLayout
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1">
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
<TextView
android:id="@+id/body"
android:layout_width="match_parent"
@@ -35,19 +35,21 @@
android:lineSpacingExtra="@dimen/sud_description_line_spacing_extra"
android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Body1"
android:textColor="?android:attr/textColorPrimary" />
- </androidx.core.widget.NestedScrollView>
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:padding="4dp">
- <Button
- android:id="@+id/confirm"
+ <FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:text="@string/storage_menu_format"
- android:textColor="@android:color/white"
- android:backgroundTint="@color/storage_wizard_button_red" />
- </FrameLayout>
+ android:padding="4dp">
+ <Button
+ style="@style/ActionPrimaryButton"
+ android:id="@+id/confirm"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:text="@string/storage_menu_format_button"
+ android:textColor="@android:color/white"
+ android:backgroundTint="@color/storage_wizard_button_red" />
+ </FrameLayout>
+ </LinearLayout>
-</LinearLayout>
+</androidx.core.widget.NestedScrollView>
diff --git a/res/layout/storage_wizard_generic.xml b/res/layout/storage_wizard_generic.xml
index e7881d3..fc0bab1 100644
--- a/res/layout/storage_wizard_generic.xml
+++ b/res/layout/storage_wizard_generic.xml
@@ -14,32 +14,52 @@
limitations under the License.
-->
-<com.google.android.setupdesign.GlifLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/setup_wizard_layout"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/storage_wizard_container"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="wrap_content"
+ android:fitsSystemWindows="true">
- <LinearLayout
- style="@style/SudContentFrame"
+ <com.google.android.setupdesign.GlifLayout
+ android:id="@+id/setup_wizard_layout"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ android:layout_height="match_parent">
- <TextView
- android:id="@+id/storage_wizard_body"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sud_description_margin_top"
- android:lineSpacingExtra="@dimen/sud_description_line_spacing_extra"
- android:textColor="?android:attr/textColorPrimary" />
+ <LinearLayout
+ style="@style/SudContentFrame"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
- <FrameLayout
- android:id="@+id/storage_wizard_aux"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="gone" />
+ <TextView
+ android:id="@+id/storage_wizard_body"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/sud_description_margin_top"
+ android:lineSpacingExtra="@dimen/sud_description_line_spacing_extra"
+ android:textSize="18sp"
+ android:textColor="?android:attr/textColorSecondary" />
- </LinearLayout>
+ <FrameLayout
+ android:id="@+id/storage_wizard_aux"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone" />
-</com.google.android.setupdesign.GlifLayout>
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/setup_completion_margin_top"
+ android:orientation="vertical"
+ android:gravity="center_horizontal">
+ <ImageView
+ android:id="@+id/storage_wizard_body_image"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:scaleType="centerInside"/>
+ </LinearLayout>
+
+ </LinearLayout>
+
+ </com.google.android.setupdesign.GlifLayout>
+</RelativeLayout>
diff --git a/res/layout/storage_wizard_init.xml b/res/layout/storage_wizard_init.xml
index e1e78331..2d21e0e 100644
--- a/res/layout/storage_wizard_init.xml
+++ b/res/layout/storage_wizard_init.xml
@@ -14,124 +14,30 @@
limitations under the License.
-->
-<com.google.android.setupdesign.GlifLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/setup_wizard_layout"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/storage_wizard_container"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="wrap_content"
+ android:fitsSystemWindows="true">
- <LinearLayout
- style="@style/SudContentFrame"
+ <com.google.android.setupdesign.GlifLayout
+ android:id="@+id/setup_wizard_layout"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ android:layout_height="match_parent">
+ <LinearLayout
+ style="@style/SudContentFrame"
+ android:id="@+id/storage_wizard_init"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+ <ViewFlipper
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:id="@+id/viewFlipper">
+ <include layout = "@layout/storage_wizard_init_external" />
+ <include layout = "@layout/storage_wizard_init_internal" />
+ </ViewFlipper>
+ </LinearLayout>
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sud_description_margin_top"
- android:orientation="horizontal"
- android:gravity="center_vertical">
- <ImageView
- android:layout_width="144dp"
- android:layout_height="144dp"
- android:scaleType="centerInside"
- android:src="@drawable/ic_storage_wizard_internal" />
- <LinearLayout
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_marginStart="@dimen/sud_glif_margin_start"
- android:orientation="vertical">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/sud_description_margin_bottom"
- android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Subhead"
- android:text="@string/storage_wizard_init_v2_internal_title" />
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/sud_description_margin_bottom"
- android:textColor="?android:attr/textColorSecondary"
- android:text="@string/storage_wizard_init_v2_internal_summary" />
- <Button
- android:id="@+id/storage_wizard_init_internal"
- style="@style/SudGlifButton.Primary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/storage_wizard_init_v2_internal_action"
- android:onClick="onNavigateInternal" />
- </LinearLayout>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sud_description_margin_top"
- android:orientation="horizontal"
- android:gravity="center_vertical">
- <View
- android:layout_width="0dp"
- android:layout_height="1dp"
- android:layout_weight="1"
- android:background="@android:color/black"
- android:backgroundTint="?android:attr/textColorTertiary" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dp"
- android:layout_marginEnd="8dp"
- android:text="@string/storage_wizard_init_v2_or"
- android:textColor="?android:attr/textColorTertiary"
- android:textAllCaps="true" />
- <View
- android:layout_width="0dp"
- android:layout_height="1dp"
- android:layout_weight="1"
- android:background="@android:color/black"
- android:backgroundTint="?android:attr/textColorTertiary" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sud_description_margin_top"
- android:orientation="horizontal"
- android:gravity="center_vertical">
- <ImageView
- android:layout_width="144dp"
- android:layout_height="144dp"
- android:scaleType="centerInside"
- android:src="@drawable/ic_storage_wizard_external" />
- <LinearLayout
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:layout_marginStart="@dimen/sud_glif_margin_start"
- android:orientation="vertical">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/sud_description_margin_bottom"
- android:textAppearance="@*android:style/TextAppearance.DeviceDefault.Subhead"
- android:text="@string/storage_wizard_init_v2_external_title" />
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/sud_description_margin_bottom"
- android:textColor="?android:attr/textColorSecondary"
- android:text="@string/storage_wizard_init_v2_external_summary" />
- <Button
- android:id="@+id/storage_wizard_init_external"
- style="@style/SudGlifButton.Primary"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/storage_wizard_init_v2_external_action"
- android:onClick="onNavigateExternal" />
- </LinearLayout>
- </LinearLayout>
-
- </LinearLayout>
-
-</com.google.android.setupdesign.GlifLayout>
+ </com.google.android.setupdesign.GlifLayout>
+</RelativeLayout>
\ No newline at end of file
diff --git a/res/layout/storage_wizard_init_external.xml b/res/layout/storage_wizard_init_external.xml
new file mode 100644
index 0000000..38df28b
--- /dev/null
+++ b/res/layout/storage_wizard_init_external.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/sud_description_margin_top"
+ android:orientation="vertical">
+ <TextView
+ android:id="@+id/storage_wizard_init_external_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="32dp"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textSize="18sp"
+ android:text="@string/storage_wizard_init_v2_external_summary" />
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:scaleType="centerInside"
+ android:src="@drawable/ic_storage_wizard_external" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/storage_wizard_init_internal.xml b/res/layout/storage_wizard_init_internal.xml
new file mode 100644
index 0000000..0a18070
--- /dev/null
+++ b/res/layout/storage_wizard_init_internal.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/sud_description_margin_top"
+ android:orientation="vertical">
+ <TextView
+ android:id="@+id/storage_wizard_init_internal_text"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="32dp"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textSize="18sp"
+ android:text="@string/storage_wizard_init_v2_internal_summary" />
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:scaleType="centerInside"
+ android:src="@drawable/ic_storage_wizard_internal" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/storage_wizard_progress.xml b/res/layout/storage_wizard_progress.xml
index 577ec3c..890be70 100644
--- a/res/layout/storage_wizard_progress.xml
+++ b/res/layout/storage_wizard_progress.xml
@@ -14,47 +14,55 @@
limitations under the License.
-->
-<com.google.android.setupdesign.GlifLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/setup_wizard_layout"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/storage_wizard_container"
android:layout_width="match_parent"
- android:layout_height="match_parent">
+ android:layout_height="wrap_content"
+ android:fitsSystemWindows="true">
- <LinearLayout
- style="@style/SudContentFrame"
+ <com.google.android.setupdesign.GlifLayout
+ android:id="@+id/setup_wizard_layout"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ android:layout_height="match_parent">
- <ProgressBar
- android:id="@+id/storage_wizard_progress"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sud_description_margin_top"
- android:indeterminate="false"
- style="?android:attr/progressBarStyleHorizontal" />
- <TextView
- android:id="@+id/storage_wizard_progress_summary"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:lineSpacingExtra="@dimen/sud_description_line_spacing_extra"
- android:textColor="?android:attr/textColorSecondary" />
+ <LinearLayout
+ style="@style/SudContentFrame"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
- <TextView
- android:id="@+id/storage_wizard_body"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/sud_description_margin_top"
- android:lineSpacingExtra="@dimen/sud_description_line_spacing_extra"
- android:textColor="?android:attr/textColorPrimary"
- android:visibility="gone" />
+ <ProgressBar
+ android:id="@+id/storage_wizard_progress"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/sud_description_margin_top"
+ android:indeterminate="false"
+ style="?android:attr/progressBarStyleHorizontal" />
+ <TextView
+ android:id="@+id/storage_wizard_progress_summary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:lineSpacingExtra="@dimen/sud_description_line_spacing_extra"
+ android:textSize="18sp"
+ android:textColor="?android:attr/textColorSecondary" />
- <FrameLayout
- android:id="@+id/storage_wizard_aux"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:visibility="gone" />
+ <TextView
+ android:id="@+id/storage_wizard_body"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/sud_description_margin_top"
+ android:lineSpacingExtra="@dimen/sud_description_line_spacing_extra"
+ android:textColor="?android:attr/textColorPrimary"
+ android:textSize="18sp"
+ android:visibility="gone" />
- </LinearLayout>
+ <FrameLayout
+ android:id="@+id/storage_wizard_aux"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:visibility="gone" />
-</com.google.android.setupdesign.GlifLayout>
+ </LinearLayout>
+
+ </com.google.android.setupdesign.GlifLayout>
+</RelativeLayout>
diff --git a/res/layout/usage_side_label.xml b/res/layout/usage_side_label.xml
index bfb3ab8..013f515 100644
--- a/res/layout/usage_side_label.xml
+++ b/res/layout/usage_side_label.xml
@@ -17,5 +17,6 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:hyphenationFrequency="normal"
+ android:hyphenationFrequency="normalFast"
+ android:lineBreakWordStyle="phrase"
android:textAppearance="?android:attr/textAppearanceSmall" />
diff --git a/res/menu/storage_volume.xml b/res/menu/storage_volume.xml
index 422355d..b8725fb 100644
--- a/res/menu/storage_volume.xml
+++ b/res/menu/storage_volume.xml
@@ -29,10 +29,10 @@
android:title="@string/storage_menu_format" />
<item
android:id="@+id/storage_format_as_portable"
- android:title="@string/storage_menu_format_public" />
+ android:title="@string/storage_menu_format_option" />
<item
android:id="@+id/storage_format_as_internal"
- android:title="@string/storage_menu_format_private" />
+ android:title="@string/storage_menu_format_option" />
<item
android:id="@+id/storage_migrate"
android:title="@string/storage_menu_migrate" />
diff --git a/res/raw/lottie_power_menu.json b/res/raw/lottie_long_press_power_for_assistant.json
similarity index 100%
rename from res/raw/lottie_power_menu.json
rename to res/raw/lottie_long_press_power_for_assistant.json
diff --git a/res/raw/lottie_long_press_power_for_power_menu.json b/res/raw/lottie_long_press_power_for_power_menu.json
new file mode 100644
index 0000000..09e2f0a
--- /dev/null
+++ b/res/raw/lottie_long_press_power_for_power_menu.json
@@ -0,0 +1 @@
+{"v":"5.9.0","fr":60,"ip":0,"op":241,"w":412,"h":300,"nm":"Home Button_Digital Assistant_LPP","ddd":0,"assets":[{"id":"comp_0","nm":"Power menu","fr":60,"layers":[{"ddd":0,"ind":1,"ty":4,"nm":".grey200","cl":"grey200","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[24,24,0],"ix":2,"l":2},"a":{"a":0,"k":[24,24,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.293,1.1],[0,0],[0,-1.46],[2.58,0],[0,2.58],[-1.047,0.853],[0,0],[0,-1.826],[-3.313,0],[0,3.314]],"o":[[0,0],[1.054,0.846],[0,2.58],[-2.58,0],[0,-1.46],[0,0],[-1.294,1.1],[0,3.314],[3.314,0],[0,-1.826]],"v":[[3.887,-4.553],[2.94,-3.606],[4.667,0],[0,4.667],[-4.666,0],[-2.946,-3.613],[-3.886,-4.553],[-6,0],[0,6],[6,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[0.667,-6],[-0.666,-6],[-0.666,0.667],[0.667,0.667]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Merge Paths 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.909803921569,0.917647058824,0.929411764706,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24,24],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":6,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".grey800","cl":"grey800","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[24,24,0],"ix":2,"l":2},"a":{"a":0,"k":[24,24,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.941,0],[0,-9.941],[9.941,0],[0,9.941]],"o":[[9.941,0],[0,9.941],[-9.941,0],[0,-9.941]],"v":[[0,-18],[18,0],[0,18],[-18,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294117647,0.250980392157,0.262745098039,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24,24],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 5","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.941,0],[0,-9.941],[9.941,0],[0,9.941]],"o":[[9.941,0],[0,9.941],[-9.941,0],[0,-9.941]],"v":[[0,-18],[18,0],[0,18],[-18,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294117647,0.250980392157,0.262745098039,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[24,68],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":4,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.941,0],[0,-9.941],[9.941,0],[0,9.941]],"o":[[9.941,0],[0,9.941],[-9.941,0],[0,-9.941]],"v":[[0,-18],[18,0],[0,18],[-18,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294117647,0.250980392157,0.262745098039,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[68,24],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":4,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.941,0],[0,-9.941],[9.941,0],[0,9.941]],"o":[[9.941,0],[0,9.941],[-9.941,0],[0,-9.941]],"v":[[0,-18],[18,0],[0,18],[-18,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294117647,0.250980392157,0.262745098039,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[68,68],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":4,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".grey900","cl":"grey900","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[46,46,0],"ix":2,"l":2},"a":{"a":0,"k":[46,46,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.627,0],[0,0],[0,-6.627],[0,0],[6.627,0],[0,0],[0,6.627],[0,0]],"o":[[0,0],[6.627,0],[0,0],[0,6.627],[0,0],[-6.627,0],[0,0],[0,-6.627]],"v":[[-34,-46],[34,-46],[46,-34],[46,34],[34,46],[-34,46],[-46,34],[-46,-34]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.125490196078,0.129411764706,0.141176470588,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[46,46],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 6","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":900,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":8,"ty":3,"nm":"Null 7","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,264.875,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[10,10,100],"ix":6,"l":2}},"ao":0,"ip":0,"op":1500,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":0,"nm":"Power menu","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":89,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":120,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":190,"s":[100]},{"t":210,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0,"y":1},"o":{"x":0.2,"y":0},"t":80,"s":[206,175,0],"to":[0,-4.167,0],"ti":[0,4.167,0]},{"i":{"x":0.3,"y":0.3},"o":{"x":0.167,"y":0.167},"t":120,"s":[206,150,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.999,"y":1},"o":{"x":0.3,"y":0},"t":190,"s":[206,150,0],"to":[0,4.167,0],"ti":[0,-4.167,0]},{"t":230,"s":[206,175,0]}],"ix":2,"l":2},"a":{"a":0,"k":[46,46,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"w":92,"h":92,"ip":80,"op":980,"st":80,"bm":0},{"ddd":0,"ind":30,"ty":4,"nm":".grey300","cl":"grey300","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,150,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.243,0],[0,0],[0,5.244],[0,0],[-5.243,0],[0,0],[0,-5.244]],"o":[[0,5.244],[0,0],[-5.243,0],[0,0],[0,-5.244],[0,0],[5.243,0],[0,0]],"v":[[64.188,114.112],[54.679,123.622],[-54.679,123.622],[-64.188,114.112],[-64.188,-114.112],[-54.679,-123.622],[54.679,-123.622],[64.188,-114.112]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,0],[6.554,0],[0,0],[0,-6.555],[0,0],[-6.554,0],[0,0],[0,6.555],[0,0],[0,1.313],[0,0],[1.313,0]],"o":[[0,-6.555],[0,0],[-6.554,0],[0,0],[0,6.555],[0,0],[6.554,0],[0,0],[1.313,0],[0,0],[0,-1.313],[0,0]],"v":[[66.566,-114.112],[54.679,-126],[-54.679,-126],[-66.566,-114.112],[-66.566,114.112],[-54.679,126],[54.679,126],[66.566,114.112],[66.566,-2.378],[68.943,-4.755],[68.943,-28.528],[66.566,-30.906]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901969433,0.86274510622,0.878431379795,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1500,"st":0,"bm":0},{"ddd":0,"ind":31,"ty":4,"nm":".grey300","cl":"grey300","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"s":true,"x":{"a":1,"k":[{"i":{"x":[0.605],"y":[0.583]},"o":{"x":[0.36],"y":[0]},"t":40,"s":[206]},{"i":{"x":[0.635],"y":[0.851]},"o":{"x":[0.314],"y":[3.484]},"t":60,"s":[205.339]},{"i":{"x":[0.456],"y":[1]},"o":{"x":[0.665],"y":[-0.02]},"t":119.92,"s":[205.15]},{"t":139.919921875,"s":[206]}],"ix":3},"y":{"a":0,"k":150,"ix":4}},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,1.313],[0,0],[1.313,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,-1.313],[0,0],[0,0],[0,0],[1.313,0]],"v":[[68.943,-52.302],[68.943,-61.811],[66.566,-64.188],[65.456,-64.188],[65.55,-49.906],[66.566,-49.924]],"c":true},"ix":2},"nm":"Path 3","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.854901969433,0.86274510622,0.878431379795,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1500,"st":0,"bm":0},{"ddd":0,"ind":32,"ty":4,"nm":".grey400","cl":"grey400","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,150,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[5.243,0],[0,0],[0,5.244],[0,0],[-5.243,0],[0,0],[0,-5.244]],"o":[[0,5.244],[0,0],[-5.243,0],[0,0],[0,-5.244],[0,0],[5.243,0],[0,0]],"v":[[64.188,114.112],[54.679,123.622],[-54.679,123.622],[-64.188,114.112],[-64.188,-114.112],[-54.679,-123.622],[54.679,-123.622],[64.188,-114.112]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.741176486015,0.75686275959,0.776470601559,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1500,"st":0,"bm":0},{"ddd":0,"ind":33,"ty":4,"nm":"Gesture Tap","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[273.205,92.869,0],"ix":2,"l":2},"a":{"a":0,"k":[273.205,92.869,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-5.226],[-5.226,0],[0,5.226],[5.226,0]],"o":[[0,5.226],[5.226,0],[0,-5.226],[-5.226,0]],"v":[[-9.463,0],[0,9.463],[9.463,0],[0,-9.463]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.615686297417,0.964705884457,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[273.205,92.869],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.239,0.239],"y":[0.604,0.604]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":35,"s":[13,13]},{"i":{"x":[0.596,0.596],"y":[1,1]},"o":{"x":[0.182,0.182],"y":[0.996,0.996]},"t":55,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.793,0.793],"y":[0,0]},"t":124.92,"s":[129,129]},{"t":139.919921875,"s":[13,13]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.26],[-8.26,0],[0,8.26],[8.26,0]],"o":[[0,8.26],[8.26,0],[0,-8.26],[-8.26,0]],"v":[[-14.957,0],[0,14.957],[14.957,0],[0,-14.957]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.68235296011,0.796078443527,0.980392158031,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[273.205,92.869],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.304,0.304],"y":[0.758,0.758]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"t":30,"s":[13,13]},{"i":{"x":[0.709,0.709],"y":[0.99,0.99]},"o":{"x":[0.196,0.196],"y":[1.618,1.618]},"t":50,"s":[100,100]},{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.609,0.609],"y":[-0.001,-0.001]},"t":125,"s":[113.775,113.775]},{"t":140,"s":[8,8]}],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1500,"st":0,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 9c43f65..d631d46 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Wanneer jou kind Pixel Imprint gebruik, word prente gebruik om sy of haar vingerafdrukmodel op te dateer. Prente wat gebruik word om jou kind se vingerafdrukmodel te skep, word nooit geberg nie. Die vingerafdrukmodel word egter veilig op die foon geberg en verlaat nooit die foon nie. Alle verwerking vind veilig op die foon plaas."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Jy kan enige tyd in Instellings jou vingerafdrukprente en -model uitvee of Vingerafdrukslot afskakel. Vingerafdrukprente en -modelle word veilig op jou foon geberg totdat jy hulle uitvee."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Jy en jou kind kan enige tyd in Instellings sy of haar vingerafdrukprente en -model uitvee of Vingerafdrukslot afskakel. Vingerafdrukprente en -modelle word op die foon geberg totdat hulle uitgevee word."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Jou foon kan ontsluit word wanneer jy nie bedoel om dit te doen nie, soos as iemand dit teen jou vinger druk."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Jou foon kan ontsluit word wanneer jy nie bedoel om dit te doen nie, soos as iemand dit teen jou vinger druk."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Jou tablet kan ontsluit word wanneer jy nie bedoel om dit te doen nie, soos as iemand dit teen jou vinger druk."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Jou toestel kan ontsluit word wanneer jy nie bedoel om dit te doen nie, soos as iemand dit teen jou vinger druk."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Jou kind se foon kan ontsluit word wanneer hulle nie bedoel om dit te doen nie, soos as iemand dit teen sy of haar vinger druk."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Gebruik vir die beste resultate ’n skermbeskermer wat Gemaak vir Google-gesertifiseer is. Jou vingerafdruk sal dalk nie met ander skermbeskermers werk nie."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Gebruik vir die beste resultate ’n skermbeskermer wat Gemaak vir Google-gesertifiseer is. Jou kind se vingerafdruk sal dalk nie met ander skermbeskermers werk nie."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustrasie met toestel en ligging van vingerafdruksensor"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Naam"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Goed"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Probeer weer"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Vee uit"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Raak die sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Plaas jou vinger op die sensor en lig dit op wanneer jy \'n vibrasie voel"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Klaar"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Oeps, dis nie die sensor nie"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Raak sensor op die agterkant van jou foon. Gebruik jou wysvinger."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registrasie is nie voltooi nie"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Tydlimiet vir vingerafdrukregistrasie is bereik. Probeer weer."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Vingerafdrukopstelling het uitgetel"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Probeer nou weer of stel jou vingerafdruk later in Instellings op"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Vingerafdrukregistrasie het nie gewerk nie. Probeer weer of gebruik \'n ander vinger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Voeg nog een by"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Volgende"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Pasmaak jou foon"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Probeer verskillende style, muurpapiere, en meer"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Sluimerskerm"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"sluimerskerm"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Gebruik sluimerskerm"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Terwyl dit laai of gedok is"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Enige een"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Terwyl dit laai"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Terwyl dit gedok is"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nooit"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Af"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Skakel sluimerskerm aan om te beheer wat gebeur wanneer die foon gedok is en/of slaap."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Wanneer om te begin"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Huidige sluimerskerm"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Instellings"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Outomatiese helderheid"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Lig op om wakker te maak"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Stemmingvertoning"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Stel \'n PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Stel \'n werk-PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Stel \'n patroon"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Stel ’n patroon om die toestel te ontsluit vir bykomende sekuriteit"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Stel \'n werkpatroon"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Stel wagwoord vir vingerafdruk"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Stel patroon vir vingerafdruk"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Noodprogram"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Stel programvoorkeure terug"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Stel programvoorkeure terug?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Dit sal al die voorkeure terugstel vir:\n\n"<li>"Gedeaktiveerde programme"</li>\n<li>"Gedeaktiveerdeprogram-kennisgewings"</li>\n<li>"Verstekprogramme vir handelinge"</li>\n<li>"Agtergronddatabeperkings vir programme"</li>\n<li>"Enige toestemmingbeperkings"</li>\n\n"Jy sal geen programdata verloor nie."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Dit sal alle voorkeure terugstel vir:\n\n"<li>"Gedeaktiveerde programme"</li>\n<li>"Gedeaktiveerde programkenisgewings"</li>\n<li>"Verstekprogramme vir handelinge"</li>\n<li>"Agtergronddatabeperkings vir programme"</li>\n<li>"Enige toestemmingbeperkings"</li>\n<li>"Batterygebruikinstellings"</li>\n\n"Jy sal nie enige programdata verloor nie."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Stel programme terug"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Bestuur spasie"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Stel instellings terug"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Skermgrootte- en teksinstellings is teruggestel"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Stel skermgrootte en teks terug?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Jou skermgrootte en teksvoorkeure sal na die foon se oorspronklike instellings teruggestel word"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Jou skermgrootte en teksvoorkeure sal na die foon se oorspronklike instellings teruggestel word"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Jou skermgrootte en teksvoorkeure sal na die tablet se oorspronklike instellings teruggestel word"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Stel terug"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Enige naweekplanne?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Op pad strand toe. Wil jy saamgaan?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Geen gebruik sedert dit laas volgelaai is nie"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nie in afgelope 24 uur gebruik nie"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Ander gebruikers"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Skatting van oorblywende batterytyd word op jou toestelgebruik gegrond"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Geskatte tyd oor"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Tot battery volgelaai is"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Volle aktiveerwoord en interaksie"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Eenvoudige spraak na teks"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Hierdie steminvoerdiens sal altyd-aan-stemmonitering kan verrig en stemgeaktiveerde programme namens jou kan beheer. Dit kom van die <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>-program af. Wil jy die gebruik van hierdie diens aktiveer?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Herkenninginstellings op toestel"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Herkenning op toestel"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Spraakherkenning op toestel"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Voorkeurenjin"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Enjininstellings"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Spraaktempo en -toonhoogte"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Vee uit"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Alle programme en data in hierdie sessie sal uitgevee word."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Verwyder"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gas (Jy)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Gebruikers"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Ander gebruikers"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Vee gasaktiwiteit uit"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Vee alle gasprogramme en -data uit wanneer jy gasmodus verlaat"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vee gasaktiwiteit uit?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Programme en data van hierdie gastesessie sal nou uitgevee word, en alle toekomstige gasaktiwiteit sal uitgevee word elke keer wanneer jy gasmodus verlaat"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Skakel foonoproepe aan"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Skakel foonoproepe en SMS aan"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Vee gebruiker uit"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Alle \"<xliff:g id="APP_NAME">%1$s</xliff:g>\"-kennisgewings"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Alle <xliff:g id="APP_NAME">%1$s</xliff:g>-kennisgewings"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Aanpasbare kennisgewings"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> kennisgewings per dag</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> kennisgewing per dag</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Omtrent <xliff:g id="NUMBER_1">%,d</xliff:g> kennisgewings per dag</item>
+ <item quantity="one">Omtrent <xliff:g id="NUMBER_0">%d</xliff:g> kennisgewing per dag</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> kennisgewings per week</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> kennisgewing per week</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Omtrent <xliff:g id="NUMBER_1">%,d</xliff:g> kennisgewings per week</item>
+ <item quantity="one">Omtrent <xliff:g id="NUMBER_0">%d</xliff:g> kennisgewing per week</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nooit"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Toestel- en programkennisgewings"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Doen niks nie"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibreer"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Demp"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"As jy wil aktiveer, moet jy eers \"Druk en Hou aan/af-skakelaar\" na die aan/af-kieslys verander."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"As jy wil aktiveer, moet jy eers \"Druk en hou aan/af-skakelaar\" na die aan/af-kieslys verander."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Netwerkbesonderhede"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Programme op jou foon kan jou toestelnaam sien. Ander mense sal dit dalk ook kan sien wanneer jy aan Bluetooth-toestelle koppel, aan \'n wi-fi-netwerk koppel of \'n wi-fi-warmkol opstel."</string>
<string name="devices_title" msgid="649715719278562515">"Toestelle"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"toestelkontroles"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kaarte en passe"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kaarte en passe"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Druk en hou aan/af-skakelaar"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Druk en hou vir die Assistent"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Druk en hou vir die aan/af-kieslys"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Druk en hou is gedeaktiveer"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Druk en hou aan/af-skakelaar"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Druk en hou aan/af-skakelaar om toegang te kry"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Aan/af-kieslys"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitale assistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Kry toegang tot digitale assistent"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Kry toegang tot aan/af-kieslys"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Om dit te gebruik, moet jy eers \'n skermslot stel"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Hou in vir Assistent"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Aktiveer die Assistent deur die aan/af-skakelaar te hou"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Aan/af- en noodkieslys:\nDruk tegelyk aan/af-skakelaar en volume harder."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Keer dat dit lui:\nKortpad in die volumekieslys beskikbaar."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Aan/af-kieslys:\nDruk die aan/af-skakelaar en Volume Harder-knoppie gelyk"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Keer dat dit lui:\nDruk ’n volumeknoppie vir die kortpad"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Hoe lank om te druk en hou"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Verstel sensitiwiteit deur te kies hoe lank jy die aan/af-skakelaar moet druk en hou"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kort"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 1e45d68..de6b426 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Pixel Imprintን ሲጠቀሙ ምስሎች የጣት አሻራዎን ሞዴል ለማዘመን ስራ ላይ ይውላሉ። የልጅዎን የጣት አሻራ ሞዴል ለመፍጠር ስራ ላይ የዋሉ ምስሎች በጭራሽ አይከማቹም፣ ነገር ግን የጣት አሻራ ሞዴሉ በስልኩ ላይ ደህንነቱ በተጠበቀ ሁኔታ የሚከማች ሲሆን በጭራሽ ከስልኩ አይወጣም። ሁሉም ሂደቶች በስልኩ ላይ ደህንነቱ በተጠበቀ ሁኔታ ይከሰታል።"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"የጣት አሻራዎን ምስሎች እና ሞዴል መሰረዝ ወይም በቅንብሮች ውስጥ በማንኛውም ጊዜ በጣት አሻራ መከፈትን ማጥፋት ይችላሉ። የጣት አሻራ ምስሎች እና ሞዴሎች እስኪሰርዟቸው ድረስ በስልኩ ላይ ይቀመጣሉ።"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"እርስዎ እና ልጅዎ የጣት አሻራቸውን ምስሎች እና ሞዴል መሰረዝ ወይም በቅንብሮች ውስጥ በማንኛውም ጊዜ በጣት አሻራ መክፈቻን ማጥፋት ትችላላችሁ። የጣት አሻራ ምስሎች እና ሞዴሎች እስኪሰረዙ ድረስ በስልኩ ላይ ይቀመጣሉ።"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"የእርስዎ ስልክ ለምሳሌ የሆነ ሰው በግድ ወደ እርስዎ ጣት ቢያስጠጋው እርስዎ ሳይፈለጉ ሊከፈት ይችላል።"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"የእርስዎ ስልክ ለምሳሌ የሆነ ሰው በግድ ወደ እርስዎ ጣት ቢያስጠጋው እርስዎ ሳይፈለጉ ሊከፈት ይችላል።"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"የእርስዎ ጡባዊ እርስዎ ሳይፈልጉ ሊከፈት ይችላል፣ ለምሳሌ የሆነ ሰው ወደ ጣትዎ አስጠግቶ ቢይዘው።"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"የእርስዎ መሣሪያ ለምሳሌ የሆነ ሰው ወደ ጣትዎ አስጠግቶ ቢይዘው እርስዎ ሳይፈልጉ ሊከፈት ይችላል።"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"ልጅዎ ሳይፈልጉ ስልካቸው ሊከፈት ይችላል፣ ለምሳሌ የሆነ ሰው ስልኩን ወደ ጣታቸው ቢያስጠጋው።"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"ለምርጥ ውጤቶች ለGoogle የተሰራ የተረጋገጠ የማያ ገጽ መከላከያን ይጠቀሙ። በሌሎች የማያ ገጽ መከላከያዎች አማካኝነት የጣት አሻራዎ ላይሰራ ይችላል።"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"ለምርጥ ውጤቶች ለGoogle የተሰራ የተረጋገጠ የማያ ገጽ መከላከያን ይጠቀሙ። በሌሎች የማያ ገጽ መከላከያዎች አማካኝነት የልጅዎ የጣት አሻራ ላይሰራ ይችላል።"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ከመሣሪያ እና የጣት አሻራ አነፍናፊ መገኛ አካባቢ መግለጫ ስዕል ጋር"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"ስም"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"እሺ"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"እንደገና ሞክር"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"ሰርዝ"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"ዳሳሹን ይንኩ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"ጣትዎን በዳሳሹ ላይ ያስቀምጡትና ንዝረት ከተሰማዎት በኋላ ያንሱት"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"ተከናውኗል"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"አረግ አረግ፣ አነፍናፊው ያ አይደለም"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"በእርስዎ ስልክ ጀርባ ላይ ያለውን ዳሳሽ ይንኩ። የእርስዎን አመልካች ጣት ይጠቀሙ።"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"ምዝገባ አልተጠናቀቀም"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"የጣት አሻራ ምዝገባ ጊዜ ገደብ ላይ ተደርሷል። እንደገና ይሞክሩ።"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"የጣት አሻራ ውቅረት ጊዜው አብቅቷል"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"አሁን እንደገና ይሞክሩ ወይም በኋላ ላይ በቅንብሮች ውስጥ የጣት አሻራዎን ያዋቅሩ"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"የጣት አሻራ ምዝገባ አልሰራም። እንደገና ይሞክሩ ወይም የተለየ ጣት ይጠቀሙ።"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"ሌላ ያክሉ"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"ቀጣይ"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"ስልክዎን ያብጁት"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"የተለያዩ ቅጦችን፣ ልጣፎችን እና ተጨማሪ ነገሮችን ይሞክሩ"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"የማያ ገጽ ማቆያ"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"የማያ ገጽ ማቆያ"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"የማያ ገጽ አዳኝን ይጠቀሙ"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ኃይል እየሞላ ወይም ተተክሎ ሳለ"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"ማናቸውም"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ባትሪ በመሙላት ላይ ሳለ"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ተተክሎ ሳለ"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"በጭራሽ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ጠፍቷል"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ስልኩ ሲተከል እና/ወይም ሲተኛ ምን እንደሚከሰት ለመቆጣጠር የገጽ ማያ ማቆያን ያብሩ።"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"መቼ እንደሚጀመር"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"የአሁኑ ማያ ገጽ ማሳረፊያ"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ቅንብሮች"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ራስ ሰርብሩህነት"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"ለማንቃት ያንሱ"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ከባቢያዊ ማሳያ"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"ፒን ያቀናብሩ"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"የሥራ ፒን ያቀናብሩ"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"ስርዓተ-ጥለት ያቀናብሩ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"ለተጨማሪ ደህንነት ሲባል መሣሪያውን ለመክፈት ስርዓተ ጥለት ያቀናብሩ"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"የሥራ ስርዓተ-ጥለት ያቀናብሩ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"የጣት አሻራን ለመጠቀም የይለፍ ቃል ያቀናብሩ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"የጣት አሻራን ለመጠቀም፣ ሥርዓተ ጥለትን ያቀናብሩ"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"የድንገተኛ አደጋ መተግበሪያ"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"የመተግበሪያዎች ምርጫዎችን ዳግም አስጀምር"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"የመተግበሪያዎች ምርጫዎች ዳግም ይጀመሩ?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ይሄ ሁሉንም የእነኚህ ምርጫዎች ዳግም ያስጀምራቸዋል፦\n\n"<li>"የተሰናከሉ መተግበሪያዎች"</li>\n<li>"የተሰናከሉ መተግበሪያ ማሳወቂያዎች"</li>\n<li>"ለእርምጃዎች ነባሪ መተግበሪያዎች"</li>\n<li>"ለመተግበሪያዎች የጀርባ ውሂብ ገደቦች"</li>\n<li>"ማናቸውም የፈቃድ ገደቦች"</li>\n\n"ምንም የመተግበሪያ ውሂብ አይጠፋብዎትም።"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ይሄ ሁሉንም የሚተሉትን ምርጫዎችን ዳግም ያስጀምራቸዋል፦\n\n"<li>"የተሰናከሉ መተግበሪያዎች"</li>\n<li>"የተሰናከሉ መተግበሪያ ማሳወቂያዎች"</li>\n<li>"ለእርምጃዎች ነባሪ መተግበሪያዎች"</li>\n<li>"የመተግበሪያዎች የጀርባ ውሂብ ገደቦች"</li>\n<li>"ማናቸውም የፈቃድ ገደቦች"</li>\n<li>"የባትሪ አጠቃቀም ቅንብሮች"</li>\n\n"ምንም የመተግበሪያ ውሂብ አይጠፋብዎትም።"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"መተግበሪያዎችን ዳግም አስጀምር"</string>
<string name="manage_space_text" msgid="9013414693633572277">"ባዶ ቦታ አደራጅ"</string>
<string name="filter" msgid="9039576690686251462">"አጣራ"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"ቅንብሮችን ዳግም አስጀምር"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"የማሳያ መጠን እና የጽሑፍ ቅንብሮች ዳግም ተጀምረዋል"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"የማሳያ መጠን እና ጽሑፍ ዳግም ይጀመር?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"የማሳያ መጠንዎ እና የጽሑፍ ምርጫዎችዎ ወደ ስልኩ የመጀመሪያ ቅንብሮች ዳግም ይቀናበራሉ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"የማሳያ መጠንዎ እና የጽሑፍ ምርጫዎችዎ ወደ ስልኩ የመጀመሪያ ቅንብሮች ዳግም ይቀናበራሉ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"የማሳያ መጠንዎ እና የጽሁፍ ምርጫዎችዎ ወደ ጡባዊው የመጀመሪያ ቅንብሮች ዳግም ይጀምራሉ"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"ዳግም አስጀምር"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"ለሳምንቱ መጨረሻ ቀናት ዕቅዶች አለዎት?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ወደ ባህር ዳርቻ እየሄድን ነው። መቀላቀል ይፈልጋሉ?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"ካለፈው ሙሉ ኃይል ሙሌት በኋላ ጥቅም ላይ አልዋለም"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"ላለፉት 24 ሰዓታት ጥቅም ላይ አልዋለም"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"ሌሎች ተጠቃሚዎች"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"የቀረው የባትሪ ዕድሜ ግምት በእርስዎ የመሣሪያ አጠቃቀም ላይ የተመረኮዘ ነው"</string>
<string name="estimated_time_left" msgid="948717045180211777">"የተገመተው ቀሪ ጊዜ"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"ኃይሉ ሙሉ እስኪሞላ ድረስ"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"ሙሉ ትኩስ ቃል እና መስተጋብር"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"ቀላል ንግግር ወደ ጽሑፍ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"ይህ የድምጽ ግቤት አገልግሎት እርስዎን ወክሎ ሁልጊዜ የሚበራ የድምጽ ክትትልን እና በድምጽ የሚነቁ መተግበሪያዎችን መቆጣጠር ይችላል። ከ<xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> መተግበሪያ ነው የመጣው። የዚህን አገልግሎት መጠቀም ያነቁ?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"የመሣሪያ ላይ ለይቶ ማወቂያ ቅንብሮች"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"የመሣሪያ ላይ ለይቶ ማወቂያ"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"የመሣሪያ ላይ ንግግር ማወቂያ"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"የተመረጠው ፕሮግራም"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"የፕሮግራም ቅንብሮች"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"የድምጽ ፍጠነት እና ውፍረት"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"ሰርዝ"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"በዚህ ክፍለ-ጊዜ ውስጥ ያሉ ሁሉም መተግበሪያዎች እና ውሂብ ይሰረዛሉ።"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"አስወግድ"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"እንግዳ (እርስዎ)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ተጠቃሚዎች"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"ሌሎች ተጠቃሚዎች"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"የእንግዳ እንቅስቃሴን ይሰርዙ"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"ከእንግዳ ሁነታ ሲወጡ ሁሉንም የእንግዳ መተግበሪያዎችን እና ውሂብን ይሰርዙ"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"የእንግዳ እንቅስቃሴ ይሰረዝ?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"የዚህ የእንግዳ ክፍለ-ጊዜ መተግበሪያዎች እና ውሂብ አሁን ይሰረዛሉ እና ከእንግዳ ሁነታ በወጡ ቁጥር ሁሉም የወደፊት የእንግዳ እንቅስቃሴዎች ይሰረዛሉ።"</string>
<string name="user_enable_calling" msgid="264875360626905535">"የስልክ ጥሪዎችን አብራ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ስልክ ጥሪዎችን እና ኤስኤምኤስን አብራ"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ተጠቃሚን ሰርዝ"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"ሁሉም «<xliff:g id="APP_NAME">%1$s</xliff:g>» ማሳወቂያዎች"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"ሁሉም የ<xliff:g id="APP_NAME">%1$s</xliff:g> ማሳወቂያዎች"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"እንደሁኔታው ተስማሚ ማሳወቂያዎች"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> ማሳወቂያዎች በቀን</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ማሳወቂያዎች በቀን</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">በቀን ወደ <xliff:g id="NUMBER_1">%,d</xliff:g> ያህል ማሳወቂያ</item>
+ <item quantity="other">በቀን ወደ <xliff:g id="NUMBER_1">%,d</xliff:g> ያህል ማሳወቂያዎች</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> ማሳወቂያዎች በሳምንት</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ማሳወቂያዎች በሳምንት</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">በሳምንት ወደ <xliff:g id="NUMBER_1">%,d</xliff:g> ያህል ማሳወቂያ</item>
+ <item quantity="other">በሳምንት ወደ <xliff:g id="NUMBER_1">%,d</xliff:g> ያህል ማሳወቂያዎች</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"በጭራሽ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"መሣሪያ እና የመተግበሪያ ማሳወቂያዎች"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"ምንም አታድርግ"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"ንዘር"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"ድምጸ-ከል አድርግ"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ለማንቃት መጀመሪያ በኃይል ምናሌው ላይ «የኃይል ቁልፍን ተጭነው ይያዙ»ን ይቀይሩ።"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ለማንቃት መጀመሪያ «የማብሪያ/ማጥፊያ ቁልፉን ተጭነው ይያዙ»ን ወደ የኃይል ምናሌው ይለውጡ።"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"የአውታረ መረብ ዝርዝሮች"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"የመሣሪያዎ ስም በእርስዎ ስልክ ላይ ላሉ መተግበሪያዎች ይታያል። እንዲሁም ከብሉቱዝ መሣሪያዎች ጋር ሲገናኙ፣ ከWi-Fi አውታረ መረብ ሲገናኙ ወይም የWi-Fi መገናኛ ነጥብን ሲያቀናብሩ በሌሎች ሰዎች የሚታይ ሊሆን ይችላል።"</string>
<string name="devices_title" msgid="649715719278562515">"መሣሪያዎች"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"የመሣሪያ መቆጣጠሪያዎች"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"ካርዶች እና ማለፊያዎች"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"ካርዶች እና ማለፊያዎች"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"የኃይል አዝራሩን ተጭነው ይያዙ"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"ለረዳቱ ተጭነው ይያዙ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"ለኃይል ምናሌው ተጭነው ይያዙ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"ተጭነው መያዝ ተሰናክሏል"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"የማብሪያ/ማጥፊያ ቁልፍን ተጭነው ይያዙ"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"ለመድረስ የማብሪያ/ማጥፊያ ቁልፉን ተጭነው ይያዙ"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"የኃይል ምናሌ"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ዲጂታል ረዳት"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ዲጂታል ረዳት ላይ ይድረሱ"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"የኃይል ምናሌ ላይ ይድረሱ"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ለመጠቀም መጀመሪያ የማያ ገጽ መቆለፊያን ያቀናብሩ"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"ለረዳት ይያዙ"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"የኃይል አዝራሩን በመያዝ ረዳቱን ያስነሱ"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"የኃይል እና ድንገተኛ አደጋ ምናሌ፦\nበተመሳሳይ ጊዜ ኃይልን እና ድምፅ ጨምርን ይጫኑ።"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"መደወልን ይከላከሉ፦\nበድምጽ ምናሌው ውስጥ አቋራጭ ይገኛል።"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"የኃይል ምናሌ፦\nየማብሪያ/ማጥፊያ ቁልፉን እና የድምፅ አዝራሩን በአንድ ላይ ይጫኑ"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"የጥሪ ጩኸትን ይከላከሉ፦\nአቋራጩን ለማግኘት አንድ የድምፅ አዝራር ይጫኑ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"የመጫን እና የመያዝ የቆይታ ጊዜ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"የማብሪያ/ማጥፊያ አዝራሩን ለምን ያህል ጊዜ ተጭኖ እንደሚያዝ በመምረጥ ትብነትን ያስተካክሉ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"አጭር"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 92ed144..aee8ec9 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -480,7 +480,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"عندما يستخدم ميزة Pixel Imprint، يتم استخدام الصور لتعديل نموذج بصمة إصبعه. لا يتم مطلقًا تخزين الصور المستخدمة لإنشاء نموذج بصمة إصبع طفلك، ولكن يتم تخزين نموذج بصمة الإصبع بأمان على الهاتف ولا يتم نقله خارج الهاتف مطلقًا. تتم كل عمليات المعالجة بأمان على الهاتف."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"يمكنك حذف صور بصمة الإصبع ونموذجها أو إيقاف ميزة \"فتح الجهاز ببصمة الإصبع\" في أي وقت في \"الإعدادات\". يتم تخزين صور بصمة الإصبع ونموذجها على الهاتف إلى أن تحذفها."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"يمكنك أنت وطفلك حذف نموذج وصور بصمة إصبعه أو إيقاف ميزة \"فتح الجهاز ببصمة الإصبع\" في أي وقت في \"الإعدادات\". يتم تخزين صور بصمة الإصبع ونموذجها على الهاتف إلى أن يتم حذفها."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"يمكن فتح قفل هاتفك بدون قصدك، مثلاً عندما يضعه شخص على إصبعك."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"يمكن فتح قفل هاتفك بدون قصدك، مثلاً عندما يضعه شخص على إصبعك."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"يمكن فتح قفل جهازك اللوحي بدون أن تتعمد ذلك، مثلاً عندما يضعه شخص على إصبعك."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"يمكن فتح قفل جهازك بدون أن تتعمد ذلك، مثلاً عندما يضعه شخص على إصبعك."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"يمكن فتح قفل هاتف طفلك بدون قصده، مثلاً عندما يضعه شخص على إصبعه."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"للحصول على أفضل النتائج، استخدم واقي شاشة مُعتمَد ويحمل شعار Made for Google. قد لا تعمل بصمة إصبعك مع واقيات الشاشة الأخرى."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"للحصول على أفضل النتائج، استخدم واقي شاشة مُعتمَد ويحمل شعار Made for Google. قد لا تعمل بصمة إصبع طفلك مع واقيات الشاشة الأخرى."</string>
@@ -530,6 +532,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"صورة توضيحية تبرز الجهاز وموقع جهاز استشعار بصمة الإصبع"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"الاسم"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"حسنًا"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"إعادة المحاولة"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"حذف"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"المس زر الاستشعار"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"ضع إصبعك على زر الاستشعار ثمّ ارفعه بعد اهتزاز الجهاز"</string>
@@ -607,8 +610,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"تم"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"عفوًا، هذا ليس جهاز الاستشعار"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"المس زر الاستشعار في الجزء الخلفي لهاتفك. استخدم إصبع السبابة."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"لم يكتمل التسجيل"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"تم بلوغ الحد الأقصى لزمن تسجيل بصمة الإصبع. يُرجى إعادة المحاولة."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"انتهت مهلة إعداد بصمة الإصبع"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"أعِد المحاولة الآن أو اضبُط إعدادات بصمة الإصبع لاحقًا في \"الإعدادات\"."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"تعذّر تسجيل بصمة الإصبع. يُرجى إعادة المحاولة أو استخدام إصبع آخر."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"إضافة بصمة إصبع أخرى"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"التالي"</string>
@@ -1528,17 +1531,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"تخصيص الهاتف"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"يمكنك تجربة أنماط وخلفيات مختلفة، والمزيد."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"شاشة الاستراحة"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"شاشة الاستراحة"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"استخدام شاشة الاستراحة"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"أثناء الشحن أو الإرساء"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"أيهما"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"أثناء الشحن"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"أثناء الإرساء"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"عدم التشغيل أبدًا"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"إيقاف"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"للتحكم في ما يحدث عند إرساء الهاتف و/أو دخوله حالة السكون، عليك تشغيل شاشة التوقف."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"وقت البدء"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"شاشة الاستراحة الحالية"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"إعدادات"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"سطوع تلقائي"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"الرفع لتنبيه الجهاز"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"العرض على الشاشة"</string>
@@ -2034,6 +2035,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"ضبط رقم تعريف شخصي"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"ضبط رقم تعريف لملف العمل"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"ضبط نقش"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"لمزيد من الأمان، عليك ضبط نقش لفتح قفل الجهاز."</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"ضبط نقش للملف الشخصي للعمل"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"لاستخدام بصمة الإصبع، يُرجى إعداد كلمة مرور"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"لاستخدام بصمة الإصبع، يُرجى رسم نقش من ابتكارك"</string>
@@ -2195,7 +2197,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"تطبيق الطوارئ"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"إعادة ضبط الإعدادات المفضّلة للتطبيقات"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"هل تريد إعادة ضبط الإعدادات المفضّلة للتطبيقات؟"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"يؤدي ذلك إلى إعادة ضبط جميع الإعدادات المفضَّلة لما يلي:\n\n"<li>"التطبيقات الموقوفة"</li>\n<li>"إشعارات التطبيقات الموقوفة"</li>\n<li>"التطبيقات التلقائية للإجراءات"</li>\n<li>"قيود بيانات الخلفية للتطبيقات"</li>\n<li>"أيّ قيود على الأذونات"</li>\n\n"ولن تفقد أيّ بيانات للتطبيقات."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"سيؤدي هذا الإجراء إلى إعادة ضبط جميع الإعدادات المفضّلة لـ:\n\n"<li>"التطبيقات غير المفعّلة"</li>\n<li>"إشعارات التطبيقات غير المفعّلة"</li>\n<li>"التطبيقات التلقائية للإجراءات"</li>\n<li>"قيود بيانات الخلفية للتطبيقات"</li>\n<li>"أي قيود على الأذونات"</li>\n<li>"إعدادات استخدام البطارية"</li>\n\n"لن تفقد أي بيانات تتعلّق بالتطبيقات."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"إعادة ضبط التطبيقات"</string>
<string name="manage_space_text" msgid="9013414693633572277">"إدارة المساحة"</string>
<string name="filter" msgid="9039576690686251462">"تصفية"</string>
@@ -2450,7 +2452,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"إعادة ضبط الإعدادات"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"تمت إعادة ضبط إعدادات حجم الشاشة والنص."</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"هل تريد إعادة ضبط حجم الشاشة والنص؟"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ستتم إعادة ضبط إعداداتك المفضّلة لحجم الشاشة والنص على الإعدادات الأصلية للهاتف."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ستتم إعادة ضبط إعداداتك المفضّلة لحجم الشاشة والنص على الإعدادات الأصلية للهاتف."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ستتم إعادة ضبط إعداداتك المفضّلة لحجم الشاشة والنص على الإعدادات الأصلية للجهاز اللوحي."</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"إعادة الضبط"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"هل خطّطت لعطلة نهاية الأسبوع؟"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"سأذهب إلى الشاطئ. ما رأيك في الذهاب معي؟"</string>
@@ -3086,6 +3089,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"لم يتم استخدام البطارية منذ آخر عملية شحن كاملة."</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"لم يتم استخدام البطارية في آخر 24 ساعة."</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"مستخدمون آخرون"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"يستند تقدير شحن البطارية المتبقي على استخدام الجهاز"</string>
<string name="estimated_time_left" msgid="948717045180211777">"الوقت التقديري المتبقي"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"إلى أن يتم الشحن بالكامل"</string>
@@ -3175,6 +3179,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"كلمات مهمة وتفاعل كامل"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"تحويل النص إلى كلام ببساطة"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"سيكون بمقدور خدمة الإدخال الصوتي هذه أداء مراقبة صوتية دائمة، علاوة على التحكم في التطبيقات الممكن بها ميزة الصوت نيابة عنك. وتتبع هذه الخدمة تطبيق <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. هل ترغب في تفعيل استخدام هذه الخدمة؟"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"إعدادات التعرّف على الجهاز فقط"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"التعرّف على الجهاز فقط"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"التعرف على الكلام على الجهاز فقط"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"المحرّك المفضّل"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"إعدادات المحرك"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"معدل سرعة الكلام وطبقة الصوت"</string>
@@ -3583,6 +3590,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"حذف"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"سيتم حذف كل التطبيقات والبيانات في هذه الجلسة."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"إزالة"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"الضيف (أنت)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"المستخدمون"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"مستخدمون آخرون"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"حذف نشاط الضيف"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"حذف جميع تطبيقات وبيانات وضع الضيف عند الخروج منه"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"هل تريد حذف نشاط وضع الضيف؟"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ستُحذف الآن التطبيقات والبيانات من جلسة الضيف هذه. بالإضافة إلى ذلك، ستُحذف جميع أنشطة الضيف المستقبلية في كل مرّة تخرج فيها من وضع الضيف."</string>
<string name="user_enable_calling" msgid="264875360626905535">"تفعيل المكالمات الهاتفية"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"تفعيل المكالمات الهاتفية والرسائل القصيرة"</string>
<string name="user_remove_user" msgid="8468203789739693845">"حذف حساب المستخدم"</string>
@@ -4183,21 +4197,21 @@
<string name="notification_switch_label" msgid="8029371325967501557">"جميع إشعارات \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"جميع إشعارات \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="default_notification_assistant" msgid="243718059890346442">"الإشعارات التكيّفية"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="zero"><xliff:g id="NUMBER_1">%,d</xliff:g> إشعار تقريبًا في اليوم</item>
- <item quantity="two">إشعاران (<xliff:g id="NUMBER_1">%,d</xliff:g>) تقريبًا في اليوم</item>
- <item quantity="few"><xliff:g id="NUMBER_1">%,d</xliff:g> إشعارات تقريبًا في اليوم</item>
- <item quantity="many"><xliff:g id="NUMBER_1">%,d</xliff:g> إشعارًا تقريبًا في اليوم</item>
- <item quantity="other"><xliff:g id="NUMBER_1">%,d</xliff:g> إشعار تقريبًا في اليوم</item>
- <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> إشعار تقريبًا في اليوم</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="zero">حوالي <xliff:g id="NUMBER_1">%,d</xliff:g> إشعار في اليوم</item>
+ <item quantity="two">حوالي إشعارين في يوم (<xliff:g id="NUMBER_1">%,d</xliff:g>)</item>
+ <item quantity="few">حوالي <xliff:g id="NUMBER_1">%,d</xliff:g> إشعارات في اليوم</item>
+ <item quantity="many">حوالي <xliff:g id="NUMBER_1">%,d</xliff:g> إشعارًا في اليوم</item>
+ <item quantity="other">حوالي <xliff:g id="NUMBER_1">%,d</xliff:g> إشعار في اليوم</item>
+ <item quantity="one">حوالي إشعار واحد في اليوم (<xliff:g id="NUMBER_0">%d</xliff:g>)</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="zero"><xliff:g id="NUMBER_1">%,d</xliff:g> إشعار تقريبًا في الأسبوع</item>
- <item quantity="two">إشعاران (<xliff:g id="NUMBER_1">%,d</xliff:g>) تقريبًا في الأسبوع</item>
- <item quantity="few"><xliff:g id="NUMBER_1">%,d</xliff:g> إشعارات تقريبًا في الأسبوع</item>
- <item quantity="many"><xliff:g id="NUMBER_1">%,d</xliff:g> إشعارًا تقريبًا في الأسبوع</item>
- <item quantity="other"><xliff:g id="NUMBER_1">%,d</xliff:g> إشعار تقريبًا في الأسبوع</item>
- <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> إشعار تقريبًا في الأسبوع</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="zero">حوالي <xliff:g id="NUMBER_1">%,d</xliff:g> إشعار في الأسبوع</item>
+ <item quantity="two">حوالي إشعارين في الأسبوع (<xliff:g id="NUMBER_1">%,d</xliff:g>)</item>
+ <item quantity="few">حوالي <xliff:g id="NUMBER_1">%,d</xliff:g> إشعارات في الأسبوع</item>
+ <item quantity="many">حوالي <xliff:g id="NUMBER_1">%,d</xliff:g> إشعارًا في الأسبوع</item>
+ <item quantity="other">حوالي <xliff:g id="NUMBER_1">%,d</xliff:g> إشعار في الأسبوع</item>
+ <item quantity="one">حوالي إشعار واحد في الأسبوع (<xliff:g id="NUMBER_0">%d</xliff:g>)</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"أبدًا"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"إشعارات التطبيقات والأجهزة"</string>
@@ -5591,7 +5605,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"عدم اتخاذ أي إجراء"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"اهتزاز"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"كتم الصوت"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"لتفعيل الإعداد، عليك أولاً تغيير \"الضغط مع الاستمرار على زر التشغيل\" إلى قائمة زر التشغيل."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"لتفعيل الخيار، عليك أولاً تغيير إعداد \"الضغط مع الاستمرار على زر التشغيل\" إلى قائمة زر التشغيل."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"تفاصيل الشبكة"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"اسم جهازك مرئي للتطبيقات على هاتفك. ويمكن أيضًا للآخرين الاطّلاع على اسم جهازك عند الاتصال بأجهزة تتضمّن بلوتوث أو الاتصال بشبكة Wi-Fi أو إعداد نقطة اتصال Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"الأجهزة"</string>
@@ -5890,15 +5904,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"التحكّم بالجهاز"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"البطاقات والتذاكر"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"البطاقات والتذاكر"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"الضغط مع الاستمرار على زر التشغيل"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"الضغط مع الاستمرار لفتح تطبيق \"مساعد Google\""</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"الضغط مع الاستمرار لفتح قائمة زر التشغيل"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"إمكانية الضغط مع الاستمرار غير مفعّلة."</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"اضغط باستمرار على زر التشغيل."</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"اضغط مع الاستمرار على زر التشغيل للوصول لقائمة زر التشغيل."</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"قائمة زر التشغيل"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"المساعد الرقمي"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"الوصول إلى المساعد الرقمي"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"الوصول إلى قائمة زر التشغيل"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"للاستخدام، عليك ضبط قفل الشاشة أولاً."</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"الضغط مع الاستمرار لفتح \"مساعد Google\""</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"تشغيل \"مساعد Google\" عن طريق الضغط مع الاستمرار على زر التشغيل"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"قائمة زر التشغيل وحالات الطوارئ:\nاضغط على زرَّي التشغيل ورفع الصوت في آنٍ واحد."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"منع الرنين:\nالاختصار متاح في قائمة مفتاح مستوى الصوت."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"قائمة زر التشغيل:\nاضغط على زر التشغيل وزر رفع مستوى الصوت في نفس الوقت."</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"منع الرنين:\nاضغط على أحد زرَّي التحكّم بمستوى الصوت لاستخدام الاختصار."</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"مدة الضغط والضغط مع الاستمرار"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"يمكنك تعديل حساسية الضغطة من خلال اختيار مدة الضغط والضغط مع الاستمرار على زر التشغيل."</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"ضغطة قصيرة"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 10de7a1..5e6f233 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"তেওঁ Pixel Imprint ব্যৱহাৰ কৰাৰ সময়ত, তেওঁৰ ফিংগাৰপ্ৰিণ্টৰ মডেলটো আপডে’ট কৰিবলৈ প্ৰতিচ্ছবিসমূহ ব্যৱহাৰ কৰা হয়। আপোনাৰ শিশুৰ ফিংগাৰপ্ৰিণ্টৰ মডেলটো সৃষ্টি কৰিবলৈ ব্যৱহাৰ কৰা প্ৰতিচ্ছবি কেতিয়াও ষ্ট’ৰ কৰা নহয়, কিন্তু ফিংগাৰপ্ৰিণ্টৰ মডেলটো ফ’নটোত সুৰক্ষিতভাৱে ষ্ট’ৰ কৰা হয় আৰু সেইয়া কেতিয়াও ফ’নটোৰ পৰা আঁতৰি নাযায়। আটাইবোৰ প্ৰক্ৰিয়া আপোনাৰ ফ’নটোত সুৰক্ষিতভাৱে সম্পাদন কৰা হয়।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"আপুনি যিকোনো সময়তে ছেটিঙলৈ গৈ নিজৰ ফিংগাৰপ্ৰিণ্টৰ প্ৰতিচ্ছবি আৰু মডেলটো মচিব পাৰে অথবা ফিংগাৰপ্ৰিণ্ট আনলক অফ কৰিব পাৰে। ফিংগাৰপ্ৰিণ্টৰ প্ৰতিচ্ছবি আৰু মডেলসমূহ আপুনি মচি নেপেলোৱালৈকে আপোনাৰ ফ’নত ষ্ট’ৰ হৈ থাকে।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"আপুনি আৰু আপোনাৰ শিশুৱে যিকোনো সময়তে ছেটিঙলৈ গৈ তেওঁৰ ফিংগাৰপ্ৰিণ্টৰ প্ৰতিচ্ছবি আৰু মডেলটো মচিব পাৰে অথবা ফিংগাৰপ্ৰিণ্টৰ দ্বাৰা আনলক কৰাৰ সুবিধাটো অফ কৰিব পাৰে। ফিংগাৰপ্ৰিণ্টৰ প্ৰতিচ্ছবি আৰু মডেলসমূহ মচি নেপেলোৱালৈকে ফ’নটোত ষ্ট’ৰ হৈ থাকে।"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"আপুনি নিবিচাৰিলেও আপোনাৰ ফ’নটো আনলক হ\'ব পাৰে, যেনে কোনোবাই এইটো আপোনাৰ আঙুলিৰ আগত দাঙি ধৰিলে।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"আপুনি নিবিচাৰিলেও আপোনাৰ ফ’নটো আনলক হ\'ব পাৰে, যেনে কোনোবাই এইটো আপোনাৰ আঙুলিৰ আগত দাঙি ধৰিলে।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"আপুনি নিবিচাৰিলেও আপোনাৰ টেবেলেটটো আনলক হ’ব পাৰে, যেনে কোনোবাই এইটো আপোনাৰ আঙুলিত লগাই দিলে।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"আপুনি নিবিচাৰিলেও আপোনাৰ ডিভাইচটো আনলক হ’ব পাৰে, যেনে কোনোবাই এইটো আপোনাৰ আঙুলিত লগাই দিলে।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"তেওঁ নিবিচাৰিলেও আপোনাৰ শিশুৰ ফ’নটো আনলক কৰিব পৰা যায়, যেনে কোনোবাই এইটো তেওঁৰ আঙুলিত লগাই দিলে।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"সকলোতকৈ ভাল ফলাফল পাবলৈ, Made for Google বুলি প্ৰমাণিত এটা স্ক্ৰীনৰ সুৰক্ষা প্ৰদানকাৰী ব্যৱহাৰ কৰক। অন্য স্ক্ৰীনৰ সুৰক্ষা প্ৰদানকাৰীৰ সৈতে আপোনাৰ ফিংগাৰপ্ৰিণ্টে কাম নকৰিব পাৰে।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"সকলোতকৈ ভাল ফলাফল পাবলৈ, Made for Google বুলি প্ৰমাণিত এটা স্ক্ৰীনৰ সুৰক্ষা প্ৰদানকাৰী ব্যৱহাৰ কৰক। অন্য স্ক্ৰীনৰ সুৰক্ষা প্ৰদানকাৰীৰ সৈতে আপোনাৰ শিশুৰ ফিংগাৰপ্ৰিণ্টে কাম নকৰিব পাৰে।"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ডিভাইচ আৰু ফিংগাৰপ্ৰিণ্ট ছেন্সৰ অৱস্থানৰ সৈতে চিত্ৰণ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"নাম"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ঠিক"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"পুনৰ চেষ্টা কৰক"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"মচক"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"ছেন্সৰটো স্পৰ্শ কৰক"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"আপোনাৰ আঙুলিটো ছেন্সৰটোত ৰাখক আৰু এটা কম্পন অনুভৱ কৰাৰ পিছত আঁতৰাওক"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"সম্পন্ন হ’ল"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"অ\'হ, এইটো ছেন্সৰ নহয় দেই"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"আপোনাৰ ফ\'নটোৰ পিছফালে থকা ছেন্সৰটো স্পৰ্শ কৰক৷ আপোনাৰ তৰ্জনী আঙুলি ব্যৱহাৰ কৰক৷"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"ছেটআপ সম্পূৰ্ণ নহ\'ল"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"ফিংগাৰপ্ৰিণ্ট অন্তৰ্ভুক্ত কৰাৰ সময় উকলিল। পুনৰাই চেষ্টা কৰক।"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"ফিংগাৰপ্ৰিণ্ট ছেটআপ কৰাৰ সময় উকলি গৈছে"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"এতিয়া পুনৰ চেষ্টা কৰক অথবা পাছত ছেটিঙত আপোনাৰ ফিংগাৰপ্ৰিণ্ট ছেট আপ কৰক"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ফিংগাৰপ্ৰিণ্ট যোগ দিব পৰা নগ\'ল। পুনৰ চেষ্টা কৰক বা বেলেগ এটা আঙুলি ব্যৱহাৰ কৰক।"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"অইন এটা ফিংগাৰপ্ৰিণ্ট যোগ কৰক"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"পৰৱৰ্তী"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"আপোনাৰ ফ’নটো কাষ্টমাইজ কৰক"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"বিভিন্ন শৈলী, ৱালপেপাৰ আৰু অধিক বস্তু ব্যৱহাৰ কৰি চাওক"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"স্ক্ৰীন ছেভাৰ"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"স্ক্ৰীনছেভাৰ"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"স্ক্ৰীন ছেভাৰ ব্যৱহাৰ কৰক"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"চাৰ্জ কৰোঁতে বা ডক কৰি থওঁতে"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"কোনোবা এটা"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"চাৰ্জ কৰি থকাৰ সময়ত"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ডক হৈ থাকোঁতে"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"কেতিয়াও নহয়"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"অফ হৈ আছে"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ফ\'নটো ড’ক আৰু/বা সুপ্ত অৱস্থাত থাকিলে যি হয় তাক নিয়ন্ত্ৰণ কৰিবলৈ, স্ক্ৰীন ছেভাৰ অন কৰক৷"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"ষ্টাৰ্ট কৰাৰ সময়"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"বৰ্তমান ব্যৱহৃত স্ক্ৰীন ছেভাৰ"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ছেটিং"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"স্বয়ংক্ৰিয় উজ্জ্বলতা"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"সক্ৰিয় কৰিবলৈ দাঙক"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"স্তিমিত ডিছপ্লে’"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"এটা পিন ছেট কৰক"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"কৰ্মস্থানৰ বাবে এটা পিন ছেট কৰক"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"এটা আৰ্হি ছেট কৰক"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"অতিৰিক্ত সুৰক্ষাৰ বাবে, ডিভাইচটো আনলক কৰিবলৈ এটা আৰ্হি ছেট কৰক"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"কৰ্মস্থানৰ বাবে এটা আৰ্হি ছেট কৰক"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰিবলৈ পাছৱৰ্ড ছেট কৰক"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ফিংগাৰপ্ৰিণ্ট ব্যৱহাৰ কৰিবলৈ আৰ্হি দিয়ক"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"জৰুৰীকালীন এপ্"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"এপৰ অগ্ৰাধিকাৰসমূহ ৰিছেট কৰক"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"এপৰ অগ্ৰাধিকাৰসমূহ ৰিছেট কৰিবনে?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ই এইসমূহৰ আটাইবোৰ অগ্ৰাধিকাৰ ৰিছেট কৰিব:\n\n"<li>"অক্ষম কৰি থোৱা এপ্"</li>\n<li>"অক্ষম কৰি থোৱা এপ্ জাননী"</li>\n<li>"কাৰ্যৰ ডিফ’ল্ট এপ্লিকেশ্বন"</li>\n<li>"এপৰ নেপথ্য ডেটা সীমাবদ্ধকৰণ"</li>\n<li>"যিকোনো অনুমতিৰ সীমাবদ্ধকৰণ"</li>\n\n"আপুনি কোনো এপৰ ডেটা নেহেৰুৱায়।"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ই এইসমূহৰ আটাইবোৰ অগ্ৰাধিকাৰ ৰিছেট কৰিব:\n\n"<li>"অক্ষম কৰি থোৱা এপ্সমূহ"</li>\n<li>"অক্ষম কৰি থোৱা এপ্ সম্পৰ্কীয় জাননীসমূহ"</li>\n<li>"বিভিন্ন কাৰ্য সম্পাদনৰ ডিফ’ল্ট এপ্লিকেশ্বনসমূহ"</li>\n<li>"এপৰ বাবে নেপথ্যৰ ডেটাৰ সীমাবদ্ধতা"</li>\n<li>"যিকোনো অনুমতিৰ সীমাবদ্ধতা"</li>\n<li>"বেটাৰীৰ ব্যৱহাৰৰ ছেটিং"</li>\n\n"আপুনি কোনো এপ্ ডেটা নেহেৰুৱায়।"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"এপ্ ৰিছেট কৰক"</string>
<string name="manage_space_text" msgid="9013414693633572277">"ঠাই পৰিচালনা কৰক"</string>
<string name="filter" msgid="9039576690686251462">"ফিল্টাৰ"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"ছেটিং ৰিছেট কৰক"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ডিছপ্লে’ৰ আকাৰ আৰু পাঠৰ ছেটিং ৰিছেট কৰা হ’ল"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ডিছপ্লে’ৰ আকাৰ আৰু পাঠ ৰিছেট কৰিবনে?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"আপোনাৰ ডিছপ্লে’ৰ আকাৰ আৰু পাঠৰ অগ্ৰাধিকাৰ ফ’নটোৰ মূল ছেটিঙলৈ ৰিছেট হ’ব"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"আপোনাৰ ডিছপ্লে’ৰ আকাৰ আৰু পাঠৰ অগ্ৰাধিকাৰ ফ’নটোৰ মূল ছেটিঙলৈ ৰিছেট হ’ব"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"আপোনাৰ ডিছপ্লে’ৰ আকাৰ আৰু পাঠৰ অগ্ৰাধিকাৰ টেবলেটটোৰ মূল ছেটিঙলৈ ৰিছেট হ’ব"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"ৰিছেট কৰক"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"সপ্তাহান্তত কিবা কৰাৰ পৰিকল্পনা কৰিছে নেকি?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"সমুদ্ৰতীৰলৈ গৈ আছোঁ। লগত যাব বিচাৰে নেকি?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"শেষবাৰ সম্পূৰ্ণ চাৰ্জ হোৱাৰ পৰা ব্যৱহাৰ কৰা নাই"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"যোৱা ২৪ ঘণ্টাত ব্যৱহাৰ কৰা নাই"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"অন্য ব্যৱহাৰকাৰী"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"আপোনাৰ ডিভাইচৰ ব্যৱহাৰৰ ভিত্তিত বাকী থকা বেটাৰিৰ পৰিমাণ নিৰ্ণয় হয়"</string>
<string name="estimated_time_left" msgid="948717045180211777">"বাকী থকা মোটামুটি সময়"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"সম্পূৰ্ণৰূপে চ্চাৰ্জ নোহোৱা পৰ্যন্ত"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"পূৰ্ণ হটৱৰ্ড আৰু ভাব-বিনিময়"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"সৰল কথনৰ পৰা পাঠ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"এই কণ্ঠধ্বনি ইনপুট সেৱাটোৱে আপোনাৰ হৈ সদা-সক্ৰিয় কণ্ঠধ্বনি নিৰীক্ষণ আৰু কণ্ঠধ্বনি-সক্ষম এপ্লিকেশ্বনবিলাক নিয়ন্ত্ৰণ কৰিবলৈ সক্ষম হ\'ব। ইয়াক <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>ৰ পৰা লাভ কৰা হৈছে। এই সেৱাটো সক্ষম কৰিব বিচাৰেনে?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"ডিভাইচত থকা চিনাক্তকৰণ সুবিধাটোৰ ছেটিং"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"ডিভাইচত থকা চিনাক্তকৰণ সুবিধাটোৰ ছেটিং"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"ডিভাইচত থকা কথন চিনাক্তকৰণ সুবিধাটোৰ ছেটিং"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"অগ্ৰাধিকাৰপ্ৰাপ্ত ইঞ্জিন"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"ইঞ্জিনৰ ছেটিং"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"কথা কোৱাৰ হাৰ আৰু পিটচ্"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"মচক"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"এই ছেছনৰ আটাইবোৰ এপ্ আৰু ডেটা মচা হ\'ব।"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"আঁতৰাওক"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"অতিথি (আপুনি)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ব্যৱহাৰকাৰী"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"অন্য ব্যৱহাৰকাৰী"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"অতিথিৰ ছেশ্বনত কৰা কাৰ্যকলাপ মচক"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"অতিথি ম’ডৰ পৰা বাহিৰ হওঁতে আটাইবোৰ অতিথি এপ্ আৰু ডেটা মচক"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"অতিথিৰ কাৰ্যকলাপ মচিবনে?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"এতিয়া এই অতিথিৰ ছেশ্বনৰ এপ্ আৰু ডেটা মচা হ’ব আৰু আপুনি অতিথি ম’ডৰ পৰা প্ৰতিবাৰ বাহিৰ হওঁতে ভৱিষ্যতে কৰা আটাইবোৰ অতিথিৰ কাৰ্যকলাপ মচা হ’ব।"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ফ\'ন কল অন কৰক"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ফ\'ন কল আৰু এছএমএছ অন কৰক"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ব্যৱহাৰকাৰীজন মচক"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"ৰ আটাইবোৰ জাননী"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>ৰ আটাইবোৰ জাননী"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"অভিযোজিত জাননী"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~প্ৰতিদিনে <xliff:g id="NUMBER_1">%,d</xliff:g>টা জাননী</item>
- <item quantity="other">~প্ৰতিদিনে <xliff:g id="NUMBER_1">%,d</xliff:g>টা জাননী</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">প্ৰতি দিনে প্ৰায় <xliff:g id="NUMBER_1">%,d</xliff:g> টা জাননী</item>
+ <item quantity="other">প্ৰতি দিনে প্ৰায় <xliff:g id="NUMBER_1">%,d</xliff:g> টা জাননী</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~প্ৰতি সপ্তাহে <xliff:g id="NUMBER_1">%,d</xliff:g>টা জাননী</item>
- <item quantity="other">~প্ৰতি সপ্তাহে <xliff:g id="NUMBER_1">%,d</xliff:g>টা জাননী</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">প্ৰতি সপ্তাহে প্ৰায় <xliff:g id="NUMBER_1">%,d</xliff:g> টা জাননী</item>
+ <item quantity="other">প্ৰতি সপ্তাহে প্ৰায় <xliff:g id="NUMBER_1">%,d</xliff:g> টা জাননী</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"কেতিয়াও পঠোৱা নহয়"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ডিভাইচ আৰু এপৰ জাননী"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"একো নকৰিব"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"কম্পন"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"মিউট"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"সক্ষম কৰিবলৈ, প্ৰথমতে \"পাৱাৰ বুটামটো টিপি ধৰি ৰাখক\"টো পাৱাৰ মেনুলৈ সলনি কৰক।"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"সক্ষম কৰিবলৈ, প্ৰথমতে \"পাৱাৰ বুটামটো টিপি ধৰি ৰাখক\"টো পাৱাৰ মেনুলৈ সলনি কৰক।"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"নেটৱৰ্কৰ সবিশেষ"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"আপোনাৰ ডিভাইচটোৰ নাম আপোনাৰ ফ’নটোত থকা এপ্সমূহৰ বাবে দৃশ্যমান। আপুনি ব্লুটুথ ডিভাইচৰ সৈতে সংযোগ কৰোঁতে, ৱাই-ফাই নেটৱৰ্কৰ সৈতে সংযোগ কৰোঁতে অথবা ৱাই-ফাই হটস্পট ছেট আপ কৰোঁতেও এইটো অন্য লোকে দেখা পাব পাৰে।"</string>
<string name="devices_title" msgid="649715719278562515">"ডিভাইচসমূহ"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ডিভাইচৰ নিয়ন্ত্ৰণসমূহ"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"কাৰ্ড আৰু পাছসমূহ"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"কাৰ্ড আৰু পাছসমূহ"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"পাৱাৰ বুটামটো টিপি ধৰি ৰাখক"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistantৰ বাবে টিপি ধৰি ৰাখক"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"পাৱাৰ মেনুখনৰ বাবে টিপি ধৰি ৰাখক"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Assistant আৰম্ভ কৰিবলৈ পাৱাৰ বুটামটো টিপি ধৰি ৰখাৰ সুবিধাটো অক্ষম কৰা হৈছে"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"পাৱাৰ বুটামটো টিপি ধৰি ৰাখক"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"এক্সেছ কৰিবলৈ পাৱাৰ বুটামটো টিপি ধৰি ৰাখক"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"পাৱাৰ মেনু"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ডিজিটেল সহায়ক"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ডিজিটেল সহায়ক এক্সেছ কৰক"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"পাৱাৰ মেনু এক্সেছ কৰক"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ব্যৱহাৰ কৰিবলৈ প্ৰথমে এটা স্ক্ৰীন লক ছেট কৰক"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistantৰ বাবে টিপি ধৰি ৰাখক"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"পাৱাৰ বুটাম টিপি ধৰি ৰাখি Assistant সক্ৰিয় কৰক"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"পাৱাৰ আৰু জৰুৰীকালীন মেনু:\nপাৱাৰ আৰু ভলিউম বঢ়োৱা বুটাম একেলগে টিপক।"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"ৰিং কৰাত বাধা দিয়ক:\nভলিউমৰ মেনুখনত শ্বৰ্টকাট উপলব্ধ।"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"পাৱাৰ মেনু:\nপাৱাৰ বুটামটো আৰু ভলিউম বঢ়োৱা বুটামটো একেলেগে টিপক"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"ৰিং কৰাত বাধা দিয়ক:\nশ্বৰ্টকাটটোৰ বাবে ভলিউমৰ এটা বুটাম টিপক"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"টিপি ধৰি ৰখাৰ সময় অৱধি"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"পাৱাৰ বুটামটো কিমান সময়লৈ টিপি ধৰি ৰাখিব লাগে সেয়া বাছনি কৰি সংবেদনশীলতা মিলাওক"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"চুটি"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 29228ca..5dff238 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Pixel Imprint istifadə etdikdə, onun barmaq izi modelini güncəlləmək üçün şəkillərdən istifadə olunur. Övladınızın barmaq izi modelini yaratmaq üçün istifadə edilən şəkillər heç vaxt saxlanılmır, lakin barmaq izi modeli telefonda təhlükəsiz qaydada saxlanılır və heç vaxt telefondan başqa yerə göndərilmir. Bütün emal prosesi telefonda təhlükəsiz qaydada baş verir."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Ayarlarda istənilən vaxt barmaq izi şəkilləri və modelinizi silə, yaxud Barmaq izi ilə kiliddən çıxarmanı deaktiv edə bilərsiniz. Barmaq izi şəkilləri və modelləri siz onları silənə qədər telefonunuzda saxlanılır."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Siz və övladınız ayarlarda istənilən vaxt barmaq izi şəkilləri və modelinizi silə, yaxud Barmaq izi ilə kiliddən çıxarmanı deaktiv edə bilərsiniz. Barmaq izi şəkilləri və modelləri onları silənə qədər telefonda saxlanılır."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"İstəmədiyiniz zaman telefonunuzun kilidi açıla bilər, məsələn kimsə onu barmağınıza tutaraq aça bilər."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"İstəmədiyiniz zaman telefonunuzun kilidi açıla bilər, məsələn kimsə onu barmağınıza tutaraq aça bilər."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"İstəmədiyiniz zaman planştinizin kilidi açıla bilər, məsələn kimsə onu barmağınıza tutaraq aça bilər."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"İstəmədiyiniz zaman cihazınızın kilidi açıla bilər, məsələn kimsə onu barmağınıza tutaraq aça bilər."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Övladınız istəmədiyi zaman telefonun kilidi açıla bilər, məsələn kimsə onu övladınızın barmağına tutaraq aça bilər."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Ən yaxşı nəticələr üçün \"Google üçün hazırlanıb\" sertifikatlı ekran qoruyucusu istifadə edin. Digər ekran qoruyucuları ilə barmaq iziniz işləməyə bilər."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Ən yaxşı nəticələr üçün \"Google üçün hazırlanıb\" sertifikatlı ekran qoruyucusu istifadə edin. Digər ekran qoruyucuları ilə uşağınızın barmaq izi işləməyə bilər."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Cihaz və barmaq izi sensoru ilə illustrasiya"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Ad"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Yenə sınayın"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Silin"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Sensora toxunun"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Barmağı sensora qoyub titrəmə hiss edənə qədər saxlayın"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Hazırdır"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ups, bu sensor deyil"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Telefonun arxasındakı sensora toxunun."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Qeydiyyat tamamlanmadı"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Barmaq izi qeydiyyatı üçün vaxt limiti başa çatdı. Yenidən cəhd edin."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Barmaq izi ayarlama vaxtı bitdi"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"İndi yenidən cəhd edin, yaxud daha sonra Ayarlarda barmaq izinizi ayarlayın"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Barmaq izi qeydiyyatı işləmədi. Yenidən cəhd edin və ya başqa barmaq istifadə edin."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Başqasını əlavə edin"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Növbəti"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Telefonunuzu fərdiləşdirin"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Fərqli üslub, divar kağızı və s. sınayın"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Ekran qoruyucu"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ekran qoruyucu"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Ekran qoruyucusundan istifadə edin"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Şarj ərzində və ya dok-stansiyada"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Hər ikisi"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Şarj ərzində"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Dok-stansiyada"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Heç vaxt"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Qapalı"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Telefon doklanmış və/və ya yatan zaman baş verənlərə nəzarət edin, ekran qoruyucunu aktiv edin."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Başlama vaxtı"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Cari ekran qoruyucu"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Ayarlar"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Avtomatik parlaqlıq"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Oyatmaq üçün qaldırın"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ətraf mühit displeyi"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN ayarlayın"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"İş PIN kodu ayarlayın"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Model ayarlayın"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Əlavə təhlükəsizlik məqsədilə cihazı kiliddən çıxarmaq üçün model təyin edin"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"İş modeli ayarlayın"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Barmaq izi üçün parol seçin"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Qrafik açar hazırlayın"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Təcili tətbiq"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Tətbiq tərcihləri sıfırlanıb"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Tətbiq tərcihləri sıfırlansın?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Bu, aşağıdakılar üçün bütün tərcihləri sıfırlayacaq:\n\n"<li>" Deaktiv edilmiş tətbiqlər"</li>\n<li>"Deaktiv edilmiş tətbiq bildirişləri"</li>\n<li>"Əməliyyatlar üçün defolt tətbiqlər"</li>\n<li>"Tətbiqlər üçün arxa fon məlumatlarının məhdudlaşdırılması"</li>\n<li>"İstənilən icazə məhdudiyyətləri"</li>\n\n"Hər hansı tətbiq məlumatınız silinməyəcək."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Bu, aşağıdakılar üçün bütün tərcihləri sıfırlayacaq:\n\n"<li>" Deaktiv edilmiş tətbiqlər"</li>\n<li>"Deaktiv edilmiş tətbiq bildirişləri"</li>\n<li>"Əməliyyatlar üçün defolt tətbiqlər"</li>\n<li>"Tətbiqlər üçün arxa fon məlumatlarının məhdudlaşdırılması"</li>\n<li>"İstənilən icazə məhdudiyyətləri"</li>\n<li>"Batareya istifadəsi ayarları"</li>\n\n"Hər hansı tətbiq məlumatınız silinməyəcək."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Tətbiqləri sıfırla"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Boşluğu idarə edin"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Ayarları sıfırlayın"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Displey ölçüsü və mətn ayarları sıfırlandı"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Displey ölçüsü və mətn sıfırlansın?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Displey ölçüsü və mətn tərcihləriniz telefonun orijinal ayarlarına sıfırlanacaq"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Displey ölçüsü və mətn tərcihləriniz telefonun orijinal ayarlarına sıfırlanacaq"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Displey ölçüsü və mətn tərcihləriniz planşetin orijinal ayarlarına sıfırlanacaq"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Sıfırlayın"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Həftə sonu planlarınız var?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Çimərliyə gedirəm. Mənə qoşulmaq istəyirsən?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Sonuncu tam şarjdan etibarən istifadə edilməyib"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Son 24 saat ərzində istifadə edilməyib"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Digər istifadəçilər"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Qalan enerji səviyyəsi cihazı işlətməkdən asılıdır"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Təxmini qalan vaxt"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Tam enerji yığana kimi"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Tam əmr sözü və qarşılıqlı təsir"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Sadəcə nitqdən mətnə"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Bu səs daxiletməsi həmişə aktiv səs monitorinqi həyata keçirmək və adınızdan fəaliyyət göstərən səs icazəli tətbiqləri idarə etmək imkanında olacaq. <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> tətbiqinə aiddir. Bu xidmətin istifadəsinə icazə verilsin?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Cihazda tanıma ayarları"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Cihazda tanıma"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Cihazda nitqin tanınması"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Defolt nitq sintezatoru"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Mühərrik ayarları"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Nitq sürəti və tonu"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Silin"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Bu sessiyada bütün tətbiqlər və data itəcək."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Yığışdır"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Qonaq (Siz)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"İstifadəçilər"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Digər istifadəçilər"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Qonaq fəaliyyətini silin"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Qonaq rejimindən çıxarkən bütün qonaq tətbiqləri və datasını silin"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Qonaq fəaliyyəti silinsin?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Bu qonaq sessiyasındakı tətbiqlər və data indi silinəcək və hər dəfə qonaq rejimindən çıxanda bütün gələcək qonaq fəaliyyəti silinəcək"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Telefon zəngləri aktivləşdirilsin"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefon zəngləri & SMS-i aktivləşdir"</string>
<string name="user_remove_user" msgid="8468203789739693845">"İstifadəçini silin"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Bütün \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" bildirişləri"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Bütün <xliff:g id="APP_NAME">%1$s</xliff:g> bildirişləri"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptiv bildirişlər"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">Gün ərzində ~<xliff:g id="NUMBER_1">%,d</xliff:g> bildiriş</item>
- <item quantity="one">Gün ərzində ~<xliff:g id="NUMBER_0">%d</xliff:g> bildiriş</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Gündə təqribən <xliff:g id="NUMBER_1">%,d</xliff:g> bildiriş</item>
+ <item quantity="one">Gündə təqribən <xliff:g id="NUMBER_0">%d</xliff:g> bildiriş</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">Həftə ərzində ~<xliff:g id="NUMBER_1">%,d</xliff:g> bildiriş</item>
- <item quantity="one">Həftə ərzində ~<xliff:g id="NUMBER_0">%d</xliff:g> bildiriş</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Həftədə təqribən <xliff:g id="NUMBER_1">%,d</xliff:g> bildiriş</item>
+ <item quantity="one">Həftədə təqribən <xliff:g id="NUMBER_0">%d</xliff:g> bildiriş</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Heç vaxt"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Cihaz və tətbiq bildirişləri"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Heç nə etməyin"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrasiya"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Susdurun"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Aktiv etmək üçün \"Qidalanma düyməsini basıb saxlamanı\" enerji menyusuna dəyişin."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Aktiv etmək üçün \"Qidalanma düyməsini basıb saxlamanı\" qidalanma menyusuna dəyişin."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Şəbəkə detalları"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Cihazın adı telefondakı tətbiqlərdə görünəcək. Bluetooth cihazlarına qoşulduqda və ya Wi-Fi hotspotu ayarladıqda digərləri də onu görə bilər."</string>
<string name="devices_title" msgid="649715719278562515">"Cihazlar"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"cihaz kontrolları"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kartlar və giriş talonları"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kartlar və giriş talonları"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Qidalanma düyməsini basıb saxlama"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistent üçün basıb saxlama"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Qidalanma menyusu üçün basıb saxlama"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Basıb saxlama deaktivdir"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Qidalanma düyməsini basıb saxlayın"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Giriş üçün Qidalanma düyməsini basıb saxlayın"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Qidalanma düyməsi menyusu"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Rəqəmsal assistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Rəqəmsal assistentə giriş"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Qidalanma menyusuna giriş"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"İstifadə etmək üçün ilk öncə ekran kilidini ayarlayın"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Basıb saxlayaraq Assistenti işə salın"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Qidalanma düyməsini basıb saxlayaraq Assistenti işə salın"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Qidalanma & Fövqəladə Hal Menyusu:\nQidalanma və Səsin artırılması düymələrini eyni anda basın."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Zəng çalmanın qarşısını alın:\nSəs səviyyəsi menyusunda qısayol verilmişdir."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Qidalanma menyusu:\nQidalanma düyməsini və səsi artırma düyməsini eyni anda basın"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Zəngin qarşısını almaq:\nQısayol üçün səs düyməsini basın"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Basıb saxlama müddəti"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Qidalanma düyməsinə nə qədər basıb saxlamağı seçərək həssaslığı tənzimləyin"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Qısa"</string>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 3dccb9c..3685136 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -468,7 +468,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Kada koristi Pixel Imprint, slike se koriste za ažuriranje modela otiska prsta. Slike koje se koriste za pravljenje detetovog modela otiska prsta nikada se ne čuvaju, ali se model otiska prsta bezbedno čuva na telefonu i ostaje samo na njemu. Ceo proces obrade se bezbedno odvija na telefonu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Možete da izbrišete slike i model otiska prsta ili da isključite Otključavanje otiskom prsta u bilo kom trenutku u Podešavanjima. Slike i modeli otisaka prstiju se čuvaju na telefonu dok ih ne izbrišete."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Vi i dete možete da izbrišete slike i model otiska prsta ili da isključite otključavanje otiskom prsta u bilo kom trenutku u podešavanjima. Slike i modeli otisaka prstiju se čuvaju na telefonu dok ih ne izbrišete."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefon može da se otključa kada to ne nameravate. Na primer, ako ga neko približi vašem prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefon može da se otključa kada to ne nameravate. Na primer, ako ga neko približi vašem prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tablet može da se otključa kada to ne nameravate. Na primer, ako ga neko približi vašem prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Uređaj može da se otključa kada to ne nameravate. Na primer, ako ga neko približi vašem prstu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefon deteta može da se otključa kada dete to ne namerava. Na primer, ako neko približi telefon detetovom prstu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Da biste imali najbolje rezultate, koristite zaštitu za ekran sa sertifikatom Napravljeno za Google. Otisak prsta možda neće raditi sa drugim zaštitama za ekran."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Da biste imali najbolje rezultate, koristite zaštitu za ekran sa sertifikatom Napravljeno za Google. Otisak prsta deteta možda neće raditi sa drugim zaštitama za ekran."</string>
@@ -518,6 +520,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustracija sa uređajem i lokacijom senzora za otisak prsta"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Naziv"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Potvrdi"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Probaj ponovo"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Izbriši"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Dodirnite senzor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Stavite prst na senzor i podignite ga kada osetite vibraciju"</string>
@@ -595,8 +598,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Gotovo"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ups, to nije senzor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Dodirnite senzor na zadnjoj strani telefona. Koristite kažiprst."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registracija nije završena"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Vremensko ograničenje za registraciju otiska prsta je isteklo. Probajte ponovo."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Vreme za podešavanje otiska prsta je isteklo"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Probajte ponovo odmah ili podesite otisak prsta kasnije u Podešavanjima"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Registracija otiska prsta nije uspela. Probajte ponovo ili koristite drugi prst."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Dodajte još jedan"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Dalje"</string>
@@ -1468,17 +1471,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Prilagodite telefon"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Probajte drugačije stilove, pozadine i još toga"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Čuvar ekrana"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"čuvar ekrana"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Koristi čuvar ekrana"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Tokom punjenja ili na baznoj stanici"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Bilo koje od ova dva"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Tokom punjenja"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Dok je na baznoj stanici"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nikada"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Isključeno"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Da biste kontrolisali šta se dešava kada je telefon na baznoj stanici i/ili u stanju spavanja, uključite čuvar ekrana."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kada da počne"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Trenutni čuvar ekrana"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Podešavanja"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatski nivo osvetljenosti"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Podigni za aktivaciju"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambijentalni ekran"</string>
@@ -1968,6 +1969,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Podesite PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Podesite PIN za poslovni profil"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Podesite šablon"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Radi veće bezbednosti podesite šablon za otključavanje uređaja"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Podesite šablon za poslovni profil"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Podesite lozinku da biste koristili otisak"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Da biste koristili otisak prsta, podesite šablon"</string>
@@ -2123,7 +2125,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplikacija za hitne slučajeve"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Resetuj podešavanja aplikacija"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Želite da resetujete podešavanja aplikacije?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Ovim ćete resetovati sva podešavanja za:\n\n"<li>"Onemogućene aplikacije"</li>\n<li>"Obaveštenja o onemogućenim aplikacijama"</li>\n<li>"Podrazumevane aplikacije za radnje"</li>\n<li>"Ograničenja za pozadinske podatke za aplikacije"</li>\n<li>"Sva ograničenja za dozvole"</li>\n\n"Nećete izgubiti nikakve podatke aplikacije."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Ovim ćete resetovati sva podešavanja za:\n\n"<li>"Onemogućene aplikacije"</li>\n<li>"Obaveštenja o onemogućenim aplikacijama"</li>\n<li>"Podrazumevane aplikacije za radnje"</li>\n<li>"Ograničenja za pozadinske podatke za aplikacije"</li>\n<li>"Sva ograničenja za dozvole"</li>\n<li>"Podešavanja potrošnje baterije"</li>\n\n"Nećete izgubiti nikakve podatke aplikacije."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Resetuj aplikacije"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Upravljaj prostorom"</string>
<string name="filter" msgid="9039576690686251462">"Filtriraj"</string>
@@ -2378,7 +2380,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Resetuj podešavanja"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Podešavanja veličine ekrana i teksta su resetovana"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Želite da resetujete veličinu prikaza i tekst?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Veličina prikaza i podešavanja teksta će se resetovati na prvobitna podešavanja telefona"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Veličina prikaza i podešavanja teksta će se resetovati na prvobitna podešavanja telefona"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Veličina prikaza i podešavanja teksta će se resetovati na prvobitna podešavanja tableta"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Resetuj"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Imaš li planove za vikend?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Idem na plažu. Hoćeš sa mnom?"</string>
@@ -2972,6 +2975,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Nema korišćenja od poslednjeg potpunog punjenja"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nema korišćenja u poslednja 24 sata"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Ostali korisnici"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Procena preostalog nivoa napunjenosti baterije je zasnovana na korišćenju uređaja"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Procenjeno preostalo vreme"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Do potpunog punjenja"</string>
@@ -3061,6 +3065,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Cela aktuelna reč i interakcija"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Jednostavan govor u tekst"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ova usluga glasovnog unosa će moći umesto vas da obavlja konstantno glasovno praćenje i kontroliše aplikacije u kojima je omogućen glas. Ona je deo aplikacije <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Želite li da omogućite korišćenje ove usluge?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Podešavanja prepoznavanja na uređaju"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Prepoznavanje na uređaju"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Prepoznavanje govora na uređaju"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Željeni mehanizam"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Podešavanja mehanizma"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Brzina i jačina govora"</string>
@@ -3457,6 +3464,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Izbriši"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Sve aplikacije i podaci u ovoj sesiji će biti izbrisani."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Ukloni"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gost (vi)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Korisnici"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Ostali korisnici"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Izbriši aktivnosti gosta"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Izbrišite sve aplikacije i podatke gosta pri izlazu iz režima gosta"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Izbrisaćete aktivnosti gosta?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacije i podaci iz ove sesije gosta biće odmah izbrisane, a sve buduće aktivnosti gosta biće izbrisane svaki put kada izađete iz režima gosta"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Uključi telefonske pozive"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Uključi telefonske pozive i SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Izbrišite korisnika"</string>
@@ -4051,15 +4065,15 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Sva obaveštenja aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Sva obaveštenja aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Prilagodljiva obaveštenja"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenje dnevno</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenja dnevno</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenja dnevno</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Otprilike <xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenje dnevno</item>
+ <item quantity="few">Otprilike <xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenja dnevno</item>
+ <item quantity="other">Otprilike <xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenja dnevno</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenje nedeljno</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenja nedeljno</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenja nedeljno</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Otprilike <xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenje nedeljno</item>
+ <item quantity="few">Otprilike <xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenja nedeljno</item>
+ <item quantity="other">Otprilike <xliff:g id="NUMBER_1">%,d</xliff:g> obaveštenja nedeljno</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nikad"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Obaveštenja na uređajima i u aplikacijama"</string>
@@ -5339,7 +5353,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ne radi ništa"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibriraj"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Isključi zvuk"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Da biste omogućili ovo, prvo promenite opciju Pritisnite i zadržite dugme za uključivanje u meni dugmeta za uključivanje."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Da biste omogućili ovo, prvo promenite opciju Pritisnite i zadržite dugme za uključivanje u meni dugmeta za uključivanje."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalji o mreži"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Aplikacije na telefonu mogu da vide naziv uređaja. I drugi ljudi mogu da vide naziv uređaja mogu kada se povežete sa Bluetooth uređajima ili WiFi mrežom ili podesite WiFi hotspot."</string>
<string name="devices_title" msgid="649715719278562515">"Uređaji"</string>
@@ -5629,15 +5643,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"kontrole uređaja"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Karte i kartice"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"karte i kartice"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Pritisnite i zadržite dugme za uključivanje"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Pritisnite i zadržite za Pomoćnika"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Pritisnite i zadržite meni dugmeta za uključivanje"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Onemogućeno je pritiskanje i zadržavanje"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Pritisnite i zadržite dugme za uključivanje"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Pritisnite i zadržite dugme za uključivanje radi pristupa"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Meni dugmeta za uključivanje"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitalni pomoćnik"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Pristupajte digitalnom pomoćniku"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Pristupajte meniju dugmeta za uključivanje"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Da biste ovo koristili, prvo podesite zaključavanje ekrana"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Zadržite za Pomoćnik"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Pokrenite Pomoćnik tako što ćete zadržati dugme za uključivanje"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Meni dugmeta za uključivanje i za hitne slučajeve:\nIstovremeno pritisnite dugme za uključivanje i dugme za pojačavanje zvuka."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Spreči zvonjenje:\nPrečica je dostupna u meniju dugmeta za jačinu zvuka."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Meni dugmeta za uključivanje:\nPritisnite dugme za uključivanje i dugme za pojačavanje zvuka u isto vreme"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Sprečite zvono:\nPritisnite dugme za jačinu zvuka ako želite prečicu"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Koliko dugo da pritisnete i zadržite"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Prilagodite osetljivost tako što ćete odabrati koliko dugo treba da se pritisnete i zadržite dugme za uključivanje"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kratko"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 66cb723..858ab82 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -472,7 +472,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Калі дзіця ўжывае функцыю Pixel Imprint, відарысы выкарыстоўваюцца для абнаўлення мадэлі адбітка пальца. Відарысы, якія выкарыстоўваліся для стварэння мадэлі адбітка пальца дзіцяці, ніколі не захоўваюцца. На тэлефоне бяспечна захоўваецца толькі сама мадэль, і яна нікуды не адпраўляецца. Уся апрацоўка выконваецца толькі на тэлефоне."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Вы можаце ў любы час выдаліць відарысы і мадэль адбітка пальца ці выключыць разблакіраванне адбіткам пальца ў Наладах. Відарысы і мадэлі адбіткаў пальца будуць захоўвацца на вашым тэлефоне, пакуль вы іх не выдаліце."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Вы і ваша дзіця можаце ў любы час выдаліць відарысы і мадэль адбітка пальца ці выключыць разблакіраванне адбіткам пальца ў Наладах. Відарысы і мадэлі адбіткаў пальца будуць захоўвацца на тэлефоне, пакуль іх не выдаляць."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Ваш тэлефон можа быць разблакіраваны без вашага намеру, напрыклад, калі хтосьці паднясе яго да вашага пальца."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Ваш тэлефон можа быць разблакіраваны без вашага намеру, напрыклад, калі хтосьці паднясе яго да вашага пальца."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Ваш планшэт можа быць разблакіраваны без вашага намеру, напрыклад, калі хтосьці паднясе яго да вашага пальца."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Ваша прылада можа быць разблакіравана без вашага намеру, напрыклад, калі хтосьці паднясе яе да вашага пальца."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Тэлефон можна разблакіраваць, нават калі дзіця не збіралася гэта рабіць, напрыклад, калі хтосьці прыкладзе палец дзіцяці да тэлефона."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Каб атрымліваць найлепшыя вынікі, карыстайцеся ахоўнай плёнкай, якая мае сертыфікат \"Made for Google\". Калі выкарыстоўваць іншыя ахоўныя плёнкі, сканер адбіткаў пальцаў можа не працаваць."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Каб атрымліваць найлепшыя вынікі, карыстайцеся ахоўнай плёнкай, якая мае сертыфікат \"Made for Google\". Калі выкарыстоўваць іншыя ахоўныя плёнкі, сканер адбіткаў пальцаў вашага дзіцяці можа не працаваць."</string>
@@ -522,6 +524,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Відарыс, які паказвае, дзе размяшчаецца датчык адбіткаў пальцаў на прыладзе"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Імя"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ОК"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Паўтарыць спробу"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Выдаліць"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Дакраніцеся да сканера"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Прыкладзіце палец да сканера і ўтрымлівайце яго, пакуль не адчуеце вібрацыю"</string>
@@ -601,8 +604,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Гатова"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ой, гэта не датчык"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Указальным пальцам дакраніцеся да сэнсара на задняй панэлі тэлефона."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Рэгістрацыя не завершана"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Час на рэгістрацыю адбіткаў скончыўся. Паспрабуйце яшчэ раз."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Наладжванне адбітка пальца не завершана"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Паўтарыце спробу ці наладзьце адбітак пальца пазней у Наладах"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Рэгістрацыя адбітка не атрымалася. Калі ласка, паўтарыце спробу або выкарыстайце іншы палец."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Дадаць яшчэ адзін"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Далей"</string>
@@ -1490,17 +1493,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Наладзіць тэлефон"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Спрабуйце розныя стылі, шпалеры і іншае"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Экранная застаўка"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"застаўка"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Ужываць экранную застаўку"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Пакуль прылада зараджаецца ці падключана"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"У абодвух выпадках"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Падчас зарадкі"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Пры падключэнні"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Ніколі"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Выключана"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Каб кантраляваць тое, што адбываецца, калі тэлефон прыстыкаваны і/або знаходзіцца ў рэжыме сну, уключыце экранную застаўку."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Калі пачынаць"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Бягучая экранная застаўка"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Налады"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Аўтаматычная яркасць"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Абуджэнне пры падняцці"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Неактыўны рэжым экрана"</string>
@@ -1992,6 +1993,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Задайце PIN-код"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Задайце PIN-код для працоўнага профілю"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Задайце ўзор разблакіроўкі"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"У мэтах дадатковай бяспекі задайце ўзор разблакіроўкі прылады"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Задайце ўзор разблакіроўкі для працы"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Задайце пароль для выкарыстання адбітка"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Спачатку задайце ўзор"</string>
@@ -2149,7 +2151,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Праграма для экстранных сітуацый"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Скінуць налады праграм"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Скінуць налады праграм?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Будуць скінуты наступныя налады:\n\n"<li>" адключаныя праграмы;"</li>\n<li>"адключаныя апавяшчэнні праграм;"</li>\n<li>"стандартныя праграмы для дзеянняў;"</li>\n<li>"абмежаванні на фонавую перадачу даных для праграм;"</li>\n<li>"абмежаванні дазволаў."</li>\n\n"Даныя праграм не будуць выдалены."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Будуць скінуты наступныя налады:\n\n"<li>" адключаныя праграмы;"</li>\n<li>"адключаныя апавяшчэнні праграм;"</li>\n<li>"стандартныя праграмы для дзеянняў;"</li>\n<li>"абмежаванні на фонавую перадачу даных для праграм;"</li>\n<li>"абмежаванні дазволаў;"</li>\n<li>"налады выкарыстання зараду."</li>\n\n"Даныя праграм не будуць выдалены."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Скінуць праграмы"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Кіраванне вольным месцам"</string>
<string name="filter" msgid="9039576690686251462">"Фільтр"</string>
@@ -2404,7 +2406,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Скінуць налады"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Памер дысплэя і налады тэксту скінуты"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Скінуць памер дысплэя і налады тэксту?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Памер вашага дысплэя і параметры тэксту будуць скінуты да першапачатковых налад тэлефона"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Памер вашага дысплэя і параметры тэксту будуць скінуты да першапачатковых налад тэлефона"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Памер вашага дысплэя і параметры тэксту будуць скінуты да першапачатковых налад планшэта"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Скінуць"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Ёсць планы на выхадныя?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Мы збіраемся на пляж. Ці ёсць жаданне далучыцца?"</string>
@@ -3012,6 +3015,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Не выкарыстоўваўся з моманту апошняй поўнай зарадкі"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Не выкарыстоўваўся ў апошнія 24 гадз"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Іншыя карыстальнікі"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Ацэнка стану акумулятара заснавана на выкарыстанні прылады"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Прыблзіны час, які застаўся"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Да поўнай зарадкі"</string>
@@ -3101,6 +3105,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Поўная падтрымка рэжыму «гарачага слова» і ўзаемадзеянне"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Простае распазнанне гаворкі"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Гэта служба галасавога ўводу зможа ажыццяўляць пастаянны маніторынг голасу і кантраляваць дадаткі з падтрымкай галасавых каманд ад вашага імя. Гэта служба дадатку <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Уключыць гэту службу?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Налады распазнавання на прыладзе"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Распазнаванне на прыладзе"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Распазнаванне маўлення на прыладзе"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Выбраны модуль"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Налады модуля"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Хуткасць і тон маўлення"</string>
@@ -3501,6 +3508,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Выдаліць"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Усе праграмы і даныя гэтага сеанса будуць выдалены."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Выдаліць"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Госць (вы)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Карыстальнікі"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Іншыя карыстальнікі"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Выдаліць звесткі пра дзеянні госця"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Выдаляць усе праграмы і даныя госця ў час выхаду з гасцявога рэжыму"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Выдаліць звесткі пра дзеянні госця?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Праграмы і даныя гэтага гасцявога сеанса будуць выдалены, і ўсе будучыя звесткі пра дзеянні госця будуць выдаляцца падчас кожнага выхаду з гасцявога рэжыму"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Уключыць тэлефонныя выклікі"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Уключыць тэлефонныя выклікі і SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Выдаліць карыстальніка"</string>
@@ -4097,17 +4111,17 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Усе апавяшчэнні праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Усе апавяшчэнні праграмы \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Адаптыўныя апавяшчэнні"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнне ў дзень</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнні ў дзень</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнняў у дзень</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэння ў дзень</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Прыблізна <xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнне ў дзень</item>
+ <item quantity="few">Прыблізна <xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнні ў дзень</item>
+ <item quantity="many">Прыблізна <xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнняў у дзень</item>
+ <item quantity="other">Прыблізна <xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэння ў дзень</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнне ў тыдзень</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнні ў тыдзень</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнняў у тыдзень</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэння ў тыдзень</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Прыблізна <xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнне ў тыдзень</item>
+ <item quantity="few">Прыблізна <xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнні ў тыдзень</item>
+ <item quantity="many">Прыблізна <xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэнняў у тыдзень</item>
+ <item quantity="other">Прыблізна <xliff:g id="NUMBER_1">%,d</xliff:g> апавяшчэння ў тыдзень</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Ніколі"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Апавяшчэнні прылад і праграм"</string>
@@ -5425,7 +5439,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Нічога не рабіць"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Вібрацыя"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Выключыць гук"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Каб уключыць, спачатку змяніце ў меню кнопкі сілкавання параметр \"Націск і ўтрыманне кнопкі сілкавання\"."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Каб уключыць гэту функцыю, спачатку змяніце ў меню кнопкі сілкавання наладу \"Націск і ўтрыманне кнопкі сілкавання\"."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Інфармацыя аб сетцы"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Назва вашай прылады даступная для праграм на вашым тэлефоне. Яе таксама будуць бачыць іншыя людзі, калі вы падключыцеся да прылад праз Bluetooth, падключыцеся да сеткі Wi-Fi ці наладзіце хот-спот Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Прылады"</string>
@@ -5718,15 +5732,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"элементы кіравання прыладай"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Карткі і талоны"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"карткі і талоны"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Націск і ўтрыманне кнопкі сілкавання"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Націск і ўтрыманне для выкліку Памочніка"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Націск і ўтрыманне для выкліку меню кнопкі сілкавання"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Націск і ўтрыманне выключаны"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Націск і ўтрыманне кнопкі сілкавання"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Што адбудзецца пры націску і ўтрыманні кнопкі сілкавання"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Меню кнопкі сілкавання"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Лічбавы памочнік"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Доступ да лічбавага памочніка"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Доступ да меню кнопкі сілкавання"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Спачатку трэба наладзіць блакіроўку экрана"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Выклік Памочніка доўгім націсканнем"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Для выкліку Памочніка ўтрымлівайце націснутай кнопку сілкавання"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Меню кнопкі сілкавання і экстранных выклікаў:\nадначасова націсніце кнопку сілкавання і павелічэння гучнасці."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Прадухіліць званок:\nярлык даступны ў меню гучнасці."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Меню кнопкі сілкавання:\nадначасова націсніце кнопку сілкавання і кнопку павелічэння гучнасці"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Адключэнне гуку званка:\nнацісніце кнопку гучнасці, каб скарыстаць ярлык"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Працягласць націску і ўтрымання"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Наладзіць адчувальнасць, выбраўшы працягласць націску і ўтрымання кнопкі сілкавання"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Коратка"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 78a8abd..4daef42 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Изображенията от взаимодействията на детето ви с Pixel Imprint се използват за актуализиране на модела на отпечатъка му. Изображенията, ползвани за създаването на този модел, не се запазват, но той се съхранява надеждно на телефона и никога не го напуска. Цялото обработване се извършва надеждно на телефона."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"По всяко време можете да изтриете изображенията и модела на отпечатъка си или да изключите функцията за отключване с отпечатък от настройките. Изображенията и моделите се съхраняват на телефона ви, докато не ги изтриете."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Вие и детето ви можете по всяко време да изтриете изображенията и модела на отпечатъка му или да изключите функцията за отключване с отпечатък от настройките. Изображенията и моделите се съхраняват на телефона, докато не бъдат изтрити."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Телефонът ви може да бъде отключен неволно, ако например някой го допре до пръста ви."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Телефонът ви може да бъде отключен неволно, ако например някой го допре до пръста ви."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Таблетът ви може да бъде отключен, без да желаете, например ако някой го допре до пръста ви."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Устройството ви може да бъде отключено, без да желаете, например ако някой го допре до пръста ви."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Телефонът на детето ви може да бъде отключен неволно, ако например някой допре устройството до пръста му."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"За най-добри резултати използвайте защитен слой на екрана, който е със сертификат „Създадено за Google“. Отпечатъкът ви може да не работи с други защитни слоеве."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"За най-добри резултати използвайте защитен слой на екрана, който е със сертификат „Създадено за Google“. Отпечатъкът на детето ви може да не работи с други защитни слоеве."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Илюстрация с устройството и местоположението на сензора за отпечатък"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Име"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ОK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Нов опит"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Изтриване"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Докоснете сензора"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Поставете пръста си върху сензора и го вдигнете, след като усетите вибриране"</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Готово"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ами сега! Това не е сензорът"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"С показалеца си докоснете сензора на гърба на телефона."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Регистрирането не бе завършено"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Времевото ограничение за регистриране на отпечатък бе достигнато. Опитайте отново."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Настройването на отпечатък не завърши навреме"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Опитайте отново сега или настройте отпечатъка си по-късно от настройките"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Регистрирането на отпечатък не бе успешно. Опитайте отново или използвайте друг пръст."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Добавяне на друг"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Напред"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Персонализиране на телефона ви"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Изпробвайте различни стилове, тапети и др."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Скрийнсейвър"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"скрийнсейвър"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Използване на скрийнсейвър"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"При зареждане или връзка с докинг станция"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"И в двата случая"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"При зареждане"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"При свързване с докинг станция"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Никога"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Изкл."</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"За да контролирате какво се случва, когато телефонът е свързан с докинг станция и/или е в спящ режим, включете скрийнсейвъра."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Кога да стартира функцията"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Текущ скрийнсейвър"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Настройки"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Автоматична яркост"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Събуждане при повдигане"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Дисплей, открояващ важни неща"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Задаване на ПИН код"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Задаване на служебен ПИН код"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Задаване на фигура"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"За допълнителна сигурност задайте фигура за отключване на устройството"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Задаване на служебна фигура"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Задайте парола, за да ползвате отпечатък"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Задайте фигура, за да ползвате отпечатък"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Приложение за спешни случаи"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Нулиране на предпочитанията за приложенията"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Нулиране на предпочитанията?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Това действие ще нулира всички предпочитания за:\n\n"<li>"деактивираните приложения;"</li>\n<li>"известията за деактивирани приложения;"</li>\n<li>"стандартните приложения за действия;"</li>\n<li>"ограниченията за данни на заден план за приложенията;"</li>\n<li>" ограниченията за всички разрешения."</li>\n\n"Няма да загубите данни от приложенията."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Това действие ще нулира всички предпочитания за:\n\n"<li>"деактивираните приложения;"</li>\n<li>"известията за деактивирани приложения;"</li>\n<li>"стандартните приложения за действия;"</li>\n<li>"ограниченията за данни на заден план за приложенията;"</li>\n<li>"ограниченията за всички разрешения;"</li>\n<li>"настройките за използване на батерията."</li>\n\n"Няма да загубите данни от приложенията."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Нулиране на приложенията"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Управление на място"</string>
<string name="filter" msgid="9039576690686251462">"Филтриране"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Нулиране на настройките"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Настройките за размер на текста и елементите на екрана бяха нулирани"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Да се нулира ли размерът на текста и елементите на екрана?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Предпочитанията ви за размера на текста и елементите на екрана ще се нулират към оригиналните настройки на телефона"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Предпочитанията ви за размера на текста и елементите на екрана ще се нулират към оригиналните настройки на телефона"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Предпочитанията ви за размера на текста и елементите на екрана ще се нулират към оригиналните настройки на таблета"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Нулиране"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Имаш ли планове за уикенда?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Отивам на плажа. Искаш ли да дойдеш?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Батерията не е използвана след последното пълно зареждане"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Батерията не е използвана през последните 24 ч"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Други потребители"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Прогнозата за оставащата батерия е въз основа на използването на устройството ви"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Приблизително оставащо време"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"До пълно зареждане"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Цялостна услуга за активиращи думи и взаимодействие"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Обикновено разпознаване на говор"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Тази услуга за гласово въвеждане ще може да извършва постоянно наблюдение на говора и да контролира от ваше име всички поддържащи говор приложения. Източникът й е <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Да се активира ли използването на услугата?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Настройки за локалното разпознаване"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Локално разпознаване"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Локално разпознаване на говор"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Предпочитана машина"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Настройки на машината"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Скорост и височина на речта"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Изтриване"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Всички приложения и данни в тази сесия ще бъдат изтрити."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Премахване"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Гост (вие)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Потребители"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Други потребители"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Изтриване на активността като гост"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Изтриване на всички приложения и данни при изход от режима на гост"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Изтриване на активността като гост?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Приложенията и данните от тази сесия като гост ще бъдат изтрити сега, а цялата бъдеща активност като гост ще се изтрива всеки път, когато излезете от режима на гост"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Включване на телефонните обаждания"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Включване на тел. обаждания и SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Изтриване на потребителя"</string>
@@ -4009,13 +4023,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Всички известия от: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Всички известия от: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Адаптивни известия"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> известия на ден</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> известие на ден</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Около <xliff:g id="NUMBER_1">%,d</xliff:g> известия на ден</item>
+ <item quantity="one">Около <xliff:g id="NUMBER_0">%d</xliff:g> известие на ден</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> известия на седмица</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> известие на седмица</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Около <xliff:g id="NUMBER_1">%,d</xliff:g> известия на седмица</item>
+ <item quantity="one">Около <xliff:g id="NUMBER_0">%d</xliff:g> известие на седмица</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Никога"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Известия в приложенията и на устройствата"</string>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Да не се прави нищо"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Вибриране"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Спиране на звука"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"За да активирате, първо променете „Натиснете и задръжте бутона за включване/изключване“ към менюто за включване/изключване."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"За да активирате, първо променете „Натиснете и задръжте бутона за захранване“ към менюто за включване/изключване."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Подробности за мрежата"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Името на устройството ви е видимо за приложенията на телефона ви. То може да се вижда и от други хора, когато се свържете с устройства с Bluetooth или настроите точка за достъп до Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Устройства"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"контроли за устройството"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Карти и пропуски"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"карти и пропуски"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Натиснете и задръжте бутона за включване/изключване"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Натиснете и задръжте за Асистент"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Натиснете и задръжте за менюто за включване/изключване"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Опцията за натискане и задържане е деактивирана"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Натиснете и задръжте бутона за захранване"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"За достъп натиснете и задръжте бутона за захранване"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Меню за включване/изключване"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Дигитален асистент"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Достъп до дигиталния асистент"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Достъп до менюто за включване/изключване"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"За да използвате, първо задайте заключване на екрана"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Задържане за Асистент"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Задействайте Асистент, като задържите бутона за включване/изключване"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Меню за включване/изключване и при спешни случаи:\nНатиснете едновременно бутона за включване/изключване и този за увеличаване на силата на звука."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Предотвратяване на звъненето:\nВ менюто за силата на звука е налице пряк път."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Меню за включване/изключване:\nЕдновременно натиснете бутона за захранване и този за увеличаване на силата на звука"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Предотвратяване на звъненето:\nЗа целта натиснете бутон за силата на звука"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Продължителност на натискането и задържането"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Коригирайте чувствителността, като изберете колко дълго трябва да задържите натиснат бутона за включване/изключване"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Кратко"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 7adadea..40a2275 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"সে Pixel Imprint ব্যবহার করার সময়, ফিঙ্গারপ্রিন্ট মডেল আপডেট করার জন্য সেইসব ছবি ব্যবহৃত হয়। আপনার সন্তানের ফিঙ্গারপ্রিন্ট মডেল তৈরির জন্য ব্যবহৃত ছবি কখনও সেভ করে রাখা হয় না, তবে ফোনে ফিঙ্গারপ্রিন্ট মডেল নিরাপদে সেভ করে রাখা হয় এবং কখনও ফোন থেকে মুছে যায় না। ফোনে সবকটি প্রসেস নিরাপদে করা হয়।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"সেটিংস থেকে যেকোনও সময় আপনি আঙ্গুলের ছাপের ছবি এবং মডেল মুছে ফেলতে পারেন অথবা ফিঙ্গারপ্রিন্ট আনলক ফিচার বন্ধ করতে পারেন। আপনি মুছে না দেওয়া পর্যন্ত আঙ্গুলের ছাপের ছবি এবং মডেল ফোনে থেকে যায়।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"আপনি ও আপনার সন্তান ফিঙ্গারপ্রিন্টের ছবি ও মডেল মুছে ফেলতে পারেন অথবা যে কোনও সময় সেটিংস থেকে \'ফিঙ্গারপ্রিন্ট আনলক\' ফিচারটি বন্ধ করে দিতে পারেন। মুছে না ফেলা পর্যন্ত ফিঙ্গারপ্রিন্টের ছবি ও মডেল ফোনে সেভ করা থাকে।"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"আপনি না চাইলেও, ফোনটি আপনার আঙুলে ছুঁইয়ে অন্য কেউ আপনার ফোন আনলক করতে পারেন।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"আপনি না চাইলেও, ফোনটি আপনার আঙুলে ছুঁইয়ে অন্য কেউ আপনার ফোন আনলক করতে পারেন।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"আপনি না চাইলেও, ট্যাবলেট আপনার আঙুলে ছুঁইয়ে অন্য কেউ সেটি আনলক করতে পারেন।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"আপনি না চাইলেও, ডিভাইস আপনার আঙুলে ছুঁইয়ে অন্য কেউ সেটি আনলক করতে পারেন।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"আপনার সন্তান না চাইলেও তার ফোন আনলক হয়ে যেতে পারে, যেমন যদি কেউ তার আঙুলটি ফিঙ্গারপ্রিন্টের নির্দিষ্ট জায়গায় ধরে।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"সবচেয়ে ভাল ফলাফল পেতে, Google-এর জন্য তৈরি হিসেবে সার্টিফিকেট প্রাপ্ত একটি স্ক্রিন প্রোটেকটর ব্যবহার করুন। অন্য কোনও স্ক্রিন প্রোটেকটর ব্যবহার করলে, আপনার আঙ্গুলের ছাপ কাজ নাও করতে পারে।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"সবচেয়ে ভাল ফলাফল পেতে, Google-এর জন্য তৈরি হিসেবে সার্টিফিকেট প্রাপ্ত একটি স্ক্রিন প্রোটেকটর ব্যবহার করুন। অন্য কোনও স্ক্রিন প্রোটেকটর ব্যবহার করলে, আপনার সন্তানের আঙ্গুলের ছাপ কাজ নাও করতে পারে।"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ডিভাইস এবং আঙ্গুলের ছাপ সেন্সরের অবস্থানের সাথে চিত্রালংকরণ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"নাম"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ঠিক আছে"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"আবার চেষ্টা করুন"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"মুছুন"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"সেন্সর স্পর্শ করুন"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"সেন্সরে আপনার আঙ্গুল রাখুন এবং আপনি একটি কম্পন অনুভব করার পর সরিয়ে নিন"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"সম্পন্ন"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"ওহো, সেটি সেন্সর ছিল না"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"আপনার ফোন এর পিছনে থাকা সেন্সর স্পর্শ করুন। আপনার তর্জনী ব্যবহার করুন।"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"এনরোল করা যায়নি"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"আঙ্গুলের ছাপ তালিকাভুক্তির সময়সীমা শেষ হয়েছে। আবার চেষ্টা করুন৷"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"ফিঙ্গারপ্রিন্ট সেট-আপ টাইম-আউট হয়ে গেছে"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"এখন চেষ্টা করুন অথবা পরে সেটিংস থেকে আপনার ফিঙ্গারপ্রিন্ট সেট-আপ করুন"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"আঙ্গুলের ছাপ তালিকাভুক্তিকরণ কাজ করেনি৷ আবার চেষ্টা করুন অথবা আলাদা কোনো আঙুল ব্যবহার করুন৷"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"আরেকটি জুড়ুন"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"পরবর্তী"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"আপনার ফোন কাস্টমাইজ করুন"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"বিভিন্ন স্টাইল, ওয়ালপেপার ও অনেক কিছু ব্যবহার করুন"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"স্ক্রিন সেভার"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"স্ক্রিন সেভার"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"স্ক্রিন সেভার ব্যবহার করা"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"চার্জ অথবা ডক করার সময়"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"উভয় ক্ষেত্রেই"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"চার্জ করার সময়"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ডক করে রাখার সময়"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"কখনই নয়"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"বন্ধ আছে"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ফোন ডক করা এবং/অথবা নিদ্রা মোডে থাকাকালীন কি হচ্ছে তা নিয়ন্ত্রণের জন্য স্ক্রিন সেভার চালু করুন।"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"কখন শুরু করবেন"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"বর্তমান স্ক্রিন সেভার"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"সেটিংস"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"স্বয়ংক্রিয় উজ্জ্বলতা"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"সক্রিয় করতে লিফ্ট করুন"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"অ্যাম্বিয়েন্ট ডিসপ্লে"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"একটি পিন সেট করুন"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"একটি অফিস প্রোফাইল পিন সেট করুন"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"একটি প্যাটার্ন সেট করুন"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"অতিরিক্ত সুরক্ষার জন্য, ডিভাইসটি আনলক করতে একটি প্যাটার্ন সেট করুন"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"একটি অফিস প্রোফাইল প্যাটার্ন সেট করুন"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"আঙ্গুলের ছাপ ব্যবহার করার জন্য পাসওয়ার্ড সেট করুন"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"আঙ্গুলের ছাপ ব্যবহার করার জন্য প্যাটার্ন সেট করুন"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"জরুরি অ্যাপ্লিকেশান"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"অ্যাপের ক্ষেত্রে পছন্দগুলি রিসেট করুন"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"অ্যাপ পছন্দ রিসেট করবেন?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"এটি নিম্নলিখিত বিষয়গুলির সব পছন্দ রিসেট করবে:\n\n"<li>" বন্ধ করা আছে এমন অ্যাপ"</li>\n<li>" বন্ধ করা আছে এমন অ্যাপের বিজ্ঞপ্তি"</li>\n<li>" অ্যাকশনের জন্য ডিফল্ট অ্যাপ্লিকেশন"</li>\n<li>" অ্যাপের ক্ষেত্রে ব্যাকগ্রাউন্ড ডেটার সীমাবদ্ধতা"</li>\n<li>" যেকোনও রকম অনুমতির সীমাবদ্ধতা"</li>\n\n" আপনি কোনও অ্যাপের ডেটা হারাবেন না।"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"এর ফলে এই ধরনের সব পছন্দ রিসেট করা হবে :\n\n"<li>"বন্ধ করা অ্যাপ"</li>\n<li>"বন্ধ করা অ্যাপ সংক্রান্ত বিজ্ঞপ্তি"</li>\n<li>"অ্যাকশনের জন্য ডিফল্ট অ্যাপ্লিকেশন"</li>\n<li>"অ্যাপের জন্য ব্যাকগ্রাউন্ড ডেটা সংক্রান্ত বিধিনিষেধ"</li>\n<li>"যেকোনও অনুমতি সংক্রান্ত বিধিনিষেধ"</li>\n<li>"ব্যাটারির ব্যবহার সংক্রান্ত সেটিংস"</li>\n\n"আপনি কোনও অ্যাপ ডেটা হারাবেন না।"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"অ্যাপ রিসেট করুন"</string>
<string name="manage_space_text" msgid="9013414693633572277">"জায়গা পরিচালনা করুন"</string>
<string name="filter" msgid="9039576690686251462">"ফিল্টার"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"সেটিংস রিসেট করুন"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ডিসপ্লের সাইজ এবং টেক্সটের সেটিংস রিসেট করা হয়েছে"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ডিসপ্লে সাইজ ও টেক্সট রিসেট করবেন?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"আপনার ডিসপ্লে সাইজ ও টেক্সট সংক্রান্ত পছন্দ ফোনের আসল সেটিংসে রিসেট করা হবে"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"আপনার ডিসপ্লে সাইজ ও টেক্সট সংক্রান্ত পছন্দ ফোনের আসল সেটিংসে রিসেট করা হবে"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"আপনার ডিসপ্লে সাইজ ও টেক্সট সংক্রান্ত পছন্দ ট্যাবলেটের আসল সেটিংসে রিসেট করা হবে"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"রিসেট করুন"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"সপ্তাহান্তে কোনও প্ল্যান আছে?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"বিচে ঘুরতে যাচ্ছি। যোগ দিতে চান?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"শেষ বার সম্পূর্ণ চার্জ করার পরে আর ব্যাটারি ব্যবহার করা হয়নি"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"গত ২৪ ঘন্টায় ব্যাটারি আর ব্যবহার করা হয়নি"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"অন্যান্য ব্যবহারকারী"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"আপনার ডিভাইসের ব্যবহারের উপর ভিত্তি করে ব্যাটারি কতক্ষণ চলবে তার আনুমানিক হিসাব"</string>
<string name="estimated_time_left" msgid="948717045180211777">"আনুমানিক কতক্ষণ বাকি"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"সম্পূর্ণ চার্জ না হওয়া পর্যন্ত"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"পূর্ণ হটওয়ার্ড ও ইন্টারঅ্যাকশন"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"সাধারণ কথন থেকে পাঠ্যে"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"এই ভয়েস ইনপুট পরিষেবা আপনার হয়ে সর্বদা-চালু ভয়েস মনিটরিং সম্পাদন এবং ভয়েস সক্ষমিত অ্যাপ্লিকেশানগুলি নিয়ন্ত্রণ করতে পারবে। এটি <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> অ্যাপ্লিকেশান থেকে আসছে। এই পরিষেবার ব্যবহার সক্ষম করবেন?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"অন-ডিভাইস শনাক্তকরণ সেটিংস"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"অন-ডিভাইস শনাক্তকরণ"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"অন-ডিভাইস স্পিচ শনাক্তকরণ"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"পছন্দের ইঞ্জিন"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"ইঞ্জিনের সেটিংস"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"কথা বলার রেট ও পিচ"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"মুছুন"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"এই সেশনের সব অ্যাপ ও ডেটা মুছে ফেলা হবে।"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"সরান"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"অতিথি (আপনি)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ব্যবহারকারী"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"অন্যান্য ব্যবহারকারী"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"অতিথি অ্যাক্টিভিটি মুছুন"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"\'অতিথি মোড\' ছেড়ে বেরিয়ে আসার সময় সব অতিথি অ্যাপ ও ডেটা মুছুন"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"অতিথি অ্যাক্টিভিটি মুছবেন?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"এই অতিথি সেশন থেকে এখন অ্যাপ এবং ডেটা মুছে দেওয়া হবে ও আপনি প্রত্যেকবার \'অতিথি মোড\' ছেড়ে বেরিয়ে আসার সময় পরবর্তী সব অতিথি অ্যাক্টিভিটি মুছে যাবে"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ফোন কলের সুবিধা চালু করুন"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ফোন কল এবং এসএমএস চালু করবেন?"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ব্যবহারকারীর অ্যাকাউন্ট মুছে দিন"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"সমস্ত \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" বিজ্ঞপ্তি"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"সমস্ত <xliff:g id="APP_NAME">%1$s</xliff:g> সংক্রান্ত বিজ্ঞপ্তি"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"অ্যাডাপটিভ বিজ্ঞপ্তি"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g>টি বিজ্ঞপ্তি প্রতিদিন</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g>টি বিজ্ঞপ্তি প্রতিদিন</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">প্রতিদিন প্রায় <xliff:g id="NUMBER_1">%,d</xliff:g>টি বিজ্ঞপ্তি</item>
+ <item quantity="other">প্রতিদিন প্রায় <xliff:g id="NUMBER_1">%,d</xliff:g>টি বিজ্ঞপ্তি</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">প্রতি সপ্তাহে ~<xliff:g id="NUMBER_1">%,d</xliff:g>টি বিজ্ঞপ্তি</item>
- <item quantity="other">প্রতি সপ্তাহে ~<xliff:g id="NUMBER_1">%,d</xliff:g>টি বিজ্ঞপ্তি</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">প্রতি সপ্তাহে প্রায় <xliff:g id="NUMBER_1">%,d</xliff:g>টি বিজ্ঞপ্তি</item>
+ <item quantity="other">প্রতি সপ্তাহে প্রায় <xliff:g id="NUMBER_1">%,d</xliff:g>টি বিজ্ঞপ্তি</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"কখনও না"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ডিভাইস এবং অ্যাপ বিজ্ঞপ্তি"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"যেমন আছে থাক"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"কম্পন"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"মিউট"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"চালু করতে, আগে পাওয়ার মেনু থেকে \"পাওয়ার বোতাম প্রেস করে ধরে রাখুন\" বিকল্পটি পরিবর্তন করুন।"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"চালু করতে, আগে পাওয়ার মেনুতে \"পাওয়ার বোতাম প্রেস করে ধরে রাখুন\" বিকল্পটি পরিবর্তন করুন।"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"নেটওয়ার্কের বিবরণ"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"আপনার ফোনের অ্যাপে আপনার ডিভাইসের নাম দেখা যাবে। আপনি ব্লুটুথ ডিভাইসে বা ওয়াই-ফাই নেটওয়ার্কে কানেক্ট করলে অথবা ওয়াই-ফাই হটস্পট সেট আপ করলে এটি অন্যরাও হয়ত দেখতে পাবেন।"</string>
<string name="devices_title" msgid="649715719278562515">"ডিভাইস"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ডিভাইস কন্ট্রোল"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"কার্ড এবং পাস"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"কার্ড এবং পাস"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"\'পাওয়ার বোতাম\' প্রেস করে ধরে থাকুন"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant ব্যবহার করতে প্রেস করে ধরে থাকুন"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"\'পাওয়ার\' মেনু প্রেস করে ধরে থাকুন"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"\'প্রেস করে ধরে থাকা\' জেসচারটি বন্ধ করা আছে"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"পাওয়ার বোতাম প্রেস করে ধরে রাখুন"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"অ্যাক্সেসের জন্য পাওয়ার বোতাম প্রেস করে ধরে রাখুন"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"পাওয়ার মেনু"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ডিজিটাল অ্যাসিস্ট্যান্ট"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ডিজিটাল অ্যাসিস্ট্যান্ট অ্যাক্সেস করুন"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"পাওয়ার মেনু অ্যাক্সেস করুন"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ব্যবহার করার জন্য প্রথমে একটি স্ক্রিন লক সেট করুন"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant চালু করার জন্য পাওয়ার বোতাম প্রেস করে ধরে রাখুন"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"পাওয়ার বোতাম প্রেস করে ধরে রেখে Assistant চালু করুন"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"পাওয়ার ও ইমারজেন্সি মেনু:\nএকসাথে \'পাওয়ার\' এবং \'ভলিউম বাড়ানোর বোতাম\' প্রেস করুন।"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"রিং হওয়া বন্ধ করতে:\n\'ভলিউম\' মেনুতে শর্টকাট রয়েছে।"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"পাওয়ার মেনু:\nএকই সাথে পাওয়ার বোতাম ও ভলিউম বাড়ানোর বোতাম প্রেস করুন"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"রিং হওয়া প্রতিরোধ করুন:\nশর্টকার্ট ব্যবহার করার জন্য ভলিউমের বোতাম প্রেস করুন"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"বোতাম টিপে রাখার সময়"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"পাওয়ার বোতাম কতক্ষণ টিপে ধরে থাকবেন সেটি বেছে নিয়ে সেন্সিটিভিটি অ্যাডজাস্ট করুন"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"কম সময়ের জন্য"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 911ce0d..df554e0 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -468,7 +468,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Kada dijete koristi Pixel Imprint, slike će se koristiti da se ažurira njegov model otiska prsta. Slike koje se koriste da se kreira model otiska prsta djeteta se nikada ne pohranjuju, ali model otiska prsta se sigurno pohranjuje na telefonu i nikad ga ne napušta. Cjelokupna obrada se vrši sigurno na telefonu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Slike otiska prsta i model bilo kada možete izbrisati ili možete isključiti otključavanje otiskom prsta u Postavkama. Slike otiska prsta i modeli se pohranjuju na telefonu dok ih ne izbrišete."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Vi i vaše dijete možete bilo kada u Postavkama izbrisati slike otiska prsta djeteta i model ili isključiti otključavanje otiskom prsta. Slike otiska prsta i modeli će biti pohranjeni na telefonu dok ih ne izbrišete."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Vaš telefon se može otključati kada vam to nije namjera, npr. kada ga neko prinese vašem prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Vaš telefon se može otključati kada vam to nije namjera, npr. kada ga neko prinese vašem prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Vaš tablet se može otključati kada vam to nije namjera, naprimjer, kada ga neko prinese vašem prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Vaš uređaj se može otključati kada vam to nije namjera, naprimjer, kada ga neko prinese vašem prstu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefon vašeg djeteta se može otključati kada to djetetu nije namjera, npr. kada ga neko prinese prstu djeteta."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Za najbolje rezultate koristite zaštitu ekrana koja ima oznaku Proizvedeno za Google. Moguće je da vaš otisak prsta neće funkcionirati s drugim zaštitama ekrana."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Za najbolje rezultate koristite zaštitu ekrana koja ima oznaku Proizvedeno za Google. Moguće je da otisak prsta vašeg djeteta neće funkcionirati s drugim zaštitama ekrana."</string>
@@ -518,6 +520,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustracija sa uređajem i lokacijom senzora za otisak prsta"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Naziv"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Uredu"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Pokušajte ponovo"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Izbriši"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Dodirnite senzor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Stavite prst na senzor i podignite ga kad osjetite vibraciju"</string>
@@ -595,8 +598,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Gotovo"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ups, to nije senzor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Dodirnite senzor na poleđini telefona. Koristite kažiprst."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registracija nije dovršena"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Vrijeme za registraciju otiska prsta je isteklo. Pokušajte ponovo."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Vrijeme za postavljanje otiska je isteklo"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Pokušajte ponovo sada ili postavite otisak prsta kasnije u Postavkama"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Registracija otiska prsta nije uspjela. Pokušajte ponovo ili koristite drugi prst."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Dodajte još jedan"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Naprijed"</string>
@@ -1468,17 +1471,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Prilagodite telefon"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Isprobajte različite stilove, pozadinske slike i još mnogo toga"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Čuvar ekrana"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"čuvar ekrana"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Koristi čuvara ekrana"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Tokom punjenja ili kada je na priključnoj stanici"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Bilo koje"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Tokom punjenja"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Kada je na priključnoj stanici"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nikada"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Isključeno"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Za kontrolisanje dešavanja kada je telefon priključen i/ili dok miruje, uključi čuvara ekrana."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kada početi"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Trenutni čuvar ekrana"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Postavke"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatsko osvjetljenje"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Podignite za buđenje"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambijentalni prikaz"</string>
@@ -1968,6 +1969,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Postavite PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Postavite PIN radnog profila"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Postavite uzorak"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Za dodatnu sigurnost postavite uzorak da otključate uređaj"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Postavite uzorak radnog profila"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Da koristite otisak prsta, postavite lozinku"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Da koristite otisak prsta, postavite uzorak"</string>
@@ -2123,7 +2125,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplikacija za hitne situacije"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Vrati postavke aplikacije na zadano"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Vratiti postavke aplikacije na zadano?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Na ovaj način će se vratiti sve postavke na zadano za:\n\n"<li>"Onemogućene aplikacije"</li>\n<li>"Obavještenja za onemogućene aplikacije"</li>\n<li>"Zadane aplikacije za radnje"</li>\n<li>"Ograničenje pozadinskih podataka za aplikacije"</li>\n<li>"Sva ograničenja za odobrenja"</li>\n\n"Nećete izgubiti podatke iz aplikacija."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Ovim će se vratiti sve postavke na zadano za:\n\n"<li>"onemogućene aplikacije"</li>\n<li>"obavještenja za onemogućene aplikacije"</li>\n<li>"zadane aplikacije za radnje"</li>\n<li>"ograničenja pozadinskih podataka za aplikacije"</li>\n<li>"sva ograničenja za odobrenja"</li>\n<li>"postavke korištenja baterije"</li>\n\n"Nećete izgubiti podatke iz aplikacija."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Vrati aplikacije na zadano"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Upravljaj prostorom"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2378,7 +2380,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Vrati postavke na zadano"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Postavke veličine ekrana i teksta su poništene"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Vratiti veličinu ekrana i tekst na zadano?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Vaše preference za veličinu ekrana i tekst će se vratiti na originalne postavke telefona"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Vaše preference za veličinu ekrana i tekst će se vratiti na originalne postavke telefona"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Vaše postavke veličine ekrana i teksta će se vratiti na prvobitne postavke tableta"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Vrati na zadano"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Šta planiraš za vikend?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Idem na plažu. Želiš li sa mnom?"</string>
@@ -2972,6 +2975,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Nema korištenja od posljednje potpune napunjenosti"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nema korištenja za posljednja 24 h"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Drugi korisnici"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Procjena preostalog trajanja baterije zasnovana je na korištenju uređaja"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Procjena preostalog vremena"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Do potpune napunjenosti"</string>
@@ -3061,6 +3065,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Cela aktuelna reč i interakcija"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Jednostavno pretvaranje govora u tekst"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ova usluga za glasovni unos će biti u mogućnosti da obavlja uvijek uključeno praćenje glasa i da u vaše ime kontrolira aplikacije omogućene glasom. Ona dolazi iz <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> aplikacija. Omogućiti korištenje ove usluge?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Postavke prepoznavanja na uređaju"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Prepoznavanje na uređaju"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Prepoznavanje govora na uređaju"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Željeni alat"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Postavke programa"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Brzina govora i visina glasa"</string>
@@ -3457,6 +3464,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Izbriši"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Sve aplikacije i podaci iz ove sesije će se izbrisati."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Ukloniti"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gost (vi)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Korisnici"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Drugi korisnici"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Izbrišite aktivnost gosta"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Izbrisati sve aplikacije i podatke gosta pri izlasku iz načina rada za gosta"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Izbrisati aktivnost gosta?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacije i podaci iz ove sesije gosta će se izbrisati sada, a sve buduće aktivnosti gosta će se izbrisati svaki put kada napustite način rada za gosta"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Uključi telefonske pozive"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Uključi telefonske pozive i SMS-ove"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Izbriši korisnika"</string>
@@ -4051,15 +4065,15 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Sva obavještenja aplikacije \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Sva obavještenja aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Prilagodljiva obavještenja"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavještenje dnevno</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavještenja dnevno</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavještenja dnevno</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">O <xliff:g id="NUMBER_1">%,d</xliff:g> obavještenju na dan</item>
+ <item quantity="few">O <xliff:g id="NUMBER_1">%,d</xliff:g> obavještenja na dan</item>
+ <item quantity="other">O <xliff:g id="NUMBER_1">%,d</xliff:g> obavještenja na dan</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavještenje sedmično</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavještenja sedmično</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavještenja sedmično</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">O <xliff:g id="NUMBER_1">%,d</xliff:g> obavještenju sedmično</item>
+ <item quantity="few">O <xliff:g id="NUMBER_1">%,d</xliff:g> obavještenja sedmično</item>
+ <item quantity="other">O <xliff:g id="NUMBER_1">%,d</xliff:g> obavještenja sedmično</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nikada"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Obavještenja uređaja i aplikacija"</string>
@@ -5339,7 +5353,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ne čini ništa"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibracija"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Isključi zvuk"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Da omogućite, prvo promijenite \"Pritisnite i držite dugme za uključivanje\" u meni napajanja."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Da omogućite, najprije promijenite opciju \"Pritisnite i zadržite dugme za uključivanje\" u meni napajanja."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalji o mreži"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Aplikacije na vašem telefonu će moći vidjeti naziv vašeg uređaja. Također će ga moći vidjeti druge osobe prilikom povezivanja s Bluetooth uređajima i WiFi mrežom ili prilikom postavljanja WiFi pristupne tačke."</string>
<string name="devices_title" msgid="649715719278562515">"Uređaji"</string>
@@ -5629,15 +5643,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"kontrole uređaja"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kartice i propusnice"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kartice i propusnice"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Pritisnite i držite dugme za uključivanje"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Pritisnite i držite da pokrenete Asistenta"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Pritisnite i držite da otvorite meni napajanja"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Onemogućena je funkcija pritiska i zadržavanja"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Pritisnite i zadržite dugme za uključivanje"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Pritisnite i zadržite dugme za uključivanje da pristupite"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Meni napajanja"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitalni asistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Pristupite digitalnom asistentu"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Pristupite meniju napajanja"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Da koristite, prvo postavite zaključavanje ekrana"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Zadržavanje za aktiviranje Asistenta"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Aktivirajte Asistenta držanjem dugmeta za uključivanje"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Meni napajanja i hitnih službi:\nIstovremeno pritisnite dugme za uključivanje i dugme za pojačavanje zvuka."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Sprječavanje zvonjenja:\nPrečica je dostupna u meniju jačine zvuka."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Meni napajanja:\nistovremeno pritisnite dugme za uključivanje i dugme za pojačavanje zvuka"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Spriječite zvonjenje:\nza prečicu pritisnite dugme za jačinu zvuka"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Trajanje pritiska i držanja"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Podesite osjetljivost odabirom koliko dugo treba pritisnuti i držati dugme za uključivanje"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kratko"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 38f4f7d..112b427 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Quan fa servir Pixel Imprint, les imatges s\'utilitzen per actualitzar el seu model d\'empremta digital. Les imatges utilitzades per crear-lo no s\'emmagatzemen mai, però el model d\'empremta digital sí que s\'emmagatzema de manera segura i no surt del dispositiu. Tot el procés es fa de manera segura al telèfon."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Pots suprimir les imatges i el model de l\'empremta digital o desactivar el desbloqueig amb empremta digital en qualsevol moment a Configuració. Les imatges i els models d\'empremta digital s\'emmagatzemen al telèfon fins que els suprimeixes."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Tu i el teu fill podeu suprimir les imatges i el model de la seva empremta digital o desactivar Desbloqueig amb empremta digital en qualsevol moment a Configuració. Les imatges i els models d\'empremta digital s\'emmagatzemen al telèfon fins que se suprimeixin."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"El teu telèfon es pot desbloquejar sense voler, per exemple si algú te l\'acosta al dit."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"El teu telèfon es pot desbloquejar sense voler, per exemple si algú te l\'acosta al dit."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"La tauleta es pot desbloquejar sense voler; per exemple, si algú te l\'acosta al dit."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"El dispositiu es pot desbloquejar sense voler; per exemple, si algú te l\'acosta al dit."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"El telèfon del teu fill es pot desbloquejar sense voler, com quan algú li l\'apropi al dit."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Per obtenir els millors resultats, utilitza un protector de pantalla que tingui la certificació Made For Google. Si utilitzes altres protectors de pantalla, pot ser que la teva empremta digital no funcioni."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Per obtenir els millors resultats, utilitza un protector de pantalla que tingui la certificació Made For Google. Si utilitzes altres protectors de pantalla, pot ser que l\'empremta digital del teu fill o filla no funcioni."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Il·lustració amb la ubicació del sensor d\'empremtes digitals i de dispositiu"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nom"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"D\'acord"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Torna-ho a provar"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Suprimeix"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Toca el sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Col·loca el dit al sensor i aixeca\'l quan notis una vibració"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Fet"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Això no és el sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Toca el sensor situat a la part posterior amb el dit índex."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"No s\'ha completat el registre"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"S\'ha esgotat el límit de temps per inscriure l\'empremta digital. Torna-ho a provar."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Temps esgotat per configurar l\'empremta digital"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Torna-ho a provar ara o configura l\'empremta digital més tard a Configuració"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"El registre de l\'empremta digital no ha funcionat. Torna-ho a provar o fes servir un altre dit."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Afegeix-ne una altra"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Següent"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personalitza el telèfon"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Prova diferents estils, fons de pantalla i més"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Estalvi de pantalla"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"estalvi de pantalla"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Utilitza l\'estalvi de pantalla"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Mentre es carrega o està acoblat a la base"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Els dos casos"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Mentre es carrega"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Mentre està acoblat a la base"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Mai"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Desactivat"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Per controlar què passa quan el telèfon està acoblat a una base o en mode de repòs, activa l\'estalvi de pantalla."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Quan comença"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Estalvi de pantalla actual"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Configuració"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Brillantor adaptativa"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Aixeca el dispositiu per activar-lo"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Pantalla ambient"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Defineix un PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Defineix un PIN de treball"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Defineix un patró"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Per a més seguretat, defineix un patró per desbloquejar el dispositiu"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Defineix un patró de treball"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Per utilitzar l\'empremta, defineix una contrasenya"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Per utilitzar l\'empremta, defineix un patró"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplicació en casos d\'emergència"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Restableix les preferències de les aplicacions"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Vols restablir les preferències de les aplicacions?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Es restabliran totes les preferències de:\n\n"<li>"Aplicacions desactivades"</li>\n<li>"Notificacions d\'aplicacions desactivades"</li>\n<li>"Aplicacions predeterminades per a les accions"</li>\n<li>"Restriccions de dades en segon pla per a les aplicacions"</li>\n<li>"Restriccions de permisos"</li>\n\n"No perdràs les dades de les aplicacions."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Es restabliran totes les preferències relacionades amb:\n\n"<li>"Les aplicacions desactivades"</li>\n<li>"Les notificacions d\'aplicacions desactivades"</li>\n<li>"Les aplicacions predeterminades per a accions"</li>\n<li>"Les restriccions de dades en segon pla per a aplicacions"</li>\n<li>"Qualsevol restricció de permisos"</li>\n<li>"La configuració d\'ús de la bateria"</li>\n\n"No es perdran les dades de les aplicacions."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Restableix aplicacions"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Gestiona l\'espai"</string>
<string name="filter" msgid="9039576690686251462">"Filtra"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Restableix la configuració"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"S\'han restablert la mida de visualització i la configuració del text"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Vols restablir la mida de la pantalla i el text?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Es restablirà la configuració original del telèfon pel que fa a les preferències de text i mida de la pantalla"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Es restablirà la configuració original del telèfon pel que fa a les preferències de text i mida de la pantalla"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Es restablirà la configuració original de la tauleta pel que fa a les preferències de text i mida de la pantalla"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Restableix"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Tens algun pla aquest cap de setmana?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Aniré a la platja. Vols venir?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Sense ús des de la darrera càrrega completa"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Sense ús durant les 24 darreres hores"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Altres usuaris"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"L\'estimació de la bateria restant es basa en l\'ús del teu dispositiu"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Temps estimat restant"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Fins a completar la càrrega"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Paraula d\'activació i interacció completes"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Conversió de parla a text simple"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Aquest servei d\'entrada de veu podrà supervisar sempre la veu i controlar les aplicacions compatibles amb l\'entrada de veu en nom teu. Procedeix de l\'aplicació <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Vols activar l\'ús d\'aquest servei?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Configuració del reconeixement al dispositiu"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Reconeixement al dispositiu"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Reconeixement de parla al dispositiu"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Motor preferent"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Configuració del motor"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Velocitat i to de veu"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Suprimeix"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Totes les aplicacions i les dades d\'aquesta sessió se suprimiran."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Suprimeix"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Convidat (Tu)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Usuaris"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Altres usuaris"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Suprimeix l\'activitat de convidat"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Suprimeix totes les aplicacions i dades de la sessió de convidat en sortir d\'aquest mode"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Suprimir l\'activitat de convidat?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Les aplicacions i les dades d\'aquesta sessió de convidat se suprimiran ara, i tota l\'activitat de convidat que facis en el futur se suprimirà cada vegada que surtis del mode de convidat"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Activa les trucades telefòniques"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activa les trucades telefòniques i els SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Suprimeix l\'usuari"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Totes les notificacions de: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Totes les notificacions de l\'aplicació <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notificacions adaptatives"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notificacions al dia</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notificació al dia</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Aproximadament <xliff:g id="NUMBER_1">%,d</xliff:g> notificacions per dia</item>
+ <item quantity="one">Aproximadament <xliff:g id="NUMBER_0">%d</xliff:g> notificació per dia</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notificacions a la setmana</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notificació a la setmana</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Aproximadament <xliff:g id="NUMBER_1">%,d</xliff:g> notificacions per setmana</item>
+ <item quantity="one">Aproximadament <xliff:g id="NUMBER_0">%d</xliff:g> notificació per setmana</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Mai"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificacions del dispositiu i d\'aplicacions"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"No fer res"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibra"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Silencia"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Per activar la funció, primer canvia l\'opció Mantén premut el botó d\'engegada al menú d\'engegada."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Per activar la funció, al menú d\'engegada, primer canvia l\'opció Mantén premut el botó d\'engegada."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalls de la xarxa"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"El nom del dispositiu és visible per a les aplicacions del telèfon. També el poden veure altres persones si el connectes a un dispositiu Bluetooth o a una xarxa Wi‑Fi, o si configures un punt d\'accés Wi‑Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Dispositius"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"controls de dispositius"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Targetes i passis"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"targetes i passis"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Mantén premut el botó d\'engegada"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Mantén premut per obrir l\'Assistent"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Mantén premut per obrir el menú d\'engegada"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Mantén premut està desactivat"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Mantén premut el botó d\'engegada"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Mantén premut el botó d\'engegada per accedir"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menú d\'engegada"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Assistent digital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Accés a l\'assistent digital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Accés al menú d\'engegada"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Per utilitzar aquesta opció, has de definir un bloqueig de pantalla"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Mantén premut per utilitzar l\'Assistent"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Activa l\'Assistent mantenint premut el botó d\'engegada"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menú d\'engegada i emergència:\nPrem els botons d\'engegada i d\'apujar el volum al mateix temps."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Impedeix els sons:\nDrecera disponible al menú de volum."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menú d\'engegada:\nPrem el botó d\'engegada i el d\'apujar el volum a la vegada"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Impedeix els sons:\nPrem un botó de volum per fer servir la drecera"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Durada de mantenir premut"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Tria quanta estona vols mantenir premut el botó d\'engegada per ajustar la sensibilitat"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Curt"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 29335e2..ae0cd6f 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -472,7 +472,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Když dítě používá Pixel Imprint, snímky slouží k aktualizaci modelu jeho otisku prstu. Snímky použité k vytvoření modelu otisku prstu se nikdy neukládají, ale model otisku prstu je bezpečně uložen v telefonu (a nikdy ho neopouští). Ke zpracování dochází bezpečně v telefonu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"V Nastavení můžete snímky a model otisku prstu kdykoli smazat, případně odemknutí otiskem prstu vypnout. Snímky a modely otisků prstů budou v telefonu uloženy, dokud je nesmažete."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"V Nastavení můžete vy nebo vaše dítě snímky a model otisku prstu kdykoli smazat, případně odemknutí otiskem prstu vypnout. Snímky a modely otisků prstů zůstanou v telefonu uloženy, dokud nebudou smazány."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Váš telefon lze odemknout, i když to nezamýšlíte, třeba když ho někdo podrží u vašeho prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Váš telefon lze odemknout, i když to nezamýšlíte, třeba když ho někdo podrží u vašeho prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tablet se může odemknout, aniž byste to chtěli, například když ho někdo podrží u vašeho prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Zařízení se může odemknout, aniž byste to chtěli, například když ho někdo podrží u vašeho prstu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefon dítěte lze odemknout, i když to nezamýšlí, třeba když ho někdo podrží u prstu dítěte."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Nejlepších výsledků dosáhnete s ochranou displeje, která má certifikát Made for Google. S ostatními ochranami displeje nemusí otisk prstu fungovat."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Nejlepších výsledků dosáhnete s ochranou displeje, která má certifikát Made for Google. S ostatními ochranami displeje nemusí otisk prstu dítěte fungovat."</string>
@@ -522,6 +524,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustrace se zařízením a polohou senzoru otisků prstů"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Název"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Zkusit znovu"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Smazat"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Dotkněte se senzoru"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Položte prst na senzor. Zvedněte ho, až zařízení zavibruje."</string>
@@ -599,8 +602,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Hotovo"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Jejda, to není senzor."</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Dotkněte se senzoru na zadní straně telefonu. Použijte ukazováček."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registrace nebyla dokončena"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Bylo dosaženo časového limitu registrace otisku prstu. Zkuste to znovu."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Časový limit nastavení otisku prstu vypršel"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Zkuste to znovu nebo otisk prstu nastavte později v Nastavení"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Registrace otisku prstu nefungovala. Zkuste to znovu nebo použijte jiný prst."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Přidat další"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Další"</string>
@@ -1488,17 +1491,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Přizpůsobení telefonu"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Vyzkoušejte různé styly, tapety apod."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Spořič obrazovky"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"spořič obrazovky"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Používat spořič obrazovky"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Při nabíjení nebo v doku"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"V obou případech"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Při nabíjení"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Při vložení do doku"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nikdy"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Vyp."</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Chcete-li nastavit, co se stane, když je telefon vložen do doku nebo je v režimu spánku, zapněte spořič obrazovky."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kdy spustit"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Aktuální spořič obrazovky"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Nastavení"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatický jas"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Probudit zvednutím zařízení"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambientní displej"</string>
@@ -1990,6 +1991,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Nastavte kód PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Nastavte pracovní PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Nastavte gesto"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Pro ještě lepší zabezpečení nastavte gesto k odemknutí zařízení"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Nastavte pracovní gesto"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Otisk vyžaduje nastavení hesla"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Otisk vyžaduje nastavení gesta"</string>
@@ -2147,7 +2149,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplikace k příjmu výstražných zpráv"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Obnovit nastavení aplikací"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Obnovit nastavení aplikací?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Touto akcí obnovíte všechna nastavení pro:\n\n"<li>"deaktivované aplikace,"</li>\n<li>"deaktivovaná oznámení aplikací,"</li>\n<li>"výchozí aplikace k provádění akcí,"</li>\n<li>"omezení dat na pozadí pro aplikace,"</li>\n<li>"omezení oprávnění."</li>\n\n"O žádná data aplikací nepřijdete."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Tímto resetujete všechny následující předvolby:\n\n"<li>"deaktivované aplikace,"</li>\n<li>"zakázaná oznámení aplikací,"</li>\n<li>"výchozí aplikace pro různé akce,"</li>\n<li>"omezení datových přenosů na pozadí pro aplikace,"</li>\n<li>"veškerá omezení oprávnění,"</li>\n<li>"nastavení využití baterie."</li>\n\n"Nepřijdete o žádná data aplikací."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Obnovit aplikace"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Spravovat místo"</string>
<string name="filter" msgid="9039576690686251462">"Filtrovat"</string>
@@ -2402,7 +2404,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Resetovat nastavení"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Velikost zobrazení a nastavení textu byla resetována"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Resetovat velikost obrazovky a text?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Předvolby velikosti obrazovky a textu se resetují na původní nastavení telefonu"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Předvolby velikosti obrazovky a textu se resetují na původní nastavení telefonu"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Předvolby velikosti obrazovky a textu se resetují na původní nastavení tabletu"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Resetovat"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Máš plány na víkend?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Jdu na pláž. Přidáš se?"</string>
@@ -3010,6 +3013,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Od posledního nabití žádné využití"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Za posledních 24 hodin žádné využití"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Další uživatelé"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Odhad zbývající výdrže baterie vychází z vašeho používání zařízení"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Odhadovaný zbývající čas"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Do úplného nabití"</string>
@@ -3099,6 +3103,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Úplná aktivace klíčových slov a interakce"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Jednoduchý převod řeči na text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Služba hlasového zadávání bude moci neustále monitorovat hlas a ovládat za vás aplikace s aktivovaným hlasovým zadáváním. Služba pochází z <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Chcete použití této služby povolit?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Nastavení rozpoznávání na zařízení"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Rozpoznávání na zařízení"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Rozpoznávání řeči na zařízení"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Preferovaný modul"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Nastavení modulu"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Rychlost řeči a výška hlasu"</string>
@@ -3499,6 +3506,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Smazat"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Veškeré aplikace a data v této relaci budou vymazána."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Odstranit"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Host (vy)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Uživatelé"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Další uživatelé"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Smazat aktivitu hosta"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Při ukončení režimu hosta smazat všechny aplikace a data hosta"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Smazat aktivitu hosta?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikace a data z této relace hosta budou nyní smazány a veškerá budoucí aktivita hostů bude smazána pokaždé, když opustíte režim hosta"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Zapnout telefonní hovory"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Zapnout telefonní hovory a SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Smazání uživatele"</string>
@@ -4095,17 +4109,17 @@
<string name="notification_switch_label" msgid="8029371325967501557">"<xliff:g id="APP_NAME">%1$s</xliff:g>: všechna oznámení"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Všechna oznámení aplikace <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptivní oznámení"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za den</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za den</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za den</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> oznámení za den</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="few">Přibližně <xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za den</item>
+ <item quantity="many">Přibližně <xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za den</item>
+ <item quantity="other">Přibližně <xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za den</item>
+ <item quantity="one">Přibližně <xliff:g id="NUMBER_0">%d</xliff:g> oznámení za den</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za týden</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za týden</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za týden</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> oznámení za týden</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="few">Přibližně <xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za týden</item>
+ <item quantity="many">Přibližně <xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za týden</item>
+ <item quantity="other">Přibližně <xliff:g id="NUMBER_1">%,d</xliff:g> oznámení za týden</item>
+ <item quantity="one">Přibližně <xliff:g id="NUMBER_0">%d</xliff:g> oznámení za týden</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nikdy"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Oznámení v zařízeních a aplikacích"</string>
@@ -5423,7 +5437,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Nic nedělat"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrace"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Vypnout zvuk"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Pokud tuto možnost chcete zapnout, nejdříve změňte nastavení podržení vypínače na nabídku vypínače."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Pokud chcete zapnout tuto možnost, nejdříve změňte akci přidruženou k podržení vypínače tak, aby se jím otevírala nabídka vypínače."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Podrobnosti sítě"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Název vašeho zařízení je viditelný pro aplikace v telefonu. Mohou ho vidět také ostatní uživatelé, když se připojíte k zařízení Bluetooth nebo síti Wi-Fi, případně když vytvoříte hotspot Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Zařízení"</string>
@@ -5716,15 +5730,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ovládání zařízení"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Platební a ostatní karty"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"platební a ostatní karty"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Podržení vypínače"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Podržením aktivujete Asistenta"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Podržením aktivujete nabídku vypínače"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Podržení je deaktivováno"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Podržení vypínače"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Otevřete podržením vypínače"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Nabídka vypínače"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitální asistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Aktivace digitálního asistenta"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Otevření nabídky vypínače"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Před použitím nejdříve nastavte zámek obrazovky"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Aktivovat Asistenta podržením"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Asistenta aktivujete podržením vypínače"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Nabídka napájení a tísňového volání:\nStiskněte současně vypínač a tlačítko zvýšení hlasitosti."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Zabránit vyzvánění:\nZkratka je k dispozici v nabídce hlasitosti."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Nabídka vypínače:\nStiskněte současně vypínač a tlačítko zvýšení hlasitosti."</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Vypnutí vyzvánění:\nStiskněte tlačítko hlasitosti pro zkratku"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Délka podržení"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Nastavte citlivost úpravou délky podržení vypínače"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Krátké"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 11b453c..ee84d05 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Når barnet bruger Pixel Imprint, bruges billederne til at opdatere barnets fingeraftryksmodel. De billeder, der bruges til at oprette dit barns fingeraftryksmodel, gemmes aldrig, men fingeraftryksmodellen gemmes på sikker vis på telefonen, og den forlader aldrig telefonen. Al behandling sker på sikker vis på telefonen."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Du kan til enhver tid slette dine fingeraftryksbilleder og din fingeraftryksmodel eller deaktivere Oplåsning med fingeraftryk i Indstillinger. Fingeraftryksbilleder og fingeraftryksmodellen gemmes på telefonen, indtil du sletter dem."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Du og dit barn kan til enhver tid slette barnets billeder og model eller deaktivere oplåsning med fingeraftryk i Indstillinger. Fingeraftryksbilleder og -modeller gemmes på telefonen, indtil de slettes."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Din telefon kan blive låst op, når det ikke er meningen, f.eks. hvis nogen holder din finger op mod den."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Din telefon kan blive låst op, når det ikke er meningen, f.eks. hvis nogen holder din finger op mod den."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Din tablet kan blive låst op utilsigtet, f.eks. hvis nogen holder din finger op mod den."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Din enhed kan blive låst op utilsigtet, f.eks. hvis nogen holder din finger op mod den."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Dit barns telefon kan låses op, når det ikke er meningen, f.eks. hvis nogen holder den op mod dit barns finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Du får de bedste resultater ved at bruge en skærmbeskytter, der er Made For Google-certificeret. Dit fingeraftryk virker muligvis ikke med andre skærmbeskyttere."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Du får de bedste resultater ved at bruge en skærmbeskytter, der er Made For Google-certificeret. Dit barns fingeraftryk virker muligvis ikke med andre skærmbeskyttere."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration med enhed og lokation af fingeraftrykslæser"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Navn"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Prøv igen"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Slet"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Tryk på sensoren"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Placer fingeren på sensoren, og løft, når du mærker en vibration"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Udfør"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Hov! Dette er ikke sensoren"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Tryk på sensoren bagpå med pegefingeren."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Scanningen kunne ikke gennemføres"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Tidsgrænsen for registrering af fingeraftryk blev overskredet. Prøv igen."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Konfigurationen af fingeraftryk fik timeout"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Prøv igen nu, eller konfigurer fingeraftryk senere under Indstillinger"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Registrering af fingeraftryk virkede ikke. Prøv igen, eller brug en anden finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Tilføj endnu et"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Næste"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Tilpas din telefon"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Prøv forskellige layout, baggrunde og meget mere"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Pauseskærm"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"pauseskærm"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Brug pauseskærm"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Når enheden oplades eller tilsluttes en dockingstation"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Begge dele"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Under opladning"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Når enheden er tilsluttet en dockingstation"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Aldrig"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Fra"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Aktivér pauseskærmen for at administrere, hvad der sker, når telefonen er sat i dockingstationen og/eller går i dvale."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Starttidspunkt"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Aktuel pauseskærm"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Indstillinger"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatisk lysstyrke"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Løft enheden for at vække den"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Aktiv låseskærm"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Angiv en pinkode"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Angiv en pinkode til arbejdsprofilen"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Indstil et mønster"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Få ekstra beskyttelse ved at angive et mønster til oplåsning af enheden"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Indstil et mønster til arbejdsprofilen"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Angiv adgangskode for at bruge fingeraftryk"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Angiv mønster for at bruge fingeraftryk"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Nødapp"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Nulstil app-præferencer"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Nulstil app-præferencer?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Dette nulstiller alle præferencer for:\n\n "<li>"Deaktiverede apps"</li>\n" "<li>"Deaktiverede appnotifikationer"</li>\n" "<li>"Standardapps til handlinger"</li>\n" "<li>"Begrænsning af baggrundsdata for apps"</li>\n<li>" "</li>"Eventuelle begrænsede tilladelser\n\n Du vil ikke miste nogen appdata."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Dette nulstiller alle præferencer for:\n\n "<li>"Deaktiverede apps"</li>\n" "<li>"Deaktiverede appnotifikationer"</li>\n" "<li>"Standardapps til handlinger"</li>\n" "<li>"Begrænsning af baggrundsdata for apps"</li>\n<li>"Eventuelle begrænsede tilladelser"</li>\n<li>"Indstillinger for batteriforbrug"</li>\n\n"Du vil ikke miste nogen appdata."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Nulstil apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Administrer plads"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Nulstil indstillinger"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Skærmindstillinger for størrelse og tekst er blevet nulstillet"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Skal indstillingerne for skærmstørrelse og tekst nulstilles?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Telefonens oprindelige skærmstørrelse og tekstpræferencer gendannes"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Telefonens oprindelige skærmstørrelse og tekstpræferencer gendannes"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Din tablets oprindelige skærmstørrelse og tekstpræferencer gendannes"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Nulstil"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Har du nogen planer for weekenden?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Jeg skal på stranden. Vil du med?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Ikke brugt i baggrunden siden sidste fulde opladning"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Ikke brugt i løbet af de seneste 24 timer"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Andre brugere"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Den resterende batteritid er et skøn, der baseres på din brug af enheden"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Estimeret resterende tid"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Indtil den er fuldt opladet"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Komplet kommandoord og handling"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Enkel oplæsning"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Denne indtalingstjeneste vil kunne foretage lydovervågning, der altid er slået til, og styre taleaktiverede apps på dine vegne. Den kommer fra appen <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Vil du aktivere brugen af denne tjeneste?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Indstillinger for genkendelse på enheden"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Genkendelse på enheden"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Talegenkendelse på enheden"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Foretrukken maskine"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Indstillinger for oplæsningsmaskinen"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Talehastighed og stemmeleje"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Slet"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Alle apps og data i denne session slettes."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Fjern"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gæst (dig)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Brugere"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Andre brugere"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Slet gæsteaktivitet"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Slet alle gæsteapps og -data ved afslutning af gæstetilstand"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vil du slette gæsteaktiviteten?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps og data fra denne gæstesession slettes nu, og al fremtidig gæsteaktivitet slettes, hver gang du afslutter gæstetilstand"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Aktivér telefonopkald"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktivér telefonopkald og sms"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Slet bruger"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Alle notifikationer fra \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Alle notifikationer for <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Automatiske notifikationer"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifikation om dagen</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifikationer om dagen</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Ca. <xliff:g id="NUMBER_1">%,d</xliff:g> notifikation om dagen</item>
+ <item quantity="other">Ca. <xliff:g id="NUMBER_1">%,d</xliff:g> notifikationer om dagen</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifikation om ugen</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifikationer om ugen</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Ca. <xliff:g id="NUMBER_1">%,d</xliff:g> notifikation om ugen</item>
+ <item quantity="other">Ca. <xliff:g id="NUMBER_1">%,d</xliff:g> notifikationer om ugen</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Aldrig"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Enheds- og appnotifikationer"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Lad være med at gøre noget"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrer"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Slå lyden fra"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Hvis du vil aktivere funktionen, skal du først ændre \"Hold afbryderknappen nede\" til menuen for afbryderknappen"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Hvis du vil aktivere funktionen, skal du først ændre \"Hold afbryderknappen nede\" til menuen for afbryderknappen."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Netværksoplysninger"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Din enheds navn er synligt for apps på din telefon. Det kan muligvis også ses af andre, når du opretter forbindelse til Bluetooth-enheder eller et Wi-Fi-netværk, eller når du konfigurerer et Wi-Fi-hotspot."</string>
<string name="devices_title" msgid="649715719278562515">"Enheder"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"enhedsstyring"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kort og billetter"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kort og billetter"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Hold afbryderknappen nede"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Hold knappen nede for at åbne Assistent"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Hold knappen nede for at åbne menuen for afbryderknappen"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Muligheden for at åbne Assistent ved at holde knappen nede er deaktiveret"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Hold afbryderknappen nede"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Hold afbryderknappen nede for at tilgå"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu for afbryderknappen"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digital assistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Tilgå digital assistent"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Tilgå menuen for afbryderknappen"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Du skal først konfigurere en skærmlås"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Hold nede for at aktivere Assistent"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Aktivér Assistent ved at holde afbryderknappen nede"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu for afbryderknappen og nødsituationer:\nTryk på afbryderknappen og knappen Lydstyrke op samtidig."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Deaktiver ringetoner:\nGenvejen findes i lydstyrkemenuen."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu for afbryderknappen:\nHold afbryderknappen og Lydstyrke op inde på samme tid"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Deaktiver ringetoner:\nTryk på en lydstyrkeknap for at bruge genvejen"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Tryklængde"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Juster følsomheden ved at vælge, hvor lang tid afbryderknappen skal holdes inde"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kort"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 90f907c..b8657c8 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Wenn es „Pixel Imprint“ nutzt, werden Bilder zum Aktualisieren seines Fingerabdruckmodells verwendet. Während die zum Erstellen des Fingerabdruckmodells verwendeten Bilder niemals gespeichert werden, wird das Modell selbst sicher auf dem Smartphone abgelegt, ohne es je zu verlassen. Die Verarbeitung der entsprechenden Daten findet unter Einhaltung aller Sicherheitsvorgaben ausschließlich auf dem Smartphone statt."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Du kannst jederzeit die Aufnahmen und das Modell deines Fingerabdrucks löschen oder das Entsperren per Fingerabdruck in den Einstellungen deaktivieren. Aufnahmen und Modelle von Fingerabdrücken werden auf deinem Gerät gespeichert, bis du sie löschst."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Du und dein Kind könnt jederzeit die Aufnahmen der Fingerabdrücke und das erstellte Fingerabdruckmodell löschen oder die Funktion „Entsperrung per Fingerabdruck“ in den Einstellungen deaktivieren. Aufnahmen von Fingerabdrücken und Fingerabdruckmodelle bleiben auf dem Smartphone gespeichert, bis sie gelöscht werden."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Es kann passieren, dass dein Smartphone unbeabsichtigt entsperrt wird, wenn es z. B. von jemandem gegen deinen Finger gehalten wird."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Es kann passieren, dass dein Smartphone unbeabsichtigt entsperrt wird, wenn es z. B. von jemandem gegen deinen Finger gehalten wird."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Es kann passieren, dass dein Tablet entsperrt wird, wenn du es nicht möchtest, z. B. wenn es von jemandem gegen deinen Finger gehalten wird."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Es kann passieren, dass dein Gerät entsperrt wird, wenn du es nicht möchtest, z. B. wenn es von jemandem gegen deinen Finger gehalten wird."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Das Smartphone deines Kindes kann entsperrt werden, selbst wenn es das nicht beabsichtigt. Dazu kann es z. B. an seinen Finger gehalten werden."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Die besten Ergebnisse erzielst du mit einem Displayschutz, der das Zertifikat „Made for Google“ hat. Bei anderen Displayschutzfolien wird dein Fingerabdruck möglicherweise nicht erkannt."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Die besten Ergebnisse erzielst du mit einem Displayschutz, der das Zertifikat „Made for Google“ hat. Bei anderen Displayschutzfolien wird der Fingerabdruck deines Kindes möglicherweise nicht erkannt."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Abbildung mit Gerät und Position des Fingerabdrucksensors"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Name"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Ok"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Noch einmal versuchen"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Löschen"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Sensor berühren"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Lege deinen Finger auf den Sensor und hebe ihn an, wenn du eine Vibration spürst."</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Fertig"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Das ist nicht der Sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Sensor auf Rückseite mit Zeigefinger berühren."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registrierung wurde nicht abgeschlossen"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Zeitüberschreitung bei Fingerabdruckregistrierung. Bitte versuche es noch einmal."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Zeitüberschreitung bei Fingerabdruckeinrichtung"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Du kannst es entweder jetzt noch einmal versuchen oder den Fingerabdruck später in den Einstellungen einrichten"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Fehler bei Fingerabdruckregistrierung. Versuche es erneut oder verwende einen anderen Finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Weiteren hinzufügen"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Weiter"</string>
@@ -1451,17 +1454,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Smartphone personalisieren"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Verschiedene Designs und Hintergründe ausprobieren"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Bildschirmschoner"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"Bildschirmschoner"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Bildschirmschoner verwenden"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Beim Aufladen oder wenn in Dockingstation"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"In beiden Fällen"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Beim Aufladen"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Wenn in Dockingstation"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nie"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Aus"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Um festzulegen, was geschieht, wenn dein Smartphone angedockt oder im Ruhemodus ist, aktiviere den Bildschirmschoner."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Zeitpunkt der Aktivierung"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Aktueller Bildschirmschoner"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Einstellungen"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatische Helligkeit"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Zum Aktivieren anheben"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Inaktivitätsdisplay"</string>
@@ -1949,6 +1950,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN festlegen"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"PIN für Arbeitsprofil festlegen"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Muster festlegen"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Für zusätzliche Sicherheit ein Muster zum Entsperren des Geräts einrichten"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Muster für Arbeitsprofil festlegen"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Für Fingerabdruck Passwort festlegen"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Für Fingerabdruck Muster festlegen"</string>
@@ -2102,7 +2104,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"App für Notfallbenachrichtigungen"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"App-Einstellungen zurücksetzen"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"App-Einstellungen zurücksetzen?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Hierdurch werden die folgenden Einstellungen zurückgesetzt:\n\n "<li>"Deaktivierungen von Apps"</li>\n" "<li>"Deaktivierungen von App-Benachrichtigungen"</li>\n" "<li>"Festlegungen von Standard-Apps für bestimmte Aktionen"</li>\n<li>"Einschränkungen der Hintergrunddaten für Apps"</li>\n<li>"Jegliche Zugriffsbeschränkungen"</li>\n\n"Alle App-Daten bleiben erhalten."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Dadurch werden die folgenden Einstellungen zurückgesetzt:\n\n"<li>"Deaktivierung von Apps"</li>\n<li>"Deaktivierung von App-Benachrichtigungen"</li>\n<li>"Festlegung von Standard-Apps für bestimmte Aktionen"</li>\n" "<li>"Einschränkungen der Hintergrunddaten für Apps"</li>\n<li>"Jegliche Zugriffsbeschränkungen"</li>\n<li>"Einstellungen für die Akkunutzung"</li>\n\n"Alle App-Daten bleiben erhalten."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Apps zurücksetzen"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Speicherplatz verwalten"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2357,7 +2359,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Einstellungen zurücksetzen"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Einstellungen für Anzeigegröße und Text wurden zurückgesetzt"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Anzeigegröße und Text zurücksetzen?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Deine Einstellungen für Anzeigegröße und Text werden auf die ursprünglichen Einstellungen des Smartphones zurückgesetzt"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Deine Einstellungen für Anzeigegröße und Text werden auf die ursprünglichen Einstellungen des Smartphones zurückgesetzt"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Deine Einstellungen für Anzeigegröße und Text werden auf die ursprünglichen Einstellungen des Tablets zurückgesetzt"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Zurücksetzen"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Hast du Pläne fürs Wochenende?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Ich will zum Strand. Kommst du mit?"</string>
@@ -2937,6 +2940,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Keine Nutzung seit der letzten vollständigen Aufladung"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Keine Nutzung in den letzten 24 Stunden"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Andere Nutzer"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Die verbleibende Akkulaufzeit wird anhand der Gerätenutzung geschätzt"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Geschätzte verbleibende Akkulaufzeit"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Bis zur vollständigen Aufladung"</string>
@@ -3026,6 +3030,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Vollständiger Sprachinteraktionsdienst einschließlich der Verwendung von Hotwords"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Einfache Sprachausgabe-Funktion"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Dieser Spracheingabedienst kann Spracheingaben jederzeit überwachen und Anwendungen, die Sprachbefehle unterstützen, für dich steuern. Er wird von der Anwendung <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> bereitgestellt. Möchtest du diesen Dienst aktivieren?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Einstellungen für Erkennung auf dem Gerät"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Erkennung auf dem Gerät"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Spracherkennung auf dem Gerät"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Bevorzugtes Modul"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Moduleinstellungen"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Sprechgeschwindigkeit & Stimmlage"</string>
@@ -3418,6 +3425,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Löschen"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Alle Apps und Daten in dieser Sitzung werden gelöscht."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Entfernen"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gast (ich)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Nutzer"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Andere Nutzer"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Gastaktivität löschen"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Alle Gast-Apps und -daten beim Beenden des Gastmodus löschen"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Gastaktivität löschen?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps und Daten dieser Gastsitzung werden jetzt gelöscht und alle künftigen Gastaktivitäten werden jeweils beim Beenden des Gastmodus gelöscht"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Telefonieren zulassen"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefonieren & SMS zulassen"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Nutzer löschen"</string>
@@ -4010,13 +4024,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Alle Benachrichtigungen von „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Alle Benachrichtigungen von <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptive Benachrichtigungen"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">Ungefähr <xliff:g id="NUMBER_1">%,d</xliff:g> Benachrichtigungen pro Tag</item>
- <item quantity="one">Ungefähr <xliff:g id="NUMBER_0">%d</xliff:g> Benachrichtigung pro Tag</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Etwa <xliff:g id="NUMBER_1">%,d</xliff:g> Benachrichtigungen pro Tag</item>
+ <item quantity="one">Etwa <xliff:g id="NUMBER_0">%d</xliff:g> Benachrichtigung pro Tag</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">Ungefähr <xliff:g id="NUMBER_1">%,d</xliff:g> Benachrichtigungen pro Woche</item>
- <item quantity="one">Ungefähr <xliff:g id="NUMBER_0">%d</xliff:g> Benachrichtigung pro Woche</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Etwa <xliff:g id="NUMBER_1">%,d</xliff:g> Benachrichtigungen pro Woche</item>
+ <item quantity="one">Etwa <xliff:g id="NUMBER_0">%d</xliff:g> Benachrichtigung pro Woche</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nie"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Geräte- und App-Benachrichtigungen"</string>
@@ -5258,7 +5272,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Nichts tun"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrieren"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Stummschalten"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Ändere zum Aktivieren erst „Ein-/Aus-Taste gedrückt halten“ zu „Ein-/Aus-Menü“."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Ändere zum Aktivieren erst „Ein-/Aus-Taste gedrückt halten“ zu „Ein-/Aus-Menü“."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Netzwerkdetails"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Dein Gerätename ist für Apps auf deinem Smartphone sichtbar. Wenn du dein Gerät mit Bluetooth-Geräten oder einem WLAN verbindest oder einen WLAN-Hotspot einrichtest, kann der Name möglicherweise auch von anderen Personen gesehen werden."</string>
<string name="devices_title" msgid="649715719278562515">"Geräte"</string>
@@ -5545,15 +5559,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"Gerätesteuerung"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Karten und Tickets"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"Karten und Tickets"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Ein-/Aus-Taste gedrückt halten"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Gedrückt halten, um Assistant zu starten"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Gedrückt halten, um das Ein-/Aus-Menü aufzurufen"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"„Gedrückt halten“ deaktiviert"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Ein-/Aus-Taste gedrückt halten"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Für Zugriff Ein-/Aus-Taste gedrückt halten"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Ein-/Aus-Menü"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitaler Assistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Auf digitalen Assistenten zugreifen"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Auf Ein-/Aus-Menü zugreifen"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Lege zuerst eine Displaysperre fest, damit du die Option verwenden kannst"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Zum Aktivieren von Assistant gedrückt halten"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Halte die Ein-/Aus-Taste gedrückt, um Assistant zu aktivieren"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"„Ein-/Aus- und Notfall-Menü“:\nEin-/Aus-Taste und Lautertaste gleichzeitig drücken."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"„Klingeln verhindern“:\nVerknüpfung im Lautstärke-Menü verfügbar."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Ein-/Aus-Menü:\nEin-/Aus-Taste und Lautertaste gleichzeitig drücken"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Klingeln verhindern:\nFür Verknüpfung eine Lautstärketaste drücken"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Dauer des Gedrückthaltens"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Stelle die Empfindlichkeit ein, indem du festlegst, wie lange du die Ein-/Aus-Taste gedrückt halten musst"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kurz"</string>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 33a1d49..1eb8f8e 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Κατά τη χρήση του Pixel Imprint, χρησιμοποιούνται εικόνες για την ενημέρωση του μοντέλου του δακτυλικού του αποτυπώματος. Οι εικόνες που χρησιμοποιούνται για τη δημιουργία του μοντέλου του δακτυλικού αποτυπώματος του παιδιού σας δεν αποθηκεύονται ποτέ, αλλά το μοντέλο δακτυλικού αποτυπώματος αποθηκεύεται με ασφάλεια στο τηλέφωνο και παραμένει αποκλειστικά σε αυτό. Όλη η επεξεργασία πραγματοποιείται με ασφάλεια στο τηλέφωνο."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Μπορείτε να διαγράψετε τις εικόνες και το μοντέλου του δακτυλικού σας αποτυπώματος ή να απενεργοποιήσετε το ξεκλείδωμα με δακτυλικό αποτύπωμα ανά πάσα στιγμή στις Ρυθμίσεις. Οι εικόνες και τα μοντέλα δακτυλικών αποτυπωμάτων αποθηκεύονται με ασφάλεια στο τηλέφωνό σας μέχρι να τα διαγράψετε."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Εσείς και το παιδί σας μπορείτε να διαγράψετε τις εικόνες και το μοντέλο του δακτυλικού του αποτυπώματος ή να απενεργοποιήσετε το ξεκλείδωμα με δακτυλικό αποτύπωμα ανά πάσα στιγμή στις Ρυθμίσεις. Οι εικόνες και τα μοντέλα δακτυλικού αποτυπώματος αποθηκεύονται με ασφάλεια στο τηλέφωνο μέχρι να διαγραφούν."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Το τηλέφωνό σας μπορεί να ξεκλειδωθεί ακόμη και όταν δεν το σκοπεύετε, όπως εάν κάποιος το ακουμπήσει στο δάχτυλό σας."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Το τηλέφωνό σας μπορεί να ξεκλειδωθεί ακόμη και όταν δεν το σκοπεύετε, όπως εάν κάποιος το ακουμπήσει στο δάχτυλό σας."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Το tablet σας μπορεί να ξεκλειδωθεί ακόμη και αν δεν σκοπεύετε να το ξεκλειδώσετε, όπως εάν κάποιος το ακουμπήσει στο δάχτυλό σας."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Η συσκευή σας μπορεί να ξεκλειδωθεί ακόμη και αν δεν σκοπεύετε να τη ξεκλειδώσετε, όπως εάν κάποιος την ακουμπήσει στο δάχτυλό σας."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Το τηλέφωνο του παιδιού σας μπορεί να ξεκλειδωθεί ακόμη και όταν δεν το σκοπεύει, όπως εάν κάποιος το ακουμπήσει στο δάχτυλό του."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Για βέλτιστα αποτελέσματα, χρησιμοποιήστε ένα προστατευτικό οθόνης που έχει την πιστοποίηση Made for Google. Με άλλα προστατευτικά οθόνης ενδέχεται να μην λειτουργεί το δακτυλικό σας αποτύπωμα."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Για βέλτιστα αποτελέσματα, χρησιμοποιήστε ένα προστατευτικό οθόνης που έχει την πιστοποίηση Made for Google. Με άλλα προστατευτικά οθόνης ενδέχεται να μην λειτουργεί το δακτυλικό αποτύπωμα του παιδιού σας."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Εικόνα συσκευής και της τοποθεσίας του αισθητήρα δακτυλικού αποτυπώματος"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Όνομα"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ΟΚ"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Δοκιμάστε ξανά"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Διαγραφή"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Αγγίξτε τον αισθητήρα"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Τοποθετήστε το δάχτυλό σας στον αισθητήρα και ανασηκώστε το μόλις αισθανθείτε μια δόνηση"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Τέλος"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ωχ, αυτό δεν είναι ο αισθητήρας"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Αγγίξτε τον πίσω αισθητήρα με τον δείκτη σας."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Η εγγραφή δεν ολοκληρώθηκε"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Λήξη χρονικού ορίου εγγραφής δακτυλικών αποτυπωμάτων. Δοκιμάστε ξανά."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Λήξη χρον. ορίου ρύθμισης δακτυλικού αποτυπ."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Δοκιμάστε ξανά τώρα ή ρυθμίστε αργότερα το δακτυλικό σας αποτύπωμα στις Ρυθμίσεις"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Αποτυχία εγγραφής δακτυλικού αποτυπώματος. Δοκιμάστε ξανά ή χρησιμοποιήστε ένα άλλο δάκτυλο."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Προσθήκη άλλου"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Επόμενο"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Προσαρμογή του τηλεφώνου σας"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Δοκιμάστε διαφορετικά στιλ, ταπετσαρίες και άλλα"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Προφύλαξη οθόνης"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"προφύλαξη οθόνης"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Χρήση προφύλαξης οθόνης"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Στη φόρτιση ή στη βάση"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Είτε"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Στη φόρτιση"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Στη βάση"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Ποτέ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Απενεργοποίηση"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Ενεργοποιήστε την προφύλαξη οθόνης για να ελέγξετε τι συμβαίνει όταν το τηλέφωνό σας είναι συνδεδεμένο στη βάση σύνδεσης ή/και βρίσκεται σε κατάσταση αδράνειας."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Πότε να ξεκινάει"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Τρέχουσα προφύλαξη οθόνης"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Ρυθμίσεις"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Αυτόματη φωτεινότητα"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Σηκώστε για ενεργοποίηση"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Οθόνη περιβάλλοντος"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Ορίστε ένα PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Ορίστε ένα PIN εργασίας"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Ορίστε ένα μοτίβο"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Για πρόσθετη ασφάλεια, ορίστε ένα μοτίβο για ξεκλείδωμα της συσκευής"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Ορίστε ένα μοτίβο εργασίας"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Για χρήση δακτ. αποτ. ορίστε κωδ. πρόσβ."</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Για χρήση δακτ. αποτ. ορίστε μοτίβο"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Εφαρμογή έκτακτης ανάγκης"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Επαναφορά προτιμήσεων εφαρμογών"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Επαναφ. προτιμ. εφαρμ;"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Με αυτήν την ενέργεια, θα γίνει επαναφορά όλων των προτιμήσεων για:\n\n"<li>"απενεργοποιημένες εφαρμογές"</li>\n<li>"απενεργοποιημένες ειδοποιήσεις εφαρμογών"</li>\n<li>"προεπιλεγμένες εφαρμογές για ενέργειες"</li>\n<li>"περιορισμούς δεδομένων παρασκηνίου για εφαρμογές"</li>\n<li>"τυχόν περιορισμούς αδειών"</li>\n\n"Δεν θα χάσετε τυχόν δεδομένα εφαρμογών."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Αυτή η ενέργεια θα επαναφέρει όλες τις προτιμήσεις για τα εξής:\n\n"<li>"Απενεργοποιημένες εφαρμογές"</li>\n<li>"Απενεργοποιημένες ειδοποιήσεις εφαρμογών"</li>\n<li>"Προεπιλεγμένες εφαρμογές για ενέργειες"</li>\n<li>"Περιορισμοί δεδομένων παρασκηνίου για εφαρμογές"</li>\n<li>"Περιορισμοί αδειών"</li>\n<li>"Ρυθμίσεις χρήσης μπαταρίας"</li>\n\n"Δεν θα χάσετε δεδομένα εφαρμογών."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Επαναφορά εφαρμογών"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Διαχείριση χώρου"</string>
<string name="filter" msgid="9039576690686251462">"Φίλτρο"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Επαναφορά ρυθμίσεων"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Έγινε επαναφορά των ρυθμίσεων μεγέθους προβολής και κειμένου"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Επαναφορά μεγέθους οθόνης και κειμένου;"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Θα γίνει επαναφορά των προτιμήσεων μεγέθους οθόνης και κειμένου στις αρχικές ρυθμίσεις του τηλεφώνου σας"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Θα γίνει επαναφορά των προτιμήσεων μεγέθους οθόνης και κειμένου στις αρχικές ρυθμίσεις του τηλεφώνου σας"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Θα γίνει επαναφορά των προτιμήσεων μεγέθους οθόνης και κειμένου στις αρχικές ρυθμίσεις του tablet σας"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Επαναφορά"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Έχετε προγραμματίσει κάτι για το Σαββατοκύριακο;"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Πάω στην παραλία. Θες να έρθεις;"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Καμία χρήση από την τελευταία πλήρη φόρτιση"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Καμία χρήση τις τελευταίες 24 ώρες"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Άλλοι χρήστες"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Η εκτίμηση της μπαταρίας που απομένει βασίζεται στη χρήση της συσκευής σας"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Εκτιμώμενος υπολειπόμενος χρόνος"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Μέχρι την πλήρη φόρτιση"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Πλήρης λέξη-κλειδί και αλληλεπίδραση"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Μετατροπή απλής ομιλίας σε κείμενο"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Αυτή η υπηρεσία φωνητικής εισαγωγής θα έχει τη δυνατότητα να εκτελεί διαρκώς ενεργή παρακολούθηση φωνητικών εντολών και να ελέγχει τις εφαρμογές με ενεργοποιημένες τις φωνητικές εντολές εκ μέρους σας. Προέρχεται από την εφαρμογή <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Ενεργοποίηση της χρήσης αυτής της υπηρεσίας;"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Ρυθμίσεις αναγνώρισης στη συσκευή"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Αναγνώριση στη συσκευή"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Αναγνώριση ομιλίας στη συσκευή"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Προτεινόμενη μηχανή"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Ρυθμίσεις μηχανής"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Ταχύτητα και τόνος ομιλίας"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Διαγραφή"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Όλες οι εφαρμογές και τα δεδομένα αυτής της περιόδου σύνδεσης θα διαγραφούν."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Κατάργηση"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Επισκέπτης (Εσείς)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Χρήστες"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Άλλοι χρήστες"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Διαγραφή δραστηριότητας επισκέπτη"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Διαγραφή όλων των εφαρμογών και των δεδομένων επισκέπτη κατά την έξοδο από τη λειτουργία επισκέπτη"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Διαγραφή δραστηριότητας επισκέπτη;"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Οι εφαρμογές και τα δεδομένα από αυτήν την περίοδο σύνδεσης επισκέπτη θα διαγραφούν τώρα και όλη η μελλοντική δραστηριότητα επισκέπτη θα διαγράφεται κάθε φορά που εξέρχεστε από τη λειτουργία επισκέπτη"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Ενεργοποίηση τηλεφωνικών κλήσεων"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ενεργοποίηση κλήσεων και SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Διαγραφή χρήστη"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Όλες οι ειδοποιήσεις \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Όλες οι ειδοποιήσεις <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Προσαρμοστικές ειδοποιήσεις"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ειδοποιήσεις ανά ημέρα</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> ειδοποίηση ανά ημέρα</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Περίπου <xliff:g id="NUMBER_1">%,d</xliff:g> ειδοποιήσεις την ημέρα</item>
+ <item quantity="one">Περίπου <xliff:g id="NUMBER_0">%d</xliff:g> ειδοποίηση την ημέρα</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ειδοποιήσεις ανά εβδομάδα</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> ειδοποίηση ανά εβδομάδα</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Περίπου <xliff:g id="NUMBER_1">%,d</xliff:g> ειδοποιήσεις την εβδομάδα</item>
+ <item quantity="one">Περίπου <xliff:g id="NUMBER_0">%d</xliff:g> ειδοποίηση την εβδομάδα</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Ποτέ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Ειδοποιήσεις συσκευής και εφαρμογών"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Να μην γίνει καμία ενέργεια"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Δόνηση"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Σίγαση"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Για ενεργοποίηση, αλλάξτε πρώτα την επιλογή Παρατεταμένο πάτημα κουμπιού λειτουργίας στο μενού λειτουργίας."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Για ενεργοποίηση, αρχικά αλλάξτε την επιλογή \"Πατήστε παρατεταμένα το κουμπί λειτουργίας\" στο μενού λειτουργίας."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Λεπτομέρειες δικτύου"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Το όνομα της συσκευής σας είναι ορατό σε εφαρμογές στο τηλέφωνό σας. Ενδέχεται επίσης να είναι ορατό και σε άλλα άτομα, όταν συνδέεστε σε συσκευές Bluetooth, συνδέεστε σε ένα δίκτυο Wi-Fi ή ρυθμίζετε ένα σημείο πρόσβασης Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Συσκευές"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"στοιχεία ελέγχου συσκευής"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Κάρτες και πάσα"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"κάρτες και πάσα"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Παρατεταμένο πάτημα κουμπιού λειτουργίας"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Πατήστε παρατεταμένα για τον Βοηθό."</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Πατήστε παρατεταμένα για το μενού λειτουργίας."</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Το παρατεταμένο πάτημα έχει απενεργοποιηθεί."</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Πατήστε παρατεταμένα το κουμπί λειτουργίας"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Πατήστε παρατεταμένα το κουμπί λειτουργίας για πρόσβαση"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Μενού λειτουργίας"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Ψηφιακός βοηθός"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Πρόσβαση στον ψηφιακό βοηθό"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Πρόσβαση στο μενού λειτουργίας"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Για χρήση, ορίστε πρώτα το κλείδωμα οθόνης"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Πατήστε παρατεταμένα για τον Βοηθό"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Ενεργοποιήστε τον Βοηθό πατώντας παρατεταμένα το κουμπί λειτουργίας"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Μενού λειτουργίας και έκτακτης ανάγκης:\nΠατήστε το κουμπί λειτουργίας και το κουμπί αύξησης έντασης ήχου ταυτόχρονα."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Αποτροπή ήχου κλήσης:\nΗ συντόμευση είναι διαθέσιμη στο μενού έντασης ήχου."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Μενού λειτουργίας:\nΠατήστε ταυτόχρονα το κουμπί λειτουργίας και το κουμπί αύξησης έντασης ήχου"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Αποτροπή κουδουνίσματος:\nΠατήστε ένα κουμπί έντασης ήχου για τη συντόμευση"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Διάρκεια παρατεταμένου πατήματος"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Προσαρμόστε την ευαισθησία επιλέγοντας πόση ώρα θα πρέπει να διαρκεί το παρατεταμένο πάτημα του κουμπιού λειτουργίας."</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Μικρή"</string>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index ea9ddb4..59e5875 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"When they use Pixel Imprint, images are used to update their fingerprint model. Images used to create your child’s fingerprint model are never stored, but the fingerprint model is stored securely on the phone and never leaves the phone. All processing occurs securely on the phone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"You can delete your fingerprint images and model, or turn off Fingerprint Unlock at any time in settings. Fingerprint images and models are stored on the phone until you delete them."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"You and your child can delete their fingerprint images and model, or turn off Fingerprint Unlock at any time in Settings. Fingerprint images and models are stored on the phone until they’re deleted."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Your tablet can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Your device can be unlocked when you don’t intend to, like if someone holds it up to your finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Your child’s phone can be unlocked when they don’t intend it to be; for example, if someone holds it up to their finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"For best results, use a screen protector that’s Made For Google certified. With other screen protectors, your fingerprint may not work."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"For best results, use a screen protector that’s Made For Google certified. With other screen protectors, your child’s fingerprint may not work."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration with device and fingerprint sensor location"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Name"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Try again"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Delete"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Touch the sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Put your finger on the sensor and lift after you feel a vibration"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Done"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Whoops, that\'s not the sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Touch the sensor on the back of your phone. Use your index finger."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Enrolment was not completed"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Fingerprint enrolment time limit reached. Try again."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Fingerprint setup timed out"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Try again now or set up your fingerprint later in Settings"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Fingerprint enrolment didn\'t work. Try again or use a different finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Add another"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Next"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Customise your phone"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Try different styles, wallpapers and more"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Screen saver"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Use screen saver"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"While charging or docked"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Either"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"While charging"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"While docked"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Never"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Off"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"To control what happens when the phone is docked and/or sleeping, turn the screen saver on."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"When to start"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Current screen saver"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Settings"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatic brightness"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Lift to wake"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambient display"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Set a PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Set a work PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Set a pattern"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"For added security, set a pattern to unlock the device"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Set a work pattern"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"To use fingerprint, set password"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"To use fingerprint, set pattern"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Emergency app"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Reset app preferences"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Reset app preferences?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>\n<li>"Disabled app notifications"</li>\n<li>"Default applications for actions"</li>\n<li>"Background data restrictions for apps"</li>\n<li>"Any permission restrictions"</li>\n\n"You will not lose any app data."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>\n<li>"Disabled app notifications"</li>\n<li>"Default applications for actions"</li>\n<li>"Background data restrictions for apps"</li>\n<li>"Any permission restrictions"</li>\n<li>"Battery usage settings"</li>\n\n"You will not lose any app data."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Reset apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Manage space"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Reset settings"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Display size and text settings have been reset"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Reset display size and text?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Your display size and text preferences will be reset to the tablet’s original settings"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Reset"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Any weekend plans?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Heading to the beach. Want to join?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"No usage from last full charge"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"No usage for past 24 hr"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Other users"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Battery left estimate is based on your device usage"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Estimated time left"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Until fully charged"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Full hotword and interaction"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Simple speech to text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"This voice input service will be able to perform always-on voice monitoring, and control voice enabled applications on your behalf. It comes from the <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> application. Enable the use of this service?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"On-device recognition settings"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"On-device recognition"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"On-device speech recognition"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Preferred engine"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Engine settings"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Speech rate & pitch"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Delete"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"All apps and data in this session will be deleted."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Remove"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Guest (you)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Users"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Other users"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Delete guest activity"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Delete all guest apps and data when exiting guest mode"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time that you exit guest mode"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Turn on phone calls"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Delete user"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"All \'<xliff:g id="APP_NAME">%1$s</xliff:g>\' notifications"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"All <xliff:g id="APP_NAME">%1$s</xliff:g> notifications"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptive notifications"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Never"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Device & app notifications"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Do nothing"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrate"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Mute"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"To enable, first change \'Press and hold power button\' to the power menu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"To enable, first change \'Press & hold power button\' to the power menu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Network details"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices, connect to a Wi-Fi network or set up a Wi-Fi hotspot."</string>
<string name="devices_title" msgid="649715719278562515">"Devices"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"device controls"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cards and passes"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cards and passes"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Press and hold power button"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Press and hold for Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Press and hold for the power menu"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Press and hold disabled"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Press & hold power button"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Press & hold the power button to access"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Power menu"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Access digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Access power menu"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"To use, first set a screen lock"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Hold for Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Trigger Assistant by holding the power button"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Power & emergency menu:\nPress power and volume up at the same time."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Prevent ringing:\nShortcut available in the volume menu."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Power menu:\nPress the power button and the volume up button at the same time"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Prevent ringing:\nPress a volume button for the shortcut"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Press & hold duration"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Adjust sensitivity by choosing how long to press & hold the power button"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Short"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 30bb518..ae19d44 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"When they use Pixel Imprint, images are used to update their fingerprint model. Images used to create your child’s fingerprint model are never stored, but the fingerprint model is stored securely on the phone and never leaves the phone. All processing occurs securely on the phone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"You can delete your fingerprint images and model, or turn off Fingerprint Unlock at any time in settings. Fingerprint images and models are stored on the phone until you delete them."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"You and your child can delete their fingerprint images and model, or turn off Fingerprint Unlock at any time in Settings. Fingerprint images and models are stored on the phone until they’re deleted."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Your tablet can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Your device can be unlocked when you don’t intend to, like if someone holds it up to your finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Your child’s phone can be unlocked when they don’t intend it to be; for example, if someone holds it up to their finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"For best results, use a screen protector that’s Made For Google certified. With other screen protectors, your fingerprint may not work."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"For best results, use a screen protector that’s Made For Google certified. With other screen protectors, your child’s fingerprint may not work."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration with device and fingerprint sensor location"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Name"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Try again"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Delete"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Touch the sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Put your finger on the sensor and lift after you feel a vibration"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Done"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Whoops, that\'s not the sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Touch the sensor on the back of your phone. Use your index finger."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Enrolment was not completed"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Fingerprint enrolment time limit reached. Try again."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Fingerprint setup timed out"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Try again now or set up your fingerprint later in Settings"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Fingerprint enrolment didn\'t work. Try again or use a different finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Add another"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Next"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Customise your phone"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Try different styles, wallpapers and more"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Screen saver"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Use screen saver"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"While charging or docked"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Either"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"While charging"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"While docked"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Never"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Off"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"To control what happens when the phone is docked and/or sleeping, turn the screen saver on."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"When to start"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Current screen saver"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Settings"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatic brightness"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Lift to wake"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambient display"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Set a PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Set a work PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Set a pattern"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"For added security, set a pattern to unlock the device"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Set a work pattern"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"To use fingerprint, set password"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"To use fingerprint, set pattern"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Emergency app"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Reset app preferences"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Reset app preferences?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>\n<li>"Disabled app notifications"</li>\n<li>"Default applications for actions"</li>\n<li>"Background data restrictions for apps"</li>\n<li>"Any permission restrictions"</li>\n\n"You will not lose any app data."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>\n<li>"Disabled app notifications"</li>\n<li>"Default applications for actions"</li>\n<li>"Background data restrictions for apps"</li>\n<li>"Any permission restrictions"</li>\n<li>"Battery usage settings"</li>\n\n"You will not lose any app data."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Reset apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Manage space"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Reset settings"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Display size and text settings have been reset"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Reset display size and text?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Your display size and text preferences will be reset to the tablet’s original settings"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Reset"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Any weekend plans?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Heading to the beach. Want to join?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"No usage from last full charge"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"No usage for past 24 hr"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Other users"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Battery left estimate is based on your device usage"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Estimated time left"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Until fully charged"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Full hotword and interaction"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Simple speech to text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"This voice input service will be able to perform always-on voice monitoring, and control voice enabled applications on your behalf. It comes from the <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> application. Enable the use of this service?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"On-device recognition settings"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"On-device recognition"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"On-device speech recognition"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Preferred engine"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Engine settings"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Speech rate & pitch"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Delete"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"All apps and data in this session will be deleted."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Remove"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Guest (you)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Users"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Other users"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Delete guest activity"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Delete all guest apps and data when exiting guest mode"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time that you exit guest mode"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Turn on phone calls"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Delete user"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"All \'<xliff:g id="APP_NAME">%1$s</xliff:g>\' notifications"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"All <xliff:g id="APP_NAME">%1$s</xliff:g> notifications"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptive notifications"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Never"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Device & app notifications"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Do nothing"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrate"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Mute"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"To enable, first change \'Press and hold power button\' to the power menu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"To enable, first change \'Press & hold power button\' to the power menu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Network details"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices, connect to a Wi-Fi network or set up a Wi-Fi hotspot."</string>
<string name="devices_title" msgid="649715719278562515">"Devices"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"device controls"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cards and passes"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cards and passes"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Press and hold power button"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Press and hold for Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Press and hold for the power menu"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Press and hold disabled"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Press & hold power button"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Press & hold the power button to access"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Power menu"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Access digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Access power menu"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"To use, first set a screen lock"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Hold for Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Trigger Assistant by holding the power button"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Power & emergency menu:\nPress power and volume up at the same time."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Prevent ringing:\nShortcut available in the volume menu."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Power menu:\nPress the power button and the volume up button at the same time"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Prevent ringing:\nPress a volume button for the shortcut"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Press & hold duration"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Adjust sensitivity by choosing how long to press & hold the power button"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Short"</string>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 10ec02c..d020650 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"When they use Pixel Imprint, images are used to update their fingerprint model. Images used to create your child’s fingerprint model are never stored, but the fingerprint model is stored securely on the phone and never leaves the phone. All processing occurs securely on the phone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"You can delete your fingerprint images and model, or turn off Fingerprint Unlock at any time in settings. Fingerprint images and models are stored on the phone until you delete them."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"You and your child can delete their fingerprint images and model, or turn off Fingerprint Unlock at any time in Settings. Fingerprint images and models are stored on the phone until they’re deleted."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Your tablet can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Your device can be unlocked when you don’t intend to, like if someone holds it up to your finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Your child’s phone can be unlocked when they don’t intend it to be; for example, if someone holds it up to their finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"For best results, use a screen protector that’s Made For Google certified. With other screen protectors, your fingerprint may not work."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"For best results, use a screen protector that’s Made For Google certified. With other screen protectors, your child’s fingerprint may not work."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration with device and fingerprint sensor location"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Name"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Try again"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Delete"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Touch the sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Put your finger on the sensor and lift after you feel a vibration"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Done"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Whoops, that\'s not the sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Touch the sensor on the back of your phone. Use your index finger."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Enrolment was not completed"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Fingerprint enrolment time limit reached. Try again."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Fingerprint setup timed out"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Try again now or set up your fingerprint later in Settings"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Fingerprint enrolment didn\'t work. Try again or use a different finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Add another"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Next"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Customise your phone"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Try different styles, wallpapers and more"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Screen saver"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Use screen saver"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"While charging or docked"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Either"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"While charging"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"While docked"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Never"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Off"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"To control what happens when the phone is docked and/or sleeping, turn the screen saver on."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"When to start"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Current screen saver"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Settings"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatic brightness"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Lift to wake"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambient display"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Set a PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Set a work PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Set a pattern"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"For added security, set a pattern to unlock the device"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Set a work pattern"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"To use fingerprint, set password"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"To use fingerprint, set pattern"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Emergency app"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Reset app preferences"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Reset app preferences?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>\n<li>"Disabled app notifications"</li>\n<li>"Default applications for actions"</li>\n<li>"Background data restrictions for apps"</li>\n<li>"Any permission restrictions"</li>\n\n"You will not lose any app data."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>\n<li>"Disabled app notifications"</li>\n<li>"Default applications for actions"</li>\n<li>"Background data restrictions for apps"</li>\n<li>"Any permission restrictions"</li>\n<li>"Battery usage settings"</li>\n\n"You will not lose any app data."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Reset apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Manage space"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Reset settings"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Display size and text settings have been reset"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Reset display size and text?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Your display size and text preferences will be reset to the tablet’s original settings"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Reset"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Any weekend plans?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Heading to the beach. Want to join?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"No usage from last full charge"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"No usage for past 24 hr"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Other users"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Battery left estimate is based on your device usage"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Estimated time left"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Until fully charged"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Full hotword and interaction"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Simple speech to text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"This voice input service will be able to perform always-on voice monitoring, and control voice enabled applications on your behalf. It comes from the <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> application. Enable the use of this service?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"On-device recognition settings"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"On-device recognition"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"On-device speech recognition"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Preferred engine"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Engine settings"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Speech rate & pitch"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Delete"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"All apps and data in this session will be deleted."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Remove"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Guest (you)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Users"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Other users"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Delete guest activity"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Delete all guest apps and data when exiting guest mode"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time that you exit guest mode"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Turn on phone calls"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Delete user"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"All \'<xliff:g id="APP_NAME">%1$s</xliff:g>\' notifications"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"All <xliff:g id="APP_NAME">%1$s</xliff:g> notifications"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptive notifications"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Never"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Device & app notifications"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Do nothing"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrate"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Mute"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"To enable, first change \'Press and hold power button\' to the power menu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"To enable, first change \'Press & hold power button\' to the power menu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Network details"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices, connect to a Wi-Fi network or set up a Wi-Fi hotspot."</string>
<string name="devices_title" msgid="649715719278562515">"Devices"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"device controls"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cards and passes"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cards and passes"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Press and hold power button"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Press and hold for Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Press and hold for the power menu"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Press and hold disabled"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Press & hold power button"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Press & hold the power button to access"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Power menu"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Access digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Access power menu"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"To use, first set a screen lock"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Hold for Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Trigger Assistant by holding the power button"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Power & emergency menu:\nPress power and volume up at the same time."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Prevent ringing:\nShortcut available in the volume menu."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Power menu:\nPress the power button and the volume up button at the same time"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Prevent ringing:\nPress a volume button for the shortcut"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Press & hold duration"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Adjust sensitivity by choosing how long to press & hold the power button"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Short"</string>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 3b71336..8370360 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"When they use Pixel Imprint, images are used to update their fingerprint model. Images used to create your child’s fingerprint model are never stored, but the fingerprint model is stored securely on the phone and never leaves the phone. All processing occurs securely on the phone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"You can delete your fingerprint images and model, or turn off Fingerprint Unlock at any time in settings. Fingerprint images and models are stored on the phone until you delete them."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"You and your child can delete their fingerprint images and model, or turn off Fingerprint Unlock at any time in Settings. Fingerprint images and models are stored on the phone until they’re deleted."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Your tablet can be unlocked when you don’t intend it to be; for example, if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Your device can be unlocked when you don’t intend to, like if someone holds it up to your finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Your child’s phone can be unlocked when they don’t intend it to be; for example, if someone holds it up to their finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"For best results, use a screen protector that’s Made For Google certified. With other screen protectors, your fingerprint may not work."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"For best results, use a screen protector that’s Made For Google certified. With other screen protectors, your child’s fingerprint may not work."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration with device and fingerprint sensor location"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Name"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Try again"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Delete"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Touch the sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Put your finger on the sensor and lift after you feel a vibration"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Done"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Whoops, that\'s not the sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Touch the sensor on the back of your phone. Use your index finger."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Enrolment was not completed"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Fingerprint enrolment time limit reached. Try again."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Fingerprint setup timed out"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Try again now or set up your fingerprint later in Settings"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Fingerprint enrolment didn\'t work. Try again or use a different finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Add another"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Next"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Customise your phone"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Try different styles, wallpapers and more"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Screen saver"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Use screen saver"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"While charging or docked"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Either"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"While charging"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"While docked"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Never"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Off"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"To control what happens when the phone is docked and/or sleeping, turn the screen saver on."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"When to start"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Current screen saver"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Settings"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatic brightness"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Lift to wake"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambient display"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Set a PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Set a work PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Set a pattern"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"For added security, set a pattern to unlock the device"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Set a work pattern"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"To use fingerprint, set password"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"To use fingerprint, set pattern"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Emergency app"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Reset app preferences"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Reset app preferences?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>\n<li>"Disabled app notifications"</li>\n<li>"Default applications for actions"</li>\n<li>"Background data restrictions for apps"</li>\n<li>"Any permission restrictions"</li>\n\n"You will not lose any app data."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>\n<li>"Disabled app notifications"</li>\n<li>"Default applications for actions"</li>\n<li>"Background data restrictions for apps"</li>\n<li>"Any permission restrictions"</li>\n<li>"Battery usage settings"</li>\n\n"You will not lose any app data."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Reset apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Manage space"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Reset settings"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Display size and text settings have been reset"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Reset display size and text?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Your display size and text preferences will be reset to the tablet’s original settings"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Reset"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Any weekend plans?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Heading to the beach. Want to join?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"No usage from last full charge"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"No usage for past 24 hr"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Other users"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Battery left estimate is based on your device usage"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Estimated time left"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Until fully charged"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Full hotword and interaction"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Simple speech to text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"This voice input service will be able to perform always-on voice monitoring, and control voice enabled applications on your behalf. It comes from the <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> application. Enable the use of this service?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"On-device recognition settings"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"On-device recognition"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"On-device speech recognition"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Preferred engine"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Engine settings"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Speech rate & pitch"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Delete"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"All apps and data in this session will be deleted."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Remove"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Guest (you)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Users"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Other users"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Delete guest activity"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Delete all guest apps and data when exiting guest mode"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time that you exit guest mode"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Turn on phone calls"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Delete user"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"All \'<xliff:g id="APP_NAME">%1$s</xliff:g>\' notifications"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"All <xliff:g id="APP_NAME">%1$s</xliff:g> notifications"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptive notifications"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Never"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Device & app notifications"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Do nothing"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrate"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Mute"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"To enable, first change \'Press and hold power button\' to the power menu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"To enable, first change \'Press & hold power button\' to the power menu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Network details"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices, connect to a Wi-Fi network or set up a Wi-Fi hotspot."</string>
<string name="devices_title" msgid="649715719278562515">"Devices"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"device controls"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cards and passes"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cards and passes"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Press and hold power button"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Press and hold for Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Press and hold for the power menu"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Press and hold disabled"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Press & hold power button"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Press & hold the power button to access"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Power menu"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Access digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Access power menu"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"To use, first set a screen lock"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Hold for Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Trigger Assistant by holding the power button"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Power & emergency menu:\nPress power and volume up at the same time."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Prevent ringing:\nShortcut available in the volume menu."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Power menu:\nPress the power button and the volume up button at the same time"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Prevent ringing:\nPress a volume button for the shortcut"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Press & hold duration"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Adjust sensitivity by choosing how long to press & hold the power button"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Short"</string>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 7b9eb6e..80c8e39 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"When they use Pixel Imprint, images are used to update their fingerprint model. Images used to create your child’s fingerprint model are never stored, but the fingerprint model is stored securely on the phone and never leaves the phone. All processing occurs securely on the phone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"You can delete your fingerprint images and model, or turn off Fingerprint Unlock at any time in Settings. Fingerprint images and models are stored on the phone until you delete them."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"You and your child can delete their fingerprint images and model, or turn off Fingerprint Unlock at any time in Settings. Fingerprint images and models are stored on the phone until they’re deleted."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend to, like if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Your phone can be unlocked when you don’t intend to, like if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Your tablet can be unlocked when you don’t intend to, like if someone holds it up to your finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Your device can be unlocked when you don’t intend to, like if someone holds it up to your finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Your child’s phone can be unlocked when they don’t intend to, like if someone holds it up to their finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"For best results, use a screen protector that’s Made for Google certified. With other screen protectors, your fingerprint may not work."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"For best results, use a screen protector that’s Made for Google certified. With other screen protectors, your child’s fingerprint may not work."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration with device and fingerprint sensor location"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Name"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Try again"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Delete"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Touch the sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Put your finger on the sensor and lift after you feel a vibration"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Done"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Whoops, that’s not the sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Touch the sensor on the back of your phone. Use your index finger."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Enrollment was not completed"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Fingerprint enrollment time limit reached. Try again."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Fingerprint setup timed out"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Try again now or set up your fingerprint later in Settings"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Fingerprint enrollment didn\'t work. Try again or use a different finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Add another"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Next"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Customize your phone"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Try different styles, wallpapers, and more"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Screen saver"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Use screen saver"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"While charging or docked"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Either"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"While charging"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"While docked"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Never"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Off"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"To control what happens when the phone is docked and/or sleeping, turn screen saver on."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"When to start"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Current screen saver"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Settings"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatic brightness"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Lift to wake"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambient display"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Set a PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Set a work PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Set a pattern"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"For added security, set a pattern to unlock the device"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Set a work pattern"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"To use fingerprint, set password"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"To use fingerprint, set pattern"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Emergency app"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Reset app preferences"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Reset app preferences?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>"\n"<li>"Disabled app notifications"</li>"\n"<li>"Default applications for actions"</li>"\n"<li>"Background data restrictions for apps"</li>"\n"<li>"Any permission restrictions"</li>"\n\nYou will not lose any app data."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"This will reset all preferences for:\n\n"<li>"Disabled apps"</li>"\n"<li>"Disabled app notifications"</li>"\n"<li>"Default applications for actions"</li>"\n"<li>"Background data restrictions for apps"</li>"\n"<li>"Any permission restrictions"</li>"\n"<li>"Battery usage settings"</li>"\n\nYou will not lose any app data."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Reset apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Manage space"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Reset settings"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Display size and text settings have been reset"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Reset display size and text?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Your display size and text preferences will reset to the phone’s original settings"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Your display size and text preferences will reset to the tablet’s original settings"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Reset"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Any weekend plans?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Heading to the beach. Want to join?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"No usage from last full charge"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"No usage for past 24 hr"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Other users"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Battery left estimate is based on your device usage"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Estimated time left"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Until fully charged"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Full hotword and interaction"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Simple speech to text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"This voice input service will be able to perform always-on voice monitoring and control voice enabled applications on your behalf. It comes from the <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> application. Enable the use of this service?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"On-device recognition settings"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"On-device recognition"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"On-device speech recognition"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Preferred engine"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Engine settings"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Speech rate & pitch"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Delete"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"All apps and data in this session will be deleted."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Remove"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Guest (You)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Users"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Other users"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Delete guest activity"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Delete all guest apps and data when exiting guest mode"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Delete guest activity?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps and data from this guest session will be deleted now, and all future guest activity will be deleted each time you exit guest mode"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Turn on phone calls"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Turn on phone calls & SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Delete user"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"All \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" notifications"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"All <xliff:g id="APP_NAME">%1$s</xliff:g> notifications"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptive Notifications"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per day</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
+ <item quantity="one">About <xliff:g id="NUMBER_0">%d</xliff:g> notification per week</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Never"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Device & app notifications"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Do nothing"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrate"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Mute"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"To enable, first change \"Press and hold power button\" to the power menu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"To enable, first change \"Press & hold power button\" to the power menu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Network details"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Your device name is visible to apps on your phone. It may also be seen by other people when you connect to Bluetooth devices, connect to a Wi-Fi network or set up a Wi-Fi hotspot."</string>
<string name="devices_title" msgid="649715719278562515">"Devices"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"device controls"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cards & passes"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cards & passes"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Press and hold power button"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Press and hold for the Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Press and hold for the power menu"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Press and hold disabled"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Press & hold power button"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Press & hold power button to access"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Power menu"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Access digital assistant"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Access power menu"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"To use, first set a screen lock"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Hold for Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Trigger the Assistant by holding the power button"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Power & Emergency Menu:\nPress Power and Volume up at the same time."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Prevent ringing:\nShortcut available in the volume menu."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Power menu:\nPress the power button and the volume up button at the same time"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Prevent ringing:\nPress a volume button for the shortcut"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Press & hold duration"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Adjust sensitivity by choosing how long to press & hold the power button"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Short"</string>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 0a4df20..56e0676 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Cuando usa Pixel Imprint, las imágenes se utilizan para actualizar el modelo de huella dactilar. Las imágenes que se usan para crear el modelo de tu hijo no se guardan, pero el modelo en sí se almacena de manera segura en el teléfono y nunca sale de él. Todo el proceso se lleva a cabo en el teléfono de forma segura."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Puedes borrar las imágenes de tu huella dactilar y el modelo, o bien desactivar el desbloqueo con huella dactilar en cualquier momento desde la Configuración. Los modelos y las imágenes de la huella dactilar se almacenan en el teléfono hasta que los borras."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Tu hijo y tú pueden borrar el modelo y las imágenes de su huella dactilar, así como desactivar la función Desbloqueo con huellas dactilares en cualquier momento desde Configuración. Los modelos y las imágenes de la huella se almacenan en el teléfono hasta que se borran."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Tu teléfono se puede desbloquear aunque no lo desees, por ejemplo, cuando alguien lo sostiene frente a tu dedo."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Tu teléfono se puede desbloquear aunque no lo desees, por ejemplo, cuando alguien lo sostiene frente a tu dedo."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tu tablet se puede desbloquear aunque no lo desees, por ejemplo, cuando alguien la sostiene frente a tu dedo."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Tu dispositivo se puede desbloquear aunque no lo desees, por ejemplo, cuando alguien lo sostiene frente a tu dedo."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"El teléfono de tu hijo puede desbloquearse sin que así lo quisiera, por ejemplo, porque alguien se lo acercó al dedo."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Para obtener los mejores resultados, usa un protector de pantalla que tenga certificación Made for Google. Es posible que tu huella dactilar no funcione con otros protectores."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Para obtener los mejores resultados, usa un protector de pantalla que tenga certificación Made for Google. Es posible que la huella dactilar de tu hijo no funcione con otros protectores."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustración del dispositivo y la ubicación del sensor de huellas dactilares"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nombre"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Aceptar"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Reintentar"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Borrar"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Toca el sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Coloca el dedo en el sensor y levántalo cuando sientas una vibración."</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Listo"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ese no es el sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Toca el sensor en la parte posterior del teléfono con el dedo índice."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"No se completó la inscripción"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Se alcanzó el límite de tiempo para la inscripción de huellas dactilares. Vuelve a intentarlo."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Tiempo para conf. huella dactilar agotado"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Vuelve a intentarlo o hazlo más tarde en Configuración"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"El registro de huellas dactilares no funcionó. Vuelve a intentarlo o usa otro dedo."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Agregar otra huella digital"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Siguiente"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personaliza tu teléfono"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Prueba diferentes estilos, fondos de pantalla y mucho más"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Protector de pantalla"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"protector de pantalla"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Usar protector de pantalla"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Mientras se carga o está conectado"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"En ambos casos"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Mientras se carga"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Cuando está conectado"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nunca"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Apagado"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Para controlar qué sucede cuando el teléfono está conectado o suspendido, activa el protector de pantalla."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Cuándo comenzar"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Protector de pantalla actual"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Configuración"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Brillo automático"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Levantar el dispositivo para activarlo"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Pantalla Ambiente"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Establecer un PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Establecer un PIN de trabajo"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Establecer un patrón"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Para mayor seguridad, establece un patrón para desbloquear el dispositivo"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Establecer un patrón de trabajo"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Configura la contraseña de respaldo"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Para usar tu huella, configura un patrón"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplicación de emergencia"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Restablecer preferencias de apps"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"¿Restablecer preferencias de apps?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Se restablecerán todas las preferencias de lo siguiente:\n\n"<li>"Apps inhabilitadas"</li>\n<li>"Notificaciones de apps inhabilitadas"</li>\n<li>"Apps predeterminadas para realizar acciones"</li>\n<li>"Restricciones de datos en segundo plano para apps"</li>\n<li>"Restricciones de permisos"</li>\n\n"No perderás los datos de las apps."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Se restablecerán todas las preferencias de lo siguiente:\n\n"<li>"Apps inhabilitadas"</li>\n<li>"Notificaciones de apps inhabilitadas"</li>\n<li>"Apps predeterminadas para realizar acciones"</li>\n<li>"Restricciones de datos en segundo plano para apps"</li>\n<li>"Restricciones de permisos"</li>\n<li>"Configuración de uso de batería"</li>\n\n"No perderás los datos de las apps."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Restablecer apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Administrar el espacio"</string>
<string name="filter" msgid="9039576690686251462">"Filtro"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Restablecer configuración"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Se restableció la configuración del tamaño de visualización y del texto"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"¿Deseas restablecer el texto y el tamaño de la pantalla?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Se restablecerán las preferencias de texto y tamaño de la pantalla a las de la configuración original del teléfono"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Se restablecerán las preferencias de texto y tamaño de la pantalla a las de la configuración original del teléfono"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Se restablecerán las preferencias de texto y tamaño de la pantalla a los parámetros de configuración originales de la tablet"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Restablecer"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"¿Tienes algún plan para el fin de semana?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Iré a la playa. ¿Quieres venir?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Se se usó desde la última carga completa"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Sin uso durante las últimas 24 h"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Otros usuarios"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"El cálculo de batería restante se basa en el uso del dispositivo"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Tiempo restante estimado"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Para completar la carga"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Interacción y palabra clave completa"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Voz a texto simple"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Este servicio de entrada de voz puede supervisar que siempre esté activada la voz y controlar en tu nombre las aplicaciones que pueden utilizar la entrada de voz. Procede de <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. ¿Quieres habilitar el uso de este servicio?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Configuración de reconocimiento integrada en el dispositivo"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Reconocimiento integrado en el dispositivo"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Reconocimiento de voz integrado en el dispositivo"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Motor preferido"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Configuración del motor"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Velocidad y tono de la voz"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Borrar"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Se eliminarán las aplicaciones y los datos de esta sesión."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Eliminar"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Invitado (tú)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Usuarios"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Otros usuarios"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Borrar la actividad de invitado"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Borra todas las apps y los datos de invitado cuando salgas del modo de invitado"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"¿Borrar la actividad de invitado?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Las apps y los datos de esta sesión de invitado se borrarán ahora, y toda la actividad futura correspondiente se borrará cada vez que salgas del modo de invitado."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Activar llamadas telefónicas"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activar llamadas telefónicas y SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Borrar usuario"</string>
@@ -4009,11 +4023,11 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Todas las notificaciones de \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Todas las notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notificaciones adaptables"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
<item quantity="other">Aproximadamente <xliff:g id="NUMBER_1">%,d</xliff:g> notificaciones por día</item>
<item quantity="one">Aproximadamente <xliff:g id="NUMBER_0">%d</xliff:g> notificación por día</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
<item quantity="other">Aproximadamente <xliff:g id="NUMBER_1">%,d</xliff:g> notificaciones por semana</item>
<item quantity="one">Aproximadamente <xliff:g id="NUMBER_0">%d</xliff:g> notificación por semana</item>
</plurals>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"No hacer nada"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrar"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Silenciar"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Para habilitar la función, cambia \"Mantener presionado el botón de encendido\" para acceder al menú de encendido."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"A fin de habilitar la función, cambia \"Mantener presionado el botón de encendido\" para acceder al menú de encendido."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalles de la red"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"El nombre de tu dispositivo es visible para las apps del teléfono. Es posible que también lo vean otras personas cuando te conectes a dispositivos Bluetooth o a una red Wi-Fi, o cuando configures un hotspot de Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Dispositivos"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"controles de dispositivos"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Tarjetas y pases"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"tarjetas y pases"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Mantener presionado el botón de encendido"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Mantener presionado para acceder al Asistente"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Mantener presionado para abrir menú de encendido"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Opción mantener presionado inhabilitada"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Mantén presionado el botón de encendido"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Mantén presionado el botón de encendido para acceder"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menú de encendido"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Asistente digital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Acceso al asistente digital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Acceso al menú de encendido"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Para usarlo, debes establecer un bloqueo de pantalla"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Mantén presionado para hablar con Asistente"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Mantén presionado el botón de encendido para activar Asistente"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menú de encendido y emergencia:\nPresiona los botones de encendido y de subir volumen al mismo tiempo."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Impedir hacer sonar:\nEl acceso directo está disponible en el menú de volumen."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menú de encendido:\nPresiona el botón de encendido y el botón de subir volumen al mismo tiempo"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Silenciar sonidos:\nPresiona un botón de volumen para usar la combinación de teclas"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Duración de presión"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Elige durante cuánto tiempo quieres mantener presionado el botón de encendido para ajustar la sensibilidad"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Corta"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 16a4e99..5d79b69 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Cuando usa Pixel Imprint, se utilizan imágenes para actualizar el modelo de su huella digital. Las imágenes usadas para crear el modelo de huella digital de tu hijo/a nunca se guardan, pero el modelo en sí se almacena de manera segura en el teléfono y nunca sale de él. Todos los procesos se llevan a cabo de forma segura en el teléfono."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Puedes eliminar las imágenes y el modelo de tu huella digital, o desactivar Desbloqueo con huella digital en cualquier momento desde Ajustes. Las imágenes y los modelos de huellas digitales se almacenan en el teléfono hasta que los eliminas."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Tú y tu hijo/a podéis eliminar el modelo y las imágenes de su huella digital, así como desactivar Desbloqueo con huella digital en cualquier momento desde Ajustes. Los modelos y las imágenes de la huella digital se almacenan en el teléfono hasta que se eliminan."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Tu teléfono puede desbloquearse aunque no sea tu intención (por ejemplo, si alguien lo acerca a tu dedo)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Tu teléfono puede desbloquearse aunque no sea tu intención (por ejemplo, si alguien lo acerca a tu dedo)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tu tablet puede desbloquearse aunque no sea tu intención (por ejemplo, si alguien lo acerca a tu dedo)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Tu dispositivo puede desbloquearse aunque no sea tu intención (por ejemplo, si alguien lo acerca a tu dedo)."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"El teléfono de tu hijo/a puede desbloquearse sin que quiera, por ejemplo, porque alguien se lo ha acercado al dedo."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Para obtener mejores resultados, usa un protector de pantalla con certificado Made for Google. Con otros protectores de pantalla, puede que tu huella digital no funcione."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Para obtener mejores resultados, usa un protector de pantalla con certificado Made for Google. Con otros protectores de pantalla, puede que la huella digital de tu hijo/a no funcione."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustración con la ubicación del sensor de huellas digitales y dispositivo"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nombre"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Aceptar"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Reintentar"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Eliminar"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Toca el sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Pon el dedo en el sensor y levántalo cuando notes una vibración"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Hecho"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"¡Vaya! Ese no es el sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Toca el sensor situado detrás del teléfono con el dedo índice."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registro no completado"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Se ha superado el tiempo de registro de la huella digital. Vuelve a intentarlo."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Tiempo agotado para configurar la huella digital"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Inténtalo otra vez ahora o configura la huella digital en otro momento desde Ajustes"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"El registro de la huella digital no se ha realizado correctamente. Vuelve a intentarlo o utiliza otro dedo."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Añadir otra"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Siguiente"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personalizar el teléfono"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Prueba diferentes estilos, fondos de pantalla y mucho más"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Salvapantallas"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"salvapantallas"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Usar salvapantallas"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Durante la carga o en una base"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Ambos casos"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Durante la carga"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Con el dispositivo en una base"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nunca"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Desactivado"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Para controlar lo que ocurre cuando el teléfono está en un dock o inactivo, activa el salvapantallas."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Cuándo empezar a mostrarlo"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Salvapantallas actual"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Ajustes"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Brillo automático"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Levantar el dispositivo para activarlo"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Pantalla ambiente"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Establece un PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Establece un PIN para el trabajo"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Crea un patrón"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Para mayor seguridad, configura un patrón para desbloquear el dispositivo"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Crea un patrón de trabajo"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Para usar una huella, establece un patrón"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Para usar una huella, establece un patrón"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplicación Emergencia"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Recuperar ajustes de aplicaciones"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"¿Recuperar preferencias de las aplicaciones?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Se recuperarán todas las preferencias de:\n\n"<li>"Aplicaciones inhabilitadas"</li>\n<li>"Notificaciones de aplicaciones inhabilitadas"</li>\n<li>"Aplicaciones predeterminadas para acciones"</li>\n<li>"Restricciones de datos en segundo plano de aplicaciones"</li>\n<li>"Restricciones de permisos"</li>\n\n"No se perderán los datos de las aplicaciones."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Se recuperarán todas las preferencias de:\n\n"<li>"Aplicaciones inhabilitadas"</li>\n<li>"Notificaciones de aplicaciones inhabilitadas"</li>\n<li>"Aplicaciones predeterminadas para acciones"</li>\n<li>"Restricciones de datos en segundo plano de aplicaciones"</li>\n<li>"Restricciones de permisos"</li>\n<li>"Ajustes del uso de batería"</li>\n\n"No se perderán los datos de las aplicaciones."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Recuperar aplicaciones"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Gestionar espacio"</string>
<string name="filter" msgid="9039576690686251462">"Filtrar"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Restablecer ajustes"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"La configuración del tamaño y texto de la pantalla se ha restablecido"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"¿Restablecer el tamaño y texto de la pantalla?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Tus preferencias de tamaño y texto de la pantalla se restablecerán a las de la configuración original del teléfono"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Tus preferencias de tamaño y texto de la pantalla se restablecerán a las de la configuración original del teléfono"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Tus preferencias de tamaño y texto de la pantalla se restablecerán a las de la configuración original del tablet"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Restablecer"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"¿Tienes algún plan este fin de semana?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Iré a la playa. ¿Quieres venir?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Sin uso desde la última carga completa"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Sin uso durante las últimas 24 horas"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Otros usuarios"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"La estimación de la batería restante se basa en el uso de tu dispositivo"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Tiempo restante estimado"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Hasta completar la carga"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Interacción y palabra activa completa"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Conversión de texto a voz simple"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Este servicio de entrada de voz podrá supervisar que la voz siempre esté activada y controlar las aplicaciones compatibles con la entrada de voz en tu nombre. Procede de la aplicación <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. ¿Quieres habilitar el uso de este servicio?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Ajustes de reconocimiento en el dispositivo"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Reconocimiento en el dispositivo"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Reconocimiento de voz en el dispositivo"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Motor preferido"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Configuración del motor"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Velocidad y tono de la voz"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Eliminar"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Se eliminarán todas las aplicaciones y datos de esta sesión."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Quitar"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Invitado (tú)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Usuarios"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Otros usuarios"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Eliminar actividad de invitado"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Elimina todas las aplicaciones y datos de la sesión de invitado al salir del modo Invitado"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"¿Eliminar actividad de invitado?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Se eliminarán las aplicaciones y datos de esta sesión de invitado ahora, y toda la actividad futura correspondiente se borrará cada vez que salgas del modo Invitado"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Activar llamadas"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activar llamadas y SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Eliminar usuario"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Todas las notificaciones de \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Todas las notificaciones de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notificaciones adaptativas"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">Aproximadamente <xliff:g id="NUMBER_1">%,d</xliff:g> notificaciones al día</item>
- <item quantity="one">Aproximadamente <xliff:g id="NUMBER_0">%d</xliff:g> notificación al día</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Alrededor de <xliff:g id="NUMBER_1">%,d</xliff:g> notificaciones al día</item>
+ <item quantity="one">Alrededor de <xliff:g id="NUMBER_0">%d</xliff:g> notificación al día</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">Aproximadamente <xliff:g id="NUMBER_1">%,d</xliff:g> notificaciones a la semana</item>
- <item quantity="one">Aproximadamente <xliff:g id="NUMBER_0">%d</xliff:g> notificación a la semana</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Alrededor de <xliff:g id="NUMBER_1">%,d</xliff:g> notificaciones a la semana</item>
+ <item quantity="one">Alrededor de <xliff:g id="NUMBER_0">%d</xliff:g> notificación a la semana</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nunca"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificaciones del dispositivo y de aplicaciones"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"No hacer nada"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrar"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Silenciar"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Para habilitarlo, primero cambia \"Mantener pulsado el botón de encendido\" al menú de encendido."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Para habilitarlo, primero cambia \"Mantener pulsado el botón de encendido\" en el menú de encendido."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalles de red"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Las aplicaciones de tu teléfono pueden ver el nombre de tu dispositivo. También es posible que lo vean otros usuarios si lo conectas con dispositivos Bluetooth, si te conectas a una red Wi-Fi o si configuras un punto de acceso Wi‑Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Dispositivos"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"control de dispositivos"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Tarjetas y pases"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"tarjetas y pases"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Mantener pulsado el botón de encendido"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Mantén pulsado el botón de encendido para activar el Asistente"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Mantenlo pulsado para abrir el menú de encendido"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Mantener pulsado está inhabilitado"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Mantener pulsado el botón de encendido"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Mantener pulsado el botón de encendido para acceder"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menú de encendido"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Asistente digital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Acceder al asistente digital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Acceder al menú de encendido"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Para usar esta opción, primero tienes que configurar un bloqueo de pantalla"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Mantener pulsado para hablar con el Asistente"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Activa el Asistente manteniendo pulsado el botón de encendido"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menú de encendido y de emergencias:\nPulsa las teclas de encendido y de subir volumen al mismo tiempo."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Evitar sonar:\nAcceso directo disponible en el menú de volumen."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menú de encendido:\nPulsa el botón de encendido y el botón para subir volumen a la vez"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Evita que suene:\nPulsa un botón de volumen para usar el acceso directo"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Duración de la pulsación"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Ajusta la sensibilidad eligiendo durante cuánto tiempo hay que pulsar el botón de encendido"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Corta"</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index ac5913a..12214b3 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Kui ta kasutab Pixel Imprinti, kasutatakse kujutisi tema sõrmejäljemudeli värskendamiseks. Lapse sõrmejäljemudeli loomiseks kasutatavaid kujutisi ei salvestata mitte kunagi, kuid sõrmejäljemudel salvestatakse turvaliselt tema telefoni, kust seda välja ei saadeta. Kogu töötlus toimub turvaliselt telefonis."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Seadetes saate oma sõrmejäljekujutised ja -mudeli alati kustutada või sõrmejäljega avamise funktsiooni välja lülitada. Sõrmejäljekujutised ja -mudelid salvestatakse telefoni, kuni need kustutate."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Seadetes saate (või saab laps) sõrmejäljekujutised ja -mudeli alati kustutada või sõrmejäljega avamise funktsiooni välja lülitada. Sõrmejäljekujutised ja -mudelid salvestatakse telefoni, kuni need kustutatakse."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Teie telefoni saab avada, kui te seda teha ei kavatse (nt kui keegi hoiab seda teie sõrme vastas)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Teie telefoni saab avada, kui te seda teha ei kavatse (nt kui keegi hoiab seda teie sõrme vastas)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Teie tahvelarvuti saab avada, kui te seda teha ei kavatse (nt kui keegi hoiab seda teie sõrme vastas)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Teie seadme saab avada, kui te seda teha ei kavatse (nt kui keegi hoiab seda teie sõrme vastas)."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Teie lapse telefoni saab avada, kui ta seda teha ei kavatse (nt kui keegi hoiab seda tema sõrme vastas)."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Parimate tulemuste jaoks kasutage ekraanikaitset, millel on sertifikaat Made for Google. Teiste ekraanikaitsmetega ei pruugi teie sõrmejälg toimida."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Parimate tulemuste jaoks kasutage ekraanikaitset, millel on sertifikaat Made for Google. Teiste ekraanikaitsetega ei pruugi teie lapse sõrmejälg toimida."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Seadme joonis ja sõrmejäljeanduri asukoht"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nimi"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Proovige uuesti"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Kustuta"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Puudutage andurit"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Asetage oma sõrm andurile ja kui tunnete värinat, siis tõstke see üles."</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Valmis"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Vabandust, see pole andur"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Puud. telefoni tagaküljel asuvat andurit. Kasut. oma nimetissõrme."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registreerimist ei lõpetatud"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Sõrmejälje registreerimisaeg lõppes. Proovige uuesti."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Sõrmejälje seadistamine aegus"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Proovige kohe uuesti või seadistage sõrmejälg hiljem seadetes"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Sõrmejälje registreerimine ei toiminud. Proovige uuesti või kasutage teist sõrme."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Lisa veel üks"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Järgmine"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Telefoni kohandamine"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Proovige eri stiile, taustapilte ja muud"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Ekraanisäästja"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ekraanisäästja"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Kasuta ekraanisäästjat"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Laadimise ajal või dokis"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Kui on dokitud või laeb"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Laadimise ajal"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Kui on dokitud"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Mitte kunagi"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Välja"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Kui soovite juhtida, mis juhtub telefoni dokkimisel ja/või puhkerežiimi lülitamisel, siis lülitage ekraanisäästja sisse."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Alustamise aeg"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Praegune ekraanisäästja"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Seaded"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automaatne eredus"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Tõstke äratamiseks"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Säästlik ekraan"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Määrake PIN-kood"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Määrake tööprofiili PIN-kood"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Määrake muster"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Turvalisuse huvides seadistage seadme avamiseks muster"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Määrake tööprofiili muster"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Sõrmejälje kasutamiseks määrake parool"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Sõrmejälje kasutamiseks määrake muster"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Hädaabirakendus"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Rakenduste eelistuste lähtestamine"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Lähtestada rakenduste eelistused?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"See lähtestab kõik järgmised eelistused.\n\n"<li>"Keelatud rakendused"</li>\n<li>"Keelatud rakenduste märguanded"</li>\n<li>"Toimingute vaikerakendused"</li>\n<li>"Rakenduste taustaandmete piirangud"</li>\n<li>"Mis tahes lubade piirangud"</li>\n\n"Rakenduste andmed säilivad."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"See lähtestab kõik järgmised eelistused.\n\n"<li>"Keelatud rakendused"</li>\n<li>"Keelatud rakenduste märguanded"</li>\n<li>"Toimingute vaikerakendused"</li>\n<li>"Rakenduste taustaandmete piirangud"</li>\n<li>"Igasugused lubade piirangud"</li>\n<li>"Akukasutuse seaded"</li>\n\n"Rakenduste andmed säilivad."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Lähtesta rakendused"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Halda ruumi"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Lähtesta seaded"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Kuvamissuuruse ja teksti seaded on lähtestatud"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Kas lähtestada kuvamissuurus ja tekst?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Kuvamissuurus ja teksti eelistused lähtestatakse telefoni originaalseadetele"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Kuvamissuurus ja teksti eelistused lähtestatakse telefoni originaalseadetele"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Kuvamissuurus ja teksti eelistused lähtestatakse tahvelarvuti originaalseadetele"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Lähtesta"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Mida nädalavahetusel teed?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Lähen randa. Kas tahad kaasa tulla?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Pole alates viimasest täislaadimisest kasutatud"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Pole viimase 24 tunni jooksul kasutatud"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Teised kasutajad"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Aku järelejäänud tööaja prognoos põhineb seadme kasutusel"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Hinnanguline järelejäänud aeg"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Täislaadimiseni"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Täielik otsetee sõna ja interaktsioon"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Lihtne kõnesüntees"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"See häälsisendi teenus suudab pakkuda alati sisse lülitatud hääle jälgimisteenust ja juhtida teie nimel rakendusi, kus on lubatud häälefunktsioon. See pärineb rakendusest <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Kas lubada teenuse kasutamine?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Seadmepõhise tuvastuse seaded"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Seadmepõhine tuvastus"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Seadmepõhine kõnetuvastus"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Eelistatud kõnesünteesi mootor"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Kõnesünteesi mootori seaded"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Kõne kiirus ja helikõrgus"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Kustuta"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Seansi kõik rakendused ja andmed kustutatakse."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Eemalda"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Külaline (teie)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Kasutajad"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Teised kasutajad"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Kustuta külalise tegevus"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Kustuta külalisrežiimist väljumisel kõik külalise rakendused ja andmed"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Kas kustutada külalise tegevus?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Selle külastajaseansi rakendused ja andmed kustutatakse kohe ning kõik tulevased külastajate tegevused kustutatakse külalisrežiimist väljumisel."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Lülita telefonikõned sisse"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Lülita telefonikõned ja SMS-id sisse"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Kustuta kasutaja"</string>
@@ -4009,13 +4023,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Kõik tüüpi „<xliff:g id="APP_NAME">%1$s</xliff:g>” märguanded"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Kõik rakenduse <xliff:g id="APP_NAME">%1$s</xliff:g> märguanded"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Kohanduvad märguanded"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> märguannet päevas</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> märguanne päevas</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Ligikaudu <xliff:g id="NUMBER_1">%,d</xliff:g> märguannet päevas</item>
+ <item quantity="one">Ligikaudu <xliff:g id="NUMBER_0">%d</xliff:g> märguanne päevas</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> märguannet nädalas</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> märguanne nädalas</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Ligikaudu <xliff:g id="NUMBER_1">%,d</xliff:g> märguannet nädalas</item>
+ <item quantity="one">Ligikaudu <xliff:g id="NUMBER_0">%d</xliff:g> märguanne nädalas</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Mitte kunagi"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Seadmete ja rakenduste märguanded"</string>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ära tee midagi"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibreerimine"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Vaigistamine"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Lubamiseks muutke esmalt toitemenüüs valikut „Toitenupu pikalt vajutamine“."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Lubamiseks muutke esmalt toitemenüüs valikut „Toitenupu pikalt vajutamine“."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Võrgu üksikasjad"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Teie seadme nimi on teie telefonis olevatele rakendustele nähtav. Bluetooth-seadmetega või WiFi-võrguga ühenduse loomisel või WiFi-kuumkoha seadistamisel võivad seda näha ka teised inimesed."</string>
<string name="devices_title" msgid="649715719278562515">"Seadmed"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"seadmete juhikud"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kaardid ja pääsmed"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kaardid ja pääsmed"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Toitenupu pikalt vajutamine"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Pikalt vajutamisega avatakse assistent"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Pikalt vajutamisega kuvatakse menüü Toide"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Pikalt vajutamine on keelatud"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Vajutage pikalt toitenuppu"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Juurdepääsemiseks vajutage pikalt toitenuppu"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Toitemenüü"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitaalne assistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Juurdepääs digitaalsele assistendile"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Juurdepääs toitemenüüle"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Kasutamiseks määrake kõigepealt ekraanilukk"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Hoidmine assistendi avamiseks"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Assistent aktiveeritakse toitenupu allhoidmisel"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menüüd Toide ja Hädaolukord:\nvajutage samal ajal toitenuppu ja helitugevuse suurendamise nuppu."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Helisemise vältimine:\notsetee asub helitugevuse menüüs."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Toitemenüü:\nvajutage korraga toitenuppu ja helitugevuse suurendamise nuppu"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Helisemise vältimine:\notsetee kasutamiseks vajutage helitugevuse nuppu"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Allhoidmise kestus"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Kohandage ühenduvust, valides, kui pikalt toitenuppu all hoida"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Lühike"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index d12afba..63b4f6f 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Pixel Imprint erabiltzen duenean, haren hatz-markaren eredua eguneratzeko erabiltzen dira irudiak. Haurraren hatz-markaren eredua sortzeko erabilitako irudiak ez dira inoiz biltegiratzen, baina hatz-markaren eredua telefonoan gordetzen da, modu seguruan, eta ez da inoiz ateratzen telefonotik. Guztia telefonoan prozesatzen da, modu seguruan."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Hatz-markaren irudiak eta eredua ezabatzeko edo hatz-marka bidez desblokeatzeko eginbidea desaktibatzeko, joan Ezarpenak atalera. Ezabatzen dituzun arte, telefonoan gordeko dira hatz-markaren irudi eta ereduak."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Haurrak eta zuk haren hatz-markaren irudiak eta eredua ezabatu nahi badituzue edo hatz-marka bidez desblokeatzeko eginbidea desaktibatu nahi baduzue, joan Ezarpenak atalera. Ezabatzen dituzuen arte, telefonoan gordeko dira hatz-markaren irudiak eta ereduak."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Baliteke telefonoa nahi ez duzunean desblokeatzea; adibidez, norbaitek zure hatzarekin ukitzen badu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Baliteke telefonoa nahi ez duzunean desblokeatzea; adibidez, norbaitek zure hatzarekin ukitzen badu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Baliteke tableta nahi ez duzunean desblokeatzea; adibidez, norbaitek zure hatzarekin ukitzen badu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Baliteke gailua nahi ez duzunean desblokeatzea; adibidez, norbaitek zure hatzarekin ukitzen badu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Baliteke haurraren telefonoa nahi ez duzunean desblokeatzea; adibidez, norbaitek haren hatzarekin ukitzen badu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Emaitza onenak lortzeko, erabili Made for Google ziurtagiria duen pantaila babesteko osagarri bat. Besterik erabiliz gero, baliteke hatz-markak ez funtzionatzea."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Emaitza onenak lortzeko, erabili Made for Google ziurtagiria duen pantaila babesteko osagarri bat. Besterik erabiliz gero, baliteke haurraren hatz-markak ez funtzionatzea."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Hatz-marken sentsorea gailuan non dagoen erakusten duen ilustrazioa"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Izena"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Ados"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Saiatu berriro"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Ezabatu"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Ukitu sentsorea"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Ezarri hatza sentsorean eta, dardara sentitzen duzunean, jaso ezazu"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Eginda"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Hori ez da sentsorea"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Ukitu telefonoaren atzealdeko sentsorea. Erabili hatz erakuslea."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Ez da erregistratu"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Hatz-markak erregistratzeko denbora-muga gainditu da. Saiatu berriro."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Gainditu egin da hatz-marka konfiguratzeko denbora-muga"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Saiatu berriro orain edo konfiguratu hatz-marka geroago Ezarpenak atalean"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Ezin izan da erregistratu hatz-marka. Saiatu berriro edo erabili beste hatz bat."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Gehitu beste bat"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Hurrengoa"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Pertsonalizatu telefonoa"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Probatu askotariko estiloak, horma-paperak, etab."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Pantaila-babeslea"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"pantailarako babeslea"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Erabili pantaila-babeslea"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Kargatzen ari denean edo oinarrian dagoenean"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Bietako edozein"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Kargatzen ari denean"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Oinarrian dagoenean"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Inoiz ez"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Desaktibatuta"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Telefonoa oinarrian eta/edo inaktibo dagoenean zer gertatzen den kontrolatzeko, aktibatu pantaila-babeslea."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Noiz abiarazi"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Oraingo pantaila-babeslea"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Ezarpenak"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Distira automatikoa"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Aktibatu eskuetan hartzen denean"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Pantaila ilundua"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Ezarri PIN bat"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Ezarri laneko PIN bat"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Ezarri eredu bat"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Babestuago egoteko, ezarri gailua desblokeatzeko eredu bat"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Ezarri laneko eredu bat"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Hatz-marka erabiltzeko, ezarri pasahitza"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Hatz-marka erabiltzeko, ezarri eredu bat"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Larrialdietarako aplikazioa"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Berrezarri aplikazioen hobespenak"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Aplikazioen hobespenak berrezarri nahi dituzu?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Hauen hobespen guztiak berrezarriko dira:\n\n"<li>"desgaitutako aplikazioak"</li>\n<li>"desgaitutako aplikazio-jakinarazpenak"</li>\n<li>"ekintza jakinetarako aplikazio lehenetsiak"</li>\n<li>"aplikazioen atzeko planoko datuen murriztapenak"</li>\n<li>"baimen-murriztapenak"</li>\n\n"Ez dituzu galduko aplikazioetako datuak."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Hauen hobespen guztiak berrezarriko dira:\n\n"<li>"desgaitutako aplikazioak"</li>\n<li>"desgaitutako aplikazio-jakinarazpenak"</li>\n<li>"ekintza jakinetarako aplikazio lehenetsiak"</li>\n<li>"aplikazioen atzeko planoko datuen murriztapenak"</li>\n<li>"baimen-murriztapenak"</li>\n<li>"bateria erabiltzeko ezarpenak"</li>\n\n"Ez dituzu galduko aplikazioetako datuak."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Berrezarri aplikazioak"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Kudeatu tokia"</string>
<string name="filter" msgid="9039576690686251462">"Iragazi"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Berrezarri ezarpenak"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Berrezarri dira bistaratzeko tamainaren eta testuaren ezarpenak"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Pantailaren tamaina eta testua berrezarri nahi dituzu?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Bistaratzeko tamainaren eta testuaren inguruko hobespenak leheneratu, eta telefonoaren jatorrizko ezarpenak berrezarriko dira"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Bistaratzeko tamainaren eta testuaren inguruko hobespenak leheneratu, eta telefonoaren jatorrizko ezarpenak berrezarriko dira"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Bistaratzeko tamainaren eta testuaren inguruko hobespenak leheneratu, eta tabletaren jatorrizko ezarpenak berrezarriko dira"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Berrezarri"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Astebururako planik?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Hondartzara joango naiz. Etorri nahi duzu?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Erabilerarik ez bateria guztiz kargatu zenetik"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Erabilerarik ez azken 24 orduetan"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Beste erabiltzaileak"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Gailuaren erabileran oinarritzen da gelditzen den bateriaren aurreikuspena"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Geratzen den denbora, gutxi gorabehera"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"guztiz kargatu arte"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Ahozko gako-hitzak eta erabateko interakzioa"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Ahoz idazteko eginbide arrunta"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Aginduak ahoz emateko zerbitzu honek une oro kontrolatuko du ahotsa eta ahozko gaitasuna duten aplikazioak ere kontrolatu ahal izango ditu. <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> aplikazioarena da. Zerbitzu hau erabiltzeko aukera gaitu nahi duzu?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Gailuko hautemate-ezarpenak"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Gailuko hautematea"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Gailuko ahots-hautematea"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Motor hobetsia"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Motorraren ezarpenak"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Hizketaren abiadura eta tonua"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Ezabatu"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Saioko aplikazio eta datu guztiak ezabatuko dira."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Kendu"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gonbidatua (zu)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Erabiltzaileak"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Beste erabiltzaileak"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Ezabatu gonbidatuaren jarduerak"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Gonbidatu modutik irtetean, ezabatu gonbidatuaren aplikazio eta datu guztiak"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Gonbidatuaren jarduerak ezabatu nahi dituzu?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Gonbidatuentzako saio honetako aplikazio eta datuak orain ezabatuko dira; bestalde, etorkizuneko gonbidatuen jarduera guztiak gonbidatu modutik irteten zaren bakoitzean ezabatuko dira"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Aktibatu telefono-deiak"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktibatu telefono-deiak eta SMSak"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Ezabatu erabiltzailea"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" aplikazioaren jakinarazpen guztiak"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioaren jakinarazpen guztiak"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Jakinarazpen egokituak"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other"><xliff:g id="NUMBER_1">%,d</xliff:g> jakinarazpen inguru eguneko</item>
- <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> jakinarazpen inguru eguneko</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other"><xliff:g id="NUMBER_1">%,d</xliff:g> jakinarazpen inguru egunero</item>
+ <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> jakinarazpen inguru egunero</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other"><xliff:g id="NUMBER_1">%,d</xliff:g> jakinarazpen inguru asteko</item>
- <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> jakinarazpen inguru asteko</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other"><xliff:g id="NUMBER_1">%,d</xliff:g> jakinarazpen inguru astero</item>
+ <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> jakinarazpen inguru astero</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Inoiz ez"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Gailu eta aplikazioen jakinarazpenak"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ez egin ezer"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Egin dar-dar"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Desaktibatu audioa"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Gaitzeko, aldatu lehenik \"Eduki sakatuta etengailua\" aukera itzaltzeko menuan."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Gaitzeko, aldatu lehenik \"Eduki sakatuta etengailua\" aukera itzaltzeko menuan."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Sarearen xehetasunak"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Mugikorreko aplikazioek gailuaren izena ikus dezakete. Halaber, jendeak ere ikus dezake Bluetooth bidezko gailuetara edo wifi-sare batera konektatzean, edo wifi-gune bat konfiguratzean."</string>
<string name="devices_title" msgid="649715719278562515">"Gailuak"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"gailuak kontrolatzeko widgetak"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Txartelak eta bonuak"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"txartelak eta bonuak"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Eduki sakatuta etengailua"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Eduki ezazu sakatuta Laguntzailea gai dadin"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Eduki ezazu sakatuta itzaltzeko menua ireki dadin"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Sakatuta edukitzeko aukera desgaituta dago"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Eduki sakatuta etengailua"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Eduki sakatuta etengailua hau atzitzeko"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Itzaltzeko menua"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Laguntzaile digitala"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Atzitu laguntzaile digitala"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Atzitu itzaltzeko menua"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Erabili ahal izateko, konfiguratu pantailaren blokeoa"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Eduki sakatuta Laguntzailea abiarazteko"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Abiarazi Laguntzailea etengailua sakatuta edukiz"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Itzaltzeko eta larrialdietarako menua:\nSakatu etengailua eta bolumena igotzeko tekla aldi berean."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Saihestu tonua jotzea:\nBolumenaren menuan dago lasterbidea."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Itzaltzeko menua:\nsakatu aldi berean etengailua eta bolumena igotzeko botoia"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Ez jo tonurik:\nsakatu bolumen-botoia lasterbidea erabiltzeko"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Zenbat denboraz edukiko duzu sakatuta etengailua?"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Sentikortasuna doitzeko, aukeratu zenbat denboraz edukiko duzun sakatuta etengailua"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Laburra"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 4743f09..13fb0f0 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"وقتی فرزندتان از Pixel Imprint استفاده میکند، مدل اثر انگشت او بهکمک تصاویر بهروزرسانی میشود. تصاویر استفادهشده برای ایجاد مدل اثر انگشت فرزندتان هرگز ذخیره نمیشوند، اما مدل اثر انگشت بهطور ایمن در تلفن ذخیره میشود و هرگز از آن خارج نمیشود. همه پردازشها بهطور ایمن در تلفن انجام میشود."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"میتوانید مدل و تصاویر اثر انگشتتان را حذف کنید یا هرزمان خواستید «قفلگشایی با اثر انگشت» را در «تنظیمات» خاموش کنید. تا زمانیکه مدلها و تصاویر اثر انگشت را حذف نکنید، در تلفن ذخیره میمانند."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"شما و فرزندتان هرزمان بخواهید میتوانید مدل و تصاویر اثر انگشت را حذف کنید، یا «قفلگشایی با اثر انگشت» را در «تنظیمات» خاموش کنید. تا زمانیکه مدلها و تصاویر اثر انگشت را حذف نکنید، در تلفن ذخیره میمانند."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"ممکن است قفل تلفنتان حتی اگر قصدش را نداشته باشید باز شود، مثلاً اگر فردی تلفن را جلوی انگشتتان نگه دارد."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"ممکن است قفل تلفنتان حتی اگر قصدش را نداشته باشید باز شود، مثلاً اگر فردی تلفن را جلوی انگشتتان نگه دارد."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"ممکن است قفل رایانه لوحیتان حتی اگر قصدش را نداشته باشید باز شود، مثلاً اگر فردی آن را جلوی انگشتتان نگه دارد."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"ممکن است قفل دستگاهتان حتی اگر قصدش را نداشته باشید باز شود، مثلاً اگر فردی آن را جلوی انگشتتان نگه دارد."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"قفل تلفن فرزندتان حتی اگر او نخواهد میتواند باز شود، مثلاً اگر فردی انگشت فرزندتان را روی حسگر تلفن نگه دارد."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"برای بهترین نتیجه، از محافظ صفحهنمایشی استفاده کنید که تأییدیه Made for Google داشته باشد. درصورت استفاده از دیگر محافظهای صفحهنمایش، ممکن است اثر انگشتتان کار نکند."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"برای بهترین نتیجه، از محافظ صفحهنمایشی استفاده کنید که تأییدیه Made for Google داشته باشد. درصورت استفاده از دیگر محافظهای صفحهنمایش، ممکن است اثر انگشت فرزندتان کار نکند."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"تصویر دستگاه و مکان حسگر اثر انگشت"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"نام"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"تأیید"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"امتحان مجدد"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"حذف"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"حسگر را لمس کنید"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"انگشتتان را روی حسگر بگذارید و بعد از احساس لرزش، آن را بردارید"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"تمام"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"اووه، آن حسگر نیست"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"با استفاده از انگشت اشاره، حسگر را در پشت تلفن لمس کنید."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"ثبت انجام نشد"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"مهلت ثبت اثر انگشت بهپایان رسید. دوباره امتحان کنید."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"مهلت راهاندازی اثر انگشت بهپایان رسید"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"همینحالا دوباره امتحان کنید یا اثر انگشتتان را بعداً در «تنظیمات» راهاندازی کنید"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ثبت اثر انگشت کار نمیکند. دوباره امتحان کنید یا از انگشت دیگری استفاده کنید."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"افزودن یک انگشت دیگر"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"بعدی"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"سفارشی کردن تلفن"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"انواع سبکها، کاغذدیواریها، و موارد دیگر را امتحان کنید"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"محافظ صفحه"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"محافظ صفحهنمایش"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"استفاده از محافظ صفحه"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"هنگام شارژ یا اتصال به پایه"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"هر دو"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"هنگام شارژ شدن"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"وقتی روی پایه است"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"هرگز"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"خاموش"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"برای کنترل اینکه وقتی تلفن روی پایه اتصال قرار دارد و/یا در حالت خواب است چه اتفاقی بیفتد، محافظ صفحه را روشن کنید."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"زمان شروع شدن"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"محافظ صفحه کنونی"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"تنظیمات"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"روشنایی خودکار"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"بیدار شدن با بالا بردن"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"نمایشگر محیط"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"تنظیم پین"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"تنظیم پین کاری"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"تنظیم الگو"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"برای امنیت بیشتر، الگویی برای باز کردن قفل دستگاه تنظیم کنید"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"تنظیم الگوی کاری"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"تنظیم گذرواژه برای استفاده از اثر انگشت"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"تنظیم الگو برای استفاده از اثر انگشت"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"برنامه اضطراری"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"بازنشانی اولویتهای برنامه"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"بازنشانی اولویتهای برنامه؟"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"با این کار همه اولویتهای مربوط به موارد زیر بازنشانی میشود:\n\n"<li>"برنامههای غیرفعالشده"</li>\n<li>"اعلانهای برنامه غیرفعالشده"</li>\n<li>"برنامههای پیشفرض برای عملکردها"</li>\n<li>"محدودیتهای داده پسزمینه برای برنامهها"</li>\n<li>"هرگونه محدودیت مجوز"</li>\n\n"هیچ داده برنامهای را از دست نخواهید داد."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"با این کار همه اولویتهای موارد زیر بازنشانی میشود:\n\n"<li>"برنامههای غیرفعالشده"</li>\n<li>"اعلانهای برنامههای غیرفعالشده"</li>\n<li>"برنامههای پیشفرض برای کنشها"</li>\n<li>"محدودیتهای دادههای پسزمینه برنامهها"</li>\n<li>"همه محدودیتهای اجازهها"</li>\n<li>"تنظیمات مصرف باتری"</li>\n\n"هیچ داده برنامهای را ازدست نخواهید داد."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"بازنشانی برنامهها"</string>
<string name="manage_space_text" msgid="9013414693633572277">"مدیریت فضا"</string>
<string name="filter" msgid="9039576690686251462">"فیلتر"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"بازنشانی تنظیمات"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"تنظیمات اندازه نمایش و نوشتار بازنشانی شد"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"اندازه نمایش و نوشتار بازنشانی شود؟"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"اندازه نمایش و اولویتهای نوشتار به تنظیمات اصلی تلفن بازنشانی خواهد شد"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"اندازه نمایش و اولویتهای نوشتار به تنظیمات اصلی تلفن بازنشانی خواهد شد"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"اندازه نمایش و اولویتهای نوشتار به تنظیمات اصلی رایانه لوحی بازنشانی خواهد شد"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"بازنشانی"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"برنامهای برای آخر هفته دارید؟"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"داریم به ساحل میرویم. شما هم میآیید؟"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"از آخرین شارژ کامل استفاده نشده است"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"در ۲۴ ساعت گذشته استفاده نشده است"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"کاربران دیگر"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"شارژ باتری باقیمانده براساس مصرف دستگاه تخمین زده میشود"</string>
<string name="estimated_time_left" msgid="948717045180211777">"زمان باقیمانده تخمینی"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"مانده تا شارژ کامل"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"کلیدگفته کامل و تعامل"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"ویژگی ساده گفتار به نوشتار"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"این سرویس ورودی گفتاری میتواند کنترل صوتی همیشه فعال را اجرا کند و از طرف شما برنامههایی را کنترل کند که صدا در آنها فعال است. از <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> است. استفاده از این سرویس فعال شود؟"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"تنظیمات تشخیص دروندستگاهی"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"تشخیص دروندستگاهی"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"تشخیص گفتار دروندستگاهی"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"موتور ترجیحی"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"تنظیمات موتور"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"زیروبمی و سرعت گفتار"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"حذف"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"همه برنامهها و دادههای این جلسه حذف خواهد شد."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"حذف"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"مهمان (شما)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"کاربران"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"کاربران دیگر"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"حذف فعالیت مهمان"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"همه برنامهها و دادههای مهمان هنگام خروج از حالت مهمان حذف میشوند"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"فعالیت مهمان حذف شود؟"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"برنامهها و دادههای این جلسه مهمان اکنون حذف خواهند شد و همه فعالیتهای آتی مهمان هربار که از حالت مهمان خارج شوید حذف خواهد شد"</string>
<string name="user_enable_calling" msgid="264875360626905535">"روشن کردن تماسهای تلفنی"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"روشن کردن تماسهای تلفنی و پیامک"</string>
<string name="user_remove_user" msgid="8468203789739693845">"حذف کاربر"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"همه اعلانهای «<xliff:g id="APP_NAME">%1$s</xliff:g>»"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"همه اعلانهای <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"اعلانهای تطبیقی"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> اعلان در روز</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> اعلان در روز</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">حدود <xliff:g id="NUMBER_1">%,d</xliff:g> اعلان در روز</item>
+ <item quantity="other">حدود <xliff:g id="NUMBER_1">%,d</xliff:g> اعلان در روز</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> اعلان در هفته</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> اعلان در هفته</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">حدود <xliff:g id="NUMBER_1">%,d</xliff:g> اعلان در هفته</item>
+ <item quantity="other">حدود <xliff:g id="NUMBER_1">%,d</xliff:g> اعلان در هفته</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"هرگز"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"اعلانهای دستگاه و برنامه"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"كاری انجام نشود"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"لرزش"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"بیصدا کردن"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"برای فعال کردن، ابتدا «فشار دادن و نگه داشتن دکمه روشن / خاموش» را به «منوی روشن/ خاموش» تغییر دهید."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"برای فعال کردن، ابتدا «فشار دادن و نگه داشتن دکمه روشن / خاموش» را به «منوی روشن/ خاموش» تغییر دهید."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"جزئیات شبکه"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"نام دستگاه شما برای برنامههای موجود در تلفنتان قابلمشاهده است. همچنین ممکن است هنگام اتصال به دستگاههای بلوتوث، اتصال به شبکه Wi-Fi، یا راهاندازی نقطه اتصال Wi-Fi، برای افراد دیگر قابلمشاهده باشد."</string>
<string name="devices_title" msgid="649715719278562515">"دستگاهها"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"کنترلهای دستگاه"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"کارتها و مجوزها"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"کارتها و مجوزها"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"دکمه روشن/خاموش را فشار دهید و نگه دارید"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"برای «دستیار»، فشار دهید و نگه دارید"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"برای منوی روشن/خاموش، فشار دهید و نگه دارید"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"فشار دادن و نگه داشتن غیرفعال شده است"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"دکمه روشن/ خاموش را فشار دهید و نگه دارید"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"برای دسترسی، دکمه روشن/ خاموش را فشار دهید و نگه دارید"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"منوی روشن/خاموش"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"دستیار دیجیتالی"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"دسترسی به دستیار دیجیتالی"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"دسترسی به منوی روشن/خاموش"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"برای استفاده، نخست قفل صفحه را تنظیم کنید"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"نگه داشتن دکمه برای فراخوانی «دستیار»"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"راهاندازی «دستیار»با نگه داشتن دکمه روشن/خاموش"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"منوی روشن/خاموش و اضطراری:\nدکمه روشن/خاموش و افزایش صدا را همزمان فشار دهید."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"جلوگیری از زنگ زدن:\nمیانبر در منوی میزان صدا دردسترس است."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"منوی روشن/خاموش:\nدکمه روشن/ خاموش و دکمه افزایش صدا را همزمان فشار دهید"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"جلوگیری از زنگ زدن:\nدکمه صدا را برای میانبر فشار دهید"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"مدت فشار دادن و نگه داشتن"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"با انتخاب مدت زمان فشار دادن و نگه داشتن دکمه روشن/ خاموش، میزان حساسیت را تنظیم کنید"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"کوتاه"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 60412c6..d54f167 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Kun lapsi käyttää Pixel Imprintiä, kuvia käytetään sormenjälkimallin päivittämiseen. Lapsen sormenjälkimallin luontiin käytettäviä kuvia ei koskaan säilytetä, mutta itse sormenjälkimalli säilytetään suojatusti puhelimella, eikä se poistu puhelimelta. Kaikki käsittely tapahtuu turvallisesti puhelimella."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Voit poistaa sormenjälkesi kuvat ja mallin tai laittaa sormenjälkilukituksen pois päältä milloin tahansa asetuksista. Sormenjälkesi kuvat ja mallit säilytetään puhelimellasi, kunnes poistat ne."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Sinä ja lapsesi voitte poistaa sormenjälkien kuvat ja mallit tai laittaa sormenjälkiavauksen pois päältä milloin tahansa asetuksista. Sormenjälkien kuvat ja mallit säilytetään puhelimella, kunnes ne poistetaan."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Joku muu voi avata puhelimesi lukituksen haluamattasi, jos puhelin esimerkiksi asetetaan sormeasi vasten."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Joku muu voi avata puhelimesi lukituksen haluamattasi, jos puhelin esimerkiksi asetetaan sormeasi vasten."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Joku muu voi avata tabletin lukituksen haluamattasi, jos se esimerkiksi asetetaan sormeasi vasten."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Joku muu voi avata laitteen lukituksen haluamattasi, jos puhelin esimerkiksi asetetaan sormeasi vasten."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Joku muu voi avata lapsesi puhelimen lukituksen hänen haluamattaan pitämällä sitä hänen sormeaan vasten."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Saat parhaan lopputuloksen käyttämällä Made For Google ‑sertifioitua näytönsuojusta. Sormenjälkesi ei välttämättä toimi muiden näytönsuojusten kanssa."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Saat parhaan lopputuloksen käyttämällä Made For Google ‑sertifioitua näytönsuojusta. Lapsesi sormenjälki ei välttämättä toimi muiden näytönsuojusten kanssa."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Laitteen ja sormenjälkianturin sijainnin kuva."</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nimi"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Ok"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Yritä uudelleen"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Poista"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Kosketa tunnistinta"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Aseta sormesi tunnistimelle ja nosta se, kun tunnet värähdyksen"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Valmis"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Hups, anturi ei ole siinä."</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Kosketa puhelimen takaosan tunnistinta etusormella."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Käyttöönottoa ei suoritettu loppuun"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Sormenjäljen käyttöönoton enimmäisaika ylittyi. Yritä uudelleen."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Sormenjäljen käyttöönotto aikakatkaistu"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Yritä uudelleen nyt tai ota sormenjälki käyttöön myöhemmin asetuksista"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Sormenjäljen rekisteröinti ei onnistunut. Yritä uudelleen tai käytä eri sormea."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Lisää toinen"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Seuraava"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Puhelimen yksilöiminen"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Kokeile eri tyylejä, taustakuvia ja muuta"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Näytönsäästäjä"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"näytönsäästäjä"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Käytä näytönsäästäjää"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Latauksen aikana tai telakoituna"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Kumpi vain"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Latauksen aikana"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Telakoituna"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Ei koskaan"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Pois päältä"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Ota näytönsäästäjä käyttöön, niin voit hallita puhelimen toimintaa telakoituna ja/tai lepotilassa."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Aloitus"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Nykyinen näytönsäästäjä"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Asetukset"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automaattinen kirkkaus"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Herätä nostamalla"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Himmennetty näyttö"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Valitse PIN-koodi"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Valitse työ-PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Valitse kuvio"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Paranna suojausta lisäämällä kuvio laitteen lukituksen avaamiseksi"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Valitse työkuvio"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Sormenjälki: aseta salasana"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Sormenjälki: aseta kuvio"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Hätäsovellus"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Nollaa sovellusasetukset"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Nollaa sovellusasetukset?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Kaikki seuraavien asetukset nollataan:\n\n"<li>"Käytöstä poistetut sovellukset"</li>\n<li>"Käytöstä poistetut sovellusilmoitukset"</li>\n<li>"Toimintojen oletussovellukset"</li>\n<li>" Sovellusten taustadatan käyttörajoitukset"</li>\n<li>"Käyttöoikeusrajoitukset"</li>\n\n"Et menetä mitään sovellusten dataa."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Kaikki seuraavien asetukset nollataan:\n\n"<li>"Käytöstä poistetut sovellukset"</li>\n<li>"Käytöstä poistetut sovellusilmoitukset"</li>\n<li>"Toimintojen oletussovellukset"</li>\n<li>"Sovellusten taustatiedon käyttörajoitukset"</li>\n<li>"Luparajoitukset"</li>\n<li>"Akun käytön asetukset"</li>\n\n"Et menetä mitään sovellusdataa."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Nollaa sovellukset"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Hallinnoi tallennustilaa"</string>
<string name="filter" msgid="9039576690686251462">"Suodata"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Nollaa asetukset"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Näytön koko ja tekstin asetukset on nollattu"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Nollataanko näytön koko ja teksti?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Näytön koko ja tekstiasetukset nollataan puhelimen alkuperäisiin asetuksiin"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Näytön koko ja tekstiasetukset nollataan puhelimen alkuperäisiin asetuksiin"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Näytön koko ja tekstiasetukset nollataan tabletin alkuperäisiin asetuksiin"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Nollaa"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Suunnitelmia viikonlopuksi?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Lähden rannalle. Liitytkö seuraan?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Ei käyttöä viimeisimmän täyteen lataamisen jälkeen"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Ei käyttöä 24 viime tunnin aikana"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Muut käyttäjät"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Arvio akun kestosta perustuu aiempaan laitteen käyttöön."</string>
<string name="estimated_time_left" msgid="948717045180211777">"Arvioitu jäljellä oleva aika"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Täyteen lataukseen"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Toimintosanat ja vuorovaikutus"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Yksinkertainen puheesta tekstiksi -palvelu"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Tämä puheohjauspalvelu huolehtii, että puheohjaus on aina päällä ja ohjaa puheohjausta käyttäviä sovelluksia automaattisesti puolestasi. Palvelu sisältyy sovellukseen <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Otetaanko palvelu käyttöön?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Laitepohjaiset tunnistusasetukset"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Laitepohjainen tunnistus"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Laitepohjainen puheentunnistus"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Ensisijainen moottori"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Moottorin asetukset"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Puheen nopeus ja korkeus"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Poista"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Kaikki sovellukset ja tämän istunnon tiedot poistetaan."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Poista"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Vieras (sinä)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Käyttäjät"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Muut käyttäjät"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Poista vierastoimintaa"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Poista kaikki vierassovellukset ja ‑data vierailija-käyttökerrasta poistumisen yhteydessä"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Poistetaanko vierastoiminta?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Tämän vierailija-käyttökerran sovellukset ja data poistetaan nyt. Kaikki tuleva vierastoiminta poistetaan aina, kun poistut vierailija-käyttökerrasta."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Ota puhelut käyttöön"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ota puhelut ja tekstiviestit käyttöön"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Poista käyttäjä"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Kaikki ilmoitukset: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Kaikki ilmoitukset: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Mukautuvat ilmoitukset"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ilmoitusta päivässä</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> ilmoitus päivässä</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Noin <xliff:g id="NUMBER_1">%,d</xliff:g> ilmoitusta päivässä</item>
+ <item quantity="one">Noin <xliff:g id="NUMBER_0">%d</xliff:g> ilmoitus päivässä</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ilmoitusta viikossa</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> ilmoitus viikossa</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Noin <xliff:g id="NUMBER_1">%,d</xliff:g> ilmoitusta viikossa</item>
+ <item quantity="one">Noin <xliff:g id="NUMBER_0">%d</xliff:g> ilmoitus viikossa</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Ei koskaan"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Laite- ja sovellusilmoitukset"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Älä tee mitään"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Värinä"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Mykistä"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Jos haluat ottaa ominaisuuden käyttöön, vaihda ensin virtavalikkoon \"Paina virtapainiketta pitkään\"."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Jos haluat ottaa ominaisuuden käyttöön, vaihda ensin virtavalikkoon \"Paina virtapainiketta pitkään\"."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Verkon tiedot"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Puhelimen sovellukset näkevät laitteesi nimen. Myös muut käyttäjät voivat nähdä nimen, kun muodostat Bluetooth-yhteyden laitteisiin, yhteyden Wi-Fi-verkkoon tai aktivoit Wi-Fi-hotspotin."</string>
<string name="devices_title" msgid="649715719278562515">"Laitteet"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"laitteiden hallinta"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kortit"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kortit"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Paina virtapainiketta pitkään"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Ota Assistant käyttöön painamalla pitkään"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Näytä virtavalikko painamalla pitkään"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Pitkään painaminen poissa käytöstä"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Paina virtapainiketta pitkään"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Valitse painamalla virtapainiketta pitkään"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Virtavalikko"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digiavustaja"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Avaa digiavustaja"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Avaa virtavalikko"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Käyttääksesi tätä aseta ensin näytön lukitus"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Paina pitkään käynnistääksesi Assistantin"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Käynnistä Assistant painamalla virtapainiketta pitkään"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Virta‑ ja Hätätilannevalikko:\nPaina virta‑ ja äänenvoimakkuuspainiketta yhtä aikaa."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Soittamisen esto:\nPikanäppäin näkyy äänenvoimakkuusvalikossa."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Virtavalikko:\nPaina virtapainiketta ja äänenvoimakkuuden lisäyspainiketta yhtä aikaa"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Estä soiminen:\nKäytä pikakomentoa painamalla äänenvoimakkuuspainiketta"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Valitse kesto painamalla pitkään"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Säädä herkkyyttä valitsemalla, kauanko virtapainiketta täytyy painaa"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Lyhyen ajan"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 0ac9f2a..5c0531f 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Lorsque votre enfant utilise la fonctionnalité Pixel Imprint, les images sont utilisées pour mettre à jour son modèle d\'empreinte digitale. Les images utilisées pour créer le modèle d\'empreinte digitale de votre enfant ne sont jamais stockées, contrairement au modèle, qui est stocké de façon sécuritaire sur le téléphone et ne le quitte jamais. Tous les traitements sont sécurisés sur le téléphone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Vous pouvez supprimer les images et le modèle de votre empreinte digitale ou désactiver le déverrouillage par empreinte digitale à tout moment dans les paramètres. Les images et le modèle de l\'empreinte digitale sont stockés sur le téléphone jusqu\'à ce que vous les supprimiez."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Vous et votre enfant pouvez supprimer les images et le modèle de son empreinte digitale ou désactiver le déverrouillage par empreinte digitale en tout temps dans Paramètres. Les images et les modèles d\'empreinte digitale sont stockés sur le téléphone jusqu\'à ce qu\'ils soient supprimés."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Votre téléphone peut être déverrouillé même si vous ne le voulez pas, par exemple si quelqu\'un le tient contre votre doigt."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Votre téléphone peut être déverrouillé même si vous ne le voulez pas, par exemple si quelqu\'un le tient contre votre doigt."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Votre tablette peut être déverrouillée même lorsque vous n\'en avez pas l\'intention, par exemple si quelqu\'un la tient contre votre doigt."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Votre tablette peut être déverrouillée même lorsque vous n\'en avez pas l\'intention, par exemple si quelqu\'un la tient contre votre doigt."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Le téléphone de votre enfant peut être déverrouillé même s\'il ne le veut pas, par exemple si quelqu\'un le tient contre son doigt."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Pour obtenir des résultats optimaux, utilisez un protecteur d\'écran certifié Fait pour Google. Vos empreintes digitales peuvent ne pas être reconnues avec d\'autres protecteurs d\'écran."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Pour obtenir des résultats optimaux, utilisez un protecteur d\'écran certifié Fait pour Google. Les empreintes digitales de votre enfant peuvent ne pas être reconnues avec d\'autres protecteurs d\'écran."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration présentant l\'appareil et la position du capteur d\'empreintes digitales"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nom"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Réessayer"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Supprimer"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Toucher le capteur"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Placez votre doigt sur le capteur, puis soulevez-le lorsque vous sentez une vibration"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Terminé"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Oups, ce n\'est pas le capteur"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Touchez le capteur à l\'arrière de votre téléphone. Utilisez votre index."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"L\'enregistrement n\'est pas terminé"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Le temps attribué pour l\'enregistrement des empreintes digitales est écoulé. Veuillez réessayer."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Délai dépassé pour config. d\'empreinte digitale"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Réessayez maintenant ou configurez votre empreinte digitale plus tard dans les paramètres"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"L\'enregistrement de l\'empreinte digitale n\'a pas fonctionné. Réessayez ou utilisez un autre doigt."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Ajouter une empreinte"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Suivant"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personnaliser votre téléphone"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Essayez différents styles, fonds d\'écran, etc."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Écran de veille"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"écran de veille"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Utiliser l\'écran de veille"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Pendant la charge ou sur la station d\'accueil"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Les deux"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Pendant la charge"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Sur la station d\'accueil"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Jamais"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Désactivé"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Pour déterminer le comportement du téléphone lorsqu\'il se trouve sur une station d\'accueil ou lorsqu\'il est en veille, activez l\'écran de veille."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Quand commencer"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Écran de veille actuel"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Paramètres"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Ajuster automatiquement la luminosité"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Soulever pour activer"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Affichage en mode Veille"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Définir un NIP"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Définir un NIP professionnel"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Définir un schéma"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Pour renforcer la sécurité, définir un schéma pour déverrouiller l\'appareil"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Définir un mot de schéma professionnel"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Pour util. empr. digit., config. m. de passe"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Pour utiliser empreinte digitale, configurer un schéma"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Application d\'urgence"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Réinitialiser préférences applis"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Réinitialiser les préférences relatives aux applis?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Cette opération réinitialise toutes les préférences relatives aux éléments suivants :\n\n"<li>"Applications désactivées"</li>\n<li>"Notifications associées aux applications désactivées"</li>\n<li>"Applications par défaut pour les actions"</li>\n<li>"Restrictions de données en arrière-plan pour les applications"</li>\n<li>"Toutes les restrictions d\'autorisations"</li>\n\n"Vous ne perdrez aucune donnée liée aux applications."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Les préférences relatives aux éléments suivants seront réinitialisées :\n\n"<li>"Applications désactivées"</li>\n<li>"Notifications des applications désactivées"</li>\n<li>"Applications par défaut pour les actions"</li>\n<li>"Restrictions de données en arrière-plan pour les applications"</li>\n<li>"Toutes les restrictions d\'autorisations"</li>\n<li>"Paramètres d\'utilisation de la pile"</li>\n\n"Vous ne perdrez aucune donnée liée aux applications."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Réinitialiser applis"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Gérer l\'espace"</string>
<string name="filter" msgid="9039576690686251462">"Filtre"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Réinitialiser paramètres"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Les paramètres de texte et de taille d\'affichage ont été réinitialisés"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Réinitialiser la taille d\'affichage et le texte?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Vos préférences de taille d\'affichage et de texte seront réinitialisées aux paramètres par défaut du téléphone"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Vos préférences de taille d\'affichage et de texte seront réinitialisées aux paramètres par défaut du téléphone"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Vos préférences de taille d\'affichage et de texte seront réinitialisées aux paramètres par défaut de la tablette"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Réinitialiser"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Des plans pour la fin de semaine?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Direction la plage. Tu viens?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Aucune utilisation depuis la dernière recharge complète"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Aucune utilisation au cours des dernières 24 heures"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Autres utilisateurs"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"L\'estimation de l\'autonomie restante est basée sur l\'utilisation de l\'appareil"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Temps restant estimé"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Jusqu\'à la charge complète"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Détection de mot clé et interaction totales"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Synthèse vocale simple"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ce service d\'entrée vocale pourra contrôler en permanence les fonctionnalités vocales et utiliser en votre nom les applications commandées par la voix. Il provient de l\'application <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Autoriser l\'utilisation de ce service?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Paramètres de reconnaissance sur l\'appareil"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Reconnaissance sur l\'appareil"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Reconnaissance vocale sur l\'appareil"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Moteur préféré"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Paramètres du moteur"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Cadence et ton"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Supprimer"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Toutes les applications et les données de cette session seront supprimées."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Supprimer"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Invité (vous)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Utilisateurs"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Autres utilisateurs"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Supprimer l\'activité d\'invité"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Supprimer toutes les applications et données d\'invité en quittant le mode Invité"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Supprimer l\'activité d\'invité?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Les applications et les données de cette session d\'invité seront supprimées maintenant, et toutes les activités d\'invité futures seront supprimées chaque fois que vous quitterez le mode Invité"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Activer les appels téléphoniques"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activer appels téléphoniques et textos"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Supprimer l\'utilisateur"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Toutes les notifications de « <xliff:g id="APP_NAME">%1$s</xliff:g> »"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Toutes les notifications de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notifications adaptatives"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> notification par jour</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications par jour</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Environ <xliff:g id="NUMBER_1">%,d</xliff:g> notification par jour</item>
+ <item quantity="other">Environ <xliff:g id="NUMBER_1">%,d</xliff:g> notifications par jour</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> notification par semaine</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications par semaine</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Environ <xliff:g id="NUMBER_1">%,d</xliff:g> notification par semaine</item>
+ <item quantity="other">Environ <xliff:g id="NUMBER_1">%,d</xliff:g> notifications par semaine</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Jamais"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notifications de l\'appareil et des applications"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ne rien faire"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibration"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Désactiver le son"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Pour activer la fonctionnalité, modifiez d\'abord l\'option « Maintenir le bouton de l\'interrupteur enfoncé » du menu de l\'interrupteur."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Pour activer la fonctionnalité, modifiez d\'abord l\'option « Maintenir l\'interrupteur enfoncé » du menu de l\'interrupteur."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Infos sur le réseau"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Le nom de votre appareil est visible pour les applications de votre téléphone. Il est aussi possible que d\'autres personnes le voient lorsque vous vous connectez à des appareils Bluetooth ou à un réseau Wi-Fi, ou lorsque vous configurez un point d\'accès Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Appareils"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"commandes des appareils"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cartes et laissez-passer"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cartes et laissez-passer"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Maintenir le bouton de l\'interrupteur enfoncé"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Maintenir l\'interrupteur enfoncé pour activer l\'Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Maintenir le bouton du menu de l\'interrupteur enfoncé"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"L\'action relative au maintien de l\'interrupteur enfoncé est désactivée"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Maintenir l\'interrupteur enfoncé"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Maintenir l\'interrupteur enfoncé pour accéder au menu"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu de l\'interrupteur"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Assistant numérique"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Accédez à l\'assistant numérique"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Accédez au menu de l\'interrupteur"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Pour l\'utiliser, définissez d\'abord un écran de verrouillage"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Maintenir enfoncé pour activer l\'Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Activez l\'Assistant en maintenant l\'interrupteur enfoncé"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu d\'alimentation et d\'urgence :\nAppuyez simultanément sur l\'interrupteur et le bouton d\'augmentation du volume."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Bloquer la sonnerie :\nRaccourci proposé dans le menu du volume."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu de l\'interrupteur :\nAppuyez simultanément sur l\'interrupteur et sur le bouton d\'augmentation du volume"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Désactiver la sonnerie :\nAppuyez sur un bouton de volume pour le raccourci"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Durée de maintien du doigt"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Réglez la sensibilité en choisissant la durée de maintien du doigt sur l\'interrupteur"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Court"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 868569d..c860935 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Lorsqu\'il se sert de Pixel Imprint, les images seront utilisées pour mettre à jour le modèle de son empreinte digitale. Les images permettant de créer ce modèle ne sont jamais stockées, mais celui-ci est enregistré de façon sécurisée sur son téléphone sans le quitter. Tous les traitements sont sécurisés sur son téléphone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"À tout moment dans les paramètres, vous pouvez supprimer les images et le modèle de votre empreinte, ou désactiver Fingerprint Unlock. Les images et le modèle sont stockés sur le téléphone jusqu\'à ce que vous les supprimiez."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"À tout moment dans les paramètres, vous et votre enfant pouvez supprimer les images et le modèle de vos empreintes, ou désactiver le déverrouillage par empreinte digitale. Les images et le modèle de vos empreintes digitales sont stockés sur le téléphone jusqu\'à ce que vous les supprimiez."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Vous pouvez déverrouiller votre téléphone sans le vouloir, par exemple si quelqu\'un le porte à votre doigt."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Vous pouvez déverrouiller votre téléphone sans le vouloir, par exemple si quelqu\'un le porte à votre doigt."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Vous pouvez déverrouiller votre tablette sans le vouloir, par exemple si quelqu\'un l\'approche de votre doigt."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Vous pouvez déverrouiller votre appareil sans le vouloir, par exemple si quelqu\'un l\'approche de votre doigt."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Le téléphone de votre enfant peut être déverrouillé involontairement, par exemple quand quelqu\'un pose le doigt dessus."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Pour de meilleurs résultats, utilisez une protection d\'écran certifiée Made for Google. Votre empreinte digitale peut ne pas être reconnue avec d\'autres protections d\'écran."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Pour de meilleurs résultats, utilisez une protection d\'écran certifiée Made for Google. L\'empreinte digitale de votre enfant peut ne pas être reconnue avec d\'autres protections d\'écran."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration présentant l\'appareil et la position du lecteur d\'empreintes digitales"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nom"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Réessayer"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Supprimer"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Posez le doigt sur le lecteur"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Posez le doigt sur le lecteur et levez-le quand il vibre"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"OK"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Petit problème… Il ne s\'agit pas du capteur"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Posez l\'index sur le capteur à l\'arrière du téléphone."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Échec de l\'enregistrement"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Délai d\'enregistrement de l\'empreinte digitale expiré. Veuillez réessayer."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Délai de configuration de l\'empreinte dépassé"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Réessayez ou configurez votre empreinte plus tard dans les paramètres"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"L\'enregistrement de l\'empreinte digitale n\'a pas fonctionné. Veuillez réessayer ou utiliser un autre doigt."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Ajouter une empreinte"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Suivant"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personnaliser votre téléphone"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Essayez différents styles, fonds d\'écran, etc."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Économiseur d\'écran"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"économiseur d\'écran"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Utiliser l\'économiseur d\'écran"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Lorsque l\'appareil est en charge ou connecté à une station d\'accueil"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Dans les deux cas"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Lorsque l\'appareil est en charge"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Lorsque l\'appareil est connecté à une station d\'accueil"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Jamais"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Désactivé"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Pour contrôler le comportement du téléphone lorsqu\'il se trouve sur une station d\'accueil et/ou lorsqu\'il est en veille, activez l\'économiseur d\'écran."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Quand l\'activer"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Économiseur d\'écran actuel"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Paramètres"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Ajuster automatiquement la luminosité"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Soulever pour activer"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Affichage en mode Veille"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Définissez un code"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Définir un code professionnel"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Définissez un schéma"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Pour plus de sécurité, définissez un schéma pour déverrouiller l\'appareil"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Définir un schéma professionnel"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Définissez un mot de passe"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Définissez un schéma"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Application pour les urgences"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Réinitialiser les préférences des applis"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Réinitialiser les préférences ?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Toutes les préférences suivantes seront réinitialisées :\n\n"<li>"Applis désactivées"</li>\n<li>"Notifications des applis désactivées"</li>\n<li>"Applis par défaut pour les actions"</li>\n<li>"Restrictions de données en arrière-plan pour les applis"</li>\n<li>"Toutes les restrictions d\'autorisations"</li>\n\n"Vous ne perdrez aucune donnée liée aux applications."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Toutes les préférences suivantes seront réinitialisées :\n\n"<li>"Applis désactivées"</li>\n<li>"Notifications des applis désactivées"</li>\n<li>"Applis par défaut pour les actions"</li>\n<li>"Restrictions de données en arrière-plan pour les applis"</li>\n<li>"Toutes les restrictions d\'autorisations"</li>\n<li>"Paramètres d\'utilisation de la batterie"</li>\n\n"Vous ne perdrez aucune donnée des applis."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Réinitialiser"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Gérer l\'espace"</string>
<string name="filter" msgid="9039576690686251462">"Filtrer"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Réinitialiser paramètres"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Les paramètres de texte et de taille d\'affichage ont été réinitialisés"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Réinitialiser la taille d\'affichage et le texte ?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Les paramètres d\'origine du téléphone concernant la taille d\'affichage et les préférences de texte seront rétablis"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Les paramètres d\'origine du téléphone concernant la taille d\'affichage et les préférences de texte seront rétablis"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Les paramètres d\'origine de la tablette concernant la taille d\'affichage et les préférences de texte seront rétablis"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Réinitialiser"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Des projets pour le week-end ?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Je vais à la plage. Tu veux venir ?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Pas d\'utilisation depuis la dernière charge complète"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Pas d\'utilisation au cours des dernières 24 h"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Autres utilisateurs"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"L\'estimation de l\'autonomie restante est basée sur l\'utilisation de l\'appareil"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Temps restant estimé"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Jusqu\'à la charge complète"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Détection de mot clé et interaction totales"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Reconnaissance vocale uniquement"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ce service de saisie vocale pourra effectuer une écoute vocale permanente et utiliser en votre nom les applications commandées par la voix. Il provient de l\'application : <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Autoriser l\'utilisation de ce service ?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Paramètres de reconnaissance sur l\'appareil"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Reconnaissance sur l\'appareil"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Reconnaissance vocale sur l\'appareil"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Moteur préféré"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Paramètres du moteur"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Débit et ton"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Supprimer"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Toutes les applications et les données de cette session seront supprimées."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Supprimer"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Invité (Vous)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Utilisateurs"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Autres utilisateurs"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Supprimer l\'activité"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Supprimer toutes les applis et données de la session lorsque vous quittez le mode Invité"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Supprimer l\'activité ?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Les applis et données de cette session Invité seront immédiatement supprimées, et toute l\'activité des futures sessions sera supprimée à chaque fois que vous quitterez le mode Invité"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Activer les appels téléphoniques"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activer les appels téléphoniques et les SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Supprimer un compte utilisateur"</string>
@@ -4007,11 +4021,11 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Toutes les notifications de \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Toutes les notifications de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notifications intelligentes"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
<item quantity="one">Environ <xliff:g id="NUMBER_1">%,d</xliff:g> notification par jour</item>
<item quantity="other">Environ <xliff:g id="NUMBER_1">%,d</xliff:g> notifications par jour</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
<item quantity="one">Environ <xliff:g id="NUMBER_1">%,d</xliff:g> notification par semaine</item>
<item quantity="other">Environ <xliff:g id="NUMBER_1">%,d</xliff:g> notifications par semaine</item>
</plurals>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ne rien faire"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibreur"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Silencieux"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Pour l\'activer, changez dans un premier temps l\'option \"Appui prolongé sur le bouton Marche/Arrêt\" du menu Marche/Arrêt."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Pour l\'activer, changez dans un premier temps l\'option \"Appui prolongé sur le bouton Marche/Arrêt\" du menu Marche/Arrêt."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Détails sur le réseau"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Les applications de votre téléphone ont accès au nom de votre appareil. D\'autres personnes peuvent aussi le voir lorsque vous vous connectez à des appareils Bluetooth ou à un réseau Wi-Fi, ou lorsque vous configurez un point d\'accès Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Appareils"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"commandes des appareils"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cartes de crédit et autres cartes"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cartes de crédit et autres cartes"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Appui prolongé sur le bouton Marche/Arrêt"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Appuyer de manière prolongée pour l\'Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Appuyer de manière prolongée pour le bouton Marche/Arrêt"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Appui prolongé désactivé"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Appuyez de manière prolongée sur le bouton Marche/Arrêt"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Appui prolongé sur le bouton Marche/Arrêt pour y accéder"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu Marche/Arrêt"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Assistant numérique"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Accéder à l\'assistant numérique"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Accéder au menu Marche/Arrêt"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Pour utiliser cette option, définissez d\'abord le verrouillage de l\'écran"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Maintenir enfoncé pour l\'Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Appuyer de manière prolongée sur le bouton Marche/Arrêt pour déclencher l\'Assistant"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu Marche/Arrêt et d\'urgence :\nAppuyez simultanément sur Marche/Arrêt et Volume+."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Bloquer la sonnerie :\nRaccourci disponible dans le menu du volume."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu Marche/Arrêt :\nAppuyez simultanément sur les boutons Marche/Arrêt et volume+"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Bloquer la sonnerie :\nUtilisez un bouton de volume pour utiliser le raccourci"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Durée de l\'appui prolongé"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Ajustez la sensibilité en choisissant combien de temps appuyer de manière prolongée sur le bouton Marche/Arrêt"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Court"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 7346333..29061d4 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Cando usa Pixel Imprint, utilízanse imaxes para actualizar o modelo da súa impresión dixital. As imaxes que se utilizan para crear o modelo da impresión dixital do teu fillo ou filla non se almacenan en ningún caso, pero este gárdase de maneira segura no teléfono e nunca sae del. Todo o procesamento ten lugar de maneira fiable no teléfono."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Podes eliminar as imaxes e o modelo da túa impresión dixital ou desactivar o desbloqueo dactilar en calquera momento desde Configuración. As imaxes e os modelos da túa impresión dixital almacénanse no teléfono ata que os eliminas."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"O teu fillo ou filla e mais ti podedes eliminar as imaxes e o modelo da súa impresión dixital ou desactivar o desbloqueo dactilar cando queirades en Configuración. As imaxes e os modelos de impresións dixitais gardaranse no teléfono ata que se eliminen."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"O teléfono pode desbloquearse sen que teñas intención de facelo (por exemplo, se alguén o achega ao teu dedo)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"O teléfono pode desbloquearse sen que teñas intención de facelo (por exemplo, se alguén o achega ao teu dedo)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"A tableta pode desbloquearse sen que teñas intención de facelo (por exemplo, se alguén a achega ao teu dedo)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"O dispositivo pode desbloquearse sen que teñas intención de facelo (por exemplo, se alguén o achega ao teu dedo)."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"O teléfono do teu fillo ou filla pode desbloquearse sen que el ou ela teña esa intención (por exemplo, se alguén llo achega ao dedo)."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Para obter os mellores resultados, utiliza un protector de pantalla que conte coa certificación Made for Google. Se utilizas outros protectores, pode que non se detecte a túa impresión dixital."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Para obter os mellores resultados, utiliza un protector de pantalla que conte coa certificación Made for Google. Se utilizas outros protectores, pode que non se detecte a impresión dixital do teu fillo ou filla."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustración coa localización do sensor de impresión dixital e do dispositivo"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nome"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Aceptar"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Tentar de novo"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Eliminar"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Toca o sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Coloca o dedo no sensor e levántao cando notes unha vibración"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Feito"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Iso non é o sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Toca co dedo índice o sensor que está detrás do teléfono."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Non se completou o rexistro"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Esgotouse o tempo de espera do rexistro da impresión dixital. Téntao de novo."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Esgotouse o tempo para configurar a impresión"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Téntao de novo agora mesmo ou configura a impresión dixital máis tarde en Configuración"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"O rexistro da impresión dixital non funcionou. Téntao de novo ou utiliza outro dedo."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Engadir outra"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Seguinte"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personaliza o teléfono"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Proba diferentes estilos, fondos de pantalla e moito máis"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Protector de pantalla"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"protector de pantalla"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Usar protector de pantalla"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Ao estar cargando ou na base"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"As dúas opcións"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Ao estar cargando"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Ao estar na base"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nunca"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Desactivado"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Para controlar o que sucederá cando o teléfono estea ancorado ou en modo de suspensión, activa o protector de pantalla."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Cando comezar"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Protector de pantalla actual"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Configuración"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Brillo intelixente"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Levantar para acender"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Pantalla en suspensión"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Define un PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Define un PIN para o traballo"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Define un padrón"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Se queres gozar de seguranza adicional, define un padrón para desbloquear o dispositivo"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Define un padrón para o traballo"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Impresión dixital: contrasinal"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Define un padrón para a impresión dixital"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplicación de emerxencia"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Restablecer preferencias das aplicacións"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Restablecer as preferencias das aplicacións?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"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>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"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<li>"Configuración de uso da batería"</li>\n\n"Non perderás datos de ningunha aplicación."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Restablecer aplicacións"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Xestionar espazo"</string>
<string name="filter" msgid="9039576690686251462">"Filtro"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Restablecer configuración"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Restablecéronse as preferencias de texto e tamaño de visualización"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Queres restablecer o texto e o tamaño de visualización?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"As túas preferencias de texto e tamaño de visualización substituiranse pola configuración orixinal do teléfono"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"As túas preferencias de texto e tamaño de visualización substituiranse pola configuración orixinal do teléfono"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"As túas preferencias de texto e tamaño de visualización substituiranse pola configuración orixinal da tableta"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Restablecer"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Que vas facer esta fin de semana?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Pensaba ir á praia. Queres vir?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Sen uso da batería desde a última carga completa"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Sen uso da batería nas últimas 24 horas"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Outros usuarios"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"A estimación do nivel de batería baséase no uso do dispositivo"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Tempo restante estimado"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Para completar a carga"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Interacción e palabra de activación completa"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Conversión simple de voz a texto"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Este servizo de entrada de voz poderá supervisar que a voz sempre estea activada e controlar as aplicacións compatibles coa voz no teu nome. Procede da aplicación <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Queres activar o uso deste servizo?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Configuración de recoñecemento no dispositivo"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Recoñecemento no dispositivo"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Recoñecemento de voz no dispositivo"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Motor preferido"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Configuración do motor"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Velocidade da fala e ton"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Eliminar"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Eliminaranse todas as aplicacións e datos desta sesión."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Quitar"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Convidado (ti)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Usuarios"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Outros usuarios"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Eliminar actividade do convidado"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Elimina todas as aplicacións e datos da sesión de convidado ao saír do modo de convidado"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Eliminar actividade do convidado?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"As aplicacións e os datos desta sesión de convidado eliminaranse agora, e toda actividade de convidados futura eliminarase cada vez que se saia do modo de convidado"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Activar chamadas telefónicas"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activar chamadas telefónicas e SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Eliminar usuario"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Todas as notificacións de \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Todas as notificacións de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notificacións intelixentes"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notificacións ao día</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notificación ao día</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Arredor de <xliff:g id="NUMBER_1">%,d</xliff:g> notificacións ao día</item>
+ <item quantity="one">Arredor de <xliff:g id="NUMBER_0">%d</xliff:g> notificación ao día</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other"><xliff:g id="NUMBER_1">%,d</xliff:g> notificacións á semana aproximadamente</item>
- <item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> notificación á semana aproximadamente</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Arredor de <xliff:g id="NUMBER_1">%,d</xliff:g> notificacións á semana</item>
+ <item quantity="one">Arredor de <xliff:g id="NUMBER_0">%d</xliff:g> notificación á semana</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nunca"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificacións de aplicacións e dispositivos"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Non facer nada"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrar"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Silenciar"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Para activar a opción, no menú de acendido, primeiro cambia Manter premido botón de acendido."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Para activar a opción, no menú de acendido, primeiro cambia Manter premido botón de acendido."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalles da rede"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"As aplicacións do teu teléfono poden consultar o nome do teu dispositivo. Tamén poden velo outros usuarios cando te conectes a dispositivos Bluetooth ou a redes wifi, así como cando configures zonas wifi."</string>
<string name="devices_title" msgid="649715719278562515">"Dispositivos"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"control de dispositivos"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Tarxetas e pases"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"tarxetas e pases"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Manter premido botón de acendido"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Accede ao Asistente cando se mantén premido o botón"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Mostra o menú de acendido cando se mantén premido o botón"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"A función de manter premido o botón está desactivada"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Manter premido botón de acendido"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Mantén premido o botón de acendido para acceder ao menú"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menú de acendido"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Asistente dixital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Acceder ao asistente dixital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Acceder ao menú de acendido"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Para usar esta función, tes que configurar un bloqueo de pantalla"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Manter premido para activar o Asistente"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Activa o Asistente ao manter premido o botón de acendido"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menú de acendido e emerxencia:\nPreme as teclas de acendido e de subir volume ao mesmo tempo."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Evitar que soe:\nAtallo dispoñible no menú de volume."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menú de acendido:\nPreme o botón de acendido e o botón de subida de volume ao mesmo tempo"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Evita que soe:\nPreme un botón de volume para usar o atallo"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Duración da presión no botón"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Para axustar a sensibilidade, escolle durante canto tempo debe manterse premido o botón de acendido"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Curta"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index ca1accf..5f17ed6 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"જ્યારે તેઓ Pixel Imprint સુવિધાનો ઉપયોગ કરે, ત્યારે તેમની ફિંગરપ્રિન્ટના મૉડલને અપડેટ કરવા માટે છબીઓનો ઉપયોગ કરવામાં આવે છે. તમારા બાળકની ફિંગરપ્રિન્ટનું મૉડલ બનાવવા માટે ઉપયોગમાં લેવાયેલી છબીઓને ક્યારેય પણ સ્ટોર કરવામાં આવતી નથી, પણ ફિંગરપ્રિન્ટના મૉડલને તમારા ફોન પર સુરક્ષિત રીતે સ્ટોર કરવામાં આવે છે અને તે હંમેશાં તમારા ફોનમાં જ રહે છે. બધી પ્રક્રિયાઓ સુરક્ષિત રીતે ફોનમાં જ કરવામાં આવે છે."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"તમે તમારી ફિંગરપ્રિન્ટની છબીઓ અને મૉડલ ડિલીટ કરી શકો છો અથવા કોઈપણ સમયે સેટિંગમાં ફિંગરપ્રિન્ટ અનલૉક સુવિધાને બંધ કરી શકો છો. જ્યાર સુધી તમે તમારી ફિંગરપ્રિન્ટની છબીઓ અને મૉડલ ડિલીટ ન કરો, ત્યાર સુધી તેમને તમારા ફોનમાં સ્ટોર કરવામાં આવે છે."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"સેટિંગમાં જઈને તમે અને તમારું બાળક કોઈપણ સમયે તેમની ફિંગરપ્રિન્ટની છબીઓ અને મૉડલ ડિલીટ કરી શકશો અથવા ફિંગરપ્રિન્ટ અનલૉક સુવિધા બંધ કરી શકશો. જ્યાં સુધી ફિંગરપ્રિન્ટની છબીઓ અને મૉડલને ડિલીટ ન કરવામાં આવે, ત્યાં સુધી તેને ફોન પર સ્ટોર કરવામાં આવે છે."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"તમારે તમારો ફોન અનલૉક કરવો ન હોય, ત્યારે પણ તે અનલૉક થઈ શકે છે, જેમ કે જો કોઈ વ્યક્તિ તેને તમારી આંગળી સામે પકડી રાખે તો."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"તમારે તમારો ફોન અનલૉક કરવો ન હોય, ત્યારે પણ તે અનલૉક થઈ શકે છે, જેમ કે જો કોઈ વ્યક્તિ તેને તમારી આંગળી સામે પકડી રાખે તો."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"તમારે તમારું ટૅબ્લેટ અનલૉક કરવું ન હોય, ત્યારે પણ તે અનલૉક થઈ શકે છે, જેમ કે જો કોઈ વ્યક્તિ તેને તમારી આંગળી સામે પકડી રાખે તો."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"તમારે તમારું ડિવાઇસ અનલૉક કરવું ન હોય, ત્યારે પણ તે અનલૉક થઈ શકે છે, જેમ કે જો કોઈ વ્યક્તિ તેને તમારી આંગળી સામે પકડી રાખે તો."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"તમારા બાળકે તેમનો ફોન અનલૉક કરવો ન હોય, ત્યારે પણ તે અનલૉક થઈ શકે છે, જેમ કે જો કોઈ વ્યક્તિ તેને તેમની આંગળી સામે પકડી રાખે તો."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"શ્રેષ્ઠ પરિણામો માટે, \'Google માટે બનાવેલા\' પ્રમાણિત સ્ક્રીનગાર્ડનો ઉપયોગ કરો. અન્ય સ્ક્રીનગાર્ડમાં, તમારી ફિંગરપ્રિન્ટ કદાચ યોગ્ય રીતે કામ કરશે નહીં."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"શ્રેષ્ઠ પરિણામો માટે, \'Google માટે બનાવેલા\' પ્રમાણિત સ્ક્રીનગાર્ડનો ઉપયોગ કરો. અન્ય સ્ક્રીનગાર્ડમાં, તમારા બાળકની ફિંગરપ્રિન્ટ કદાચ યોગ્ય રીતે કામ કરશે નહીં."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ડિવાઇસ અને ફિંગરપ્રિન્ટ સેન્સર સ્થાન સાથેનું ચિત્ર"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"નામ"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ઓકે"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ફરી પ્રયાસ કરો"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"ડિલીટ કરો"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"સેન્સરને સ્પર્શ કરો"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"સેન્સર પર તમારી આંગળી મૂકો અને વાઇબ્રેશનનો અનુભવ થવા પર ઉઠાવી લો"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"થઈ ગયું"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"ઓહ, તે સેન્સર નથી"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"ફોનની પાછળના સેન્સરને અડો. પ્રથમ આંગળી વાપરો."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"નોંધણી પૂર્ણ થઈ ન હતી"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"ફિંગરપ્રિન્ટ નોંધણીની સમય મર્યાદા સુધી પહોંચી ગયાં. ફરીથી પ્રયાસ કરો."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"ફિંગરપ્રિન્ટ સેટઅપ કરવાનો સમય સમાપ્ત થઈ ગયો"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"હમણાં ફરી પ્રયાસ કરો અથવા થોડા સમય પછી સેટિંગમાં જઈને તમારા ફિંગરપ્રિન્ટનું સેટઅપ કરો"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ફિંગરપ્રિન્ટ નોંધણી કામ કરતી ન હતી. ફરીથી પ્રયાસ કરો અથવા એક અલગ આંગળીનો ઉપયોગ કરો."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"બીજી ઉમેરો"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"આગલું"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"તમારા ફોનને કસ્ટમાઇઝ કરો"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"અલગ-અલગ શૈલીઓ, વૉલપેપર અને બીજું ઘણું અજમાવી જુઓ"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"સ્ક્રીન સેવર"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"સ્ક્રીનસેવર"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"સ્ક્રીન સેવરનો ઉપયોગ કરો"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ચાર્જ થતું હોય અથવા ડૉક કરેલ હોય ત્યારે"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"બેમાંથી કોઈપણ એક"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ચાર્જિંગ થતી વખતે"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ડૉક હોય ત્યારે"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ક્યારેય નહીં"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"બંધ"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ફોન ડૉક થાય અને/અથવા નિષ્ક્રિય થઈ જાય ત્યારે શું થાય તેને નિયંત્રિત કરવા માટે, સ્ક્રીન સેવર ચાલુ કરો."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"ક્યારે શરૂ કરવું"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"વર્તમાન સ્ક્રીન સેવર"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"સેટિંગ"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"સ્વચલિત તેજ"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"જાગૃત કરવા માટે લિફ્ટ કરો"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ઍમ્બિઅન્ટ ડિસ્પ્લે"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"પિન સેટ કરો"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"ઑફિસની પ્રોફાઇલ માટે પિન સેટ કરો"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"પૅટર્ન સેટ કરો"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"વધારાની સુરક્ષા માટે, ડિવાઇસ અનલૉક કરવા પૅટર્ન સેટ કરો"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"ઑફિસની પ્રોફાઇલ માટે પૅટર્ન સેટ કરો"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ફિંગરપ્રિન્ટ વાપરવા પાસવર્ડ સેટ કરો"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ફિંગરપ્રિન્ટ વાપરવા પૅટર્ન સેટ કરો"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"ઇમર્જન્સી ઍપ્લિકેશન"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"ઍપ પસંદગીઓને રીસેટ કરો"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"ઍપ પસંદગીઓને રીસેટ કરીએ?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"આમ કરવાથી આ બધી પસંદગીઓ રીસેટ થઈ જશે:\n\n"<li>"બંધ કરેલી ઍપ"</li>\n<li>"ઍપના બંધ કરેલાં નોટિફિકેશન"</li>\n<li>"ક્રિયાઓ માટેની ડિફૉલ્ટ ઍપ્લિકેશનો"</li>\n<li>"ઍપ માટે બૅકગ્રાઉન્ડ ડેટાના પ્રતિબંધો"</li>\n<li>"કોઈપણ પરવાનગીના પ્રતિબંધો"</li>\n\n"તમે કોઈપણ ઍપનો ડેટા ગુમાવશો નહીં."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"આમ કરવાથી આ બધી પસંદગીઓ રીસેટ થઈ જશે:\n\n"<li>"બંધ કરેલી ઍપ"</li>\n<li>"બંધ કરેલાં નોટિફિકેશન"</li>\n<li>"ક્રિયાઓ માટેની ડિફૉલ્ટ ઍપ્લિકેશનો"</li>\n<li>"ઍપ માટે બૅકગ્રાઉન્ડ ડેટાના પ્રતિબંધો"</li>\n<li>"કોઈપણ પરવાનગીના પ્રતિબંધો"</li>\n<li>"બૅટરીના વપરાશના સેટિંગ"</li>\n\n"તમે કોઈપણ ઍપનો ડેટા ગુમાવશો નહીં."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"ઍપ ફરીથી સેટ કરો"</string>
<string name="manage_space_text" msgid="9013414693633572277">"સ્પેસ મેનેજ કરો"</string>
<string name="filter" msgid="9039576690686251462">"ફિલ્ટર"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"સેટિંગ રીસેટ કરો"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ડિસ્પ્લેનું કદ અને ટેક્સ્ટના સેટિંગ રીસેટ કરવામાં આવ્યા છે"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"શું ડિસ્પ્લેનું કદ અને ટેક્સ્ટ રીસેટ કરીએ?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"તમારા ડિસ્પ્લેનું કદ અને ટેક્સ્ટની પસંદગીઓને ફોનના ઑરિજિનલ સેટિંગ પર રીસેટ કરવામાં આવશે"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"તમારા ડિસ્પ્લેનું કદ અને ટેક્સ્ટની પસંદગીઓને ફોનના ઑરિજિનલ સેટિંગ પર રીસેટ કરવામાં આવશે"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"તમારા ડિસ્પ્લેનું કદ અને ટેક્સ્ટની પસંદગીઓ ટૅબ્લેટના ઑરિજિનલ સેટિંગ પર રીસેટ થઈ જશે"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"રીસેટ કરો"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"શું વીકએન્ડ માટે કોઈ પ્લાન છે?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"દરિયાકિનારે જઈ રહ્યા છીએ. જોડાવા માગો છો?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"છેલ્લે પૂર્ણ ચાર્જ કરાયા પછી બિલકુલ વપરાશ થયો નથી"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"છેલ્લા 24 કલાકમાં બિલકુલ વપરાશ થયો નથી"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"અન્ય વપરાશકર્તાઓ"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"બાકી રહેલી બૅટરીનો અંદાજ ડિવાઇસના તમારા ઉપયોગ પર આધારિત છે"</string>
<string name="estimated_time_left" msgid="948717045180211777">"અંદાજિત બાકી સમય"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"સંપૂર્ણપણે ચાર્જ થવામાં"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"પૂર્ણ હૉટવર્ડ અને ક્રિયાપ્રતિક્રિયા"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"સરળ સ્પીચ ટુ ટેક્સ્ટ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"આ વૉઇસ ઇનપુટ સેવા તમારા વતી હંમેશા-ચાલુ વૉઇસ મોનિટરિંગ કરવા અને વૉઇસ સક્ષમ એપ્લિકેશન્સને નિયંત્રિત કરવા માટે સમર્થ હશે. તે <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> એપ્લિકેશનમાંથી આવે છે. આ સેવાના ઉપયોગને સક્ષમ કરીએ?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"ડિવાઇસ પર ઓળખ સંબંધિત સેટિંગ"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"ડિવાઇસ પર ઓળખ"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"ડિવાઇસ પર વાણી ઓળખ"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"મનપસંદ એન્જિન"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"એન્જિન સેટિંગ"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"બોલવાની ઝડપ અને પિચ"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"ડિલીટ કરો"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"આ સત્રમાંની તમામ ઍપ અને ડેટા કાઢી નાખવામાં આવશે."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"કાઢી નાખો"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"અતિથિ (તમે)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"વપરાશકર્તાઓ"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"અન્ય વપરાશકર્તાઓ"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"અતિથિ પ્રવૃત્તિ ડિલીટ કરો"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"અતિથિ મોડમાંથી બહાર નીકળતી વખતે તમામ અતિથિ ઍપ અને ડેટા ડિલીટ કરો"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"શું અતિથિની પ્રવૃત્તિ ડિલીટ કરીએ?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"આ અતિથિ સત્રમાંની તમામ ઍપ અને ડેટા હમણાં ડિલીટ કરવામાં આવશે તેમજ ભવિષ્યમાં જ્યારે પણ તમે અતિથિ મોડમાંથી બહાર નીકળો, ત્યારે તમામ અતિથિ પ્રવૃત્તિ ડિલીટ કરવામાં આવશે"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ફોન કૉલ ચાલુ કરો"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ફોન કૉલ અને SMS ચાલુ કરો"</string>
<string name="user_remove_user" msgid="8468203789739693845">"વપરાશકર્તાને ડિલીટ કરો"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"ના તમામ નોટિફિકેશન"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>ના બધા નોટિફિકેશન"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"સુવિધાજનક નોટિફિકેશન"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> નોટિફિકેશન પ્રતિ દિવસ</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> નોટિફિકેશન પ્રતિ દિવસ</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">દરરોજ લગભગ <xliff:g id="NUMBER_1">%,d</xliff:g> નોટિફિકેશન</item>
+ <item quantity="other">દરરોજ લગભગ <xliff:g id="NUMBER_1">%,d</xliff:g> નોટિફિકેશન</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> નોટિફિકેશન પ્રતિ સપ્તાહ</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> નોટિફિકેશન પ્રતિ સપ્તાહ</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">દર અઠવાડિયે લગભગ <xliff:g id="NUMBER_1">%,d</xliff:g> નોટિફિકેશન</item>
+ <item quantity="other">દર અઠવાડિયે લગભગ <xliff:g id="NUMBER_1">%,d</xliff:g> નોટિફિકેશન</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"ક્યારેય નહીં"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ડિવાઇસ અને ઍપના નોટિફિકેશન"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"કંઈ કરતા નહીં"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"વાઇબ્રેટ"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"મ્યૂટ કરો"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ચાલુ કરવા માટે, પહેલાં \"પાવર બટનને દબાવી રાખો\" વિકલ્પને બદલીને પાવર મેનૂ કરો."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ચાલુ કરવા માટે, પહેલાં \"પાવર બટન દબાવી રાખો\" વિકલ્પને બદલીને પાવર મેનૂ કરો."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"નેટવર્કની વિગતો"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"તમારા ડિવાઇસનું નામ તમારા ફોનની ઍપ પર જોઈ શકાય છે. તમે બ્લૂટૂથ ડિવાઇસથી કનેક્ટ કરો, વાઇ-ફાઇ નેટવર્કથી કનેક્ટ કરો અથવા વાઇ-ફાઇ હૉટસ્પૉટને સેટ કરો ત્યારે તે અન્ય લોકોને પણ દેખાઈ શકે છે."</string>
<string name="devices_title" msgid="649715719278562515">"ઉપકરણો"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ડિવાઇસનાં નિયંત્રણો"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"કાર્ડ અને પાસ"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"કાર્ડ અને પાસ"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"પાવર બટન દબાવી રાખો"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant માટે પાવર બટન દબાવી રાખો"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"પાવર મેનૂ માટે પાવર બટન દબાવી રાખો"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Assistant માટે દબાવી રાખો બટન અક્ષમ કરેલું છે"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"પાવર બટનને દબાવી રાખો"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"ઍક્સેસ કરવા માટે, પાવર બટન દબાવી રાખો"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"પાવર મેનૂ"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ડિજિટલ આસિસ્ટંટ"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ડિજિટલ આસિસ્ટંટને ઍક્સેસ કરો"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"પાવર મેનૂ ઍક્સેસ કરો"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ઉપયોગ કરવા માટે, પહેલાં કોઈ સ્ક્રીન લૉક સેટ કરો"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistantને ચાલુ કરવા માટે થોડીવાર દબાવી રાખો"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"પાવર બટનને દબાવી રાખીને Assistantનો ઉપયોગ કરો"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"પાવર અને ઇમર્જન્સી મેનૂ:\nએક જ સમયે અને વૉલ્યૂમ વધારવાનું બટન દબાવો."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"રિંગ વાગતી અટકાવો:\nવૉલ્યૂમ મેનૂમાં શૉર્ટકટ ઉપલબ્ધ છે."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"પાવર મેનૂ:\nપાવર બટન અને વૉલ્યૂમ વધારવાના બટનને એકસાથે દબાવો"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"રિંગ વાગવાનું ટાળો:\nશૉર્ટકટ માટે વૉલ્યૂમનું કોઈ બટન દબાવો"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"દબાવી રાખવાનો સમયગાળો"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"પાવર બટનને કેટલા સમય સુધી દબાવી રાખવું તે પસંદ કરીને સંવેદિતાની ગોઠવણ કરો"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"નાનો"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index b5de38a..5233ff8 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"जब आपका बच्चा Pixel Imprint का इस्तेमाल करता है, तब उसके फ़िंगरप्रिंट के मॉडल को अपडेट करने के लिए उसके फ़िंगरप्रिंट की इमेज इस्तेमाल की जाती हैं. आपके बच्चे के फ़िंगरप्रिंट का मॉडल बनाते समय इस्तेमाल की गई इमेज कभी भी सेव नहीं की जाती हैं. हालांकि, फ़िंगरप्रिंट के मॉडल को फ़ोन में सुरक्षित तरीके से सेव किया जाता है और इसे किसी के साथ शेयर नहीं किया जाता है. इसे पूरी तरह से आपके फ़ोन में ही सुरक्षित तरीके से प्रोसेस किया जाता है."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"\'सेटिंग\' में जाकर, अपने फ़िंगरप्रिंट के मॉडल को कभी भी मिटाया जा सकता है. इसके अलावा, फ़िंगरप्रिंट अनलॉक को बंद किया जा सकता है. फ़िंगरप्रिंट के मॉडल, फ़ोन में तब तक सेव रहते हैं, जब तक उन्हें मिटाया नहीं जाता."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"आपका बच्चा और आप किसी भी समय, सेटिंग में जाकर फ़िंगरप्रिंट की इमेज और मॉडल मिटा सकते हैं या फ़िंगरप्रिंट से अनलॉक करने की सुविधा को बंद कर सकते हैं. फ़िंगरप्रिंट की इमेज और मॉडल, फ़ोन में तब तक सेव रहते हैं, जब तक उन्हें नहीं मिटाया जाता है."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"आपके न चाहने पर भी आपका फ़ोन अनलॉक किया जा सकता है, जैसे कि कोई व्यक्ति आपके फ़ोन को आपकी उंगली से छूकर अनलॉक कर सकता है."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"आपके न चाहने पर भी आपका फ़ोन अनलॉक किया जा सकता है, जैसे कि कोई व्यक्ति आपके फ़ोन को आपकी उंगली से छूकर अनलॉक कर सकता है."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"आपके न चाहने पर भी आपका टैबलेट अनलॉक किया जा सकता है. जैसे, कोई व्यक्ति आपके टैबलेट को आपकी उंगली से छूकर अनलॉक कर सकता है."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"आपके न चाहने पर भी आपका डिवाइस अनलॉक किया जा सकता है. जैसे, कोई व्यक्ति आपके डिवाइस को आपकी उंगली से छूकर अनलॉक कर सकता है."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"आपके बच्चे के न चाहने पर भी उसका फ़ोन अनलॉक किया जा सकता है, जैसे कि कोई व्यक्ति फ़ोन को आपके बच्चे की उंगली से छुआकर अनलॉक कर सकता है."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"बेहतर नतीजों के लिए, ऐसे स्क्रीन प्राेटेक्टर का इस्तेमाल करें जिसे Made for Google का सर्टिफ़िकेट मिला है. हो सकता है कि दूसरे स्क्रीन प्राेटेक्टर के साथ, आपका फ़िंगरप्रिंट काम न करे."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"बेहतर नतीजों के लिए, ऐसे स्क्रीन प्राेटेक्टर का इस्तेमाल करें जिसे Made for Google का सर्टिफ़िकेट मिला है. हो सकता है कि दूसरे स्क्रीन प्राेटेक्टर पर आपके बच्चे का फ़िंगरप्रिंट काम न करे."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"डिवाइस और उस पर फ़िंगरप्रिंट सेंसर की जगह बताने वाला चित्रण"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"नाम"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ठीक है"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"फिर से कोशिश करें"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"मिटाएं"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"सेंसर को छुएं"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"अपनी उंगली सेंसर पर रखें और वाइब्रेशन महसूस होने पर हटा लें"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"हो गया"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"ओह हो, वह सेंसर नहीं है"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"अपने फ़ोन के पीछे लगे सेंसर को छुएं. अपनी तर्जनी (अंगूठे के बगल वाली) उंगली का इस्तेमाल करें."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"उंगली जोड़ने की प्रक्रिया पूरी नहीं हो सकी"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"फ़िंगरप्रिंट दर्ज करने की समयसीमा खत्म हो गई है. फिर से कोशिश करें."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"फ़िंगरप्रिंट सेट अप करने का समय खत्म हो गया"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"अभी दोबारा कोशिश करें या कुछ समय बाद सेटिंग में जाकर, फ़िंगरप्रिंट सेट अप करें"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"फ़िंगरप्रिंट नामांकन ने काम नहीं किया. फिर से प्रयास करें या किसी दूसरी उंगली का उपयोग करें."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"दूसरा फ़िंगरप्रिंट जोड़ें"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"आगे बढ़ें"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"अपने फ़ोन को पसंद के मुताबिक बनाएं"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"अलग-अलग स्टाइल, वॉलपेपर, और बहुत कुछ आज़माएं"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"स्क्रीन सेवर"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"स्क्रीन सेवर"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"स्क्रीन सेवर का इस्तेमाल करें"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"चार्ज करते समय या डॉक किए होने पर"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"कोई एक"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"चार्ज करते समय"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"जब डॉक किया हुआ हो"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"कभी नहीं"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"बंद"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"फ़ोन के डॉक रहते समय और/या उपयोग में नहीं होने पर जो भी होता है, उसे नियंत्रित करने के लिए स्क्रीन सेवर चालू करें."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"कब शुरू करना है"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"मौजूदा स्क्रीन सेवर"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"सेटिंग"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"अपनेआप स्क्रीन की रोशनी"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"सक्रिय करने के लिए उठाएं"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"हमेशा चालू स्क्रीन दिखाएं"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"पिन सेट करें"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"वर्क प्रोफ़ाइल का पिन सेट करें"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"पैटर्न सेट करें"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"ज़्यादा सुरक्षा के लिए, इस डिवाइस को अनलॉक करने के लिए एक पैटर्न सेट करें"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"वर्क प्रोफाइल का पैटर्न सेट करें"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"फ़िंगरप्रिंट का इस्तेमाल करने के लिए, पासवर्ड सेट करें"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"फ़िंगरप्रिंट का इस्तेमाल करने के लिए, पैटर्न सेट करें"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"आपातकालीन ऐप"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"ऐप्लिकेशन से जुड़ी पसंद रीसेट करें"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"ऐप्लिकेशन से जुड़ी पसंद को रीसेट करना चाहते हैं?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"इससे इन सबके लिए पसंद रीसेट हो जाएंगी:\n\n"<li>"बंद किए गए ऐप्लिकेशन"</li>\n<li>"बंद की गई ऐप्लिकेशन सूचनाएं"</li>\n<li>"कार्रवाइयों के लिए डिफ़ॉल्ट ऐप्लिकेशन"</li>\n<li>"ऐप्लिकेशन के लिए बैकग्राउंड डेटा पर रोक"</li>\n<li>"किसी भी मंज़ूरी पर रोक"</li>\n\n"आपका सारा ऐप्लिकेशन डेटा बना रहेगा."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ऐसा करने पर, इन सभी से जुड़ी सेटिंग रीसेट हो जाएंगी:\n\n"<li>"बंद किए गए ऐप्लिकेशन"</li>\n<li>"ऐप्लिकेशन की बंद गई सूचनाएं"</li>\n<li>"कार्रवाइयों के लिए डिफ़ॉल्ट ऐप्लिकेशन"</li>\n<li>"ऐप्लिकेशन के लिए बैकग्राउंड डेटा की पाबंदियां"</li>\n<li>"किसी भी अनुमति से जुड़ी पाबंदियां"</li>\n<li>"बैटरी खर्च होने से जुड़ी सेटिंग"</li>\n\n"ऐप्लिकेशन का कोई डेटा गायब नहीं होगा."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"ऐप्लिकेशन रीसेट करें"</string>
<string name="manage_space_text" msgid="9013414693633572277">"जगह मैनेज करें"</string>
<string name="filter" msgid="9039576690686251462">"फ़िल्टर"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"सेटिंग रीसेट करें"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"डिसप्ले साइज़ और टेक्स्ट की सेटिंग रीसेट हो गई हैं"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"क्या आपको डिसप्ले के साइज़ और टेक्स्ट को रीसेट करना है?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"आपके डिसप्ले का साइज़ और टेक्स्ट की सेटिंग, फ़ोन की मूल सेटिंग पर रीसेट कर दी जाएगी"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"आपके डिसप्ले का साइज़ और टेक्स्ट की सेटिंग, फ़ोन की मूल सेटिंग पर रीसेट कर दी जाएगी"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"डिसप्ले के साइज़ और टेक्स्ट की सेटिंग को रीसेट करके, टैबलेट की मूल सेटिंग लागू कर दी जाएंगी"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"रीसेट करें"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"वीकेंड का कोई प्लान है?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"बीच की ओर जा रहे हैं. क्या आपको आना है?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"पिछली बार पूरी चार्ज होने के बाद, बैटरी का इस्तेमाल नहीं हुआ"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"पिछले 24 घंटे में, बैटरी का इस्तेमाल नहीं हुआ"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"अन्य उपयोगकर्ता"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"डिवाइस के इस्तेमाल के हिसाब से अनुमान लगाया गया है कि फ़ोन की बैटरी और कितनी देर चलेगी"</string>
<string name="estimated_time_left" msgid="948717045180211777">"अनुमानित बचा हुआ समय"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"पूरी तरह चार्ज होने तक"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"पूरा हॉटवर्ड और इंटरैक्शन"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"आसान वाक् से लेख"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"बोलकर फ़ोन को निर्देश देने की यह सेवा, आपकी ओर से हमेशा आवाज़ की निगरानी और ऐसी ऐप जिसमें आवाज़ का इस्तेमाल होता है, को नियंत्रित करने में मदद करेगी. यह <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ऐप से आता है. इस सेवा को चालू करें?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"उपयोगकर्ता के डिवाइस पर, बोली पहचानने की सेटिंग"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"उपयोगकर्ता के डिवाइस पर, बोली पहचानने की सुविधा"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"उपयोगकर्ता के डिवाइस पर बोली पहचानने की सेटिंग"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"पसंदीदा इंजन"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"इंजन सेटिंग"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"बोलने की दर और पिच"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"मिटाएं"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"इस सेशन के सभी ऐप्लिकेशन और डेटा को हटा दिया जाएगा."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"निकालें"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"मेहमान (आप)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"उपयोगकर्ता"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"अन्य उपयोगकर्ता"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"मेहमान मोड में की गई गतिविधि मिटाएं"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"मेहमान मोड से बाहर निकलने पर, मेहमान मोड में मौजूद डेटा और इस्तेमाल किए गए सभी ऐप्लिकेशन को मिटा दिया जाता है"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"मेहमान मोड की गतिविधि को मिटाना है?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"मेहमान के तौर पर ब्राउज़ किए गए इस सेशन में मौजूद डेटा और इस्तेमाल किए गए ऐप्लिकेशन को मिटा दिया जाएगा. इसके अलावा, आने वाले समय में हर बार मेहमान मोड से बाहर निकलने पर, उस दौरान की गई गतिविधियां मिटा दी जाएंगी"</string>
<string name="user_enable_calling" msgid="264875360626905535">"फ़ोन कॉल की सुविधा चालू करें"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"फ़ोन कॉल और मैसेज (एसएमएस) चालू करें"</string>
<string name="user_remove_user" msgid="8468203789739693845">"उपयोगकर्ता को हटाना"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" की सभी सूचनाएं"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> की सभी सूचनाएं"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"ज़रूरत के हिसाब से सूचनाएं"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">रोज़~<xliff:g id="NUMBER_1">%,d</xliff:g> सूचना</item>
- <item quantity="other">रोज़ ~<xliff:g id="NUMBER_1">%,d</xliff:g> सूचनाएं</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">हर दिन करीब <xliff:g id="NUMBER_1">%,d</xliff:g> सूचना</item>
+ <item quantity="other">हर दिन करीब <xliff:g id="NUMBER_1">%,d</xliff:g> सूचनाएं</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">हर हफ़्ते ~<xliff:g id="NUMBER_1">%,d</xliff:g> सूचना</item>
- <item quantity="other">हर हफ़्ते ~<xliff:g id="NUMBER_1">%,d</xliff:g> सूचनाएं</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">हर हफ़्ते करीब <xliff:g id="NUMBER_1">%,d</xliff:g> सूचना</item>
+ <item quantity="other">हर हफ़्ते करीब <xliff:g id="NUMBER_1">%,d</xliff:g> सूचनाएं</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"कभी नहीं"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"डिवाइस और ऐप्लिकेशन की सूचनाएं"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"कुछ न करें"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"वाइब्रेट"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"म्यूट"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"इस सेटिंग को चालू करने के लिए, पहले \"पावर बटन को दबाकर रखें\" को पावर मेन्यू में बदलें."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"इस सेटिंग को चालू करने के लिए, पहले \"पावर बटन को दबाकर रखें\" को पावर मेन्यू में बदलें."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"नेटवर्क के बारे में जानकारी"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"आपके डिवाइस के नाम की जानकारी को फ़ोन पर मौजूद ऐप्लिकेशन ऐक्सेस कर सकते हैं. ब्लूटूथ डिवाइस जोड़ते समय, वाई-फ़ाई नेटवर्क से जुड़ते समय या वाई-फ़ाई हॉटस्पॉट सेट अप करते समय भी दूसरे लोग आपके डिवाइस का नाम देख सकते हैं."</string>
<string name="devices_title" msgid="649715719278562515">"डिवाइस"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"डिवाइस कंट्रोल"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"कार्ड और पास"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"कार्ड और पास"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"पावर बटन को दबाकर रखें"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant को शुरू करने के लिए, पावर बटन को दबाकर रखें"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"पावर मेन्यू खोलने के लिए, पावर बटन को दबाकर रखें"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Assistant को शुरू करने के लिए, पावर बटन को दबाकर रखने की सुविधा बंद है"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"पावर बटन को दबाकर रखें"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"पावर मेन्यू को ऐक्सेस करने के लिए, पावर बटन को दबाकर रखें"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"पावर मेन्यू"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"डिजिटल असिस्टेंट"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"डिजिटल असिस्टेंट को ऐक्सेस करें"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"पावर मेन्यू को ऐक्सेस करें"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"इस्तेमाल करने के लिए, सबसे पहले स्क्रीन लॉक सेट करें"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant को चालू करने के लिए, पावर बटन को कुछ देर दबाकर रखें"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"पावर बटन को कुछ देर तक दबाकर, Assistant का इस्तेमाल करें"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"पावर और आपातकालीन मेन्यू:\nपावर बटन और आवाज़ तेज़ करने वाले बटन को एक साथ दबाएं."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"घंटी बजने से रोकना:\nइसका शॉर्टकट, वॉल्यूम मेन्यू में मौजूद है."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"पावर मेन्यू खोलना:\nइसके लिए, पावर बटन और आवाज़ तेज़ करने वाले बटन को एक साथ दबाएं"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"घंटी बजने से रोकना:\nइसके लिए शॉर्टकट के तौर पर, आवाज़ कम या ज़्यादा करने वाले बटन को दबाएं"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"बटन को दबाकर रखने का समय"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"पावर बटन को दबाकर रखने का समय चुनकर, संवेदनशीलता में बदलाव करें"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"कम समय के लिए"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 0657c64..6cfac90 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -468,7 +468,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Kad koristi Pixel Imprint, slike se upotrebljavaju za ažuriranje modela njegovog otiska prsta. Slike koje se koriste za izradu modela djetetovog otiska prsta nikad se ne pohranjuju, ali se model otiska prsta sigurno pohranjuje na telefonu i nikad se ne šalje s telefona. Sva se obrada vrši sigurno na telefonu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"U postavkama možete izbrisati model i slike otiska prsta ili isključiti otključavanje otiskom prsta kad god želite. Slike i modeli otiska prsta pohranjeni su na telefonu dok ih ne izbrišete."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Dijete i vi uvijek možete izbrisati slike i model njegovog otiska prsta ili isključiti otključavanje otiskom prsta u postavkama. Slike i modeli otiska prsta pohranjuju se na telefonu dok se ne izbrišu."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Vaš se telefon može otključati kad to ne namjeravate, na primjer ako ga netko prinese vašem prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Vaš se telefon može otključati kad to ne namjeravate, na primjer ako ga netko prinese vašem prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Vaš se tablet može otključati kad to ne namjeravate, na primjer ako ga netko prinese vašem prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Vaš se uređaj može otključati kad to ne namjeravate, na primjer ako ga netko prinese vašem prstu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Djetetov telefon može se otključati i kad dijete to ne namjerava, na primjer ako ga netko prinese djetetovom prstu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Za najbolje rezultate koristite zaštitu zaslona s certifikatom Made for Google. Vaš otisak prsta možda neće funkcionirati s drugim zaštitama zaslona."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Za najbolje rezultate koristite zaštitu zaslona s certifikatom Made for Google. Otisak prsta vašeg djeteta možda neće funkcionirati s drugim zaštitama zaslona."</string>
@@ -518,6 +520,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustracija uređaja i lokacije senzora otiska prsta"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Naziv"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"U redu"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Pokušajte ponovo"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Izbriši"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Dodirnite senzor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Stavite prst na senzor i podignite ga kada osjetite vibraciju"</string>
@@ -597,8 +600,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Gotovo"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ups, to nije senzor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Kažiprstom dodirnite senzor na stražnjoj strani telefona."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registracija nije dovršena"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Isteklo je vremensko ograničenje za registraciju otiska prsta. Pokušajte ponovo."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Vrijeme za postavljanje otiska prsta je isteklo"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Pokušajte ponovo odmah ili ga postavite kasnije u postavkama"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Registracija otiska prsta nije uspjela. Pokušajte ponovo ili prislonite neki drugi prst."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Dodajte drugi"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Dalje"</string>
@@ -1470,17 +1473,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Prilagodba telefona"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Isprobajte različite stilove, pozadine i drugo"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Čuvar zaslona"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"čuvar zaslona"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Koristi čuvar zaslona"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Tijekom punjenja ili kada je na priključnoj stanici"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Bilo koje od navedenog"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Tijekom punjenja"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Kada je na priključnoj stanici"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nikada"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Isključeno"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Da biste kontrolirali događaje dok je telefon na priključnoj stanici i/ili dok miruje, uključite čuvar zaslona."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kada pokrenuti"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Trenutačni čuvar zaslona"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Postavke"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatska svjetlina"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Aktivacija podizanjem"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambijentalni zaslon"</string>
@@ -1970,6 +1971,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Postavite PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Postavite PIN poslovnog profila"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Postavite uzorak"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Za dodatnu sigurnost postavite uzorak za otključavanje uređaja"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Postavite uzorak poslovnog profila"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Otisak prsta zahtijeva zaporku"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Otisak prsta zahtijeva uzorak"</string>
@@ -2125,7 +2127,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplikacija za hitne slučajeve"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Poništavanje postavki aplikacija"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Poništiti postavke aplikacija?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Sve sljedeće postavke vratit će se na zadano:\n\n"<li>"onemogućene aplikacije"</li>\n<li>"onemogućene obavijesti aplikacija"</li>\n<li>"zadane aplikacije za radnje"</li>\n<li>"ograničenja pozadinskih podataka za aplikacije"</li>\n<li>"sva ograničenja dopuštenja."</li>\n\n"Nećete izgubiti podatke nijedne aplikacije."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Sve sljedeće postavke vratit će se na zadano:\n\n"<li>"onemogućene aplikacije"</li>\n<li>"onemogućene obavijesti aplikacija"</li>\n<li>"zadane aplikacije za radnje"</li>\n<li>"ograničenja pozadinskih podataka za aplikacije"</li>\n<li>"sva ograničenja dopuštenja"</li>\n<li>"postavke potrošnje baterije."</li>\n\n"Nećete izgubiti podatke aplikacija."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Poništi aplikacije"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Upravljaj prostorom"</string>
<string name="filter" msgid="9039576690686251462">"Filtar"</string>
@@ -2380,7 +2382,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Poništi postavke"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Postavke veličine zaslona i teksta vraćene su na zadano"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Želite li poništiti veličinu prikaza i tekst?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Vaše postavke veličine prikaza i teksta vratit će se na izvorne postavke telefona."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Vaše postavke veličine prikaza i teksta vratit će se na izvorne postavke telefona."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Vaše postavke veličine prikaza i teksta vratit će se na izvorne postavke tableta."</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Poništi"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Što planiraš ovaj vikend?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Idem na plažu. Ideš sa mnom?"</string>
@@ -2974,6 +2977,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Nema potrošnje od posljednjeg potpunog punjenja"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nema potrošnje u posljednja 24 h"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Drugi korisnici"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Procjena stanja baterije temelji se na upotrebi uređaja"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Procijenjeno preostalo vrijeme"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Do potpune napunjenosti"</string>
@@ -3063,6 +3067,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Potpuni pokretač značajki i interakcija"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Jednostavno pretvaranje govora u tekst"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Usluga glasovnog unosa moći će u vaše ime neprekidno nadzirati glasovne unose i kontrolirati aplikacije s omogućenom glasovnom interakcijom. Pruža je <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Želite li omogućiti tu uslugu?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Postavke prepoznavanja na uređaju"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Prepoznavanje na uređaju"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Prepoznavanje govora na uređaju"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Željeni alat"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Postavke alata"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Brzina govora i visina glasa"</string>
@@ -3459,6 +3466,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Izbriši"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Izbrisat će se sve aplikacije i podaci u ovoj sesiji."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Ukloni"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gost (vi)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Korisnici"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Drugi korisnici"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Izbriši aktivnost gostujuće sesije"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Izbriši sve aplikacije i podatke gostujuće sesije prilikom izlaska iz načina rada za goste"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Izbrisati aktivnost gosta?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacije i podaci iz ove gostujuće sesije izbrisat će se odmah, a sve buduće aktivnosti gostujuće sesije izbrisat će se svaki put kad napustite način rada za goste."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Uključi telefonske pozive"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Uključivanje telefonskih poziva i SMS-a"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Brisanje korisnika"</string>
@@ -4053,15 +4067,15 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Sve obavijesti aplikacije \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Sve obavijesti aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Prilagodljive obavijesti"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavijest dnevno</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavijesti dnevno</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavijesti dnevno</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obavijest dnevno</item>
+ <item quantity="few">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obavijesti dnevno</item>
+ <item quantity="other">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obavijesti dnevno</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavijest tjedno</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavijesti tjedno</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> obavijesti tjedno</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obavijest tjedno</item>
+ <item quantity="few">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obavijesti tjedno</item>
+ <item quantity="other">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obavijesti tjedno</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nikada"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Obavijesti na uređaju i u aplikacijama"</string>
@@ -5341,7 +5355,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ne poduzimaj ništa"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibracija"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Isključi zvuk"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Da biste omogućili tu opciju, najprije promijenite opciju \"Pritisnite i zadržite tipku za uključivanje/isključivanje\" u izbornik tipke za uključivanje."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Da biste omogućili tu opciju, najprije promijenite opciju \"Pritisnite i zadržite tipku za uključivanje/isključivanje\" u izbornik tipke za uključivanje."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Podaci o mreži"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Naziv vašeg uređaja vidljiv je aplikacijama na vašem telefonu. Mogu ga vidjeti i drugi ljudi kada se povežete s Bluetooth uređajima ili Wi-Fi mrežom ili postavite Wi-Fi žarišnu točku."</string>
<string name="devices_title" msgid="649715719278562515">"Uređaji"</string>
@@ -5631,15 +5645,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"kontrole uređaja"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kartice i propusnice"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kartice i propusnice"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Pritisnite i zadržite tipku za uključivanje/isključivanje"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Pritisnite i zadržite za Asistenta"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Pritisnite i zadržite za izbornik tipke za uključivanje"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Onemogućena je opcija pritiska i zadržavanja"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Pritisnite i zadržite tipku za uključivanje/isključivanje"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Pritisnite i zadržite tipku za uklj./isklj. za pristup"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Izbornik tipke za uključivanje (/isključivanje)"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitalni asistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Pristupi digitalnom asistentu"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Pristupi izborniku tipke za uključivanje (/isključivanje)"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Za upotrebu najprije postavite zaključavanje zaslona"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Zadržavanje za Asistenta"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Pokrenite Asistenta zadržavajući tipku za uključivanje/isključivanje"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Izbornik tipke za uključivanje i hitnih službi:\nIstovremeno pritisnite tipku za uključivanje/isključivanje i tipku za glasnoću."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Sprječavanje zvonjenja:\nprečac je dostupan u izborniku glasnoće."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Izbornik tipke za uključivanje (/isključivanje):\nistodobno pritisnite tipku za uključivanje/isključivanje i gumb za pojačavanje glasnoće"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Sprječavanje zvonjenja:\nza prečac pritisnite gumb za glasnoću"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Trajanje pritiska i zadržavanja tipke"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Prilagodite osjetljivost tako što ćete odabrati duljinu pritiska i zadržavanja tipke za uključivanje/isključivanje"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kratko"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index e5dab70..882952b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Amikor gyermeke a Pixel Imprintet használja, a rendszer felhasználja a képeket az ujjlenyomatmodell frissítésére. Az ujjlenyomatmodell elkészítéséhez használt képeket nem, de magát az ujjlenyomatmodellt biztonságosan tárolja a telefon, és az ujjlenyomatmodell sosem kerül ki róla. A feldolgozás teljes mértékben és biztonságos módon a telefonon történik."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"A Beállítások menüben bármikor törölheti az ujjlenyomatképeket és -modellt, illetve kikapcsolhatja az ujjlenyomat-alapú feloldást. A telefon addig tárolja az ujjlenyomatképeket és -modelleket, amíg Ön nem törli őket."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Ön és gyermeke a Beállításokban bármikor törölheti gyermeke ujjlenyomatképeit és -modelljét, illetve kikapcsolhatja a Feloldás ujjlenyomattal funkciót. A telefon addig tárolja az ujjlenyomatképeket és -modelleket, amíg Ön vagy gyermeke nem törli őket."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefonját az Ön szándéka ellenére más is feloldhatja, például ha valaki az ujjához tartja."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefonját az Ön szándéka ellenére más is feloldhatja, például ha valaki az ujjához tartja."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Táblagépét az Ön szándéka ellenére más is feloldhatja, például ha valaki az Ön ujjához tartja."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Eszközét az Ön szándéka ellenére más is feloldhatja, például ha valaki az Ön ujjához tartja."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Gyermeke telefonját az ő szándéka ellenére valaki más is feloldhatja, például ha valaki az Ön gyermeke ujjához tartja a telefont."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"A legjobb eredmény érdekében használjon Made for Google tanúsítvánnyal rendelkező kijelzővédőt. Előfordulhat, hogy más kijelzővédők esetében az ujjlenyomat nem működik."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"A legjobb eredmény érdekében használjon Made for Google tanúsítvánnyal rendelkező kijelzővédőt. Előfordulhat, hogy más kijelzővédők esetében gyermeke ujjlenyomata nem működik."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Az eszközt és az ujjlenyomat-érzékelő helyét ábrázoló illusztráció"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Név"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Újrapróbálkozás"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Törlés"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Érintse meg az érzékelőt"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Helyezze az ujját az érzékelőre, és emelje fel a rezgést követően"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Kész"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Hoppá! Az nem az érzékelő"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Érintse meg a hátsó érzékelőt mutatóujjával."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"A rögzítés nincs kész"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Letelt az ujjlenyomat-rögzítés időkorlátja. Próbálja újra."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Lejárt az ujjlenyomat-beállítás időkorlátja."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Próbálja meg újra beállítani az ujjlenyomatát most, illetve később a Beállítások menüben"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Az ujjlenyomat regisztrációja nem sikerült. Próbálja újra, vagy próbálkozzon egy másik ujjával."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Még egy hozzáadása"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Következő"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"A telefon testreszabása"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Próbáljon ki más stílusokat, háttérképeket és egyebeket"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Képernyővédő"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"képernyővédő"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Képernyővédő használata"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Töltés és dokkolás közben"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Bármelyik"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Töltés közben"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Dokkolt állapotban"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Soha"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Ki"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"A képernyővédő bekapcsolásával beállíthatja, hogy mit csináljon a telefon dokkolt, illetve alvó állapotban."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kezdés ideje"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Jelenlegi képernyővédő"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Beállítások"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatikus fényerő"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Felébresztéshez emelje meg"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Környezeti kijelző"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN-kód beállítása"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Munkahelyi PIN-kód beállítása"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Minta beállítása"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"A nagyobb biztonság érdekében állítson be mintát az eszköz feloldásához"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Munkahelyi minta beállítása"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Jelszó az ujjlenyomathoz"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Minta az ujjlenyomathoz"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Segélyhívó"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Alapbeállítások"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Visszaállítja a beállításokat?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Ez visszaállítja a következőkre vonatkozó összes beállítást:\n\n"<li>"letiltott alkalmazások;"</li>\n<li>"letiltott alkalmazásértesítések;"</li>\n<li>"alapértelmezett alkalmazások adott műveletekhez;"</li>\n<li>"az alkalmazások háttéradataira vonatkozó korlátozások;"</li>\n<li>"minden engedélykorlátozás."</li>\n\n"Az alkalmazásadatok nem vesznek el."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Ez visszaállítja a következőkre vonatkozó összes beállítást:\n\n"<li>"Letiltott alkalmazások"</li>\n<li>"Letiltott alkalmazásértesítések"</li>\n<li>"Alapértelmezett alkalmazások adott műveletekhez"</li>\n<li>"Alkalmazások háttéradat-korlátozása"</li>\n<li>"Minden engedélykorlátozás"</li>\n<li>"Akkumulátorhasználati beállítások"</li>\n\n"Az alkalmazásadatok nem vesznek el."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Visszaállítás"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Tárhely kezelése"</string>
<string name="filter" msgid="9039576690686251462">"Szűrő"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Visszaállítás"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"A képernyőméretre és a szövegre vonatkozó beállításokat visszaállította a rendszer"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Visszaállítja a megjelenítési méretet és a szöveg beállításait?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"A megjelenítési méret és a szövegbeállítások visszaállnak a telefon eredeti beállításaira"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"A megjelenítési méret és a szövegbeállítások visszaállnak a telefon eredeti beállításaira"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"A megjelenítési méret és a szövegbeállítások visszaállnak a táblagép eredeti beállításaira"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Visszaállítás"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Vannak terveid a hétvégére?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Én lemegyek a partra. Van kedved csatlakozni?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Nincs használat az utolsó teljes feltöltés óta"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nem volt használatban az elmúlt 24 órában"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Egyéb felhasználók"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Az akkumulátor becsült töltöttsége az eszközhasználaton alapszik"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Becsült hátralévő idő"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"A teljes feltöltésig"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Parancsszó és hangvezérlés"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Egyszerű beszédfelismerés"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ez a hangbeviteli szolgáltatás képes lesz a folyamatos beszédhangkeresésre, valamint a hangvezérelt alkalmazásoknak az Ön nevében történő irányítására. A(z) <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> alkalmazás működteti. Engedélyezi a szolgáltatást?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Az eszközalapú felismerés beállításai"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Eszközalapú felismerés"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Eszközalapú beszédfelismerés"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Elsődleges szövegfelolvasó"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Szövegfelolvasó motor beállításai"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Beszédsebesség és hangszín"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Törlés"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"A munkamenetben található összes alkalmazás és adat törlődni fog."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Eltávolítás"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Vendég (Ön)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Felhasználók"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Egyéb felhasználók"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Vendégtevékenységek törlése"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Összes vendégalkalmazás és -adat törlése a vendég módból való kilépéskor"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Törli a vendégtevékenységeket?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Az ebből a vendégmunkamenetből származó alkalmazások és adatok azonnal törlődnek, és az összes jövőbeli, vendég módban végzett tevékenység törlődik minden olyan alkalomkor, amikor kilép a vendég módból"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Hívások engedélyezése"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Hívások és SMS-ek engedélyezése"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Felhasználó törlése"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"A(z) „<xliff:g id="APP_NAME">%1$s</xliff:g>” összes értesítése"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Az összes <xliff:g id="APP_NAME">%1$s</xliff:g>-értesítés"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Alkalmazkodó értesítések"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> értesítés naponta</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> értesítés naponta</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Nagyjából <xliff:g id="NUMBER_1">%,d</xliff:g> értesítés naponta</item>
+ <item quantity="one">Nagyjából <xliff:g id="NUMBER_0">%d</xliff:g> értesítés naponta</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> értesítés hetente</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> értesítés hetente</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Nagyjából <xliff:g id="NUMBER_1">%,d</xliff:g> értesítés hetente</item>
+ <item quantity="one">Nagyjából <xliff:g id="NUMBER_0">%d</xliff:g> értesítés hetente</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Soha"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Eszköz- és alkalmazásértesítések"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ne tegyen semmit"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Rezgés"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Néma"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"A bekapcsoláshoz előbb módosítsa a bekapcsológombhoz tartozó menüben a „Bekapcsológomb lenyomva tartása” beállítást."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Az aktiválásához előbb módosítsa a bekapcsológombhoz tartozó menüben a „Bekapcsológomb lenyomva tartása” beállítást."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Hálózati információk"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Eszköze neve látható a telefonján lévő alkalmazások számára. Mások is láthatják, ha csatlakoztatja telefonját más Bluetooth-eszközökhöz, Wi-Fi-hálózathoz, vagy ha Wi-Fi-hotspotot állít be."</string>
<string name="devices_title" msgid="649715719278562515">"Eszközök"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"eszközvezérlők"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kártyák és utalványok"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kártyák és utalványok"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Bekapcsológomb lenyomva tartása"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Tartsa lenyomva a Segéd megnyitásához"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Tartsa lenyomva a bekapcsológombhoz tartozó menü megnyitásához"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Lenyomva tartás kikapcsolva"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Tartsa lenyomva a bekapcsológombot"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"A hozzáféréshez tartsa lenyomva a bekapcsológombot"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Bekapcsológombhoz tartozó menü"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitális asszisztens"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Hozzáférés a digitális asszisztenshez"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Hozzáférés a bekapcsológombhoz tartozó menühöz"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"A használathoz előbb állítson be egy képernyőzárat"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Lenyomva tartás a Segéd aktiválásához"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"A bekapcsológombot lenyomva tartva aktiválhatja a Segédet"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Bekapcsológombhoz és vészhelyzethez tartozó menü:\nNyomja le egyszerre a bekapcsológombot és a hangerő növelése gombot."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Csörgés megakadályozása:\nA gyorsparancs a hangerő menüben áll rendelkezésre."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Bekapcsológombhoz tartozó menü:\nNyomja le egyszerre a bekapcsológombot és a hangerő növelése gombot."</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Csörgés kikapcsolása:\nNyomja meg a hangerőszabályzó gombot a billentyűparancsért."</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Nyomva tartás időtartama"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Az érzékenység módosításához válassza ki, hogy mennyi ideig kelljen nyomva tartani a bekapcsológombot"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Rövid"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 235bdf3..3561b4a 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Երբ նա օգտագործում է Pixel Imprint-ը, նրա մատնահետքի նմուշը թարմացվում է՝ այդ գործառույթի հետ աշխատանքի ընթացքում ստացված պատկերների հիման վրա։ Նմուշը պահվում է միայն հեռախոսում, իսկ այն ստեղծելու ժամանակ արված լուսանկարները չեն պահվում։ Բոլոր մշակումները կատարվում են անմիջապես հեռախոսում։"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Դուք ցանկացած պահի կարող եք ջնջել ձեր մատնահետքի պատկերներն ու նմուշը կամ անջատել մատնահետքով ապակողպումը սարքի կարգավորումներում։ Մատնահետքի պատկերներն ու նմուշները պահվում են հեռախոսում այնքան ժամանակ, մինչև որ չջնջեք դրանք։"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Դուք և ձեր երեխան ցանկացած պահի կարող եք ջնջել նրա մատնահետքի պատկերներն ու նմուշը կամ անջատել մատնահետքով ապակողպումը սարքի կարգավորումներում։ Մատնահետքի պատկերներն ու նմուշները պահվում են հեռախոսում այնքան ժամանակ, մինչև որ ջնջեք դրանք։"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Հեռախոսը կարող է երբեմն ապակողպվել առանց ձեր ցանկության, օրինակ, երբ ինչ-որ մեկը այն հպի ձեր մատին։"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Հեռախոսը կարող է երբեմն ապակողպվել առանց ձեր ցանկության, օրինակ, երբ ինչ-որ մեկը այն հպի ձեր մատին։"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Պլանշետը կարող է երբեմն ապակողպվել առանց ձեր ցանկության, օրինակ, երբ ինչ-որ մեկը այն հպի ձեր մատին։"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Սարքը կարող է երբեմն ապակողպվել առանց ձեր ցանկության, օրինակ, երբ ինչ-որ մեկը այն հպի ձեր մատին։"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Ձեր երեխայի հեռախոսը կարող է ապակողպվել, նույնիսկ եթե նա մտադրված չէ դա անել, օրինակ, երբ ինչ-որ մեկը այն հպի նրա մատին։"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Խորհուրդ ենք տալիս օգտագործել էկրանի պաշտպանիչ՝ «Made for Google» մակնշմամբ։ Էկրանի այլ պաշտպանիչներով սարքերը կարող են չճանաչել ձեր մատնահետքը։"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Խորհուրդ ենք տալիս օգտագործել էկրանի պաշտպանիչ՝ «Made for Google» մակնշմամբ։ Էկրանի այլ պաշտպանիչներով սարքերը կարող են չճանաչել ձեր երեխայի մատնահետքը։"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Սարքի և մատնահետքի սենսորի տեղադրության պատկեր"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Անուն"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Լավ"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Նորից փորձել"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Ջնջել"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Հպեք սենսորին"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Մատը դրենք սենսորի վրա և բարձրացրեք թրթռոց զգալուց հետո"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Պատրաստ է"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Դա սենսորը չէ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Ցուցամատով հպեք հեռախոսի հետևում գտնվող սկաներին:"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Գրանցումն ավարտված չէ"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Մատնահետքի գրանցման ժամանակը սպառվել է: Փորձեք նորից:"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Մատնահետքի կարգավորման ժամանակը սպառվեց"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Նորից փորձեք հիմա կամ կարգավորեք մատնահետքն ավելի ուշ՝ անցնելով կարգավորումներ"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Մատնահետքը չգրանցվեց: Փորձեք նորից կամ ուրիշ մատով:"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Նոր մատնահետք"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Հաջորդը"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Հեռախոսի անհատականացում"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Փորձեք տարբեր ոճեր, պաստառներ և ավելին"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Էկրանապահ"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"էկրանապահ"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Օգտագործել էկրանապահ"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Լիցքավորման ընթացքում կամ դոկ-կայանում"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Երկու դեպքում էլ"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Լիցքավորման ընթացքում"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Դոկ-կայանում"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Երբեք"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Անջատված է"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Հեռախոսը դոկ-կայանում և քնի ռեժիմում վերահսկելու համար միացրեք էկրանապահը։"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Երբ սկսել"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Ընթացիկ էկրանապահ"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Կարգավորումներ"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Ավտոմատ պայծառություն"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Բարձրացնել՝ միանալու համար"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ամբիենտ էկրան"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Սահմանեք PIN կոդ"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Սահմանեք աշխատանքային պրոֆիլի PIN կոդ"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Սահմանեք նախշ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Լրացուցիչ պաշտպանության նպատակով ավելացրեք նախշ սարքի ապակողպման համար"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Սահմանեք աշխատանքային պրոֆիլի նախշ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Մատնահետքն օգտագործելու համար գաղտնաբառ մտածեք"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Մատնահետքն օգտագործելու համար ստեղծեք նախշ"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Արտակարգ իրավիճակների հավելված"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Զրոյացնել հավելվածների կարգավորումները"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Զրոյացնե՞լ կարգավորումները"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Հետևյալ կարգավորումները կզրոյանան՝\n\n"<li>"անջատված հավելվածները,"</li>\n<li>"հավելվածների անջատված ծանուցումները,"</li>\n<li>"կանխադրված հավելվածները,"</li>\n<li>"ֆոնային ռեժիմում տվյալների փոխանցման սահմանափակումները,"</li>\n<li>"թույլտվությունների բոլոր սահմանափակումները։"</li>\n\n"Հավելվածների տվյալները կպահպանվեն։"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Հետևյալ կարգավորումները կզրոյանան՝\n\n"<li>"Անջատված հավելվածները"</li>\n<li>"Հավելվածների անջատված ծանուցումները"</li>\n<li>"Գործողությունների համար կանխադրված հավելվածները"</li>\n<li>"Ֆոնային ռեժիմում տվյալների փոխանակման սահմանափակումները հավելվածների համար"</li>\n<li>"Թույլտվությունների բոլոր սահմանափակումները"</li>\n<li>"Մարտկոցի օգտագործման կարգավորումները"</li>\n\n"Դուք չեք կորցնի հավելվածների ոչ մի տվյալ։"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Զրոյացնել"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Կառավարել տարածքը"</string>
<string name="filter" msgid="9039576690686251462">"Զտիչ"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Զրոյացնել կարգավորումները"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Ցուցադրման չափսը և տեքստի կարգավորումները զրոյացվել են"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Զրոյացնե՞լ ցուցադրման չափսի և տեքստի կարգավորումները"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Կվերականգնվեն ցուցադրման չափսի և տեքստի կարգավորումների սկզբնական կարգավորումները։"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Կվերականգնվեն ցուցադրման չափսի և տեքստի կարգավորումների սկզբնական կարգավորումները։"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Կվերականգնվեն ցուցադրման չափսի և տեքստի կարգավորումների սկզբնական կարգավորումները։"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Զրոյացնել"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Որևէ բան պլանավորե՞լ եք հանգստյան օրերի համար։"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Գնում ենք լողափ։ Կմիանա՞ք մեզ։"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Մարտկոցը չի օգտագործվել վերջին լրիվ լիցքավորումից հետո"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Մարտկոցը չի օգտագործվել վերջին 24 ժամվա ընթացքում"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Այլ օգտատերեր"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Մարտկոցի աշխատանքի տևողությունը մոտավոր է և կախված է սարքի օգտագործումից"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Մոտավոր մնացած ժամանակը"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Մինչև լրիվ լիցքավորումը"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Ամբողջական թեժ բառեր և շփում"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Խոսքից տեքստի պարզ տարբերակ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ձայնի ներածման այս ծառայությունը կկարողանա կատարել ձայնի մշտադիտարկում և ձեր անունից վերահսկել ձայնի հնարավորությամբ ծրագրերը: Դրա պատճառը <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ծրագիրն է: Միացնե՞լ այս ծառայությունը:"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Սարքում ճանաչման կարգավորումներ"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Ճանաչում սարքում"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Խոսքի ճանաչում սարքում"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Նախընտրելի մեխանիզմը"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Համակարգի կարգավորումները"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Խոսքի արագությունը և բարձրությունը"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Ջնջել"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Այս աշխատաշրջանի բոլոր հավելվածներն ու տվյալները կջնջվեն:"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Հեռացնել"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Հյուր (դուք)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Օգտատերեր"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Այլ օգտատերեր"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Ջնջել հյուրի պատմությունը"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Դուրս գալիս ջնջել հյուրի աշխատաշրջանի բոլոր հավելվածներն ու տվյալները"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Ջնջե՞լ հյուրի պատմությունը"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Հյուրի այս աշխատաշրջանի հավելվածներն ու տվյալները հիմա կջնջվեն։ Հետագայում պատմությունը կջնջվի ամեն անգամ հյուրի ռեժիմից դուրս գալիս։"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Միացնել հեռախոսազանգերը"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Միացնել զանգերն ու SMS-ները"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Ջնջել օգտատիրոջը"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"«<xliff:g id="APP_NAME">%1$s</xliff:g>» պիտակով բոլոր ծանուցումները"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածի բոլոր ծանուցումները"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Հարմարվող ծանուցումներ"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">Օրական ~<xliff:g id="NUMBER_1">%d</xliff:g> ծանուցում</item>
- <item quantity="other">Օրական ~<xliff:g id="NUMBER_1">%d</xliff:g> ծանուցում</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Օրական մոտավորապես <xliff:g id="NUMBER_1">%d</xliff:g> ծանուցում</item>
+ <item quantity="other">Օրական մոտավորապես <xliff:g id="NUMBER_1">%d</xliff:g> ծանուցում</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">Շաբաթական ~<xliff:g id="NUMBER_1">%d</xliff:g> ծանուցում</item>
- <item quantity="other">Շաբաթական ~<xliff:g id="NUMBER_1">%d</xliff:g> ծանուցում</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Շաբաթական մոտավորապես <xliff:g id="NUMBER_1">%d</xliff:g> ծանուցում</item>
+ <item quantity="other">Շաբաթական մոտավորապես <xliff:g id="NUMBER_1">%d</xliff:g> ծանուցում</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Երբեք"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Սարքերի և հավելվածների ծանուցումներ"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ոչինչ չանել"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Թրթռոց"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Անձայն"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Միացնելու համար նախ նշեք, որ «Սնուցման կոճակի սեղմում և պահում» գործողությունը բացի սնուցման կոճակի ընտրացանկը։"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Միացնելու համար նախ նշեք, որ «Սեղմել և պահել սնուցման կոճակը» գործողության դեպքում սնուցման կոճակի ընտրացանկը բացվի։"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Ցանցի տվյալներ"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Ձեր սարքի անունը տեսանելի է հեռախոսում տեղադրված հավելվածներին։ Այն կարող են տեսնել օգտատերերը, երբ միանում եք Bluetooth սարքերի, Wi-Fi ցանցի, կամ կարգավորում եք Wi-Fi թեժ կետ։"</string>
<string name="devices_title" msgid="649715719278562515">"Սարքեր"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"սարքերի կառավարման տարրեր"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Քարտեր և տոմսեր"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"քարտեր և տոմսեր"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Սնուցման կոճակի սեղմում և պահում"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Սեղմել և պահելուց հետո միանում է Օգնականը"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Սեղմել և պահելուց հետո բացվում է սնուցման կոճակի ընտրացանկը"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Սեղմում և պահումն անջատված է"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Սեղմած պահել սնուցման կոճակը"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Ընտրեք, թե ինչ բացվի՝ սնուցման կոճակը սեղմած պահելու դեպքում"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Սնուցման կոճակի ընտրացանկ"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Թվային օգնական"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Բացել թվային օգնականը"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Բացել սնուցման կոճակի ընտրացանկը"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Օգտագործելու համար նախ սահմանեք էկրանի կողպման եղանակը"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Սեղմած պահել՝ Օգնականը միացնելու համար"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Ակտիվացրեք Օգնականը՝ երկար սեղմած պահելով սնուցման կոճակը"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Սնուցման կոճակի և արտակարգ իրավիճակների տեղեկությունների ընտրացանկ\nՄիաժամանակ սեղմեք սնուցման և ձայնի բարձրացման կոճակները։"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Զանգի ձայնի անջատում\nԴյուրանցումը հասանելի է ձայնի ուժգնության ընտրացանկում։"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Սնուցման կոճակի ընտրացանկ։\nՍեղմած պահեք սնուցման և ձայնի բարձրացման կոճակները"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Զանգի ձայնի անջատում։\nՍեղմեք ձայնի ուժգնության կոճակը՝ դյուրանցումը կիրառելու համար"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Սեղմելու և պահելու տևողությունը"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Կարգավորեք զգայունությունը՝ նշելով, թե որքան երկար է անհրաժեշտ սեղմել և պահել սնուցման կոճակը։"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Կարճ"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 89ccdeb..becaaa0 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Saat dia menggunakan Pixel Imprint, gambar digunakan untuk memperbarui model sidik jarinya. Gambar yang digunakan untuk membuat model sidik jari anak Anda tidak pernah disimpan, tetapi model sidik jarinya disimpan secara aman di ponsel dan tidak pernah dikirim ke luar ponsel. Semua pemrosesan dilakukan secara aman di ponsel."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Anda dapat menghapus gambar dan model sidik jari Anda, atau menonaktifkan Fingerprint Unlock kapan saja di Setelan. Gambar dan model sidik jari disimpan di ponsel sampai Anda menghapusnya."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Anda dan anak Anda dapat menghapus gambar dan model sidik jarinya atau menonaktifkan Fingerprint Unlock kapan saja di Setelan. Gambar dan model sidik jari disimpan di ponsel sampai dihapus."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Ponsel Anda dapat dibuka kuncinya meski Anda tidak bermaksud membukanya, misalnya saat seseorang mendekatkan ponsel ke jari Anda."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Ponsel Anda dapat dibuka kuncinya meski Anda tidak bermaksud membukanya, misalnya saat seseorang mendekatkan ponsel ke jari Anda."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tablet Anda dapat dibuka kuncinya meski Anda tidak bermaksud membukanya, misalnya saat seseorang menempelkan tablet ke jari Anda."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Perangkat Anda dapat dibuka kuncinya meski Anda tidak bermaksud membukanya, misalnya saat seseorang menempelkan perangkat ke jari Anda."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Ponsel anak Anda dapat dibuka kuncinya meski dia tidak bermaksud membukanya, misalnya saat seseorang mendekatkan ponsel ke jarinya."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Untuk hasil terbaik, gunakan pelindung layar yang bersertifikasi Made for Google. Jika pelindung layar lain digunakan, sidik jari Anda mungkin tidak akan berfungsi."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Untuk hasil terbaik, gunakan pelindung layar yang bersertifikasi Made for Google. Jika pelindung layar lain digunakan, sidik jari anak Anda mungkin tidak akan berfungsi."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustrasi dengan perangkat dan lokasi sensor sidik jari"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nama"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Oke"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Coba lagi"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Hapus"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Sentuh sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Letakkan jari Anda di sensor dan angkat setelah merasakan getaran"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Selesai"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ups, bukan itu sensornya"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Sentuh sensor di bagian belakang ponsel. Gunakan jari telunjuk Anda."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Pendaftaran tidak selesai"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Waktu pendaftaran sidik jari habis. Coba lagi."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Waktu penyiapan sidik jari habis"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Coba lagi sekarang atau siapkan sidik jari nanti di Setelan"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Pendaftaran sidik jari tidak berhasil. Coba lagi atau gunakan jari lain."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Tambahkan lainnya"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Berikutnya"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Sesuaikan ponsel Anda"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Coba wallpaper dan gaya yang berbeda, serta banyak lagi"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Screensaver"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Gunakan screensaver"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Saat mengisi baterai atau dipasang ke dok"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Keduanya"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Saat mengisi baterai"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Saat terpasang di dok"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Tidak pernah"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Mati"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Untuk mengontrol yang terjadi saat ponsel dipasang ke dok dan/atau sedang tidur, aktifkan screen saver."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Waktu mulai"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Screensaver saat ini"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Setelan"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Kecerahan otomatis"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Angkat untuk membangunkan"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Tampilan standby"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Setel PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Setel PIN profil kerja"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Setel pola"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Untuk keamanan tambahan, setel pola untuk membuka kunci perangkat"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Setel pola profil kerja"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Untuk memakai sidik jari, setel sandi"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Untuk memakai sidik jari, setel pola"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplikasi darurat"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Reset preferensi aplikasi"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Reset preferensi aplikasi?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Tindakan ini akan mereset semua preferensi untuk:\n\n"<li>"Aplikasi yang dinonaktifkan"</li>\n<li>"Notifikasi aplikasi yang dinonaktifkan"</li>\n<li>"Aplikasi default untuk tindakan"</li>\n<li>"Batasan data latar belakang untuk aplikasi"</li>\n<li>"Batasan izin apa pun"</li>\n\n"Data aplikasi Anda tidak akan hilang."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Tindakan ini akan mereset semua preferensi untuk:\n\n"<li>"Aplikasi yang dinonaktifkan"</li>\n<li>"Notifikasi aplikasi yang dinonaktifkan"</li>\n<li>"Aplikasi default untuk tindakan"</li>\n<li>"Batasan data latar belakang untuk aplikasi"</li>\n<li>"Batasan izin apa pun"</li>\n<li>"Setelan penggunaan baterai"</li>\n\n"Data aplikasi tidak akan hilang."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Reset aplikasi"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Kelola ruang"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Reset setelan"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Setelan ukuran tampilan dan teks telah direset"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Reset ukuran tampilan dan teks?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Preferensi ukuran tampilan dan teks akan direset ke setelan asli ponsel"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Preferensi ukuran tampilan dan teks akan direset ke setelan asli ponsel"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Preferensi ukuran layar dan teks akan direset ke setelan asli tablet"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Reset"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Ada rencana weekend ini?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Pergi ke pantai. Mau ikut?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Tidak ada penggunaan sejak terakhir kali baterai terisi penuh"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Tidak ada penggunaan selama 24 jam terakhir"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Pengguna lainnya"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Perkiraan sisa baterai berdasarkan pada penggunaan perangkat"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Perkiraan sisa waktu"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Sampai terisi penuh"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Frasa pengaktif dan interaksi lengkap"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Speech to text yang sederhana"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Layanan masukan suara ini akan dapat melakukan pemantauan suara yang selalu aktif dan mengontrol aplikasi yang aktif untuk suara atas nama Anda. Layanan ini berasal dari aplikasi <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Aktifkan penggunaan layanan ini?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Setelan pengenalan di perangkat"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Pengenalan di perangkat"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Pengenalan ucapan di perangkat"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Mesin yang dipilih"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Setelan mesin"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Kecepatan & tinggi nada ucapan"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Hapus"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Semua aplikasi dan data dalam sesi ini akan dihapus."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Hapus"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Tamu (Anda)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Pengguna"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Pengguna lainnya"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Hapus aktivitas tamu"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Hapus semua aplikasi dan data tamu saat keluar dari mode tamu"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Hapus aktivitas tamu?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikasi dan data dari sesi tamu ini akan dihapus sekarang, dan semua aktivitas tamu mendatang akan dihapus setiap kali Anda keluar dari mode tamu"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Aktifkan panggilan telepon"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktifkan panggilan telepon & SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Hapus pengguna"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Semua notifikasi \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Semua notifikasi <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notifikasi Adaptif"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifikasi per hari</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notifikasi per hari</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Sekitar <xliff:g id="NUMBER_1">%,d</xliff:g> notifikasi per hari</item>
+ <item quantity="one">Sekitar <xliff:g id="NUMBER_0">%d</xliff:g> notifikasi per hari</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifikasi per minggu</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notifikasi per minggu</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Sekitar <xliff:g id="NUMBER_1">%,d</xliff:g> notifikasi per minggu</item>
+ <item quantity="one">Sekitar <xliff:g id="NUMBER_0">%d</xliff:g> notifikasi per minggu</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Tidak pernah"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notifikasi perangkat & aplikasi"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Jangan lakukan apa pun"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Bergetar"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Bisukan"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Untuk mengaktifkan, ubah \"Tekan dan tahan tombol daya\" ke menu daya terlebih dahulu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Untuk mengaktifkan, ubah \"Tekan & tahan tombol daya\" ke menu daya terlebih dahulu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detail jaringan"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Nama perangkat terlihat oleh aplikasi di ponsel, dan juga mungkin dilihat oleh orang lain saat Anda menghubungkan ke perangkat Bluetooth atau jaringan Wi-Fi, atau saat menyiapkan hotspot Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Perangkat"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"kontrol perangkat"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kartu & tiket"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kartu & tiket"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Tekan dan tahan tombol daya"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Tekan dan tahan untuk membuka Asisten"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Tekan dan tahan untuk membuka menu daya"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Fitur tekan dan tahan dinonaktifkan"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Tekan & tahan tombol daya"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Tekan & dan tahan tombol daya untuk mengakses"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu daya"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Asisten digital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Mengakses asisten digital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Mengakses menu daya"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Untuk menggunakannya, setel kunci layar terlebih dahulu"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Tekan lama untuk membuka Asisten"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Picu Asisten dengan menekan lama tombol daya"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu daya & darurat:\nTekan tombol daya dan volume naik bersamaan."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Cegah berdering:\nPintasan tersedia di menu volume."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu daya:\nTekan tombol daya dan tombol naikkan volume secara bersamaan"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Mencegah dering:\nTekan tombol volume untuk menggunakan pintasan"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Durasi tekan & tahan"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Sesuaikan sensitivitas dengan memilih durasi menekan & menahan tombol daya"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Singkat"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 6a2487c..5e2758f 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Þegar barnið notar Pixel Imprint eru myndir notaðar til að uppfæra fingrafarslíkan þess. Myndir sem eru notaðar til að búa fingrafarslíkan barnsins til eru aldrei geymdar en líkanið er geymt á öruggan hátt í símanum og fer aldrei þaðan. Öll úrvinnsla fer fram í símanum á öruggan hátt."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Þú getur eytt fingrafaramyndunum og -líkaninu eða slökkt á fingrafarskenni hvenær sem er í stillingunum. Fingrafaramyndir og -líkön eru geymd á öruggan hátt í símanum þar til þeim er eytt."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Þú og barnið þitt getið eytt fingrafarsmyndunum og -líkaninu eða slökkt á fingrafarskenni hvenær sem er í stillingunum. Fingrafaramyndir og -líkön eru geymd á öruggan hátt í símanum þar til þeim er eytt."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Síminn gæti opnast óvart, til dæmis ef einhver heldur honum að fingrinum á þér."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Síminn gæti opnast óvart, til dæmis ef einhver heldur honum að fingrinum á þér."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Spjaldtölvan gæti opnast án þess að þú ætlir þér það, til dæmis ef einhver heldur henni að fingrinum á þér."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Tækið gæti opnast án þess að þú ætlir þér það, til dæmis ef einhver heldur því að fingrinum á þér."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Sími barnsins kann að opnast án þess að það hafi verið ætlun þess, t.d. ef einhver heldur símanum að fingri þess."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Best er að nota skjávörn sem er vottuð með merkinu „Hannað fyrir Google“. Óvíst er að hægt sé að nota fingrafarið með öðrum skjávörnum."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Best er að nota skjávörn sem er vottuð með merkinu „Hannað fyrir Google“. Óvíst er að barnið geti notað fingrafarið með öðrum skjávörnum."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Teikning af tæki og staðsetningu fingrafaraskynjara"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Heiti"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Í lagi"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Reyna aftur"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Eyða"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Snertu lesarann"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Settu fingurinn á skynjarann og lyftu honum þegar þú finnur titring"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Lokið"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Úbbs, þetta er ekki skynjarinn"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Snertu lesarann aftan á símanum. Notaðu vísifingur."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Innritun var ekki lokið"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Skráning fingrafars rann út á tíma. Reyndu aftur."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Fingrafarsuppsetning rann út á tíma"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Reyndu aftur núna eða settu upp fingrafar síðar í stillingum"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Skráning fingrafars virkaði ekki. Reyndu aftur eða notaðu annan fingur."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Bæta öðru við"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Áfram"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Sérsníddu símann"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Prófaðu mismunandi stíla, veggfóður og fleira"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Skjávari"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"skjávari"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Nota skjávara"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Við hleðslu eða í dokku"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Annaðhvort"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Við hleðslu"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Þegar tækið er í dokku"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Aldrei"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Slökkt"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Kveiktu á skjávaranum til að stjórna því hvað gerist þegar síminn er í dokku og/eða í biðstöðu."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Hvenær á að byrja"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Núverandi skjávari"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Stillingar"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Sjálfvirk birtustilling"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Lyfta til að vekja"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Umhverfisskjár"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Stilltu PIN-númer"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Stilltu PIN-númer fyrir vinnu"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Stilltu mynstur"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Auktu öryggið og veldu þér mynstur til að taka tækið úr lás"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Stilltu mynstur fyrir vinnu"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Veldu aðgangsorð til að nota fingrafar"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Veldu mynstur til að nota fingrafar"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Neyðarforrit"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Endurstilla stillingar forrita"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Endurstilla stillingar forrita?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Þetta endurstillir allar kjörstillingar fyrir:\n\n "<li>"Óvirk forrit"</li>\n" "<li>"Óvirkar tilkynningar forrita"</li>\n" "<li>"Sjálfgefin forrit aðgerða"</li>\n" "<li>"Takmarkanir á bakgrunnsgögnum forrita"</li>\n" "<li>"Allar takmarkanir á heimildum"</li>\n\n" Þú glatar engum forritagögnum."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Þetta endurstillir allar stillingar fyrir:\n\n"<li>"Óvirk forrit"</li>\n<li>"Óvirkar tilkynningar forrita"</li>\n<li>"Sjálfgefin forrit aðgerða"</li>\n<li>"Gagnatakmarkanir forrita í bakgrunni"</li>\n<li>"Takmarkanir á heimildum"</li>\n<li>"Stillingar rafhlöðunotkunar"</li>\n\n"Þú glatar engum forritsgögnum."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Endurstilla forrit"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Stjórna plássi"</string>
<string name="filter" msgid="9039576690686251462">"Sía"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Endurstilla"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Skjástærð og textastillingar hafa verði endurstilltar"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Endurstilla skjástærð og texta?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Skjástærð og kjörstillingar texta verða endurstilltar á upprunalegar stillingar símans"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Skjástærð og kjörstillingar texta verða endurstilltar á upprunalegar stillingar símans"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Skjástærð og kjörstillingar texta verða endurstilltar á upprunalegar stillingar spjaldtölvunnar"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Endurstilla"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Á að gera eitthvað um helgina?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Ég ætla á ströndina. Viltu koma með?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Engin notkun frá síðustu fullu hleðslu"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Engin notkun síðasta sólarhringinn"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Aðrir notendur"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Áætluð rafhlöðuending er byggð á notkun þinni á tækinu"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Áætlaður tími eftir"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Þar til fullri hleðslu er náð"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Alhliða virkar skipanir og samskipti"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Einföld talkennsl"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Þessi raddinntaksþjónusta mun geta fylgst með raddsamskiptum þínum öllum stundum og stýrt forritum sem notast við raddsamskipti fyrir þína hönd. Hún tilheyrir forritinu <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Viltu leyfa notkun þessarar þjónustu?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Greiningarstillingar í tæki"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Greining í tæki"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Raddgreining í tæki"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Valin vél"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Stillingar vélar"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Talhraði og tónhæð"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Eyða"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Öllum forritum og gögnum í þessari lotu verður eytt."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Fjarlægja"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gestur (þú)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Notendur"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Aðrir notendur"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Eyða aðgerðum úr gestalotu"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Eyða öllum forritum og gögnum úr gestalotu þegar gestastillingu er lokað"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Eyða aðgerðum úr gestalotu?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Forritum og gögnum úr þessari gestalotu verður eytt núna og öllum aðgerðum úr síðari gestalotum verður eytt í hvert skipti sem gestastillingu er lokað"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Kveikja á símtölum"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Kveikja á símtölum og SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Eyða notanda"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Allar tilkynningar frá „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Allar tilkynningar frá <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Breytilegar tilkynningar"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> tilkynning á dag</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> tilkynningar á dag</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Um það bil <xliff:g id="NUMBER_1">%,d</xliff:g> tilkynning á dag</item>
+ <item quantity="other">Um það bil <xliff:g id="NUMBER_1">%,d</xliff:g> tilkynningar á dag</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> tilkynning á viku</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> tilkynningar á viku</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Um það bil <xliff:g id="NUMBER_1">%,d</xliff:g> tilkynning á viku</item>
+ <item quantity="other">Um það bil <xliff:g id="NUMBER_1">%,d</xliff:g> tilkynningar á viku</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Aldrei"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Tækja- og forritatilkynningar"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ekki aðhafast neitt"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Titringur"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Þagga"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Til að virkja þarf fyrst að breyta „Halda inni aflrofa“ á aflrofavalmyndinni."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Til að virkja þarf fyrst að breyta „Halda aflrofa inni“ í aflrofavalmyndina."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Upplýsingar um net"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Heiti tækisins þíns er sýnilegt forritum í símanum. Heiti þess er hugsanlega einnig sýnilegt öðru fólki þegar þú tengist Bluetooth-tækjum, Wi-Fi neti eða setur upp heitan Wi-Fi reit."</string>
<string name="devices_title" msgid="649715719278562515">"Tæki"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"tækjastjórnun"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kort og passar"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kort og passar"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Halda aflrofanum inni"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Haltu inni til að opna Hjálparann"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Haltu inni til að opna aflrofavalmyndina"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Ekki er hægt að halda inni"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Halda aflrofa inni"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Haltu aflrofanum inni til að opna"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Aflrofavalmynd"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Stafrænn hjálpari"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Opna stafrænan hjálpara"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Opna aflrofavalmynd"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Stilltu skjálás áður en þú byrjar"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Haltu inni til að ræsa Hjálparann"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Ræstu Hjálparann með því að halda aflrofanum inni"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Aflrofa- og neyðarvalmynd:\nÝttu samtímis á aflrofann og hnappinn til að hækka hljóðstyrk."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Koma í veg fyrir hringingu:\nFlýtileið í boði á hljóðvalmyndinni."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Aflrofavalmynd:\nÝttu samtímis á aflrofann og hnappinn til að hækka hljóðstyrk"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Loka á hringingar:\nÝttu á hljóðstyrkshnappinn til að finna flýtileiðina"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Hversu lengi á að halda inni"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Stilltu næmi með því að velja í hversu langan tíma á að halda aflrofanum inni"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Stutt"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 67fbaa1..1b85dd7 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Quando utilizza Pixel Imprint, le immagini vengono usate per aggiornare il modello dell\'impronta. Le immagini usate per creare il modello dell\'impronta di tuo figlio non vengono mai archiviate, ma il modello viene memorizzato in modo sicuro sul telefono e non viene mai trasferito dal dispositivo. L\'intera elaborazione avviene in modo sicuro sul telefono."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Puoi eliminare le immagini e il modello dell\'impronta o disattivare lo sblocco con l\'impronta in qualsiasi momento nelle Impostazioni. Le immagini e i modelli delle impronte rimangono memorizzati sul telefono finché non li elimini."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Tu e tuo figlio potete eliminare le immagini e il modello dell\'impronta o disattivare lo sblocco con l\'impronta in qualsiasi momento nelle Impostazioni. Le immagini e i modelli delle impronte rimangono memorizzati sul telefono finché non vengono eliminati."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Il tuo telefono può essere sbloccato anche quando non hai intenzione di farlo, ad esempio se qualcuno te lo avvicina al dito."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Il tuo telefono può essere sbloccato anche quando non hai intenzione di farlo, ad esempio se qualcuno te lo avvicina al dito."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Il tuo tablet può essere sbloccato anche quando non hai intenzione di farlo, ad esempio se qualcuno lo avvicina al tuo dito."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Il tuo dispositivo può essere sbloccato anche quando non hai intenzione di farlo, ad esempio se qualcuno lo avvicina al tuo dito."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Il telefono di tuo figlio può essere sbloccato anche quando non vuole farlo intenzionalmente, ad esempio se qualcuno lo rivolge verso il suo dito."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Per risultati ottimali, usa una protezione per lo schermo con la certificazione Made For Google. Con altre protezioni per lo schermo la tua impronta potrebbe non funzionare."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Per risultati ottimali, usa una protezione per lo schermo con la certificazione Made For Google. Con altre protezioni per lo schermo l\'impronta di tuo figlio potrebbe non funzionare."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustrazione con il dispositivo e la posizione del sensore di impronte"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nome"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Riprova"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Elimina"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Tocca il sensore"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Appoggia il dito sul sensore e sollevalo quando senti una vibrazione."</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Fine"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ops, questo non è il sensore"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Tocca il sensore sulla parte posteriore del telefono. Utilizza il dito indice."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registrazione non completata"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Hai raggiunto il tempo limite per la registrazione dell\'impronta. Riprova."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Timeout della configurazione dell\'impronta"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Riprova subito o configura l\'impronta in un secondo momento nelle Impostazioni"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Registrazione dell\'impronta non riuscita. Riprova o utilizza un dito diverso."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Aggiungine un\'altra"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Avanti"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personalizza il telefono"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Prova diversi stili, sfondi e non solo"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Salvaschermo"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"salvaschermo"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Usa il salvaschermo"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Durante la ricarica o quando inserito nel dock"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Entrambi i casi"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Durante la ricarica"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Quando inserito nel dock"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Mai"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Off"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Attiva il salvaschermo per controllare ciò che accade quando il telefono è inserito nel dock e/o in standby."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Quando avviare"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Salvaschermo attuale"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Impostazioni"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Luminosità automatica"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Solleva per riattivare"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Display ambient"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Imposta un PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Imposta un PIN per profilo lavoro"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Imposta una sequenza"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Per maggiore sicurezza, imposta una sequenza per sbloccare il dispositivo"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Imposta una sequenza per profilo lavoro"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Per usare l\'impronta, imposta una password"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Per usare l\'impronta, imposta una sequenza"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"App di emergenza"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Reimposta preferenze app"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Reimpostare preferenze app?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Verranno reimpostate tutte le preferenze relative a:\n\n"<li>"App disattivate"</li>\n<li>"Notifiche di app disattivate"</li>\n<li>"Applicazioni predefinite per azioni"</li>\n<li>"Limitazioni di dati in background per app"</li>\n<li>"Eventuali limitazioni di autorizzazione"</li>\n\n"Non perderai i dati delle app."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Verranno reimpostate tutte le preferenze relative a:\n\n"<li>"App disattivate"</li>\n<li>"Notifiche di app disattivate"</li>\n<li>"Applicazioni predefinite per le azioni"</li>\n<li>"Limitazioni di dati in background per le app"</li>\n<li>"Eventuali limitazioni delle autorizzazioni"</li>\n<li>"Impostazioni di utilizzo della batteria"</li>\n\n"Non perderai i dati delle app."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Reimposta app"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Gestisci spazio"</string>
<string name="filter" msgid="9039576690686251462">"Filtra"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Ripristina impostazioni"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Le impostazioni relative a dimensioni di visualiz. e testo sono state reimpostate"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Vuoi reimpostare le dimensioni di visualizzazione e testo?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Verranno reimpostate le impostazioni originali del telefono relative a dimensioni di visualizzazione e testo"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Verranno reimpostate le impostazioni originali del telefono relative a dimensioni di visualizzazione e testo"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Verranno ripristinate le impostazioni originali del tablet relative a dimensioni di visualizzazione e testo"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Reimposta"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Hai programmi per il fine settimana?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Vado al mare. Vuoi venire?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Nessun utilizzo dall\'ultima ricarica completa"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nessun utilizzo nelle ultime 24 ore"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Altri utenti"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"La stima della batteria residua si basa sul tuo utilizzo del dispositivo"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Tempo residuo stimato"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Tempo rimanente alla carica completa"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Interazione e hotword completa"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Semplice immissione vocale"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Questo servizio di input vocale potrà eseguire sempre il monitoraggio della voce e controllare le applicazioni vocali per tuo conto. Deriva dall\'applicazione <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Attivare l\'utilizzo del servizio?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Impostazioni di riconoscimento sul dispositivo"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Riconoscimento sul dispositivo"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Riconoscimento vocale sul dispositivo"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Motore preferito"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Impostazioni motore"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Velocità voce e tono"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Elimina"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Tutte le app e i dati di questa sessione verranno eliminati."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Rimuovi"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Ospite (tu)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Utenti"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Altri utenti"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Elimina attività Ospite"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Elimina tutti i dati e le app Ospite quando esci dalla modalità Ospite"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vuoi eliminare l\'attività Ospite?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Le app e i dati di questa sessione Ospite verranno eliminati subito e ogni volta che uscirai dalla modalità Ospite verrà eliminata tutta l\'attività Ospite"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Attiva chiamate"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Attiva chiamate e SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Elimina utente"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Tutte le notifiche di \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Tutte le notifiche di <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notifiche adattative"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifiche al giorno</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notifica al giorno</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Circa <xliff:g id="NUMBER_1">%,d</xliff:g> notifiche al giorno</item>
+ <item quantity="one">Circa <xliff:g id="NUMBER_0">%d</xliff:g> notifica al giorno</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifiche alla settimana</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notifica alla settimana</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Circa <xliff:g id="NUMBER_1">%,d</xliff:g> notifiche alla settimana</item>
+ <item quantity="one">Circa <xliff:g id="NUMBER_0">%d</xliff:g> notifica alla settimana</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Mai"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notifiche app e dispositivi"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Non fare niente"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrazione"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Disattiva audio"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Per procedere con l\'attivazione, devi prima modificare l\'opzione \"Tieni premuto il tasto di accensione\" impostandola sul menu del tasto di accensione."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Per procedere con l\'attivazione, devi prima modificare l\'opzione \"Tieni premuto il tasto di accensione\" impostandola sul menu del tasto di accensione."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Dettagli rete"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Il nome del tuo dispositivo è visibile alle app installate sul telefono. Potrebbe essere visibile anche ad altre persone quando ti connetti a dispositivi Bluetooth, a una rete Wi-Fi o configuri un hotspot Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Dispositivi"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"controllo dei dispositivi"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Carte e pass"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"carte e pass"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Tieni premuto il tasto di accensione"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Tieni premuto per l\'assistente"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Tieni premuto per il menu del tasto di accensione"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Pulsante Tieni premuto disattivato"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Tieni premuto il tasto di accensione"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Per accedere devi tenere premuto il tasto di accensione"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu del tasto di accensione"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Assistente digitale"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Accedi all\'assistente digitale"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Accedi al menu del tasto di accensione"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Per usare questa opzione, imposta prima un blocco schermo"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Tieni premuto per l\'assistente"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Attiva l\'assistente tenendo premuto il tasto di accensione"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu accensione ed emergenze:\nPremi contemporaneamente il tasto di accensione e il tasto alza il volume"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Disattiva suoneria:\nscorciatoia disponibile nel menu del volume."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu del tasto di accensione:\nPremi contemporaneamente il tasto di accensione e il pulsante Alza il volume"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Disattiva suoneria:\nPremi un pulsante del volume per usare la scorciatoia"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Durata pressione"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Regola la sensibilità scegliendo la durata della pressione del tasto di accensione"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Breve"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index eeb390a..471192e 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -472,7 +472,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"בשימוש ב-Pixel Imprint, נעשה שימוש בתמונות כדי לעדכן את התבנית של טביעת האצבע שלהם. התמונות המשמשות ליצירת התבנית של טביעת האצבע של הילד או הילדה אף פעם לא נשמרות. התבנית של טביעת האצבע נשמרת באופן מאובטח בטלפון ואף פעם לא נשלחת או מועברת ממנו. כל פעולות העיבוד מתבצעות בטלפון באופן מאובטח."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"בכל שלב אפשר למחוק את התבנית ואת התמונות של טביעת האצבע, או להשבית את התכונה \'ביטול הנעילה בטביעת אצבע\', דרך ה\'הגדרות\'. התמונות והתבניות של טביעת האצבע מאוחסנות בטלפון עד שהן נמחקות."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"האפשרות למחוק את התמונות והתבנית של טביעת האצבע, או להשבית את הפיצ\'ר \'ביטול הנעילה בטביעת אצבע\', זמינה לך ולילד או לילדה שלך בכל שלב בהגדרות. התמונות והתבניות של טביעת האצבע נשמרות בטלפון עד שהן נמחקות."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"נעילת הטלפון עלולה להתבטל בלי כוונה, למשל כשמישהו מחזיק אותו בצמוד לאצבע שלך."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"נעילת הטלפון עלולה להתבטל בלי כוונה, למשל כשמישהו מחזיק אותו בצמוד לאצבע שלך."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"נעילת הטאבלט עלולה להתבטל בלי כוונה, למשל כשמישהו מחזיק אותו בצמוד לאצבע שלך."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"נעילת המכשיר עלולה להתבטל בלי כוונה, למשל כשמישהו מחזיק אותו בצמוד לאצבע שלך."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"נעילת הטלפון של הילד או הילדה עשויה להתבטל ללא כוונה, למשל במקרה שמישהו יצמיד את הטלפון לאצבע שלהם."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"לקבלת התוצאות הטובות ביותר, כדאי להשתמש במגן מסך בעל אישור Made for Google. טביעת האצבע שלך עלולה לא לעבוד עם מגני מסך אחרים."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"לקבלת התוצאות הטובות ביותר, כדאי להשתמש במגן מסך בעל אישור Made for Google. טביעת האצבע של הילד או הילדה עלולה לא לעבוד עם מגני מסך אחרים."</string>
@@ -522,6 +524,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"איור המציג את המיקום של חיישן טביעת האצבע במכשיר"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"שם"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"אישור"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ניסיון חוזר"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"מחיקה"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"נגיעה בחיישן"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"יש להניח את האצבע על החיישן ולהרים אותה לאחר שמרגישים רטט"</string>
@@ -601,8 +604,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"סיום"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"אופס. זה לא החיישן הנכון"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"יש לגעת בחיישן שבגב הטלפון באצבע המורה."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"הסריקה לא הושלמה"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"חלף הזמן הקצוב להרשמה באמצעות טביעת אצבע. יש לנסות שוב."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"הזמן שהוקצב להגדרת טביעת האצבע פג"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"עליך לנסות שוב עכשיו או להגדיר את טביעת האצבע שלך מאוחר יותר ב\'הגדרות\'"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ההרשמה באמצעות טביעת אצבע נכשלה. כדאי לנסות שוב או להשתמש באצבע אחרת."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"עוד אחת"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"הבא"</string>
@@ -1490,17 +1493,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"התאמה אישית של הטלפון"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"מגוון סגנונות, טפטים שונים ואפשרויות נוספות לבחירתך"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"שומר מסך"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"שומר מסך"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"שימוש בשומר מסך"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"במהלך טעינה או עגינה"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"בשני המצבים"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"במהלך טעינה"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"בזמן עגינה"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"אף פעם"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"כבוי"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"כדי לשלוט במה שקורה כאשר הטלפון בעגינה ו/או במצב שינה, הפעל את שומר המסך."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"מתי להפעיל"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"שומר המסך הנוכחי"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"הגדרות"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"בהירות אוטומטית"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"אפשר להרים כדי להוציא ממצב שינה"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"תצוגה רגישה לסביבה"</string>
@@ -1992,6 +1993,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"הגדרת קוד אימות"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"הגדרת קוד אימות לפרופיל העבודה"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"הגדרת קו ביטול נעילה"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"להוספה של שכבת אבטחה, ניתן להגדיר קו ביטול נעילה לביטול הנעילה של המכשיר"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"הגדרת קו ביטול נעילה לפרופיל עבודה"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"כדי להשתמש בטביעת אצבע, עליך להגדיר סיסמה"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"לשימוש בטביעת אצבע, נדרש קו ביטול נעילה"</string>
@@ -2149,7 +2151,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"אפליקציה לשעת חירום"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"איפוס העדפות של אפליקציות"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"לאפס את העדפות האפליקציות?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"הפעולה תאפס את כל ההעדפות עבור:\n\n"<li>"אפליקציות מושבתות"</li>\n<li>"השבתת התראות של אפליקציות"</li>\n<li>"אפליקציות ברירת מחדל לביצוע פעולות"</li>\n<li>"הגבלות של נתוני רקע לאפליקציות"</li>\n<li>"הגבלת הרשאות"</li>\n\n"נתוני האפליקציות לא יאבדו."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"הפעולה תאפס את כל ההעדפות עבור:\n\n"<li>"אפליקציות מושבתות"</li>\n<li>"השבתת התראות של אפליקציות"</li>\n<li>"אפליקציות שהן ברירת המחדל לביצוע פעולות"</li>\n<li>"הגבלות של נתוני רקע לאפליקציות"</li>\n<li>"הגבלת הרשאות"</li>\n<li>"הגדרות שימוש בסוללה"</li>\n\n"נתוני האפליקציות לא יאבדו."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"איפוס אפליקציות"</string>
<string name="manage_space_text" msgid="9013414693633572277">"ניהול נפח האחסון"</string>
<string name="filter" msgid="9039576690686251462">"סינון"</string>
@@ -2404,7 +2406,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"איפוס ההגדרות"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"הגדרות גודל התצוגה והטקסט אופסו"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"לאפס את גודל התצוגה והטקסט?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ההעדפות שלך לגבי גודל התצוגה והטקסט יאופסו להגדרות המקוריות של הטלפון"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ההעדפות שלך לגבי גודל התצוגה והטקסט יאופסו להגדרות המקוריות של הטלפון"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ההעדפות שלך לגבי גודל התצוגה והטקסט יאופסו להגדרות המקוריות של הטאבלט"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"איפוס"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"יש לך תוכניות לסוף השבוע?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"נראה לי שאלך לחוף הים. רוצה להצטרף?"</string>
@@ -3012,6 +3015,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"לא בשימוש מאז הטעינה המלאה האחרונה"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"לא נעשה שימוש ב-24 השעות האחרונות"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"משתמשים אחרים"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"הערכת הזמן שנותר עד שתיגמר הסוללה מבוססת על השימוש שנעשה במכשיר"</string>
<string name="estimated_time_left" msgid="948717045180211777">"זמן משוער שנותר"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"עד לטעינה מלאה"</string>
@@ -3101,6 +3105,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"שירות מלא של אינטראקציה ומילות הפעלה"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"שירות פשוט של דיבור לטקסט"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"שירות הקלט הקולי הזה יוכל לקיים ניטור תמידי של קול ולשלוט בשמך באפליקציות בעלות תכונות הפעלה קולית. מקורו באפליקציה <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. האם להפעיל את השימוש בשירות הזה?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"הגדרות זיהוי במכשיר"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"זיהוי במכשיר"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"זיהוי דיבור במכשיר"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"מנוע מועדף"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"הגדרות מנוע"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"קצב הדיבור וגובה הקול"</string>
@@ -3501,6 +3508,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"מחיקה"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"כל האפליקציות והנתונים בסשן הזה יימחקו."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"הסרה"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"אורח (את/ה)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"משתמשים"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"משתמשים אחרים"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"מחיקת פעילות האורח"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"מחיקת כל האפליקציות והנתונים של האורח ביציאה ממצב אורח"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"למחוק את הפעילות במצב אורח?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"האפליקציות והנתונים מהגלישה הזו במצב אורח יימחקו עכשיו, וכל פעילות עתידית במצב אורח תימחק בכל יציאה ממצב זה"</string>
<string name="user_enable_calling" msgid="264875360626905535">"הפעלת שיחות טלפון"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"הפעלת שיחות טלפון ו-SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"מחיקת משתמש"</string>
@@ -4097,17 +4111,17 @@
<string name="notification_switch_label" msgid="8029371325967501557">"כל ההתראות של \'<xliff:g id="APP_NAME">%1$s</xliff:g>\'"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"כל ההתראות של \'<xliff:g id="APP_NAME">%1$s</xliff:g>\'"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"התראות מותאמות"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="two">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות ביום</item>
- <item quantity="many">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות ביום</item>
- <item quantity="other">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות ביום</item>
- <item quantity="one">כהתראה אחת (<xliff:g id="NUMBER_0">%d</xliff:g>) ביום</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="two">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות ליום</item>
+ <item quantity="many">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות ליום</item>
+ <item quantity="other">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות ליום</item>
+ <item quantity="one">כהתראה אחת (<xliff:g id="NUMBER_0">%d</xliff:g>) ליום</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="two">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות בשבוע</item>
- <item quantity="many">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות בשבוע</item>
- <item quantity="other">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות בשבוע</item>
- <item quantity="one">כהתראה אחת (<xliff:g id="NUMBER_0">%d</xliff:g>) בשבוע</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="two">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות לשבוע</item>
+ <item quantity="many">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות לשבוע</item>
+ <item quantity="other">כ-<xliff:g id="NUMBER_1">%,d</xliff:g> התראות לשבוע</item>
+ <item quantity="one">כהתראה אחת (<xliff:g id="NUMBER_0">%d</xliff:g>) לשבוע</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"אף פעם"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"התראות במכשירים ובאפליקציות"</string>
@@ -5425,7 +5439,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"לא לבצע שום פעולה"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"רטט"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"השתקה"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"כדי להפעיל, קודם צריך לשנות את \"לחיצה ארוכה על לחצן ההפעלה\" לתפריט ההפעלה."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"כדי להפעיל, קודם צריך לשנות את \'לחיצה ארוכה על לחצן ההפעלה\' לתפריט ההפעלה."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"פרטי הרשת"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"שם המכשיר שלך גלוי לאפליקציות בטלפון. כמו כן, ייתכן שאנשים אחרים יראו אותו בהתחברות למכשירי Bluetooth, לרשת Wi-Fi, או בהגדרת נקודת Wi-Fi לשיתוף אינטרנט."</string>
<string name="devices_title" msgid="649715719278562515">"מכשירים"</string>
@@ -5718,15 +5732,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"פקדי המכשירים"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"כרטיסים וכרטיסי אשראי"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"כרטיסים וכרטיסי אשראי"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"לחיצה ארוכה על לחצן ההפעלה"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"לוחצים לחיצה ארוכה על לחצן ההפעלה כדי להפעיל Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"לחיצה ארוכה למעבר לתפריט ההפעלה"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"לחיצה ארוכה מושבתת"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"לחיצה ארוכה על לחצן ההפעלה"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"יש ללחוץ לחיצה ארוכה על לחצן ההפעלה כדי לגשת"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"תפריט הפעלה"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"העוזר הדיגיטלי"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"גישה לעוזר הדיגיטלי"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"גישה לתפריט ההפעלה"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"כדי להשתמש בתכונה הזו, קודם צריך להגדיר נעילת מסך"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"לחיצה ארוכה להפעלת Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"כדי להפעיל את Assistant, לוחצים לחיצה ארוכה על לחצן ההפעלה"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"תפריט הפעלה וחירום:\nלוחצים על לחצן ההפעלה ועל הלחצן להגברת עוצמת הקול בו-זמנית."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"מניעת השמעה של צלצול:\nקיצור דרך זמין בתפריט עוצמת הקול."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"תפריט הפעלה:\nיש ללחוץ על לחצן ההפעלה ולחצן הגברת עוצמת הקול בו-זמנית"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"מניעת צלצול:\nיש ללחוץ על לחצן עוצמת הקול כדי להשתמש בקיצור הדרך"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"משך הלחיצה"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"כדי להתאים את מידת הרגישות, צריך לבחור את משך הלחיצה על לחצן ההפעלה."</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"לחיצה קצרה"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index b9a97cb..45beb30 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Pixel Imprint を使用すると、画像を基に指紋モデルが更新されます。お子様の指紋モデルの作成に使用された画像が保存されることはありませんが、指紋モデルはスマートフォンに安全に保存されます。この情報が外部に送信されることは一切なく、処理はすべてスマートフォン上で安全に行われます。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"いつでも [設定] で指紋の画像やモデルを削除したり、指紋認証を OFF にしたりできます。指紋の画像とモデルは、削除するまでデバイスに保存されたままになります。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"あなたとお子様はいつでも [設定] で指紋の画像や指紋モデルを削除したり指紋認証を OFF にしたりできます。指紋の画像と指紋モデルは、削除するまでスマートフォンに保存されたままになります。"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"あなたの指にスマートフォンを近づけられた場合など、意図せずスマートフォンのロックが解除されることがあります。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"あなたの指にスマートフォンを近づけられた場合など、意図せずスマートフォンのロックが解除されることがあります。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"あなたの指にタブレットを近づけられた場合など、意図せずタブレットのロックが解除されることがあります。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"あなたの指にデバイスを近づけられた場合など、意図せずデバイスのロックが解除されることがあります。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"お子様の指にスマートフォンを近づけられた場合など、意図せずお子様のスマートフォンのロックが解除されることがあります。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"最適な結果を得るには、Made For Google 認定の画面保護シートを使用してください。これ以外の画面保護シートを使うと、指紋が認識されない可能性があります。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"最適な結果を得るには、Made For Google 認定の画面保護シートを使用してください。これ以外の画面保護シートを使うと、お子様の指紋が認識されない可能性があります。"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"デバイスの指紋認証センサーの位置を示した図"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"名前"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"再試行"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"削除"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"センサーを指でタッチ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"指をセンサーに当て、振動したら離します。"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"完了"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"これはセンサーではありません"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"スマートフォンの背面にある指紋センサーを人差し指でタッチしてください。"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"登録を完了できませんでした"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"指紋の登録がタイムアウトになりました。再度お試しください。"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"指紋の設定がタイムアウトしました"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"今すぐもう一度指紋を設定してみるか、後から [設定] で設定してください"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"指紋を登録できませんでした。もう一度試すか、別の指を使用してください。"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"別の指紋を登録"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"次へ"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"スマートフォンのカスタマイズ"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"別のスタイル、壁紙などを試す"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"スクリーン セーバー"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"スクリーンセーバー"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"スクリーン セーバーを使用する"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"充電時またはドッキング時"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"いずれか"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"充電時"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ドッキング時"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"なし"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"OFF"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"スマートフォンのドッキング時やスリープ時の動作を管理するには、スクリーン セーバーを ON にします。"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"起動するタイミング"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"現在のスクリーンセーバー"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"設定"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"明るさを自動調整"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"指を離してスリープ状態から復帰"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"アンビエント表示"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN の設定"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"仕事用 PIN を設定してください"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"パターンを設定"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"セキュリティ強化のため、デバイスをロック解除するためのパターンを設定してください"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"仕事用パターンを設定してください"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"指紋認証にはパスワードが必要です"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"指紋認証にはパターンが必要です"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"緊急アプリ"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"アプリの設定をリセット"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"アプリの設定をリセットしますか?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"この操作により、次の設定がすべてリセットされます。\n\n"<li>"無効化されているアプリ"</li>\n<li>"無効化されているアプリの通知"</li>\n<li>"特定の操作で使用するデフォルトのアプリ"</li>\n<li>"アプリのバックグラウンド データの制限"</li>\n<li>"権限のすべての制限"</li>\n\n"アプリのデータが失われることはありません。"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"この操作により、次の設定がすべてリセットされます。\n\n"<li>"無効化されているアプリ"</li>\n<li>"無効化されているアプリの通知"</li>\n<li>"特定の操作で使用するデフォルトのアプリ"</li>\n<li>"アプリのバックグラウンド データの制限"</li>\n<li>"権限のすべての制限"</li>\n<li>"バッテリー使用量の設定"</li>\n\n"アプリのデータが失われることはありません。"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"アプリをリセット"</string>
<string name="manage_space_text" msgid="9013414693633572277">"容量を管理"</string>
<string name="filter" msgid="9039576690686251462">"フィルタ"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"設定をリセット"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"サイズとテキストの表示設定がリセットされました"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ディスプレイのサイズとテキストをリセットしますか?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ディスプレイのサイズとテキストの設定をスマートフォンの元の設定にリセットします"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ディスプレイのサイズとテキストの設定をスマートフォンの元の設定にリセットします"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ディスプレイのサイズとテキストの設定をタブレットの元の設定にリセットします"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"リセット"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"週末の予定は?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ビーチに行こうと思っています。一緒にいかがですか?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"使用: なし(前回のフル充電以降)"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"使用: なし(過去 24 時間)"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"その他のユーザー"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"バッテリー残量はデバイスの使用状況に基づく推定値です"</string>
<string name="estimated_time_left" msgid="948717045180211777">"予測される残り時間"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"フル充電まで"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"完全な起動ワードと対話"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"シンプルな音声認識"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"この音声入力サービスを使用すると、常時音声監視を実行し、音声対応アプリの管理をユーザーに代わって行えるようになります。これは<xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>の一部です。このサービスの使用を有効にしますか?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"デバイス上の認識の設定"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"デバイス上の認識"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"デバイス上の音声認識"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"優先するエンジン"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"エンジンの設定"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"音声の速度と高さ"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"削除"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"このセッションでのアプリとデータはすべて削除されます。"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"削除"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"ゲスト(自分)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ユーザー"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"その他のユーザー"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"ゲストアクティビティを削除"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"ゲストモードの終了時にゲストのすべてのアプリとデータを削除します"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ゲストのアクティビティを削除しますか?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"今回のゲスト セッションのアプリとデータが今すぐ削除され、今後のゲストのアクティビティはすべて、ゲストモードを終了するたびに削除されます"</string>
<string name="user_enable_calling" msgid="264875360626905535">"通話をON"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"通話とSMSをON"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ユーザーの削除"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」のすべての通知"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> のすべての通知"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"通知の自動調整"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">約 <xliff:g id="NUMBER_1">%,d</xliff:g> 件の通知 / 日</item>
- <item quantity="one">約 <xliff:g id="NUMBER_0">%d</xliff:g> 件の通知 / 日</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">1 日あたりの通知の数: 約 <xliff:g id="NUMBER_1">%,d</xliff:g> 件</item>
+ <item quantity="one">1 日あたりの通知の数: 約 <xliff:g id="NUMBER_0">%d</xliff:g> 件</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">週に約 <xliff:g id="NUMBER_1">%,d</xliff:g> 件の通知</item>
- <item quantity="one">週に約 <xliff:g id="NUMBER_0">%d</xliff:g> 件の通知</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">1 週間あたりの通知の数: 約 <xliff:g id="NUMBER_1">%,d</xliff:g> 件</item>
+ <item quantity="one">1 週間あたりの通知の数: 約 <xliff:g id="NUMBER_0">%d</xliff:g> 件</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"なし"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"デバイスとアプリの通知"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"何もしない"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"バイブレーション"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"ミュート"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"有効にするには、まず [電源ボタンを長押しする] を電源ボタン メニューに変更します。"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"有効にするには、まず [電源ボタンを長押しする] を電源ボタン メニューに変更します。"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"ネットワークの詳細"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"デバイス名がスマートフォンのアプリに表示されます。また、Bluetooth デバイスや Wi-Fi ネットワークに接続したり Wi-Fi アクセス ポイントを設定したりすると、他のユーザーもデバイス名を確認できるようになります。"</string>
<string name="devices_title" msgid="649715719278562515">"デバイス"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"デバイス コントロール"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"カードとパス"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"カードとパス"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"電源ボタンを長押し"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"長押しすることでアシスタントを呼び出せます"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"長押しすると電源ボタン メニューが表示されます"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"長押しは無効です"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"電源ボタンを長押しする"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"電源ボタンを長押ししてアクセスする"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"電源ボタン メニュー"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"デジタル アシスタント"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"デジタル アシスタントにアクセスする"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"電源ボタン メニューにアクセスする"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"使用するには、まず画面ロックを設定してください"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"長押しでアシスタントを呼び出す"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"電源ボタンを長押ししてアシスタントを呼び出します"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"電源ボタンと緊急通報のメニュー:\n電源ボタンと音量大ボタンを同時に押してください。"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"着信音のミュート:\n音量メニューでショートカットを利用できます。"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"電源ボタン メニュー:\n電源ボタンと音量大ボタンを同時に押します"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"着信音のミュート:\n音量ボタンを押します(ショートカット操作)"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"長押しの長さ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"長さを選択して感度を調整し、電源ボタンを長押しします。"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"短い"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index fa872db..d58ed37 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Pixel Imprint-ის გამოყენებისას თითის ანაბეჭდის მოდელი სურათების მეშვეობით იქმნება. თქვენი ბავშვის თითის ანაბეჭდის მოდელის შესაქმნელად გამოყენებული სურათები არ ინახება, მაგრამ თითის ანაბეჭდის მოდელი უსაფრთხოდ ინახება ტელეფონში. ტელეფონში ყველა დამუშავება ხდება უსაფრთხოდ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"თქვენი თითის ანაბეჭდის სურათებისა და მოდელის წაშლა ან თითის ანაბეჭდით განბლოკვის პარამეტრებიდან გამორთვა ნებისმიერ დროს შეგიძლიათ. თითის ანაბეჭდის სურათები და მოდელები ტელეფონზე შეინახება, სანამ მათ წაშლიდეთ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"თქვენ ან თქვენ ბავშვს შეგიძლიათ თითის ანაბეჭდის სურათების და მოდელის წაშლა ან ანაბეჭდით განბლოკვის ნებისმიერ დროს გამორთვა პარამეტრებიდან. თითის ანაბეჭდის სურათები და მოდელები მანამ ინახება ტელეფონში, სანამ მათ არ წაშლით."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"თქვენი ტელეფონი შეიძლება მაშინაც განიბლოკოს, როცა ამის განზრახვა არ გაქვთ, მაგალითად, მაშინ, თუ ვინმე მასზე თითს მიგაჭერინებთ."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"თქვენი ტელეფონი შეიძლება მაშინაც განიბლოკოს, როცა ამის განზრახვა არ გაქვთ, მაგალითად, მაშინ, თუ ვინმე მასზე თითს მიგაჭერინებთ."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"თქვენი პლანშეტი შეიძლება გაუთვალისწინებლადაც განიბლოკოს, მაგალითად, თუ ვინმე მასზე თითს მიგაჭერინებთ."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"თქვენი ტელეფონი შეიძლება გაუთვალისწინებლადაც განიბლოკოს, მაგალითად, თუ ვინმე მასზე თითს მიგაჭერინებთ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"თქვენი ბავშვის ტელეფონის განბლოკვა მაშინაც შესაძლებელია, როცა ამის განზრახვა არ გაქვთ, მაგალითად, თუ ვინმე მასზე თითს მიგაჭერინებთ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"საუკეთესო შედეგების მისაღებად გამოიყენეთ ეკრანის დამცავი, რომელიც სერტიფიცირებულია Made for Google-ის მიერ. ეკრანის სხვა დამცავებზე თქვენი თითის ანაბეჭდი, შესაძლოა, არ მუშაობდეს."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"საუკეთესო შედეგების მისაღებად გამოიყენეთ ეკრანის დამცავი, რომელიც სერტიფიცირებულია Made for Google-ის მიერ. ეკრანის სხვა დამცავებზე თქვენი ბავშვის თითის ანაბეჭდი, შესაძლოა, არ მუშაობდეს."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ილუსტრაცია მოწყობილობისა და თითის ანაბეჭდის სენსორის ადგილმდებარეობით"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"სახელი"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"კარგი"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ხელახლა ცდა"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"წაშლა"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"შეეხეთ სენსორს"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"დაადეთ თითი სენსორს და ვიბრაციის შეგრძნების შემდეგ აიღეთ"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"შესრულდა"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"ეს სენსორი არ არის"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"შეეხეთ თქვენი ტელეფონის უკანა მხარეს მდებარე სენსორს. ამისთვის გამოიყენეთ საჩვენებელი თითი."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"რეგისტრაცია არ დასრულდა"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"თითის ანაბეჭდის რეგისტრაციის დროის ლიმიტი ამოიწურა. ცადეთ ისევ."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"თითის ანაბეჭდის დაყენების დრო ამოიწურა"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ცადეთ ხელახლა ახლავე ან დააყენეთ თითის ანაბეჭდი მოგვიანებით პარამეტრებიდან"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"თითის ანაბეჭდის რეგისტრაცია ვერ მოხერხდა. ცადეთ ისევ ან გამოიყენეთ სხვა თითი."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"კიდევ ერთის დამატება"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"შემდეგი"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"მოირგეთ ტელეფონი"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"ცადეთ სხვადასხვა სტილი, ფონი და ა.შ."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"ეკრანმზოგი"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ეკრანმზოგი"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"გამოიყენეთ ეკრანმზოგი"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"დატენვისას ან სანამ ჩამაგრებულია"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"ორივე შემთხვევაში"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"დატენვისას"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"სანამ ჩამაგრებულია"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"არასოდეს"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"გამორთული"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"დოკ-სადგურთან მიერთების და/ან ძილის რეჟიმზე გადასვლის დროს ტელეფონის ქცევის სამართავად, ჩართეთ ეკრანმზოგი."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"გაშვების დრო"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"ამჟამინდელი ეკრანმზოგი"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"პარამეტრები"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ავტომატური სიკაშკაშე"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"გაღვიძება აწევისას"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ემბიენტური ეკრანი"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"დააყენეთ PIN-კოდი"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"დააყენეთ სამსახურის PIN-კოდი"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"დააყენეთ ნიმუში"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"დამატებითი უსაფრთხოებისთვის დააყენეთ ნიმუში მოწყობილობის განსაბლოკად"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"დააყენეთ სამსახურის ნიმუში"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"თითის ანაბეჭდის გამოსაყენებლად დააყენეთ პაროლი"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"თითის ანაბეჭდისთვის დააყენეთ ნიმუში"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"საგანგებო სიტუაციების აპი"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"აპის პარამეტრების აღდგენა"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"დაბრუნდეს აპის პარამეტრები?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ეს ქმედება გადააყენებს ყველა პარამეტრს, რომელიც ეხება:\n\n"<li>"გათიშულ აპებს"</li>\n<li>"აპების გათიშულ შეტყობინებებს"</li>\n<li>"ქმედებებზე მიმაგრებულ ნაგულისხმევ აპლიკაციებს"</li>\n<li>"ფონურ რეჟიმში მონაცემთა გამოყენების შეზღუდვებს აპებისთვის"</li>\n<li>"ნებისმიერი ნებართვის შეზღუდვას"</li>\n\n"აპების მონაცემები არ დაიკარგება."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ამგვარად გადაყენდება პარამეტრები შემდეგი კომპონენტებისთვის:\n\n"<li>"გათიშული აპები"</li>\n<li>"აპების გათიშული შეტყობინებები"</li>\n<li>"ქმედებებისთვის ნაგულისხმევი აპები"</li>\n<li>"ფონური მონაცემების შეზღუდვები აპებისთვის"</li>\n<li>"ნებისმიერი ნებართვის შეზღუდვა"</li>\n<li>"ბატარეის გამოყენების პარამეტრები"</li>\n\n"აპების მონაცემები არ დაიკარგება."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"აპების საწყისი მდგომარეობის აღდგენა"</string>
<string name="manage_space_text" msgid="9013414693633572277">"სივრცის მართვა"</string>
<string name="filter" msgid="9039576690686251462">"გაფილტვრა"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"პარამეტრების გადაყენება"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ეკრანის ზომა და ტექსტის პარამეტრები გადაყენებულია"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"გსურთ ეკრანის ზომის და ტექსტის პარამეტრების გადაყენება?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"თქვენი ეკრანის ზომის და ტექსტის პარამეტრები დაუბრუნდება ტელეფონის თავდაპირველ პარამეტრებს"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"თქვენი ეკრანის ზომის და ტექსტის პარამეტრები დაუბრუნდება ტელეფონის თავდაპირველ პარამეტრებს"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"თქვენი ეკრანის ზომის და ტექსტის პარამეტრები დაუბრუნდება ტაბლეტის თავდაპირველ პარამეტრებს"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"გადაყენება"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"გაქვს რაიმე გეგმა უქმეებისთვის?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"პლაჟზე ვაპირებ წასვლას. ხომ არ წამოხვალ?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"ბოლო სრული დატენვის შემდეგ მოხმარება არ ფიქსირდება"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"ბოლო 24 საათში გამოყენება არ მომხდარა"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"სხვა მომხმარებლები"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"ბატარეის მუშაობის დარჩენილი ხანგრძლივობის მიახლოებითი ვარაუდი თქვენი მოწყობილობის მოხმარებას ეყრდნობა"</string>
<string name="estimated_time_left" msgid="948717045180211777">"სავარაუდო დარჩენილი დრო"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"სრულ დატენვამდე"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"სრული ჯადოსნური სიტყვა და ინტერაქცია"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"მარტივი მეტყველების ტექსტში გადაყვანა"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"ხმოვანი შეყვანის სერვისი შეძლებს შეასრულოს ხმის მონიტორინგი, რომელიც მუდამ ჩართულია და აკონტროლოს ხმასთან თავსებადი აპლიკაციები თქვენი სახელით. ის მომდინარეობს <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> აპლიკაციიდან. გსურთ ამ სერვისის ჩათვლა?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"მოწყობილობაზე მომუშავე ამოცნობის პარამეტრები"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"მოწყობილობაზე მომუშავე ამოცნობა"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"მოწყობილობაზე მომუშავე მეტყველების ამოცნობა"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"რჩეული ძრავა"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"ძრავის პარამეტრები"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"მეტყველების ტემპი და ტონი"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"წაშლა"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"ამ სესიის ყველა აპი და მონაცემი წაიშლება."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"ამოშლა"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"სტუმარი (თქვენ)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"მომხმარებლები"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"სხვა მომხმარებლები"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"სტუმრის აქტივობის წაშლა"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"სტუმრის ყველა აპის და მონაცემის წაშლა სტუმრის რეჟიმიდან გასვლისას"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"გსურთ სტუმრის აქტივობის წაშლა?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"აპები და მონაცემები სტუმრის ამ სესიიდან წაიშლება ახლავე, ხოლო სტუმრის ყველა მომავალი აქტივობა წაიშლება ყოველთვის, როცა სტუმრის რეჟიმიდან გახვალთ"</string>
<string name="user_enable_calling" msgid="264875360626905535">"სატელეფონო ზარების ჩართვა"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"სატელ. ზარების და SMS-ის ჩართვა"</string>
<string name="user_remove_user" msgid="8468203789739693845">"მომხმარებლის წაშლა"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"„<xliff:g id="APP_NAME">%1$s</xliff:g>“-ის ყველა შეტყობინება"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>-ის ყველა შეტყობინება"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"ადაპტაციური შეტყობინებები"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> შეტყობინება დღეში</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> შეტყობინება დღეში</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">დაახლოებით <xliff:g id="NUMBER_1">%,d</xliff:g> შეტყობინება დღეში</item>
+ <item quantity="one">დაახლოებით <xliff:g id="NUMBER_0">%d</xliff:g> შეტყობინება დღეში</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> შეტყობინება კვირაში</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> შეტყობინება კვირაში</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">დაახლოებით <xliff:g id="NUMBER_1">%,d</xliff:g> შეტყობინება კვირაში</item>
+ <item quantity="one">დაახლოებით <xliff:g id="NUMBER_0">%d</xliff:g> შეტყობინება კვირაში</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"არასოდეს"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"მოწყობილობისა და აპის შეტყობინებები"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"არ შეიცვალოს არაფერი"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"ვიბრაცია"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"დადუმება"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ჩასართავად ჯერ შეცვალეთ „ხანგრძლივად დააჭირეთ ჩართვის ღილაკს“ ჩართვის მენიუთი."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ჩასართავად ჯერ შეცვალეთ „ხანგრძლივად დააჭირეთ ჩართვის ღილაკს“ ჩართვის მენიუთი."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"ქსელის დეტალები"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"თქვენი მოწყობილობის სახელი ხილულია თქვენს ტელეფონზე არსებული აპებისთვის. მის დანახვას შეძლებენ სხვა პირებიც, როცა Bluetooth მოწყობილობებს ან Wi-Fi ქსელს დაუკავშირდებით, ან Wi-Fi უსადენო ქსელს დააყენებთ."</string>
<string name="devices_title" msgid="649715719278562515">"მოწყობილობები"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"მოწყობილობის მართვის საშუალებები"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"ბარათები და საშვები"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"ბარათები და საშვები"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"ხანგრძლივად დააჭირეთ ჩართვის ღილაკს"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"ხანგრძლივად დააჭირეთ ასისტენტის გამოსაძახებლად"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"ხანგრძლივად დააჭირეთ ჩართვის მენიუს სანახავად"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"ხანგრძლივად დაჭერა გათიშულია"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"ხანგრძლივად დააჭირეთ ჩართვის ღილაკს"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"წვდომისათვის ხანგრძლივად დააჭირეთ ჩართვის ღილაკს"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"ჩართვის მენიუ"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ციფრული ასისტენტი"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"მიწვდით ციფრულ ასისტენტს"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"მიწვდით ჩართვის მენიუს"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"გამოსაყენებლად, ჯერ დააყენეთ ეკრანის ბლოკი"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"ხანგრძლივად დაჭერა ასისტენტის გამოსაძახებლად"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"ასისტენტის გაშვება ჩართვის ღილაკზე ხანგრძლივად დაჭერით"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"ჩართვის და საგანგებო მენიუ:\nერთდროულად დააჭირეთ ჩართვას და ხმის აწევას."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"დარეკვის თავიდან აცილება:\nმალსახმობი ხმის სიმძლავრის მენიუშია."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"ჩართვის მენიუ:\nერთდროულად დააჭირეთ ჩართვის და ხმის აწევის ღილაკებს"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"თავიდან აიცილეთ რეკვა:\nდააჭირეთ ხმის ღილაკს მალსახმობისთვის"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"დაჭერის ხანგრძლივობა"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"დაარეგულირეთ მგრძნობიარობა იმის არჩევით, თუ რამდენი ხნით უნდა გეჭიროთ ჩართვის ღილაკი"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"ხანმოკლე"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 4f1d448..cfd12cf 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Pixel Imprint функциясын қолданған кездегі суреттер саусақ ізінің үлгісін жаңарту үшін пайдаланылады. Балаңыздың саусақ ізінің үлгісін жасау үшін қолданылған суреттер ешқашан сақталмайды, бірақ саусақ ізінің үлгісі телефонда қауіпсіз түрде сақталады және басқа ешқайда жіберілмейді. Барлық өңдеу жұмыстары телефонда ғана орындалады."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Кез келген уақытта \"Параметрлер\" бөлімінен саусақ ізінің суреттері мен үлгісін жоя немесе Саусақ ізімен ашу функциясын өшіре аласыз. Саусақ ізінің суреттері мен үлгілері жойылмайынша, телефоныңызда сақталады."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Балаңыз екеуіңіз кез келген уақытта \"Параметрлер\" бөлімінен оның саусақ ізінің суреттері мен үлгісін жоя аласыздар. Саусақ ізімен ашу функциясын өшіріп қоюға да болады. Суреттер мен үлгілер өзіңіз жойғанша сақталып тұрады."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Телефон құлпын ашқыңыз келмесе де, біреу телефоныңызды саусағыңызға тақап тұрған кезде, ол ашылып кетуі мүмкін."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Телефон құлпын ашқыңыз келмесе де, біреу телефоныңызды саусағыңызға тақап тұрған кезде, ол ашылып кетуі мүмкін."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Планшеттің құлпын ашқыңыз келмесе де, біреу оны саусағыңызға тақап тұрған кезде, ол ашылып кетуі мүмкін."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Құрылғының құлпын ашқыңыз келмесе де, біреу оны саусағыңызға тақап тұрған кезде, ол ашылып кетуі мүмкін."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Балаңыз телефон құлпын ашқысы келмесе де, біреу телефонды оның саусағына тақап тұрса, ол ашылып кетуі мүмкін."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Ең жақсы нәтижелер алу үшін \"Google-ға арнап жасалған\" сертификаты бар экран қорғанышын пайдаланыңыз. Басқа экран қорғаныштары пайдаланылса, саусақ ізі оқылмай қалуы мүмкін."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Ең жақсы нәтижелер алу үшін \"Google-ға арнап жасалған\" сертификаты бар экран қорғанышын пайдаланыңыз. Басқа экран қорғаныштары пайдаланылса, балаңыздың саусақ ізі оқылмай қалуы мүмкін."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Құрылғы мен саусақ таңбасы сенсорының орны бар сурет"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Атауы"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Жарайды"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Қайталау"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Жою"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Сканерді түртіңіз"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Саусақты сканерге қойып, дірілді сезгеннен кейін көтеріңіз."</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Дайын"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Бұл сенсор емес"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Телефонның артындағы датчикті сұқ саусақпен түртіңіз."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Тіркеу аяқталмады"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Саусақ ізін тіркеу уақыты бітті. Әрекетті қайталаңыз."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Саусақ ізін реттеу уақыты өтіп кетті."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Қазір қайталап көріңіз немесе саусақ ізін кейін \"Параметрлер\" бөлімінен реттеңіз."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Саусақ ізін тіркеу нәтиже бермеді. Әрекетті қайталаңыз немесе басқа саусақты пайдаланыңыз."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Тағы біреуін енгізу"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Келесі"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Телефонды реттеу"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Түрлі стильдерді, тұсқағаздарды, т.б. пайдаланып көріңіз."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Скринсейвер"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"скринсейвер"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Скринсейверді пайдалану"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Зарядтау кезінде немесе қондыру станциясында"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Екеуі де"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Зарядтау кезінде"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Қондыру станциясында"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Ешқашан"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Өшірулі"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Телефон қондырылған және/немесе ұйықтаған кездегі процесті бақылау үшін скринсейверді қосыңыз."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Іске қосылатын кезі"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Қазіргі скринсейвер"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Параметрлер"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Aвтоматтық жарықтық"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Ояту үшін көтеру"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Экранды автоматты қосу"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN кодын орнатыңыз"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Жұмыс PIN кодын орнатыңыз"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Өрнек орнатыңыз"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Қауіпсіздікті күшейту үшін құрылғының құлпын ашатын өрнек орнатыңыз."</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Жұмыс өрнегін орнатыңыз"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Саусақ ізін пайдалану үшін құпия сөз орнатыңыз"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Саусақ ізін пайдалану үшін өрнек орнатыңыз"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Төтенше жағдай қолданбасы"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Қолданба параметрлерін бастапқы күйіне қайтару"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Қолданба параметрлері бастапқы күйіне қайтарылсын ба?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Келесілердің параметрлері бастапқы күйіне қайтарылады:\n\n"<li>"өшірілген қолданбалар;"</li>\n<li>"қолданбалардың өшірілген хабарландырулары;"</li>\n<li>"әрекеттерге арналған әдепкі қолданбалар;"</li>\n<li>"фондық режимдегі дерек тасымалын шектеу;"</li>\n<li>"барлық рұқсат шектеулері."</li>\n\n"Қолданба деректері жоғалмайды."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Төмендегі реттеулер бастапқы күйге қайтарылады:\n\n"<li>"өшірілген қолданбалар;"</li>\n<li>"өшірілген қолданба ескертулері;"</li>\n<li>"әрекеттерге арналған әдепкі қолданбалар;"</li>\n<li>"қолданбалар үшін фондық режимдегі дерек тасымалын шектеу;"</li>\n<li>"қандай да бір рұқсат шектеулері;"</li>\n<li>"батарея шығыны параметрлері."</li>\n\n"Қолданба деректері жоғалмайды."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Бастапқы күйге қайтару"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Орынды басқару"</string>
<string name="filter" msgid="9039576690686251462">"Сүзгі"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Бастапқы күйге қайтару"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Экрандағы кескін өлшемі мен мәтін параметрлері бастапқы күйге қайтарылды."</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Масштаб пен мәтін өлшемі бастапқы күйге қайтарылсын ба?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Масштаб пен мәтін параметрлері телефонның бастапқы параметрлеріне қайтарылады."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Масштаб пен мәтін параметрлері телефонның бастапқы параметрлеріне қайтарылады."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Масштаб пен мәтін параметрлері планшеттің бастапқы параметрлеріне қайтарылады."</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Бастапқы күйге қайтару"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Демалыс күндеріне жоспар бар ма?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Жағажайға барамыз. Барасың ба?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Соңғы толық зарядталғаннан бері пайдаланылмады."</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Соңғы 24 сағатта пайдаланылмады."</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Басқа пайдаланушылар"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Қалған батарея зарядының деңгейі құрылғының пайдаланылуы негізінде анықталады"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Қалған болжалды уақыт"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Толық зарядталғанға дейін"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Толықтай дауыспен басқару"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Тілді мәтінге түрлендіру"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Бұл дауыспен енгізу қызметі дауысты бақылап, осындай қызметті қолдайтын қолданбаларды сіздің атыңыздан басқарады. Оның шыққан жері — <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Осы мүмкіндікті қосу керек пе?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Құрылғыда тану параметрлері"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Құрылғыда тану"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Құрылғыда сөз тану"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Таңдалған жүйе"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Жүйе параметрлері"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Сөйлеу жылдамдығы және екпін"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Жою"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Осы сеанстағы барлық қолданбалар мен деректер жойылады."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Алып тастау"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Қонақ (сіз)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Пайдаланушылар"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Басқа пайдаланушылар"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Қонақ әрекетін жою"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Қонақ режимінен шыққан кезде, барлық қонақ қолданбасы мен дерегін жою"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Қонақ әрекетін жою керек пе?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Осы қонақ сеансындағы қолданбалар мен деректер қазір жойылады және қонақ режимінен шыққан сайын қонақтың барлық әрекеті өшіп отырады."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Телефон қоңырауларын қосу"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Телефон қоңырауларын және SMS қосу"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Пайдаланушыны жою"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Барлық \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" хабарландырулары"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Барлық <xliff:g id="APP_NAME">%1$s</xliff:g> хабарландырулары"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Бейімделетін хабарландырулар"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">Күніне ~<xliff:g id="NUMBER_1">%,d</xliff:g> хабарландыру</item>
- <item quantity="one">Күніне ~<xliff:g id="NUMBER_0">%d</xliff:g> хабарландыру</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Күніне шамамен <xliff:g id="NUMBER_1">%,d</xliff:g> хабарландыру</item>
+ <item quantity="one">Күніне шамамен <xliff:g id="NUMBER_0">%d</xliff:g> хабарландыру</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">Аптасына ~<xliff:g id="NUMBER_1">%,d</xliff:g> хабарландыру</item>
- <item quantity="one">Аптасына ~<xliff:g id="NUMBER_0">%d</xliff:g> хабарландыру</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Аптасына шамамен <xliff:g id="NUMBER_1">%,d</xliff:g> хабарландыру</item>
+ <item quantity="one">Аптасына шамамен <xliff:g id="NUMBER_0">%d</xliff:g> хабарландыру</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Ешқашан"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Құрылғы мен қолданба хабарландырулары"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ештеңе істемеу"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Діріл"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Дыбысын өшіру"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Қосу үшін алдымен қуат мәзірінен \"Қуат түймесін басып тұру\" пәрменін өзгертіңіз."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Қосу үшін алдымен \"Қуат түймесін басып тұру\" параметріне \"Қуат мәзірі\" мәнін орнатыңыз."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Желі мәліметі"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Құрылғыңыздың аты телефоныңыздағы қолданбаларға көрінеді. Сонымен қатар Bluetooth құрылғыларына қосылғанда, Wi-Fi желісіне қосылғанда немесе Wi-Fi хотспотын орнатқанда, басқа адамдарға көрінуі мүмкін."</string>
<string name="devices_title" msgid="649715719278562515">"Құрылғылар"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"құрылғыны басқару элементтері"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Карталар мен жол жүру билеттері"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"карталар мен жол жүру билеттері"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Қуат түймесін басып тұру"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant-ті ашу үшін басып тұру"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Қуат мәзірін ашу үшін басып тұру"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Басып тұру өшірулі"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Қуат түймесін басып тұру"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Қуат мәзіріне кіру үшін қуат түймесін басып тұрыңыз"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Қуат мәзірі"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Цифрлық көмекші"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Цифрлық көмекшіге кіру"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Қуат мәзіріне кіру"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Пайдалану үшін алдымен экран құлпын орнатыңыз."</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant-ті іске қосу үшін басып тұру"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Assistant-ті қуат түймесін басып тұру арқылы іске қосыңыз."</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Қуат және төтенше жағдай мәзірі:\nҚуат түймесі мен дыбысты арттыру түймесін бірге басыңыз."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Қоңырау дыбысын өшіру:\nДыбыс деңгейі мәзірінде таңбаша бар."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Қуат мәзірі:\nқуат пен дыбысты арттыру түймесін бір уақытта басыңыз."</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Қоңырау дыбысын өшіру:\n жылдам пәрменді пайдалану үшін дыбыс деңгейі түймесін басыңыз."</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Басып тұру ұзақтығы"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Қуат түймесін қанша басып тұру қажеттігін таңдау арқылы сезгіштікті реттеңіз."</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Қысқа"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index fd85f2f..becade1 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"នៅពេលគាត់ប្រើ Pixel Imprint រូបភាពត្រូវបានប្រើ ដើម្បីធ្វើបច្ចុប្បន្នភាពគំរូស្នាមម្រាមដៃរបស់គាត់។ រូបភាពដែលប្រើសម្រាប់បង្កើតគំរូស្នាមម្រាមដៃរបស់កូនអ្នកមិនត្រូវបានរក្សាទុកទេ ប៉ុន្តែគំរូស្នាមម្រាមដៃនោះត្រូវបានរក្សាទុកដោយសុវត្ថិភាពនៅលើទូរសព្ទ និងមិនចាកចេញពីទូរសព្ទឡើយ។ ការដំណើរការទាំងអស់ប្រព្រឹត្តទៅដោយសុវត្ថិភាពនៅលើទូរសព្ទ។"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"អ្នកអាចលុបរូបភាពស្នាមម្រាមដៃ និងគំរូរបស់អ្នក ឬបិទការដោះសោដោយប្រើស្នាមម្រាមដៃបានគ្រប់ពេលនៅក្នុងការកំណត់។ រូបភាពស្នាមម្រាមដៃ និងគំរូត្រូវបានរក្សាទុកនៅលើទូរសព្ទ រហូតទាល់តែអ្នកលុបវា។"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"អ្នក និងកូនរបស់អ្នកអាចលុបគំរូ និងរូបភាពស្នាមម្រាមដៃរបស់គាត់ ឬបិទការដោះសោដោយប្រើស្នាមម្រាមដៃបានគ្រប់ពេលនៅក្នុងការកំណត់។ គំរូ និងរូបភាពស្នាមម្រាមដៃត្រូវបានរក្សាទុកនៅលើទូរសព្ទ រហូតទាល់តែគំរូ និងរូបភាពស្នាមម្រាមដៃទាំងនោះត្រូវបានលុប។"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"ទូរសព្ទរបស់អ្នកអាចត្រូវបានដោះសោ នៅពេលដែលអ្នកមិនមានបំណងដោះសោ ដូចជាប្រសិនបើនរណាម្នាក់លើកវាមកប៉ះនឹងម្រាមដៃរបស់អ្នកជាដើម។"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"ទូរសព្ទរបស់អ្នកអាចត្រូវបានដោះសោ នៅពេលដែលអ្នកមិនមានបំណងដោះសោ ដូចជាប្រសិនបើនរណាម្នាក់លើកវាមកប៉ះនឹងម្រាមដៃរបស់អ្នកជាដើម។"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"ថេប្លេតរបស់អ្នកអាចត្រូវបានដោះសោ នៅពេលដែលអ្នកមិនមានបំណងដោះសោ ដូចជាប្រសិនបើនរណាម្នាក់លើកវាមកប៉ះនឹងម្រាមដៃរបស់អ្នកជាដើម។"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"ឧបករណ៍របស់អ្នកអាចត្រូវបានដោះសោ នៅពេលដែលអ្នកមិនមានបំណងដោះសោ ដូចជាប្រសិនបើនរណាម្នាក់លើកវាមកប៉ះនឹងម្រាមដៃរបស់អ្នកជាដើម។"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"ទូរសព្ទរបស់កូនអ្នកអាចត្រូវបានដោះសោ ទោះបីជាគាត់មិនមានបំណងដោះសោក៏ដោយដូចជា ប្រសិនបើនរណាម្នាក់លើកវាមកប៉ះនឹងម្រាមដៃរបស់គាត់ជាដើម។"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"ដើម្បីទទួលបានលទ្ធផលល្អបំផុត សូមប្រើកញ្ចក់ការពារអេក្រង់ដែលបានទទួលស្គាល់ពី Made for Google។ តាមរយៈកញ្ចក់ការពារអេក្រង់ផ្សេងទៀត ស្នាមម្រាមដៃរបស់អ្នកអាចមិនដំណើរការ។"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"ដើម្បីទទួលបានលទ្ធផលល្អបំផុត សូមប្រើកញ្ចក់ការពារអេក្រង់ដែលបានទទួលស្គាល់ពី Made for Google។ តាមរយៈកញ្ចក់ការពារអេក្រង់ផ្សេងទៀត ស្នាមម្រាមដៃរបស់អ្នកអាចមិនដំណើរការ។"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"រូបភាពបង្ហាញទីតាំងឧបករណ៍ចាប់ស្នាមម្រាមដៃ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"ឈ្មោះ"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"យល់ព្រម"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ព្យាយាមម្ដងទៀត"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"លុប"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"ប៉ះឧបករណ៍ចាប់ស្នាមម្រាមដៃ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"ដាក់ម្រាមដៃរបស់អ្នកនៅលើឧបករណ៍ចាប់សញ្ញា ហើយលើកវាឡើងបន្ទាប់ពីអ្នកមានអារម្មណ៍ថាវាញ័រហើយ"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"រួចរាល់"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"អូ នោះមិនមែនជាឧបករណ៍ចាប់សញ្ញាទេ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"ប៉ះឧបករណ៍ចាប់ស្នាមម្រាមដៃនៅផ្នែកខាងក្រោយនៃទូរសព្ទរបស់អ្នក។ សូមប្រើម្រាមដៃចង្អុលរបស់អ្នក។"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"ការបញ្ចូលស្នាមម្រាមដៃមិនបានបញ្ចប់ទេ"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"រយៈពេលបញ្ចូលស្នាមម្រាមដៃបានអស់ពេលហើយ សូមព្យាយាមម្តងទៀត។"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"អស់ម៉ោងក្នុងការរៀបចំស្នាមម្រាមដៃ"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"សាកល្បងម្ដងទៀតឥឡូវនេះ ឬរៀបចំស្នាមម្រាមដៃរបស់អ្នកនៅពេលក្រោយនៅក្នុងការកំណត់"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ការបញ្ចូលស្នាមម្រាមដៃមិនដំណើរការទេ សូមព្យាយាមម្តងទៀត ឬប្រើម្រាមដៃផ្សេងពីនេះ។"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"បញ្ចូលមួយទៀត"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"បន្ទាប់"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"កំណត់ទូរសព្ទរបស់អ្នកតាមបំណង"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"សាកប្រើរចនាប័ទ្ម ផ្ទាំងរូបភាពផ្សេងៗគ្នា និងអ្វីៗជាច្រើនទៀត"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"ធាតុរក្សាអេក្រង់"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ធាតុរក្សាអេក្រង់"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"ប្រើធាតុរក្សាអេក្រង់"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ពេលសាកថ្ម ឬភ្ជាប់"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"ទាំងពីរ"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ពេលសាកថ្ម"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ពេលភ្ជាប់"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"កុំឲ្យសោះ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"បិទ"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ដើម្បីគ្រប់គ្រងអ្វីដែលកើតឡើង នៅពេលទូរស័ព្ទត្រូវបានដោត និង/ឬកំពុងដេក សូមបើកធាតុរក្សាអេក្រង់។"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"ពេលដែលត្រូវចាប់ផ្តើម"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"ធាតុរក្សាអេក្រង់បច្ចុប្បន្ន"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ការកំណត់"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ពន្លឺស្វ័យប្រវត្តិ"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"លើកដៃដើម្បីឲ្យភ្ញាក់"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"មុខងារអេក្រង់សម្ងំ"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"កំណត់កូដ PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"កំណត់កូដ PIN ការងារ"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"កំណត់លំនាំ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"ដើម្បីទទួលបានសុវត្ថិភាពបន្ថែម សូមកំណត់លំនាំ ដើម្បីដោះសោឧបករណ៍"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"កំណត់លំនាំការងារ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ដើម្បីប្រើប្រាស់ស្នាមម្រាមដៃ សូមកំណត់ពាក្យសម្ងាត់"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ដើម្បីប្រើស្នាមម្រាមដៃ សូមកំណត់លំនាំ"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"កម្មវិធីអាសន្ន"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"កំណត់ចំណូលចិត្តកម្មវិធីឡើងវិញ"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"កំណត់ចំណូលចិត្តកម្មវិធីឡើងវិញ?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ការធ្វើបែបនេះនឹងកំណត់ចំណូលចិត្តទាំងអស់ឡើងវិញសម្រាប់៖\n\n"<li>"កម្មវិធីដែលបានបិទ"</li>\n<li>"ការជូនដំណឹងកម្មវិធីដែលបានបិទ"</li>\n<li>"កម្មវិធីលំនាំដើមសម្រាប់សកម្មភាពផ្សេងៗ"</li>\n<li>"ការដាក់កំហិតទិន្នន័យផ្ទៃខាងក្រោយលើកម្មវិធីផ្សេងៗ"</li>\n<li>"ការដាក់កំហិតលើការអនុញ្ញាតទាំងឡាយ"</li>\n\n"អ្នកនឹងមិនបាត់បង់ទិន្នន័យកម្មវិធីណាមួយឡើយ។"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ការធ្វើបែបនេះនឹងកំណត់ចំណូលចិត្តទាំងអស់ឡើងវិញសម្រាប់៖\n\n"<li>"កម្មវិធីដែលបានបិទ"</li>\n<li>"ការជូនដំណឹងអំពីកម្មវិធីដែលបានបិទ"</li>\n<li>"កម្មវិធីលំនាំដើមសម្រាប់សកម្មភាព"</li>\n<li>"ការរឹតបន្តឹងទិន្នន័យផ្ទៃខាងក្រោយសម្រាប់កម្មវិធី"</li>\n<li>"ការរឹតបន្តឹងការអនុញ្ញាត"</li>\n<li>"ការកំណត់ការប្រើប្រាស់ថ្ម"</li>\n\n"អ្នកនឹងមិនបាត់បង់ទិន្នន័យកម្មវិធីទេ។"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"កំណត់កម្មវិធីឡើងវិញ"</string>
<string name="manage_space_text" msgid="9013414693633572277">"គ្រប់គ្រងទំហំ"</string>
<string name="filter" msgid="9039576690686251462">"តម្រង"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"កំណត់ការកំណត់ឡើងវិញ"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ការកំណត់អក្សរ និងទំហំនៃការបង្ហាញត្រូវបានកំណត់ឡើងវិញ"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"កំណត់អក្សរ និងទំហំបង្ហាញឡើងវិញឬ?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ចំណូលចិត្តអក្សរ និងទំហំបង្ហាញរបស់អ្នកនឹងកំណត់ឡើងវិញទៅការកំណត់ដើមរបស់ទូរសព្ទ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ចំណូលចិត្តអក្សរ និងទំហំបង្ហាញរបស់អ្នកនឹងកំណត់ឡើងវិញទៅការកំណត់ដើមរបស់ទូរសព្ទ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ចំណូលចិត្តអក្សរ និងទំហំបង្ហាញរបស់អ្នកនឹងកំណត់ឡើងវិញទៅការកំណត់ដើមរបស់ថេប្លេត"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"កំណត់ឡើងវិញ"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"មានគម្រោងចុងសប្ដាហ៍ដែរទេ?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ទៅលេងឆ្នេរសមុទ្រ។ ចង់ទៅដែរទេ?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"មិនមានការប្រើប្រាស់ទេតាំងពីសាកថ្មពេញលើកចុងក្រោយ"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"មិនមានការប្រើប្រាស់ទេក្នុងរយៈពេល 24 ម៉ោងចុងក្រោយ"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"អ្នកប្រើប្រាស់ផ្សេងទៀត"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"ការប៉ាន់ស្មានអំពីកម្រិតថ្មដែលនៅសល់គឺផ្អែកលើការប្រើប្រាស់ឧបករណ៍របស់អ្នក"</string>
<string name="estimated_time_left" msgid="948717045180211777">"រយៈពេលនៅសល់ប៉ាន់ស្មាន"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"ទៀតទើបសាកថ្មពេញ"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"hotword ពេញលេញ និងអន្តរកម្ម"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"ការនិយាយទៅជាអត្ថបទសាមញ្ញ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"សេវាកម្មបញ្ចូលសំឡេងនេះនឹងអាចអនុវត្តការតាមដានសំឡេងជានិច្ច និងពិនិត្យសំឡេងដែលបានបើកកម្មវិធីក្នុងនាមអ្នក។ វាបានមកពីកម្មវិធី <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ។ បើកការប្រើសេវាកម្មនេះ?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"ការកំណត់ការសម្គាល់នៅលើឧបករណ៍"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"ការសម្គាល់នៅលើឧបករណ៍"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"ការសម្គាល់ការនិយាយនៅលើឧបករណ៍"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"ម៉ាស៊ីនដែលចង់ប្រើ"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"ការកំណត់ម៉ាស៊ីន"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"ល្បឿននៃការនិយាយ និងកម្រិតសំឡេង"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"លុប"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"កម្មវិធី និងទិន្នន័យទាំងអស់ក្នុងវគ្គនេះនឹងត្រូវលុប។"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"ដកចេញ"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"ភ្ញៀវ (អ្នក)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"អ្នកប្រើប្រាស់"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"អ្នកប្រើប្រាស់ផ្សេងទៀត"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"លុបសកម្មភាពភ្ញៀវ"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"លុបទិន្នន័យ និងកម្មវិធីភ្ញៀវទាំងអស់ នៅពេលចាកចេញពីមុខងារភ្ញៀវ"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"លុបសកម្មភាពភ្ញៀវឬ?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"កម្មវិធី និងទិន្នន័យពីវគ្គភ្ញៀវនេះនឹងត្រូវបានលុបឥឡូវនេះ ហើយសកម្មភាពភ្ញៀវនាពេលអនាគតទាំងអស់នឹងត្រូវបានលុប នៅរាល់ពេលដែលអ្នកចាកចេញពីមុខងារភ្ញៀវ"</string>
<string name="user_enable_calling" msgid="264875360626905535">"បើកការហៅទូរសព្ទ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"បើកការហៅទូរសព្ទ និងសារ SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"លុបអ្នកប្រើប្រាស់"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"ការជូនដំណឹងទាំងអស់ពី \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"ការជូនដំណឹងទាំងអស់ពី<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"ការជូនដំណឹងដែលមានភាពបត់បែន"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">ការជូនដំណឹង ~<xliff:g id="NUMBER_1">%,d</xliff:g> ក្នុងមួយថ្ងៃ</item>
- <item quantity="one">ការជូនដំណឹង ~<xliff:g id="NUMBER_0">%d</xliff:g> ក្នុងមួយថ្ងៃ</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">ការជូនដំណឹងប្រហែលជា <xliff:g id="NUMBER_1">%,d</xliff:g> ក្នុងមួយថ្ងៃ</item>
+ <item quantity="one">ការជូនដំណឹងប្រហែលជា <xliff:g id="NUMBER_0">%d</xliff:g> ក្នុងមួយថ្ងៃ</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">ការជូនដំណឹង ~<xliff:g id="NUMBER_1">%,d</xliff:g> ក្នុងមួយសប្ដាហ៍</item>
- <item quantity="one">ការជូនដំណឹង ~<xliff:g id="NUMBER_0">%d</xliff:g> ក្នុងមួយសប្ដាហ៍</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">ការជូនដំណឹងប្រហែលជា <xliff:g id="NUMBER_1">%,d</xliff:g> ក្នុងមួយសប្ដាហ៍</item>
+ <item quantity="one">ការជូនដំណឹងប្រហែលជា <xliff:g id="NUMBER_0">%d</xliff:g> ក្នុងមួយសប្ដាហ៍</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"កុំឱ្យសោះ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ការជូនដំណឹងឧបករណ៍ និងកម្មវិធី"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"មិនធ្វើអ្វីសោះ"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"ញ័រ"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"បិទសំឡេង"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ដើម្បីបើក សូមធ្វើការផ្លាស់ប្ដូរ \"ចុចប៊ូតុងថាមពលឱ្យជាប់\" ចំពោះម៉ឺនុយថាមពលជាមុនសិន។"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ដើម្បីបើក សូមធ្វើការផ្លាស់ប្ដូរ \"ចុចប៊ូតុងថាមពលឱ្យជាប់\" ចំពោះម៉ឺនុយថាមពលជាមុនសិន។"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"ព័ត៌មានបណ្ដាញ"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"ឈ្មោះឧបករណ៍របស់អ្នកអាចឱ្យកម្មវិធីនៅលើទូរសព្ទរបស់អ្នកមើលឃើញ។ វាក៏អាចឱ្យអ្នកដទៃមើលឃើញផងដែរ នៅពេលអ្នកភ្ជាប់ជាមួយឧបករណ៍ប៊្លូធូស បណ្ដាញ Wi-Fi ឬរៀបចំ ហតស្ប៉ត Wi-Fi។"</string>
<string name="devices_title" msgid="649715719278562515">"ឧបករណ៍"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ផ្ទាំងគ្រប់គ្រងឧបករណ៍"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"កាត និងសំបុត្រ"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"បណ្ណឥណទាន និងសំបុត្រធ្វើដំណើរ"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"ចុចប៊ូតុងថាមពលឱ្យជាប់"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"ចុចឱ្យជាប់សម្រាប់ជំនួយការ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"ចុចឱ្យជាប់សម្រាប់ម៉ឺនុយថាមពល"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"បានបិទការចុចឱ្យជាប់"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"ចុចប៊ូតុងថាមពលឱ្យជាប់"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"ចុចប៊ូតុងថាមពលឱ្យជាប់ ដើម្បីចូលប្រើ"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"ម៉ឺនុយថាមពល"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ជំនួយការឌីជីថល"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ចូលប្រើជំនួយការឌីជីថល"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"ចូលប្រើម៉ឺនុយថាមពល"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ដើម្បីប្រើ សូមកំណត់ការចាក់សោអេក្រង់ជាមុនសិន"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"ចុចឱ្យជាប់ ដើម្បីប្រើជំនួយការ"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"បើកដំណើរការជំនួយការដោយចុចប៊ូតុងថាមពលឱ្យជាប់"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"ម៉ឺនុយថាមពល និងពេលមានអាសន្ន៖\nចុចប៊ូតុងថាមពល និងដំឡើងកម្រិតសំឡេងក្នុងពេលតែមួយ។"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"ទប់ស្កាត់ការរោទ៍៖\nអាចប្រើផ្លូវកាត់បាននៅក្នុងម៉ឺនុយកម្រិតសំឡេង។"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"ម៉ឺនុយថាមពល៖\nចុចប៊ូតុងថាមពល និងប៊ូតុងដំឡើងកម្រិតសំឡេងដំណាលគ្នា"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"ទប់ស្កាត់ការរោទ៍៖\nចុចប៊ូតុងកម្រិតសំឡេងសម្រាប់ផ្លូវកាត់"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"រយៈពេលចុចឱ្យជាប់"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"កែតម្រូវកម្រិតរំញោចដោយជ្រើសរើសរយៈពេលដែលត្រូវចុចប៊ូតុងថាមពលឱ្យជាប់"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"ខ្លី"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index d322e3f..43b7efd 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"ಅವರು Pixel Imprint ಬಳಸುವಾಗ, ಅವರ ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಮಾಡೆಲ್ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು ಚಿತ್ರಗಳನ್ನು ಬಳಸಲಾಗುತ್ತದೆ. ನಿಮ್ಮ ಮಗುವಿನ ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಅನ್ನು ರಚಿಸಲು ಬಳಸುವ ಚಿತ್ರಗಳನ್ನು ಎಂದಿಗೂ ಸಂಗ್ರಹಿಸಲಾಗುವುದಿಲ್ಲ, ಆದರೆ ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಮಾಡೆಲ್ ಅನ್ನು ಫೋನ್ನಲ್ಲಿ ಸುರಕ್ಷಿತವಾಗಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ಅದು ಫೋನ್ನಿಂದ ಹೊರಹೋಗುವುದಿಲ್ಲ. ಎಲ್ಲಾ ಪ್ರಕ್ರಿಯೆಗಳು ಫೋನ್ನಲ್ಲಿ ಸುರಕ್ಷಿತವಾಗಿ ಸಂಭವಿಸುತ್ತವೆ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"ನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಚಿತ್ರಗಳು ಮತ್ತು ಮಾಡೆಲ್ ಅನ್ನು ನೀವು ಅಳಿಸಬಹುದು ಅಥವಾ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಯಾವಾಗ ಬೇಕಾದರೂ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ಲಾಕ್ ಅನ್ನು ಆಫ್ ಮಾಡಬಹುದು. ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಚಿತ್ರಗಳು ಮತ್ತು ಮಾಡೆಲ್ಗಳನ್ನು ನೀವು ಅಳಿಸುವವರೆಗೆ, ಅವುಗಳನ್ನು ಫೋನ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಯಾವಾಗ ಬೇಕಾದರೂ ಅವರ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಚಿತ್ರಗಳು ಮತ್ತು ಮಾಡೆಲ್ ಅನ್ನು ನೀವು ಮತ್ತು ನಿಮ್ಮ ಮಗು ಅಳಿಸಬಹುದು ಅಥವಾ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ಲಾಕ್ ಅನ್ನು ಆಫ್ ಮಾಡಬಹುದು. ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಚಿತ್ರಗಳು ಮತ್ತು ಮಾಡೆಲ್ಗಳನ್ನು ಅವರು ಅಳಿಸುವವರೆಗೆ, ಫೋನ್ನಲ್ಲಿ ಸಂಗ್ರಹಿಸಲಾಗುತ್ತದೆ."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"ನಿಮಗೆ ಬೇಕಿಲ್ಲದಿರುವಾಗಲೂ ನಿಮ್ಮ ಫೋನ್ ಅನ್ಲಾಕ್ ಆಗಬಹುದು, ಉದಾಹರಣೆಗೆ ಯಾರೋ ಒಬ್ಬರು ಫೋನ್ ಅನ್ನು ನಿಮ್ಮ ಬೆರಳಿಗೆ ಸ್ಪರ್ಶಿಸಿದಾಗ ಇತ್ಯಾದಿ."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"ನಿಮಗೆ ಬೇಕಿಲ್ಲದಿರುವಾಗಲೂ ನಿಮ್ಮ ಫೋನ್ ಅನ್ಲಾಕ್ ಆಗಬಹುದು, ಉದಾಹರಣೆಗೆ ಯಾರೋ ಒಬ್ಬರು ಫೋನ್ ಅನ್ನು ನಿಮ್ಮ ಬೆರಳಿಗೆ ಸ್ಪರ್ಶಿಸಿದಾಗ ಇತ್ಯಾದಿ."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ನೀವು ಬಯಸದಿದ್ದರೂ ಸಹ, ನಿಮ್ಮ ಬೆರಳ ತುದಿಗೆ ಸ್ಕ್ರೀನ್ ಅನ್ನು ತರುವ ಮೂಲಕ ಯಾರಾದರೂ ಅದನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಬಹುದು."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ನೀವು ಬಯಸದಿದ್ದರೂ ಸಹ, ನಿಮ್ಮ ಬೆರಳ ತುದಿಗೆ ಸ್ಕ್ರೀನ್ ಅನ್ನು ತರುವ ಮೂಲಕ ಯಾರಾದರೂ ಅದನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಬಹುದು."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"ಅವರಿಗೆ ಬೇಕಿಲ್ಲದಿರುವಾಗಲೂ ನಿಮ್ಮ ಮಗುವಿನ ಫೋನ್ ಅನ್ಲಾಕ್ ಆಗಬಹುದು, ಉದಾಹರಣೆಗೆ ಯಾರೋ ಒಬ್ಬರು ಫೋನ್ ಅನ್ನು ಅವರ ಬೆರಳಿಗೆ ಸ್ಪರ್ಶಿಸಿದಾಗ ಇತ್ಯಾದಿ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"ಉತ್ತಮ ಫಲಿತಾಂಶಗಳಿಗಾಗಿ, Google ಗಾಗಿ ತಯಾರಿಸಲಾಗಿದೆ ಎಂದು ಪ್ರಮಾಣೀಕರಿಸಿದ ಸ್ಕ್ರೀನ್ ಗಾರ್ಡ್ ಅನ್ನು ಬಳಸಿ. ಇತರ ಸ್ಕ್ರೀನ್ ಗಾರ್ಡ್ಗಳನ್ನು ಬಳಸಿದರೆ ನಿಮ್ಮ ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"ಉತ್ತಮ ಫಲಿತಾಂಶಗಳಿಗಾಗಿ, Google ಗಾಗಿ ತಯಾರಿಸಲಾಗಿದೆ ಎಂದು ಪ್ರಮಾಣೀಕರಿಸಿದ ಸ್ಕ್ರೀನ್ ಗಾರ್ಡ್ ಅನ್ನು ಬಳಸಿ. ಇತರ ಸ್ಕ್ರೀನ್ ಗಾರ್ಡ್ಗಳನ್ನು ಬಳಸಿದರೆ ನಿಮ್ಮ ಮಗುವಿನ ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ಸಾಧನ ಮತ್ತು ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಸೆನ್ಸರ್ನ ಸ್ಥಳವನ್ನು ತಿಳಿಸುವ ಚಿತ್ರಣ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"ಹೆಸರು"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ಸರಿ"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"ಅಳಿಸಿ"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"ಸೆನ್ಸರ್ ಸ್ಪರ್ಶಿಸಿ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"ಸೆನ್ಸರ್ ಮೇಲೆ ನಿಮ್ಮ ಬೆರಳಿರಿಸಿ ಮತ್ತು ನಿಮಗೆ ವೈಬ್ರೇಷನ್ ಅನುಭವ ಆದ ನಂತರ ತೆಗೆಯಿರಿ"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"ಮುಗಿದಿದೆ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"ಓಹ್, ಅದು ಸೆನ್ಸರ್ ಅಲ್ಲ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"ನಿಮ್ಮ ಫೋನ್ ಹಿಂಬದಿಯಲ್ಲಿರುವ ಸೆನ್ಸಾರ್ ಸ್ಪರ್ಶಿಸಿ. ನಿಮ್ಮ ತೋರು ಬೆರಳನ್ನು ಬಳಸಿ."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"ನೋಂದಣಿ ಪೂರ್ಣಗೊಂಡಿಲ್ಲ"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ನೋಂದಣಿ ಸಮಯದ ಮಿತಿಯು ಮೀರಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"ಫಿಂಗರ್ ಪ್ರಿಂಟ್ ಸೆಟಪ್ ಮಾಡುವ ಅವಧಿ ಮುಗಿದಿದೆ"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ಈಗ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ನಂತರ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಸೆಟ್ ಮಾಡಿ"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ನೋಂದಣಿ ಕೆಲಸ ಮಾಡುತ್ತಿಲ್ಲ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ ಅಥವಾ ಬೇರೊಂದು ಬೆರಳನ್ನು ಬಳಸಿ."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"ಇನ್ನೊಂದನ್ನು ಸೇರಿಸಿ"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"ಮುಂದೆ"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"ನಿಮ್ಮ ಫೋನ್ ಕಸ್ಟಮೈಸ್ ಮಾಡಿ"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"ವಿವಿಧ ಶೈಲಿಗಳು, ವಾಲ್ಪೇಪರ್ಗಳು, ಇತ್ಯಾದಿಗಳನ್ನು ಬಳಸಿ ನೋಡಿ"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"ಸ್ಕ್ರೀನ್ ಸೇವರ್"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ಸ್ಕ್ರೀನ್ಸೇವರ್"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"ಸ್ಕ್ರೀನ್ ಸೇವರ್ ಅನ್ನು ಬಳಸಿ"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ಚಾರ್ಜ್ ಮಾಡುವಾಗ ಅಥವಾ ಡಾಕ್ ಮಾಡುವಾಗ"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"ಎರಡೂ ಸಂದರ್ಭಗಳಲ್ಲಿ"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ಚಾರ್ಜ್ ಆಗುತ್ತಿರುವಾಗ"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ಡಾಕ್ ಆಗಿರುವಾಗ"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ಎಂದಿಗೂ ಇಲ್ಲ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ಆಫ್"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ಫೋನ್ ಡಾಕ್ ಆದಾಗ ಮತ್ತು/ಅಥವಾ ನಿದ್ದೆ ಮೋಡ್ನಲ್ಲಿರುವಾಗ ಏನಾಗುತ್ತದೆ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸಲು ಸ್ಕ್ರೀನ್ ಸೇವರ್ ಆನ್ ಮಾಡಿ."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"ಯಾವಾಗ ಪ್ರಾರಂಭಿಸಬೇಕು"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"ಪ್ರಸ್ತುತ ಸ್ಕ್ರೀನ್ ಸೇವರ್"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ಸ್ವಯಂಚಾಲಿತ ಪ್ರಖರತೆ"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"ಎಬ್ಬಿಸಲು ಎತ್ತಿರಿ"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ಆಂಬಿಯೆಂಟ್ ಡಿಸ್ಪ್ಲೇ"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"ಪಿನ್ ಸೆಟ್ ಮಾಡಿ"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"ಕೆಲಸದ ಪಿನ್ ಹೊಂದಿಸಿ"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"ಪ್ಯಾಟರ್ನ್ ಸೆಟ್ ಮಾಡಿ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"ಹೆಚ್ಚಿನ ಭದ್ರತೆಗಾಗಿ, ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡುವುದಕ್ಕಾಗಿ ಪ್ಯಾಟರ್ನ್ ಅನ್ನು ಸೆಟ್ ಮಾಡಿ"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"ಕೆಲಸದ ಪ್ಯಾಟರ್ನ್ ಹೊಂದಿಸಿ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಬಳಸಲು, ಪಾಸ್ವರ್ಡ್ ಹೊಂದಿಸಿ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ಪಿಂಗರ್ಪ್ರಿಂಟ್ ಬಳಸಲು ಪ್ಯಾಟರ್ನ್ ಸೆಟ್ ಮಾಡಿ"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"ತುರ್ತು ಅಪ್ಲಿಕೇಶನ್"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"ಆ್ಯಪ್ ಆದ್ಯತೆಗಳನ್ನು ಮರುಹೊಂದಿಸಿ"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"ಆ್ಯಪ್ ಆದ್ಯತೆಗಳನ್ನು ಮರುಹೊಂದಿಸುವುದೇ?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ಇದು ಕೆಳಗಿನ ಎಲ್ಲಾ ಆದ್ಯತೆಗಳಿಗಾಗಿ ಮರುಹೊಂದಿಸುತ್ತದೆ:\n\n"<li>"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆ್ಯಪ್ಗಳು"</li>\n<li>"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆ್ಯಪ್ ಅಧಿಸೂಚನೆಗಳು"</li>\n<li>"ಕ್ರಿಯೆಗಳಿಗಾಗಿ ಡೀಫಾಲ್ಟ್ ಆ್ಯಪ್ಗಳು"</li>\n<li>"ಆ್ಯಪ್ ಹಿನ್ನೆಲೆ ಡೇಟಾ ನಿರ್ಬಂಧಗಳು"</li>\n<li>"ಯಾವುದೇ ಅನುಮತಿ ನಿರ್ಬಂಧಗಳು"</li>\n\n"ಯಾವುದೇ ಆ್ಯಪ್ ಡೇಟಾವನ್ನು ನೀವು ಕಳೆದುಕೊಳ್ಳುವುದಿಲ್ಲ."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ಇದು ಕೆಳಗಿನವುಗಳ ಎಲ್ಲಾ ಆದ್ಯತೆಗಳನ್ನು ರೀಸೆಟ್ ಮಾಡುತ್ತದೆ:\n\n"<li>"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆ್ಯಪ್ಗಳು"</li>\n<li>"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆ್ಯಪ್ ಅಧಿಸೂಚನೆಗಳು"</li>\n<li>"ಕ್ರಿಯೆಗಳಿಗಾಗಿ ಡೀಫಾಲ್ಟ್ ಆ್ಯಪ್ಗಳು"</li>\n<li>"ಆ್ಯಪ್ನ ಹಿನ್ನೆಲೆ ಡೇಟಾ ನಿರ್ಬಂಧಗಳು"</li>\n<li>"ಯಾವುದೇ ಅನುಮತಿ ನಿರ್ಬಂಧಗಳು"</li>\n<li>"ಬ್ಯಾಟರಿ ಬಳಕೆ ಸೆಟ್ಟಿಂಗ್ಗಳು"</li>\n\n"ನೀವು ಯಾವುದೇ ಆ್ಯಪ್ ಡೇಟಾವನ್ನು ಕಳೆದುಕೊಳ್ಳುವುದಿಲ್ಲ."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"ಆ್ಯಪ್ಗಳನ್ನು ಮರುಹೊಂದಿಸಿ"</string>
<string name="manage_space_text" msgid="9013414693633572277">"ಸ್ಥಳ ನಿರ್ವಹಿಸಿ"</string>
<string name="filter" msgid="9039576690686251462">"ಫಿಲ್ಟರ್"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ರಿಸೆಟ್ ಮಾಡಿ"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ಡಿಸ್ಪ್ಲೇ ಗಾತ್ರ ಮತ್ತು ಪಠ್ಯದ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ರೀಸೆಟ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ಡಿಸ್ಪ್ಲೇ ಗಾತ್ರ ಮತ್ತು ಪಠ್ಯವನ್ನು ರೀಸೆಟ್ ಮಾಡಬೇಕೆ?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ನಿಮ್ಮ ಡಿಸ್ಪ್ಲೇ ಗಾತ್ರ ಮತ್ತು ಪಠ್ಯದ ಆದ್ಯತೆಗಳು ಫೋನ್ನ ಮೂಲ ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ರೀಸೆಟ್ ಆಗುತ್ತದೆ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ನಿಮ್ಮ ಡಿಸ್ಪ್ಲೇ ಗಾತ್ರ ಮತ್ತು ಪಠ್ಯದ ಆದ್ಯತೆಗಳು ಫೋನ್ನ ಮೂಲ ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ರೀಸೆಟ್ ಆಗುತ್ತದೆ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ನಿಮ್ಮ ಡಿಸ್ಪ್ಲೇ ಗಾತ್ರ ಮತ್ತು ಪಠ್ಯದ ಆದ್ಯತೆಗಳು ಟ್ಯಾಬ್ಲೆಟ್ನ ಮೂಲ ಸೆಟ್ಟಿಂಗ್ಗಳಿಗೆ ರೀಸೆಟ್ ಆಗುತ್ತವೆ"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"ರೀಸೆಟ್ ಮಾಡಿ"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"ವಾರಾಂತ್ಯಕ್ಕೆ ಯಾವುದಾದರೂ ಯೋಜನೆ ಇದೆಯೇ?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ಬೀಚ್ಗೆ ಹೋಗಬೇಕೆಂದಿದ್ದೇನೆ. ನೀವು ಬರುವಿರಾ?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"ಪೂರ್ಣ ಚಾರ್ಜ್ ಮಾಡಿದಾಗಿನಿಂದ ಯಾವುದೇ ಬಳಕೆಯಾಗಿಲ್ಲ"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"ಕಳೆದ 24 ಗಂಟೆಗಳಲ್ಲಿ ಯಾವುದೇ ಬಳಕೆಯಾಗಿಲ್ಲ"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"ಇತರ ಬಳಕೆದಾರರು"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"ನಿಮ್ಮ ಸಾಧನವನ್ನು ಎಷ್ಟು ಸಮಯದವರೆಗೆ ಬಳಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ಆಧರಿಸಿ ಉಳಿದಿರುವ ಬ್ಯಾಟರಿಯನ್ನು ಅಂದಾಜು ಮಾಡಲಾಗುತ್ತದೆ"</string>
<string name="estimated_time_left" msgid="948717045180211777">"ಅಂದಾಜಿಸಿದ ಸಮಯ ಮುಗಿದಿದೆ"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"ಸಂಪೂರ್ಣ ಚಾರ್ಜ್ ಆಗಲು"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"ಪೂರ್ಣ ಹಾಟ್ವರ್ಡ್ ಮತ್ತು ಸಂವಹನ"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"ಸರಳ ಧ್ವನಿಯಿಂದ ಪಠ್ಯಕ್ಕೆ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"ಈ ಧ್ವನಿ ಇನ್ಪುಟ್ ಸೇವೆ ನಿಮ್ಮ ಪರವಾಗಿ ಯಾವಾಗಲೂ ಆನ್ ಇರುವ ಧ್ವನಿ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ಮತ್ತು ಧ್ವನಿ ಸಕ್ರಿಯಗೊಳಿಸಿದ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ ನಿಯಂತ್ರಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತದೆ. ಅದು <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ಅಪ್ಲಿಕೇಶನ್ನಿಂದ ಬರುತ್ತದೆ. ಈ ಸೇವೆಯ ಬಳಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದೇ?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"ಸಾಧನದಲ್ಲಿರುವ ಗುರುತಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"ಸಾಧನದಲ್ಲಿರುವ ಗುರುತಿಸುವಿಕೆ"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"ಸಾಧನದಲ್ಲಿರುವ ಧ್ವನಿ ಗುರುತಿಸುವಿಕೆ"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"ಆದ್ಯತೆಯ ಇಂಜಿನ್"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"ಇಂಜಿನ್ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"ಧ್ವನಿ ದರ ಮತ್ತು ಪಿಚ್"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"ಅಳಿಸಿ"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"ಈ ಸೆಷನ್ನಲ್ಲಿನ ಎಲ್ಲ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"ತೆಗೆದುಹಾಕಿ"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"ಅತಿಥಿ (ನೀವು)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ಬಳಕೆದಾರರು"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"ಇತರ ಬಳಕೆದಾರರು"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"ಅಥಿತಿ ಚಟುವಟಿಕೆಯನ್ನು ಅಳಿಸಿ"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"ಅತಿಥಿ ಮೋಡ್ನಿಂದ ನಿರ್ಗಮಿಸುವಾಗ ಎಲ್ಲಾ ಅತಿಥಿ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಿ"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ಅಥಿತಿ ಚಟುವಟಿಕೆಯನ್ನು ಅಳಿಸಬೇಕೆ?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ಈ ಅತಿಥಿ ಸೆಶನ್ನಿಂದ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಈಗ ಅಳಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ನೀವು ಅತಿಥಿ ಮೋಡ್ನಿಂದ ನಿರ್ಗಮಿಸಿದ ಪ್ರತಿ ಬಾರಿ ಭವಿಷ್ಯದ ಎಲ್ಲಾ ಅತಿಥಿ ಚಟುವಟಿಕೆಯನ್ನು ಅಳಿಸಲಾಗುತ್ತದೆ"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ಫೋನ್ ಕರೆಗಳನ್ನು ಆನ್ ಮಾಡಿ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ಫೋನ್ ಕರೆಗಳು ಮತ್ತು ಎಸ್ಎಂಎಸ್ ಆನ್ ಮಾಡಿ"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ಬಳಕೆದಾರರನ್ನು ಅಳಿಸಿ"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"ಎಲ್ಲಾ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ಅಧಿಸೂಚನೆಗಳು"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"ಎಲ್ಲಾ <xliff:g id="APP_NAME">%1$s</xliff:g> ಅಧಿಸೂಚನೆಗಳು"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"ಅಡಾಪ್ಟಿವ್ ಅಧಿಸೂಚನೆಗಳು"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">ಪ್ರತಿ ದಿನಕ್ಕೆ ~<xliff:g id="NUMBER_1">%,d</xliff:g> ಅಧಿಸೂಚನೆಗಳು</item>
- <item quantity="other">ಪ್ರತಿ ದಿನಕ್ಕೆ ~<xliff:g id="NUMBER_1">%,d</xliff:g> ಅಧಿಸೂಚನೆಗಳು</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">ಪ್ರತಿ ದಿನಕ್ಕೆ <xliff:g id="NUMBER_1">%,d</xliff:g> ನೋಟಿಫಿಕೇಶನ್ಗಳ ಕುರಿತು</item>
+ <item quantity="other">ಪ್ರತಿ ದಿನಕ್ಕೆ <xliff:g id="NUMBER_1">%,d</xliff:g> ನೋಟಿಫಿಕೇಶನ್ಗಳ ಕುರಿತು</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">ಪ್ರತಿ ವಾರಕ್ಕೆ ~<xliff:g id="NUMBER_1">%,d</xliff:g> ಅಧಿಸೂಚನೆಗಳು</item>
- <item quantity="other">ಪ್ರತಿ ವಾರಕ್ಕೆ ~<xliff:g id="NUMBER_1">%,d</xliff:g> ಅಧಿಸೂಚನೆಗಳು</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one"><xliff:g id="NUMBER_1">%,d</xliff:g> ಅಧಿಸೂಚನೆಗಳ ಕುರಿತು</item>
+ <item quantity="other"><xliff:g id="NUMBER_1">%,d</xliff:g> ಅಧಿಸೂಚನೆಗಳ ಕುರಿತು</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"ಎಂದೂ ಇಲ್ಲ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ಸಾಧನದ & ಆ್ಯಪ್ ಅಧಿಸೂಚನೆಗಳು"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"ಏನೂ ಮಾಡಬೇಡಿ"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"ವೈಬ್ರೇಟ್"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"ಮ್ಯೂಟ್"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ಸಕ್ರಿಯಗೊಳಿಸಲು, ಮೊದಲು ಪವರ್ ಮೆನುಗೆ \"ಪವರ್ ಬಟನ್ ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ\" ಅನ್ನು ಬದಲಾಯಿಸಿ."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ಸಕ್ರಿಯಗೊಳಿಸಲು, ಮೊದಲು ಪವರ್ ಮೆನುಗೆ \"ಪವರ್ ಬಟನ್ ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ\" ಅನ್ನು ಬದಲಾಯಿಸಿ."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"ನೆಟ್ವರ್ಕ್ ವಿವರಗಳು"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"ನಿಮ್ಮ ಫೋನ್ನಲ್ಲಿರುವ ಆ್ಯಪ್ಗಳಿಗೆ ನಿಮ್ಮ ಸಾಧನದ ಹೆಸರು ಕಾಣಿಸುತ್ತದೆ. ನೀವು ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳಿಗೆ ಕನೆಕ್ಟ್ ಮಾಡಿದಾಗ, ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಿದಾಗ ಅಥವಾ ವೈ-ಫೈ ಹಾಟ್ಸ್ಪಾಟ್ ಅನ್ನು ಸೆಟಪ್ ಮಾಡಿದಾಗ ಇತರ ಜನರು ಸಹ ಅದನ್ನು ನೋಡಬಹುದು."</string>
<string name="devices_title" msgid="649715719278562515">"ಸಾಧನಗಳು"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ಸಾಧನ ನಿಯಂತ್ರಣಗಳು"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"ಕಾರ್ಡ್ಗಳು ಮತ್ತು ಪಾಸ್ಗಳು"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"ಕಾರ್ಡ್ಗಳು ಮತ್ತು ಪಾಸ್ಗಳು"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"ಪವರ್ ಬಟನ್ ಅನ್ನು ಒತ್ತಿಹಿಡಿಯಿರಿ"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant ಗಾಗಿ ಒತ್ತಿಹಿಡಿಯಿರಿ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"ಪವರ್ ಮೆನುವಿಗಾಗಿ ಒತ್ತಿಹಿಡಿಯಿರಿ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"ಒತ್ತಿಹಿಡಿಯುವುದು ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"ಪವರ್ ಬಟನ್ ಅನ್ನು ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"ಪ್ರವೇಶಿಸಲು ಪವರ್ ಬಟನ್ ಅನ್ನು ಒತ್ತಿ ಹಿಡಿದುಕೊಳ್ಳಿ"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"ಪವರ್ ಮೆನು"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ಡಿಜಿಟಲ್ ಅಸಿಸ್ಟೆಂಟ್"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ಡಿಜಿಟಲ್ ಅಸಿಸ್ಟೆಂಟ್ ಅನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"ಪವರ್ ಮೆನು ಅನ್ನು ಪ್ರವೇಶಿಸಿ"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ಬಳಸಲು, ಮೊದಲು ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಸೆಟ್ ಮಾಡಿ"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant ಗಾಗಿ ಪವರ್ ಬಟನ್ ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳಿ"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"ಪವರ್ ಬಟನ್ ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವ ಮೂಲಕ Assistant ಅನ್ನು ಬಳಸಿ"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"ಪವರ್ ಮತ್ತು ತುರ್ತು ಮೆನು:\nಪವರ್ ಮತ್ತು ವಾಲ್ಯೂಮ್ ಬಟನ್ ಅನ್ನು ಒಟ್ಟಿಗೆ ಒತ್ತಿರಿ."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"ರಿಂಗ್ ಆಗುವುದನ್ನು ತಡೆಯಿರಿ:\nವಾಲ್ಯೂಮ್ ಮೆನುವಿನಲ್ಲಿ ಶಾರ್ಟ್ಕಟ್ ಲಭ್ಯವಿದೆ."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"ಪವರ್ ಮೆನು:\nಪವರ್ ಬಟನ್ ಹಾಗೂ ವಾಲ್ಯೂಮ್ ಹೆಚ್ಚು ಮಾಡುವ ಬಟನ್ ಅನ್ನು ಒಂದೇ ಸಮಯದಲ್ಲಿ ಒತ್ತಿರಿ"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"ರಿಂಗ್ ಆಗುವುದನ್ನು ತಡೆಯಿರಿ:\nಶಾರ್ಟ್ಕಟ್ಗಾಗಿ ವಾಲ್ಯೂಮ್ ಬಟನ್ ಅನ್ನು ಒತ್ತಿರಿ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"ಒತ್ತಿ ಹಿಡಿಯುವ ಅವಧಿ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"ಪವರ್ ಬಟನ್ ಅನ್ನು ಎಷ್ಟು ಹೊತ್ತು ಒತ್ತಿ ಹಿಡಿಯಬೇಕು ಎಂಬುದನ್ನು ಆಯ್ಕೆ ಮಾಡುವ ಮೂಲಕ ಸೂಕ್ಷ್ಮತೆಯನ್ನು ಸರಿಹೊಂದಿಸಿ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"ಚಿಕ್ಕದು"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 6bbdf3b..100bcc5 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"자녀가 Pixel Imprint를 사용하면 자녀의 지문 모델을 업데이트하는 데 이미지가 활용됩니다. 자녀의 지문 모델을 만드는 데 사용된 이미지는 저장되지 않으나 지문 모델은 휴대전화에 안전하게 저장되며 기기 외부로 전송되지 않습니다. 모든 처리는 휴대전화 내에서 안전하게 이뤄집니다."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"언제든지 설정에서 지문 이미지와 모델을 삭제하거나 지문 잠금 해제를 사용 중지할 수 있습니다. 지문 이미지와 모델은 삭제하기 전까지 휴대전화에 저장됩니다."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"부모와 자녀가 언제든지 설정에서 자녀의 지문 이미지와 모델을 삭제하거나 지문 잠금 해제를 사용 중지할 수 있습니다. 지문 이미지와 모델은 삭제하기 전까지 휴대전화에 저장됩니다."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"다른 사람이 내 손가락에 휴대전화를 가져다 대는 등 내가 의도하지 않은 상황에서 휴대전화 잠금을 해제할 수 있습니다."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"다른 사람이 내 손가락에 휴대전화를 가져다 대는 등 내가 의도하지 않은 상황에서 휴대전화 잠금을 해제할 수 있습니다."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"다른 사람이 내 손가락에 태블릿을 가져다 대는 등 내가 의도하지 않은 상황에서 태블릿 잠금이 해제될 수 있습니다."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"다른 사람이 내 손가락에 기기를 가져다 대는 등 내가 의도하지 않은 상황에서 기기 잠금이 해제될 수도 있습니다."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"다른 사람이 자녀의 손가락에 휴대전화를 가져다 대는 등 자녀가 의도하지 않은 상황에서 자녀의 휴대전화 잠금을 해제할 수 있습니다."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"최상의 결과를 얻으려면 Made For Google 인증 화면 보호재를 사용하세요. 다른 화면 보호재를 사용할 경우 지문이 인식되지 않을 수 있습니다."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"최상의 결과를 얻으려면 Made For Google 인증 화면 보호재를 사용하세요. 다른 화면 보호재를 사용할 경우 자녀의 지문이 인식되지 않을 수 있습니다."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"기기와 지문 센서 위치가 포함된 그림"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"이름"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"확인"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"다시 시도"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"삭제"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"센서 터치"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"센서에 손가락을 올리고 진동이 느껴지면 떼세요."</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"완료"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"죄송합니다. 센서가 아닙니다."</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"휴대전화 뒷면에 있는 센서를 터치하세요. 검지를 사용하세요."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"등록이 완료되지 않았습니다"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"지문 등록 시간이 초과되었습니다. 다시 시도하세요."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"지문 설정 시간 초과됨"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"지금 다시 시도하거나 나중에 설정에서 지문을 등록하세요."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"지문 등록이 되지 않았습니다. 다시 시도하거나 다른 손가락을 사용하세요."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"다른 지문 추가"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"다음"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"휴대전화 맞춤설정"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"다른 스타일, 배경화면 등 사용해 보기"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"화면 보호기"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"화면 보호기"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"화면 보호기 사용"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"충전 또는 도킹하는 동안"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"도킹이나 충전 중일 때"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"충전하는 동안"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"도킹하는 동안"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"사용 안함"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"사용 안함"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"휴대전화가 도킹 또는 절전 모드일 때 작동 방식을 조정하려면 화면 보호기를 사용 설정합니다."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"표시 시간"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"현재 화면 보호기"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"설정"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"자동 밝기"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"기기를 들어 대기 모드 해제"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"절전 모드 자동 해제"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN 설정"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"직장 PIN 설정"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"패턴 설정"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"보안 강화를 위해 기기 잠금 해제에 사용할 패턴 설정"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"직장 패턴 설정"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"비밀번호 설정 후 지문 사용"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"지문 사용을 위한 패턴 설정"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"긴급 앱"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"앱 환경설정 초기화"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"앱 환경설정을 초기화하시겠습니까?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"이렇게 하면 다음 환경설정이 모두 재설정됩니다.\n\n"<li>"사용 중지된 앱"</li>\n<li>"사용 중지된 앱 알림"</li>\n<li>"작업에 사용되는 기본 애플리케이션"</li>\n<li>"앱의 백그라운드 데이터 제한"</li>\n<li>"모든 권한 제한"</li>\n\n"앱 데이터는 손실되지 않습니다."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"다음 환경설정이 모두 초기화됩니다.\n\n"<li>"사용 중지된 앱"</li>\n<li>"사용 중지된 앱 알림"</li>\n<li>"작업용 기본 애플리케이션"</li>\n<li>"앱의 백그라운드 데이터 제한"</li>\n<li>"그 밖의 권한 제한"</li>\n<li>"배터리 사용량 설정"</li>\n\n"앱 데이터는 손실되지 않습니다."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"앱 초기화"</string>
<string name="manage_space_text" msgid="9013414693633572277">"공간 관리"</string>
<string name="filter" msgid="9039576690686251462">"필터"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"설정 초기화"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"디스플레이 크기 및 텍스트 설정이 초기화되었습니다."</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"디스플레이 크기와 텍스트를 초기화하시겠습니까?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"화면 크기와 텍스트 설정이 휴대전화의 원래 설정으로 초기화됩니다."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"화면 크기와 텍스트 설정이 휴대전화의 원래 설정으로 초기화됩니다."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"화면 크기와 텍스트 설정이 태블릿의 원래 설정으로 초기화됩니다."</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"초기화"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"주말에 계획 있나요?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"바다에 갈 거예요. 함께 가실래요?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"마지막으로 완전히 충전한 이후 사용 안 함"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"지난 24시간 동안 사용 안 함"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"다른 사용자"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"예상 잔여 배터리 소모 시간은 기기 사용량을 기반으로 표시됩니다."</string>
<string name="estimated_time_left" msgid="948717045180211777">"남은 예상 시간"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"충전 완료까지 남은 시간"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"전체 핫워드 및 상호작용"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"간단한 STT(음성 텍스트 변환)"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"이 음성 입력 서비스는 항상 음성을 모니터링하고 사용자를 대신하여 음성 지원 애플리케이션을 제어할 수 있습니다. 이 서비스는 <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> 애플리케이션에서 제공합니다. 서비스를 사용하도록 설정하시겠습니까?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"온디바이스 인식 설정"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"온디바이스 인식"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"온디바이스 음성 인식"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"기본 엔진"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"엔진 설정"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"말하기 속도 및 음 높이"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"삭제"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"이 세션에 있는 모든 앱과 데이터가 삭제됩니다."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"삭제"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"게스트(나)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"사용자"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"다른 사용자"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"게스트 활동 삭제"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"게스트 모드 종료 시 모든 게스트 앱 및 데이터 삭제"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"게스트 활동을 삭제하시겠습니까?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"현재 게스트 세션의 앱과 데이터가 지금 삭제되고 이후 모든 게스트 활동은 게스트 모드를 종료할 때마다 삭제됩니다."</string>
<string name="user_enable_calling" msgid="264875360626905535">"통화 기능 사용"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"통화 및 SMS 기능 사용"</string>
<string name="user_remove_user" msgid="8468203789739693845">"사용자 삭제"</string>
@@ -4009,13 +4023,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"모든 ‘<xliff:g id="APP_NAME">%1$s</xliff:g>’ 알림"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"모든 <xliff:g id="APP_NAME">%1$s</xliff:g> 알림"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"적응형 알림"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">하루에 약 <xliff:g id="NUMBER_1">%,d</xliff:g>개</item>
- <item quantity="one">하루에 약 <xliff:g id="NUMBER_0">%d</xliff:g>개</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">알림 약 <xliff:g id="NUMBER_1">%,d</xliff:g>개/일</item>
+ <item quantity="one">알림 약 <xliff:g id="NUMBER_0">%d</xliff:g>개/일</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">1주일에 약 <xliff:g id="NUMBER_1">%,d</xliff:g>개</item>
- <item quantity="one">1주일에 약 <xliff:g id="NUMBER_0">%d</xliff:g>개</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">알림 약 <xliff:g id="NUMBER_1">%,d</xliff:g>개/주</item>
+ <item quantity="one">알림 약 <xliff:g id="NUMBER_0">%d</xliff:g>개/주</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"전송하지 않음"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"기기 및 앱 알림"</string>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"동작 없음"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"진동"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"음소거"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"사용 설정하려면 먼저 \'전원 버튼 길게 누르기\'를 전원 메뉴로 변경하세요."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"사용 설정하려면 먼저 \'전원 버튼 길게 누르기\'를 전원 메뉴로 변경하세요."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"네트워크 세부정보"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"기기 이름이 휴대전화에 있는 앱에 표시됩니다. 기기 이름은 블루투스 기기 및 Wi-Fi 네트워크에 연결하거나 Wi-Fi 핫스팟을 설정할 때 다른 사용자에게도 표시될 수 있습니다."</string>
<string name="devices_title" msgid="649715719278562515">"기기"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"기기 제어"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"카드 및 패스"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"카드 및 패스"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"전원 버튼을 길게 누르기"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"길게 눌러서 어시스턴트 열기"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"전원 메뉴 길게 누르기"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"길게 누르기 사용 중지됨"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"전원 버튼을 길게 누름"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"전원 버튼을 길게 눌러 액세스"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"전원 메뉴"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"디지털 어시스턴트"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"디지털 어시스턴트 액세스"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"전원 메뉴 액세스"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"이 기능을 사용하려면 화면 잠금을 설정하세요."</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"길게 눌러 어시스턴트 실행"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"전원 버튼을 길게 눌러 어시스턴트 실행"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"전원 및 비상 메뉴:\n전원 버튼과 볼륨 업 버튼을 동시에 누릅니다."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"벨 울림 방지:\n볼륨 메뉴에서 바로가기를 사용할 수 있습니다."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"전원 메뉴:\n전원 버튼과 볼륨 업 버튼을 동시에 누름"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"벨 울림 방지:\n볼륨 버튼을 눌러서 단축키 사용"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"길게 누르기 시간"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"전원 버튼을 얼마나 길게 누를지 선택하여 민감도 조정"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"짧게"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 767c331..0cfeb00c 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Үлгүнү жаңыртуу үчүн Pixel Imprint функциясында алынган сүрөттөр колдонулат. Сүрөттөр менен үлгү түзмөктө гана иштелет. Сүрөттөр сакталбайт, ал эми манжа изинин үлгүсү түзмөгүңүздө гана сакталып, эч жакка жөнөтүлбөйт."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Манжаңыздын изинин сүрөттөрүн жана үлгүсүн же \"Манжа изи менен ачуу\" функциясын Жөндөөлөрдөн каалаган убакта өчүрсөңүз болот. Манжа изинин сүрөттөрү жана үлгүлөрү өчүрүлмөйүнчө телефонуңузда сакталат."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Манжа изинин сүрөттөрүн жана үлгүсүн, же болбосо Манжа изи менен ачуу функциясын каалаган убакта Жөндөөлөргө өтүп, өчүрсөңүздөр болот. Манжа изинин сүрөттөрү жана үлгүлөрү өчүрүлмөйүнчө телефондо сакталат."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Телефондун кулпусу капыстан ачылып калышы мүмкүн, мисалы, кимдир бирөө аны манжаңызга тийгизип койсо."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Телефондун кулпусу капыстан ачылып калышы мүмкүн, мисалы, кимдир бирөө аны манжаңызга тийгизип койсо."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Планшеттин кулпусу капыстан ачылып калышы мүмкүн, мисалы, кимдир бирөө аны манжаңызга тийгизип койсо."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Түзмөктүн кулпусу капыстан ачылып калышы мүмкүн, мисалы, кимдир бирөө аны манжаңызга тийгизип койсо."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Балаңыздын телефонунун кулпусу капыстан ачылып калышы мүмкүн, мисалы, кимдир бирөө аны манжасына тийгизип койсо."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"\"Google үчүн жасалган\" деген коргоочу айнекти же пленканы колдонууну сунуштайбыз. Башка коргоочу айнектер же пленкалар манжаңыздын изин тааныбай коюшу мүмкүн."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"\"Google үчүн жасалган\" деген коргоочу айнекти же пленканы колдонууну сунуштайбыз. Башка коргоочу айнектер же пленкалар балаңыздын манжа изин тааныбай коюшу мүмкүн."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Бул сүрөт сенсор кайда жайгашканын көрсөтөт"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Аталышы"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Жарайт"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Кайталап көрүңүз"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Өчүрүү"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Сенсорго тийиңиз"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Манжаңызды сенсорго коюп, дирилдегенин сезгенден кийин көтөрүңүз"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Даяр"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ой, ал сенсор эмес"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Телефонуңуздун аркасындагы сенсорго сөөмөйүңүз менен тийиңиз."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Манжа изи кошулган жок"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Күтүү убакыты узакка созулуп кетти. Кайталап көрүңүз."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Манжа изин тууралоо убакыты бүтүп калды"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Азыр аракет кылып көрүңүз же кийинчерээк тууралап алыңыз"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Манжа изи кошулбай калды. Кайра кайталап көрүңүз же башка манжаңыздын изин сактаңыз."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Дагы бирди кошуу"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Кийинки"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Телефонуңузду ыңгайлаштырыңыз"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Ар кандай стилдерди, тушкагаздарды жана башкаларды көрүңүз"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Көшөгө"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"көшөгө"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Көшөгөнү колдонуу"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Кубатталып жатканда же док-станцияга туташканда"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Эки учурда тең"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Кубатталып жатканда"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Док-станцияда"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Эч качан"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Өчүк"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Телефон докко орнотулганда жана/же уйку режиминде турганда эмне болоорун көзөмөлдөө үчүн көшөгөнү күйгүзүңүз."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Качан иштеп баштайт"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Учурдагы көшөгө"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Жөндөөлөр"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Автоматтык жарыктык"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Ойготуу үчүн көтөрүү"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Экран автоматтык түрдө күйөт"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN кодду коюңуз"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Жумуш профилинин PIN кодун коюңуз"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Графикалык ачкычты коюңуз"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Коопсуздукту жакшыртуу максатында түзмөктүн кулпусун ачуу үчүн графикалык ачкыч коюңуз"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Жумуш профилинин графикалык ачкычын коюңуз"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Сырсөздү коюңуз"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Графикалык ачкычты коюңуз"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Өзгөчө кырдаал колдонмосу"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Колдонмонун жөндөөлөрүн кайра коюу"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Колдонмону кайра баштан жөндөйсүзбү?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Ушуну менен, төмөнкүлөр кайра жөндөлөт:\n\n"<li>"Өчүрүлгөн колдонмолор"</li>\n<li>"Өчүрүлгөн колдонмолордун билдирмелери"</li>\n<li>"Демейки колдонмолордун аракеттери"</li>\n<li>"Колдонмолордун Фондук режиминдеги чектөөлөрү"</li>\n<li>"Бардык уруксаттарды чектөөлөр"</li>\n\n"Колдонмонун бардык маалыматтары сакталып калат."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Ушуну менен төмөнкүлөрдүн бардык параметрлери баштапкы абалга келтирилет:\n\n"<li>"Өчүрүлгөн колдонмолор"</li>\n<li>"Өчүрүлгөн колдонмолордун билдирмелери"</li>\n<li>"Демейки колдонмолордун аракеттери"</li>\n<li>"Колдонмолордун фондук режиминдеги чектөөлөрү"</li>\n<li>"Уруксаттардын бардык чектөөлөрү"</li>\n<li>"Батареянын колдонулушунун жөндөөлөрү"</li>\n\n"Колдонмолордун дайындары өчпөйт."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Баштапкы абалга келтирүү"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Орун бошотуу"</string>
<string name="filter" msgid="9039576690686251462">"Чыпка"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Жөндөөлөрдү баштапкы абалга келтирүү"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Экрандын өлчөмү жана тексттин параметрлери баштапкы абалга келтирилди"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Экрандын өлчөмүн жана тексттин параметрлерин баштапкы абалга келтиресизби?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Текст менен экрандын өлчөмү баштапкы абалга кайтарылат"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Текст менен экрандын өлчөмү баштапкы абалга кайтарылат"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Текст менен экрандын өлчөмү баштапкы абалга кайтарылат"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Баштапкы абалга келтирүү"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Дем алышка пландар барбы?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Көлгө барганы жатабыз. Кошуласыңарбы?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Акыркы жолу толук кубатталгандан бери колдонулган жок"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Акыркы 24 сааттын ичинде колдонулган жок"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Башка колдонуучулар"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Калган убакыт түзмөктүн колдонулушуна жараша эсептелип көрсөтүлүүдө."</string>
<string name="estimated_time_left" msgid="948717045180211777">"Болжолдуу калган убакыт"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Батарея толгонго чейин калган убакыт"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Толук ачкыч сөз жана өз ара мамиле"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Жөнөкөй сөздөн текстке"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Бул үн киргизүү кызматы сиздин атыңыздан ар дайым күйүк үн көзөмөлүн аткарып жана үн менен иштетилген колдонмолорду иштете алат. Ал <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> колдонмосунан келет. Бул кызматты иштетүүбү?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Түзмөктө таануу параметрлери"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Түзмөктө таануу"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Түзмөктө кепти таануу"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Тандалган каражат"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Каражаттын жөндөөлөрү"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Кеп ылдамдыгы жана негизги тон"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Ооба"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Бул сеанстагы бардык колдонмолор жана аларга байланыштуу нерселер өчүрүлөт."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Өчүрүү"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Конок (сиз)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Колдонуучулар"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Башка колдонуучулар"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Коноктун аракеттерин жок кылуу"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Конок режиминен чыкканда бардык колдонмолор жана алардагы нерселер өчүрүлөт"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Коноктун аракеттери өчүрүлсүнбү?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Бул конок сеансындагы бардык колдонмолор жана башка нерселер өчүрүлөт жана кийин конок режиминен чыккан сайын бардык аракеттер тазаланып турат."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Телефон аркылуу чалууну иштетүү"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Чалуулар менен SMS иштетүү"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Колдонуучуну жок кылуу"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" колдонмосундагы бардык билдирмелер"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосунун бардык билдирмелери"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Ыңгайлаштырылуучу билдирмелер"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">Күнүнө болжол менен <xliff:g id="NUMBER_1">%,d</xliff:g> билдирме</item>
- <item quantity="one">Күнүнө болжол менен <xliff:g id="NUMBER_0">%d</xliff:g> билдирме</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Күнүнө болжолдуу <xliff:g id="NUMBER_1">%,d</xliff:g> билдирме</item>
+ <item quantity="one">Күнүнө болжолдуу <xliff:g id="NUMBER_0">%d</xliff:g> билдирме</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">Аптасына болжол менен <xliff:g id="NUMBER_1">%,d</xliff:g> билдирме</item>
- <item quantity="one">Аптасына болжол менен <xliff:g id="NUMBER_0">%d</xliff:g> билдирме</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Аптасына болжолдуу <xliff:g id="NUMBER_1">%,d</xliff:g> билдирме</item>
+ <item quantity="one">Аптасына болжолдуу <xliff:g id="NUMBER_0">%d</xliff:g> билдирме</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Эч качан"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Түзмөктөгү жана колдонмодогу билдирмелер"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Эч нерсе кылынбасын"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Дирилдөө"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Үнсүз"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Иштетүү үчүн алгач кубат баскычынын менюсунан \"кубат баскычын коё бербей басып туруу\" опциясын өзгөртүңүз."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Иштетүү үчүн алгач кубат баскычынын менюсунан \"кубат баскычын коё бербей басып туруу\" опциясын өзгөртүңүз."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Тармактын чоо-жайы"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Түзмөгүңүздүн аталышы телефонуңуздагы колдонмолорго көрүнүп турат. Bluetooth түзмөктөрүнө, Wi‑Fi тармагына туташканыңызда же Wi‑Fi байланыш түйүнүн жөндөгөнүңүздө, аны башка адамдар да көрүшү мүмкүн."</string>
<string name="devices_title" msgid="649715719278562515">"Түзмөктөр"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"түзмөктү башкаруу элементтери"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Карталар жана билеттер"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"карталар жана билеттер"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Кубат баскычын коё бербей басып туруу"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Жардамчыга кайрылуу үчүн коё бербей басып туруңуз"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Кубат баскычынын менюсун ачуу үчүн коё бербей басып туруңуз"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Коё бербей басып туруу өчүрүлдү"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Кубат баскычын коё бербей басуу"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Мүмкүнчүлүк алуу үчүн кубат баскычын коё бербей басып туруу"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Кубат баскычынын менюсу"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Санариптик жардамчы"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Санариптик жардамчыга мүмкүнчүлүк алуу"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Кубат баскычынын менюсуна мүмкүнчүлүк алуу"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Алгач экранды кулпулоо ыкмасын тандаңыз"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Баскычты көпкө басып, Жардамчыны иштетүү"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Кубат баскычын көпкө басып, Жардамчыны иштетесиз"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Кубат баскычы жана Шашылыш билдирүү менюсу:\nКубат менен Үндү катуулатуу баскычтарын чогуу басыңыз."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Шыңгыратуунун алдын алуу:\nЫкчам баскыч үндү катуулатуу менюсунда жеткиликтүү."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Кубат баскычынын менюсу:\nТелефонуңузду өчүрүү үчүн Кубат менен Үндү катуулатуу баскычтарын чогуу басыңыз"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Шыңгырдын үнүн өчүрүү:\nЫкчам баскычты колдонуу үчүн үндү катуулатуу/акырындатуу баскычын басыңыз"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Коё бербей басып туруунун узактыгы"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Сезгичтигин тууралоо үчүн кубат баскычын канчага чейин коё бербей басып туруу керектигин тандаңыз"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Кыска"</string>
diff --git a/res/values-ldltr/dimens.xml b/res/values-ldltr/dimens.xml
new file mode 100755
index 0000000..11d5b33
--- /dev/null
+++ b/res/values-ldltr/dimens.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+ <!-- Biometrics UDFPS enroll landscape dimensions-->
+ <dimen name="enroll_padding_start">0dp</dimen>
+ <dimen name="enroll_padding_end">0dp</dimen>
+ <dimen name="enroll_margin_end">0dp</dimen>
+
+ <dimen name="rotation_90_enroll_padding_start">-290dp</dimen>
+ <dimen name="rotation_90_enroll_padding_end">108dp</dimen>
+ <dimen name="rotation_90_enroll_margin_end">150dp</dimen>
+</resources>
diff --git a/res/values-ldrtl/dimens.xml b/res/values-ldrtl/dimens.xml
new file mode 100755
index 0000000..cbe7eb5
--- /dev/null
+++ b/res/values-ldrtl/dimens.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2022 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+ <!-- Biometrics UDFPS enroll landscape RTL dimensions-->
+ <dimen name="enroll_padding_start">-440dp</dimen>
+ <dimen name="enroll_padding_end">320dp</dimen>
+ <dimen name="enroll_margin_end">150dp</dimen>
+
+ <dimen name="rotation_90_enroll_padding_start">20dp</dimen>
+ <dimen name="rotation_90_enroll_padding_end">0dp</dimen>
+ <dimen name="rotation_90_enroll_margin_end">20dp</dimen>
+</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index f32fa88..13ccfdb 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"ເມື່ອເຂົາເຈົ້າໃຊ້ Pixel Imprint, ຮູບຈະຖືກໃຊ້ເພື່ອອັບເດດຮູບແບບລາຍນິ້ວມືຂອງເຂົາເຈົ້າ. ຮູບທີ່ຖືກໃຊ້ເພື່ອສ້າງຮູບແບບລາຍນິ້ວມືຂອງລູກທ່ານຈະບໍ່ຖືກຈັດເກັບໄວ້, ແຕ່ຮູບແບບລາຍນິ້ວມືແມ່ນຖືກຈັດເກັບໄວ້ຢ່າງປອດໄພຢູ່ໂທລະສັບ ແລະ ຈະບໍ່ຖືກສົ່ງອອກຈາກໂທລະສັບເດັດຂາດ. ການປະມວນຜົນທັງໝົດຈະເກີດຂຶ້ນຢ່າງປອດໄພຢູ່ໂທລະສັບ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"ທ່ານສາມາດລຶບຮູບ ແລະ ຮູບແບບລາຍນິ້ວມືຂອງທ່ານ ຫຼື ປິດການປົດລັອກດ້ວຍລາຍນິ້ວມືຕອນໃດກໍໄດ້ໃນການຕັ້ງຄ່າ. ຮູບ ແລະ ຮູບແບບລາຍນິ້ວມືແມ່ນຖືກຈັດເກັບໄວ້ຢູ່ໂທລະສັບຈົນກວ່າທ່ານຈະລຶບພວກມັນອອກ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"ທ່ານ ແລະ ລູກຂອງທ່ານສາມາດລຶບຮູບ ແລະ ຮູບແບບລາຍນິ້ວມືຂອງເຂົາເຈົ້າອອກ ຫຼື ປິດການໃຊ້ການປົດລັອກດ້ວຍລາຍນິ້ວມືຕອນໃດກໍໄດ້ໃນການຕັ້ງຄ່າ. ຮູບລາຍນິ້ວມື ແລະ ຮູບແບບແມ່ນຖືກຈັດເກັບໄວ້ຢູ່ໂທລະສັບຈົນກວ່າພວກມັນຈະຖືກລຶບອອກ."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"ໂທລະສັບຂອງທ່ານສາມາດຖືກປົດລັອກໄດ້ເມື່ອທ່ານບໍ່ໄດ້ຕັ້ງໃຈ ເຊັ່ນ: ຫາກມີຄົນຖືມັນໄປໃສ່ນິ້ວມືຂອງທ່ານ."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"ໂທລະສັບຂອງທ່ານສາມາດຖືກປົດລັອກໄດ້ເມື່ອທ່ານບໍ່ໄດ້ຕັ້ງໃຈ ເຊັ່ນ: ຫາກມີຄົນຖືມັນໄປໃສ່ນິ້ວມືຂອງທ່ານ."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"ແທັບເລັດຂອງທ່ານສາມາດຖືກປົດລັອກໄດ້ເມື່ອທ່ານບໍ່ໄດ້ຕັ້ງໃຈ, ເຊັ່ນ: ຫາກມີຄົນຖືມັນໄປໃສ່ນິ້ວມືຂອງທ່ານ."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"ອຸປະກອນຂອງທ່ານສາມາດຖືກປົດລັອກໄດ້ເມື່ອທ່ານບໍ່ໄດ້ຕັ້ງໃຈ, ເຊັ່ນ: ຫາກມີຄົນຖືມັນໄປໃສ່ນິ້ວມືຂອງທ່ານ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"ໂທລະສັບຂອງລູກທ່ານສາມາດຖືກປົດລັອກໄດ້ໃນເວລາທີ່ເຂົາເຈົ້າບໍ່ໄດ້ຕັ້ງໃຈ ເຊັ່ນ: ຫາກມີຄົນຖືໂທລະສັບໄປໃສ່ນິ້ວມືຂອງເຂົາເຈົ້າ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"ເພື່ອໃຫ້ໄດ້ຜົນຮັບທີ່ດີທີ່ສຸດ, ໃຫ້ໃຊ້ຕົວປົກປ້ອງໜ້າຈໍທີ່ໄດ້ຮັບການຮັບຮອງ Made for Google. ດ້ວຍຕົວປົກປ້ອງໜ້າຈໍແບບອື່ນ, ລາຍນິ້ວມືຂອງທ່ານອາດໃຊ້ບໍ່ໄດ້."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"ເພື່ອໃຫ້ໄດ້ຜົນຮັບທີ່ດີທີ່ສຸດ, ໃຫ້ໃຊ້ຕົວປົກປ້ອງໜ້າຈໍທີ່ໄດ້ຮັບການຮັບຮອງ Made for Google. ດ້ວຍຕົວປົກປ້ອງໜ້າຈໍແບບອື່ນ, ລາຍນິ້ວມືຂອງລູກທ່ານອາດໃຊ້ບໍ່ໄດ້."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ການອະທິບາຍປະກອບດ້ວຍທີ່ຕັ້ງເຊັນເຊີອຸປະກອນ ແລະລາຍນີ້ວມື"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"ຊື່"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ຕົກລົງ"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ລອງໃໝ່"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"ລຶບ"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"ແຕະທີ່ເຊັນເຊີ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"ວາງນີ້ວມືຂອງທ່ານລົງເທິງເຊັນເຊີ ແລະ ຍົກຂຶ້ນຫຼັງຈາກທ່ານຮູ້ສຶກມີການສັ່ນ"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"ແລ້ວໆ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"ອຸ້ຍ, ນັ້ນບໍ່ແມ່ນເຊັນເຊີ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"ແຕະທີ່ເຊັນເຊີຢູ່ຫຼັງຂອງໂທລະສັບຂອງທ່ານ. ໃຫ້ໃຊ້ນິ້ວຊີ້ທ່ານ."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"ການລົງທະບຽນບໍ່ສຳເລັດ"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"ຮອດຂີດຈຳກັດເວລາການລົງທະບຽນລາຍນີ້ວມືແລ້ວ. ກະລຸນາລອງໃໝ່ອີກຄັ້ງ."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"ໝົດເວລາຕັ້ງຄ່າລາຍນິ້ວມື"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ລອງໃໝ່ຕອນນີ້ ຫຼື ຕັ້ງຄ່າລາຍນິ້ວມືຂອງທ່ານພາຍຫຼັງໃນການຕັ້ງຄ່າ"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ການລົງທະບຽນລາຍນີ້ວມືບໍ່ເຮັດວຽກ. ລອງໃໝ່ອີກ ຫຼື ໃຊ້ນີ້ວມືນີ້ວອື່ນ."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"ເພີ່ມອັນອື່ນ"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"ຕໍ່ໄປ"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"ປັບແຕ່ງໂທລະສັບຂອງທ່ານ"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"ລອງໃຊ້ຮູບແບບ, ຮູບພື້ນຫຼັງ ແລະ ອື່ນໆທີ່ແຕກຕ່າງກັນ"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"ພາບພັກໜ້າຈໍ"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ພາບພັກໜ້າຈໍ"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"ໃຊ້ພາບພັກໜ້າຈໍ"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ໃນຂະນະທີ່ກຳລັງສາກ ຫຼື ວາງໄວ້ບ່ອນຕັ້ງສາກ"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"ແບບໃດກໍໄດ້"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ໃນຂະນະທີ່ກຳລັງສາກໄຟ"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ໃນຂະນະຕັ້ງໃສ່ບ່ອນຕັ້ງສາກ"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ບໍ່ມີກຳນົດ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ປິດ"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ເພື່ອຄວບຄຸມວ່າຈະເກີດຫຍັງຂຶ້ນເມື່ອວາງໂທລະສັບໄວ້ ແລະ/ຫຼື ເມື່ອກຳລັງນອນຫຼັບ, ໃຫ້ເປີດພາບພັກໜ້າຈໍກ່ອນ."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"ເລີ່ມຕອນໃດ"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"ຕົວພັກໜ້າຈໍປັດຈຸບັນ"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ການຕັ້ງຄ່າ"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ປັບຄວາມແຈ້ງອັດຕະໂນມັດ"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"ຍົກເພື່ອເປີດໜ້າຈໍ"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ການສະແດງຜົນສະພາບແວດລ້ອມ"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"ຕັ້ງ PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"ຕັ້ງ PIN ບ່ອນເຮັດວຽກ"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"ຕັ້ງຮູບແບບ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"ເພື່ອຄວາມປອດໄພເພີ່ມເຕີມ, ໃຫ້ຕັ້ງຮູບແບບເພື່ອປົດລັອກອຸປະກອນ"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"ຕັ້ງຮູບແບບບ່ອນເຮັດວຽກ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ເພື່ອໃຊ້ລາຍນິ້ວມື, ໃຫ້ຕັ້ງລະຫັດຜ່ານກ່ອນ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ເພື່ອໃຊ້ລາຍນິ້ວມື, ໃຫ້ຕັ້ງຮູບແບບປົດລັອກກ່ອນ"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"ແອັບສຸກເສີນ"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"ຣີເຊັດການຕັ້ງຄ່າແອັບ"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"ຣີເຊັດການຕັ້ງຄ່າຕ່າງໆຂອງແອັບບໍ?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ນີ້ຈະຣີເຊັດການຕັ້ງຄ່າທັງໝົດສຳລັບ:\n\n"<li>"ແອັບທີ່ປິດນຳໃຊ້"</li>\n<li>"ການແຈ້ງເຕືອນແອັບທີ່ປິດນຳໃຊ້"</li>\n<li>"ແອັບພລິເຄຊັນເລີ່ມຕົ້ນສຳລັບຄຳສັ່ງຕ່າງໆ"</li>\n<li>"ການຈຳກັດຂໍ້ມູນໃນພື້ນຫຼັງສຳລັບແອັບ"</li>\n<li>"ການຈຳກັດການອະນຸຍາດຕ່າງໆ"</li>\n\n"ທ່ານຈະບໍ່ເສຍຂໍ້ມູນແອັບໃດໆ."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ຂັ້ນຕອນນີ້ຈະຣີເຊັດການຕັ້ງຄ່າທັງໝົດຂອງ:\n\n"<li>"ແອັບທີ່ປິດການນຳໃຊ້"</li>\n<li>"ການແຈ້ງເຕືອນແອັບທີ່ປິດການນຳໃຊ້"</li>\n<li>"ແອັບພລິເຄຊັນເລີ່ມຕົ້ນສຳລັບຄຳສັ່ງຕ່າງໆ"</li>\n<li>"ການຈຳກັດຂໍ້ມູນໃນພື້ນຫຼັງສຳລັບແອັບຕ່າງໆ"</li>\n<li>"ການຈຳກັດການອະນຸຍາດໃກໍຕາມ"</li>\n<li>"ການຕັ້ງຄ່າການນຳໃຊ້ແບັດເຕີຣີ"</li>\n\n"ທ່ານຈະບໍ່ສູນເສຍຂໍ້ມູນແອັບໃດກໍຕາມ."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"ຣີເຊັດແອັບ"</string>
<string name="manage_space_text" msgid="9013414693633572277">"ຈັດການພື້ນທີ່"</string>
<string name="filter" msgid="9039576690686251462">"ໂຕກັ່ນຕອງ"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"ຣີເຊັດການຕັ້ງຄ່າ"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ຣີເຊັດການຕັ້ງຄ່າຂະໜາດການສະແດງຜົນ ແລະ ຂໍ້ຄວາມແລ້ວ"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ຣີເຊັດຂະໜາດການສະແດງຜົນ ແລະ ຂໍ້ຄວາມບໍ?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ຂະໜາດການສະແດງຜົນ ແລະ ການຕັ້ງຄ່າຂໍ້ຄວາມຂອງທ່ານຈະຖືກຣີເຊັດເປັນການຕັ້ງຄ່າຕົ້ນສະບັບຂອງໂທລະສັບ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ຂະໜາດການສະແດງຜົນ ແລະ ການຕັ້ງຄ່າຂໍ້ຄວາມຂອງທ່ານຈະຖືກຣີເຊັດເປັນການຕັ້ງຄ່າຕົ້ນສະບັບຂອງໂທລະສັບ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ຂະໜາດການສະແດງຜົນ ແລະ ການຕັ້ງຄ່າຂໍ້ຄວາມຂອງທ່ານຈະຖືກຣີເຊັດເປັນການຕັ້ງຄ່າຕົ້ນສະບັບຂອງແທັບເລັດ"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"ຣີເຊັດ"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"ມີແຜນມື້ພັກບໍ່?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ກຳລັງໄປຫາດຊາຍ. ຢາກໄປນຳບໍ?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"ບໍ່ມີການນຳໃຊ້ຫຼັງຈາກສາກເຕັມຫຼ້າສຸດ"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"ບໍ່ມີການນຳໃຊ້ໃນຮອບ 24 ຊມ ທີ່ຜ່ານມາ"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"ຜູ້ໃຊ້ອື່ນໆ"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"ການປະເມີນໄລຍະເວລາແບັດເຕີຣີທີ່ເຫຼືອແມ່ນອ້າງອີງຈາກການນຳໃຊ້ອຸປະກອນຂອງທ່ານ"</string>
<string name="estimated_time_left" msgid="948717045180211777">"ເວລາທີ່ເຫຼືອໂດຍປະມານ"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"ຈົນກວ່າຈະສາກເຕັມ"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"ຄຳສັ່ງສຽງເຕັມຮູບແບບ ແລະການໂຕ້ຕອບ"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"ການແປງສຽງເປັນຂໍ້ຄວາມແບບງ່າຍໆ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"ບໍລິການປ້ອນຂໍ້ມູນດ້ວຍສຽງນີ້ຈະສາມາດກວດສອບສຽງຕະຫຼອດເວລາ ແລະຄວບຄຸມແອັບພລິເຄຊັນທີ່ເປີດນຳໃຊ້ສຽງແທນທ່ານໄດ້. ມັນມາຈາກແອັບພລິເຄຊັນ <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. ທ່ານຕ້ອງການເປີດໃຊ້ບໍລິການນີ້ບໍ່"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"ການຕັ້ງຄ່າການຈຳແນກຢູ່ອຸປະກອນ"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"ການຈຳແນກຢູ່ອຸປະກອນ"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"ການຈຳແນກສຽງເວົ້າຢູ່ອຸປະກອນ"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"ລະບົບທີ່ຕ້ອງການ"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"ການຄັ້ງຄ່າລະບົບ"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"ອັດຕາການເວົ້າ ແລະ ລະດັບສຽງ"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"ລຶບ"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"ແອັບ ແລະ ຂໍ້ມູນທັງໝົດໃນເຊດຊັນນີ້ຈະຖືກລຶບອອກ."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"ລຶບ"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"ແຂກ (ທ່ານ)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ຜູ້ໃຊ້"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"ຜູ້ໃຊ້ອື່ນໆ"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"ລຶບການເຄື່ອນໄຫວແຂກ"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"ລຶບແອັບ ແລະ ຂໍ້ມູນແຂກທັງໝົດອອກໃນເວລາອອກຈາກໂໝດແຂກ"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ລຶບການເຄື່ອນໄຫວແຂກບໍ?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ແອັບ ແລະ ຂໍ້ມູນຈາກເຊດຊັນແຂກຈະຖືກລຶບອອກຕອນນີ້ ແລະ ການເຄື່ອນໄຫວແຂກໃນອະນາຄົດທັງໝົດຈະຖືກລຶບອອກໃນແຕ່ລະເທື່ອທີ່ທ່ານອອກຈາກໂໝດແຂກ"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ເປີດການໂທ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ເປີດໂທລະສັບ ແລະ SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ລຶບຜູ້ໃຊ້"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"ການແຈ້ງເຕືອນ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ທັງໝົດ"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"ການແຈ້ງເຕືອນ <xliff:g id="APP_NAME">%1$s</xliff:g> ທັງໝົດ"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"ການແຈ້ງເຕືອນແບບປັບປ່ຽນໄດ້ເອງ"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ການແຈ້ງເຕືອນຕໍ່ມື້</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> ການແຈ້ງເຕືອນຕໍ່ມື້</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">ປະມານ <xliff:g id="NUMBER_1">%,d</xliff:g> ການແຈ້ງເຕືອນຕໍ່ມື້</item>
+ <item quantity="one">ປະມານ <xliff:g id="NUMBER_0">%d</xliff:g> ການແຈ້ງເຕືອນຕໍ່ມື້</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ການແຈ້ງເຕືອນຕໍ່ອາທິດ</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> ການແຈ້ງເຕືອນຕໍ່ອາທິດ</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">ປະມານ <xliff:g id="NUMBER_1">%,d</xliff:g> ການແຈ້ງເຕືອນຕໍ່ອາທິດ</item>
+ <item quantity="one">ປະມານ <xliff:g id="NUMBER_0">%d</xliff:g> ການແຈ້ງເຕືອນຕໍ່ອາທິດ</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"ບໍ່ສົ່ງ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ການແຈ້ງເຕືອນອຸປະກອນ ແລະ ແອັບ"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"ບໍ່ເຮັດຫຍັງ"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"ສັ່ນເຕືອນ"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"ປິດສຽງ"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ເພື່ອເປີດການນຳໃຊ້, ທຳອິດໃຫ້ປ່ຽນ \"ກົດປຸ່ມເປີດປິດຄ້າງໄວ້\" ເປັນເມນູເປີດປິດ."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ເພື່ອເປີດການນຳໃຊ້, ທຳອິດໃຫ້ປ່ຽນ \"ກົດປຸ່ມເປີດປິດຄ້າງໄວ້\" ເປັນເມນູເປີດປິດ."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"ລາຍລະອຽດເຄືອຂ່າຍ"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"ຊື່ອຸປະກອນຂອງທ່ານຈະສະແດງໃຫ້ແອັບຕ່າງໆຢູ່ໂທລະສັບເຫັນ. ມັນອາດຖືກສະແດງໃຫ້ຄົນອື່ນເຫັນໃນເວລາທີ່ທ່ານເຊື່ອມຕໍ່ຫາອຸປະກອນ Bluetooth, ເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi-Fi ຫຼື ຕັ້ງຄ່າຮັອດສະປອດ Wi-Fi ນຳ."</string>
<string name="devices_title" msgid="649715719278562515">"ອຸປະກອນ"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ການຄວບຄຸມອຸປະກອນ"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"ບັດ ແລະ ປີ້ຕ່າງໆ"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"ບັດ ແລະ ປີ້ຕ່າງໆ"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"ກົດປຸ່ມເປີດປິດຄ້າງໄວ້"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"ກົດຄ້າງໄວ້ເພື່ອໃຊ້ຜູ້ຊ່ວຍ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"ກົດຄ້າງໄວ້ເພື່ອເຂົ້າເມນູເປີດປິດ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"ປິດການນຳໃຊ້ການກົດຄ້າງໄວ້ແລ້ວ"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"ກົດປຸ່ມເປີດປິດຄ້າງໄວ້"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"ກົດປຸ່ມເປີດປິດຄ້າງໄວ້ເພື່ອເຂົ້າເຖິງ"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"ເມນູເປີດປິດ"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ຜູ້ຊ່ວຍດິຈິຕອນ"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ເຂົ້າເຖິງຜູ້ຊ່ວຍດິຈິຕອນ"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"ເຂົ້າເຖິງເມນູເປີດປິດ"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ເພື່ອໃຊ້, ໃຫ້ຕັ້ງການລັອກໜ້າຈໍກ່ອນ"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"ກົດຄ້າງໄວ້ເພື່ອເອີ້ນຜູ້ຊ່ວຍ"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"ເອີ້ນຜູ້ຊ່ວຍໂດຍການກົດປຸ່ມເປີດປິດຄ້າງໄວ້"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"ເມນູເປີດປິດ ແລະ ເມນູສຸກເສີນ:\nກົດປຸ່ມເປີດປິດ ແລະ ປຸ່ມເພີ່ມສຽງຂຶ້ນພ້ອມກັນ."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"ປ້ອງກັນບໍ່ໃຫ້ເຕືອນດ້ວຍສຽງ:\nມີທາງລັດໃນເມນູລະດັບສຽງ."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"ເມນູເປີດປິດ:\nກົດປຸ່ມເປີດປິດ ແລະ ປຸ່ມເພີ່ມສຽງຂຶ້ນໃນເວລາດຽວກັນ"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"ຢຸດການເຕືອນດ້ວຍສຽງ:\nກົດປຸ່ມລະດັບສຽງສໍາລັບທາງລັດ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"ໄລຍະເວລາກົດຄ້າງໄວ້"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"ປັບຄວາມລະອຽດອ່ອນໂດຍການເລືອກໄລຍະເວລາໃນການກົດປຸ່ມເປີດປິດຄ້າງໄວ້"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"ບໍ່ດົນ"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 31cc7b5..7a324ae 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -472,7 +472,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Naudojant „Pixel Imprint“, vaizdai naudojami kontrolinio kodo modeliui atnaujinti. Vaizdai, kurie naudojami vaiko kontrolinio kodo modeliui kurti, niekada nesaugomi, bet kontrolinio kodo modelis saugiai saugomas telefone ir visada lieka jame. Visas apdorojimo procesas saugiai vykdomas telefone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Galite bet kada ištrinti kontrolinio kodo vaizdus ir modelį arba išjungti atrakinimo kontroliniu kodu funkciją „Nustatymų“ skiltyje. Kontrolinio kodo vaizdai ir modeliai saugomi telefone, kol juos ištrinate."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Jūs ir jūsų vaikas galite bet kada ištrinti kontrolinio kodo vaizdus ir modelį arba išjungti atrakinimą kontroliniu kodu „Nustatymų“ skiltyje. Kontrolinio kodo vaizdai ir modeliai saugomi telefone, kol ištrinami."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Jūsų telefonas gali būti atrakinamas, kai to neketinate atlikti, pvz., kam nors palaikius jį prie jūsų piršto."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Jūsų telefonas gali būti atrakinamas, kai to neketinate atlikti, pvz., kam nors palaikius jį prie jūsų piršto."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Jūsų planšetinis kompiuteris gali būti atrakinamas, kai to neketinate atlikti, pvz., kam nors palaikius jį prie jūsų piršto."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Jūsų įrenginys gali būti atrakinamas, kai to neketinate atlikti, pvz., kam nors palaikius jį prie jūsų piršto."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Jūsų vaiko telefonas gali būti atrakinamas, kai vaikas to neketina atlikti, pvz., kam nors palaikius jį prie vaiko piršto."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Kad pasiektumėte geriausių rezultatų, naudokite „Made for Google“ sertifikuotą apsauginį ekrano stiklą. Naudojant kitus apsauginius ekrano stiklus kontrolinis kodas gali neveikti."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Kad pasiektumėte geriausių rezultatų, naudokite „Made for Google“ sertifikuotą apsauginį ekrano stiklą. Naudojant kitus apsauginius ekrano stiklus vaiko kontrolinis kodas gali neveikti."</string>
@@ -522,6 +524,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Įrenginio ir piršto antspaudo jutiklio vietos iliustracija"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Pavadinimas"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Gerai"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Bandyti dar kartą"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Ištrinti"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Palieskite jutiklį"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Uždėkite pirštą ant jutiklio ir pakelkite, kai pajusite vibravimą"</string>
@@ -599,8 +602,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Atlikta"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Oi, tai ne jutiklis"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Smiliumi palieskite jutiklį tel. užp. dalyje."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registracija neužbaigta"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Pasiektas piršto antspaudo registracijos laiko apribojimas. Bandykite dar kartą."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Baigėsi kontrolinio kodo sąrankos skirtasis laikas"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Dabar bandykite dar kartą arba vėliau nustatykite kontrolinį kodą skiltyje „Nustatymai“"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Nepavyko užregistruoti piršto antspaudo. Bandykite dar kartą arba atlikite tai kitu pirštu."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Pridėti kitą"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Kitas"</string>
@@ -1488,17 +1491,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Telefono tinkinimas"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Išbandykite skirtingus stilius, ekrano fonus ir kt."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Ekrano užsklanda"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ekrano užsklanda"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Ekrano užsklandos naudojimas"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Įkraunat ar prijungus prie doko"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Abiem atvejais"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Įkraunant"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Kai yra doke"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Niekada"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Išjungta"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Jei norite valdyti, kas vyksta, kai telefonas yra doke ir (arba) veikia miego režimu, įjunkite ekrano užsklandą."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kada paleisti"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Dabartinė ekrano užsklanda"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Nustatymai"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatinis šviesumas"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Pakelti ir pažadinti"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Adaptyvusis vaizdas"</string>
@@ -1990,6 +1991,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN kodo nustatymas"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Darbo PIN kodo nustatymas"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Atrakinimo piešinio nustatymas"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Papildomai saugai užtikrinti nustatykite įrenginio atrakinimo piešinį"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Darbo atrakinimo piešinio nustatymas"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Nust. slapt., kad gal. naud. kont. kodą"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Nust. atrak. pieš., kad gal. naud. piršt. atsp."</string>
@@ -2147,7 +2149,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Avarinė programa"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Iš naujo nustat. nuostat."</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Iš naujo nust. nuostat.?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Bus iš naujo nustatytos visos nurodytų elementų nuostatos:\n\n"<li>"išjungtos programos;"</li>\n<li>"išjungti programų pranešimai;"</li>\n<li>"numatytosios veiksmų programos;"</li>\n<li>"programų foninių duomenų apribojimai;"</li>\n<li>"visi leidimų apribojimai."</li>\n\n"Neprarasite jokių programų duomenų."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Bus iš naujo nustatytos visos nurodytų elementų nuostatos:\n\n"<li>"išjungtos programos;"</li>\n<li>"išjungti programų pranešimai;"</li>\n<li>"numatytosios veiksmų programos;"</li>\n<li>"programų foninių duomenų apribojimai;"</li>\n<li>"visi leidimų apribojimai;"</li>\n<li>"akumuliatoriaus energijos vartojimo nustatymai."</li>\n\n"Neprarasite jokių programų duomenų."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Iš naujo nustat. program."</string>
<string name="manage_space_text" msgid="9013414693633572277">"Valdyti vietą"</string>
<string name="filter" msgid="9039576690686251462">"Filtruoti"</string>
@@ -2402,7 +2404,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Nust. nustatymus iš naujo"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Pateikties dydžio ir teksto nustatymai nustatyti iš naujo"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Iš naujo nustatyti ekrano dydį ir tekstą?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Ekrano dydžio ir teksto nuostatos bus nustatytos iš naujo pagal pradinius telefono nustatymus"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Ekrano dydžio ir teksto nuostatos bus nustatytos iš naujo pagal pradinius telefono nustatymus"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Ekrano dydžio ir teksto nuostatos bus nustatytos iš naujo pagal pradinius planšetinio kompiuterio nustatymus"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Nustatyti iš naujo"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Turite planų savaitgaliui?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Vyksime į paplūdimį. Norite prisijungti?"</string>
@@ -3010,6 +3013,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Nenaudota nuo pastarojo visiško įkrovimo"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nenaudota per pastarąsias 24 val."</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Kiti naudotojai"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Likęs akumuliatoriaus veikimo laikas numatytas pagal tai, kaip naudojate įrenginį"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Liko laiko (numatyta)"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Iki visiško įkrovimo"</string>
@@ -3099,6 +3103,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Visas aktyvinamasis žodis ir sąveika"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Paprasta kalbos keitimo į tekstą funkcija"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ši įvesties balsu paslauga galės visada stebėti balsu vykdomus veiksmus ir valdyti balsu įgalintas programas jūsų vardu. Ji teikiama iš programos <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Įgalinti šios paslaugos naudojimą?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Atpažinimo įrenginyje nustatymai"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Atpažinimas įrenginyje"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Kalbos atpažinimas įrenginyje"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Pageidaujamas variklis"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Variklio nustatymai"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Kalbėjimo greitis ir tonas"</string>
@@ -3499,6 +3506,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Ištrinti"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Bus ištrintos visos šios sesijos programos ir duomenys."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Pašalinti"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Svečias (jūs)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Naudotojai"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Kiti naudotojai"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Ištrinti svečio veiklą"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Išeinant iš svečio režimo ištrinti visas svečio programas ir duomenis"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Ištrinti svečio veiklą?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Šios svečio sesijos programos ir duomenys bus ištrinti dabar, o visa būsima svečio veikla bus ištrinta kiekvieną kartą, kai išeisite iš svečio režimo"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Įjungti telefono skambučius"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Įjungti telefono skambučius ir SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Naudotojo ištrynimas"</string>
@@ -4095,17 +4109,17 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Visi „<xliff:g id="APP_NAME">%1$s</xliff:g>“ pranešimai"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Visi „<xliff:g id="APP_NAME">%1$s</xliff:g>“ pranešimai"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Prisitaikantys pranešimai"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~ <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimas per dieną</item>
- <item quantity="few">~ <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimai per dieną</item>
- <item quantity="many">~ <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimo per dieną</item>
- <item quantity="other">~ <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimų per dieną</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Maždaug <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimas per dieną</item>
+ <item quantity="few">Maždaug <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimai per dieną</item>
+ <item quantity="many">Maždaug <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimo per dieną</item>
+ <item quantity="other">Maždaug <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimų per dieną</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~ <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimas per savaitę</item>
- <item quantity="few">~ <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimai per savaitę</item>
- <item quantity="many">~ <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimo per savaitę</item>
- <item quantity="other">~ <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimų per savaitę</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Maždaug <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimas per savaitę</item>
+ <item quantity="few">Maždaug <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimai per savaitę</item>
+ <item quantity="many">Maždaug <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimo per savaitę</item>
+ <item quantity="other">Maždaug <xliff:g id="NUMBER_1">%,d</xliff:g> pranešimų per savaitę</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Niekada"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Įrenginių ir programų pranešimai"</string>
@@ -5423,7 +5437,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Nieko nedaryti"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibruoti"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Nutildyti"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Jei norite įgalinti, pirmiausia pakeiskite veiksmą „Paspausti ir palaikyti maitinimo mygtuką“ į įjungimo meniu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Jei norite įgalinti, pirmiausia pakeiskite veiksmą „Paspausti ir palaikyti maitinimo mygtuką“ į įjungimo meniu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Išsami tinklo info."</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Įrenginio pavadinimas matomas jūsų telefone esančioms programoms. Kai prisijungiate prie „Bluetooth“ įrenginių ar „Wi-FI“ tinklo arba nustatote „Wi-Fi“ viešosios interneto prieigos tašką, jį taip pat gali matyti kiti žmonės."</string>
<string name="devices_title" msgid="649715719278562515">"Įrenginiai"</string>
@@ -5716,15 +5730,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"įrenginio valdikliai"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kortelės"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kortelės"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Paspausti ir palaikyti maitinimo mygtuką"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Paspausti ir palaikyti, kad būtų suaktyvintas Padėjėjas"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Paspausti ir palaikyti, kad būtų pateiktas maitinimo meniu"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Paspaudimas ir palaikymas išjungtas"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Paspauskite ir palaikykite maitinimo mygtuką"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Paspauskite ir palaikykite maitinimo mygtuką prieigai"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Įjungimo meniu"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Skaitmeninis pagelbiklis"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Pasiekite skaitmeninį pagelbiklį"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Pasiekite įjungimo meniu"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Jei norite naudoti, pirmiausia nustatykite ekrano užraktą"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Paspaudus palaikyti, norint iškviesti Padėjėją"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Padėjėją suaktyvinti laikant nuspaustą maitinimo mygtuką"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Maitinimo ir kritinės padėties meniu:\npaspauskite maitinimo ir garsumo didinimo mygtukus tuo pačiu metu."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Skambėjimo išjungimas:\nspartusis klavišas pasiekiamas garsumo meniu."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Įjungimo meniu:\npaspauskite maitinimo ir garsumo mygtukus tuo pačiu metu"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Skambėjimo išjungimas:\nnorėdami naudoti spartųjį klavišą paspauskite garsumo mygtuką"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Laikymo paspaudus trukmė"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Koreguokite jautrumą nustatydami, kaip ilgai reikia laikyti paspaudus maitinimo mygtuką"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Trumpai"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 392f807..fd29d09 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -468,7 +468,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Izmantojot funkciju Pixel Imprint, pirksta nospieduma modeļa atjaunināšanai tiek izmantoti attēli. Jūsu bērna pirksta nospieduma modeļa izveidei izmantotie attēli nekad netiek saglabāti, savukārt pirksta nospieduma modelis tiek droši glabāts bērna tālrunī un vienmēr atrodas tikai tālrunī. Apstrāde tiek veikta drošā veidā un tikai bērna tālrunī."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Jebkurā brīdī iestatījumos varat izdzēst pirksta nospieduma attēlus un modeli vai izslēgt autorizāciju ar pirksta nospiedumu. Pirkstu nospiedumu attēli un modeļi tiks glabāti tālrunī, līdz tos izdzēsīsiet."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Iestatījumos jūs un jūsu bērns varat jebkurā laikā dzēst pirksta nospieduma attēlus un modeli vai izslēgt autorizāciju ar pirksta nospiedumu. Pirksta nospieduma attēli un modeļi tiek glabāti tālrunī, līdz tie tiek izdzēsti."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Jūsu tālrunis var tikt nejauši atbloķēts, piemēram, ja kāda persona pavērš to pret jūsu pirkstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Jūsu tālrunis var tikt nejauši atbloķēts, piemēram, ja kāda persona pavērš to pret jūsu pirkstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Jūsu planšetdators var tikt nejauši atbloķēts, piemēram, ja kāda persona pavērš to pret jūsu pirkstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Jūsu ierīce var tikt nejauši atbloķēta, piemēram, ja kāda persona pavērš to pret jūsu pirkstu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Jūsu bērna tālrunis var tikt nejauši atbloķēts, piemēram, ja kāda persona pavērš to pret bērna pirkstu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Lai iegūtu vislabākos rezultātus, izmantojiet ekrāna aizsargplēvi, kam ir “Made for Google” sertifikāts. Ar citām ekrāna aizsargplēvēm jūsu pirksta nospiedums, iespējams, nedarbosies."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Lai iegūtu vislabākos rezultātus, izmantojiet ekrāna aizsargplēvi, kam ir “Made for Google” sertifikāts. Ar citām ekrāna aizsargplēvēm jūsu bērna pirksta nospiedums, iespējams, nedarbosies."</string>
@@ -518,6 +520,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Attēls ar ierīci un pirkstu nospiedumu sensora atrašanās vietu uz tās"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nosaukums"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Labi"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Mēģināt vēlreiz"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Dzēst"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Pieskarieties sensoram"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Novietojiet pirkstu uz sensora un paceliet to pēc tam, kad sajūtat vibrāciju"</string>
@@ -595,8 +598,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Gatavs"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Tas nav sensors!"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Pieskarieties sensoram tālruņa aizmugurē ar rādītājpirkstu."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Reģistrēšana netika pabeigta"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Ir sasniegts pirksta nospieduma reģistrēšanas laika ierobežojums. Mēģiniet vēlreiz."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Iestatot pirksta nospiedumu, iestājās noildze"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Mēģiniet vēlreiz tūlīt vai iestatiet pirksta nospiedumu vēlāk iestatījumos."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Neizdevās reģistrēt pirksta nospiedumu. Mēģiniet vēlreiz vai izmantojiet citu pirkstu."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Pievienot citu"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Tālāk"</string>
@@ -1468,17 +1471,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Tālruņa pielāgošana"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Izmēģiniet dažādus stilus, fona tapetes utt."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Ekrānsaudzētājs"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ekrānsaudzētājs"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Izmantot ekrānsaudzētāju"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Uzlādes vai dokošanas laikā"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Vienmēr"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Uzlādes laikā"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Kamēr tiek dokots"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nekad"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Izslēgts"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Lai kontrolētu, kas notiek, kad tālrunis tiek dokots un/vai ir miega režīmā, ieslēdziet ekrānsaudzētāju."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kad sākt"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Pašreizējais ekrānsaudzētājs"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Iestatījumi"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automātisks spilgtums"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Pacelt, lai ieslēgtu"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Gaidstāves ekrāns"</string>
@@ -1968,6 +1969,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN iestatīšana"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Darba PIN iestatīšana"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Kombinācijas iestatīšana"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Papildu drošībai iestatiet kombināciju šīs ierīces atbloķēšanai"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Darba kombinācijas iestatīšana"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Parole pirksta nosp. lietošanai"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Kombinācijas iestatīšana"</string>
@@ -2123,7 +2125,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Ārkārtas izsaukumu lietotne"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Atiest. lietotnes prefer."</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Vai atiest. liet. pref.?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Šādi tiks atiestatītas visas preferences, kas saistītas ar:\n\n"<li>"atspējotām lietotnēm;"</li>\n<li>"atspējotu lietotņu paziņojumiem;"</li>\n<li>"darbībām paredzētām noklusējuma lietojumprogrammām;"</li>\n<li>"lietotņu fona datu ierobežojumiem;"</li>\n<li>"visiem atļauju ierobežojumiem."</li>\n\n"Jūs nezaudēsiet lietotņu datus."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Šādi tiks atiestatītas visas preferences, kas saistītas ar:\n\n"<li>"atspējotām lietotnēm;"</li>\n<li>"atspējotu lietotņu paziņojumiem;"</li>\n<li>"noklusējuma lietojumprogrammām konkrētu darbību veikšanai;"</li>\n<li>"lietotņu fona datu ierobežojumiem;"</li>\n<li>"visiem atļauju ierobežojumiem;"</li>\n<li>"akumulatora lietojuma iestatījumiem."</li>\n\n"Jūs nezaudēsiet lietotņu datus."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Atiestatīt lietotnes"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Vietas pārvaldība"</string>
<string name="filter" msgid="9039576690686251462">"Filtrs"</string>
@@ -2378,7 +2380,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Atiestatīt iestatījumus"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Attēlojuma lieluma un teksta iestatījumi ir atiestatīti"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Vai atiestatīt displeja izmērus un tekstu?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Jūsu displeja izmēru un teksta preferences tiks atiestatītas uz tālruņa sākotnējiem iestatījumiem."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Jūsu displeja izmēru un teksta preferences tiks atiestatītas uz tālruņa sākotnējiem iestatījumiem."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Jūsu displeja izmēru un teksta preferences tiks atiestatītas uz planšetdatora sākotnējiem iestatījumiem."</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Atiestatīt"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Vai ir kādi plāni nedēļas nogalei?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Es došos uz pludmali. Vai vēlies pievienoties?"</string>
@@ -2972,6 +2975,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Nav lietots kopš pēdējās pilnās uzlādes"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nav lietots pēdējo 24 h laikā"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Citi lietotāji"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Akumulatora darbības laiks tiek aprēķināts, pamatojoties uz ierīces lietojuma datiem."</string>
<string name="estimated_time_left" msgid="948717045180211777">"Plānotais atlikušais laiks"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Līdz pilnai uzlādei"</string>
@@ -3061,6 +3065,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Pilna īsinājumvārdu un mijiedarbības funkcionalitāte"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Vienkārša runas pārvēršana tekstā"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Šis balss ievades pakalpojums varēs jūsu vietā nepārtraukti veikt balss pārraudzību un pārvaldīt lietojumprogrammas, kurās iespējota balss ievade. Tas ir saistīts ar lietojumprogrammu <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Vai iespējot šo pakalpojumu?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Ierīcē izpildāmās atpazīšanas iestatījumi"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Atpazīšana ierīcē"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Runas atpazīšana ierīcē"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Vēlamā programma"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Programmas iestatījumi"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Runas ātrums un augstums"</string>
@@ -3457,6 +3464,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Dzēst"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Tiks dzēstas visas šīs sesijas lietotnes un dati."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Noņemt"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Viesis (jūs)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Lietotāji"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Citi lietotāji"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Dzēst viesa darbības"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Dzēst visas viesa lietotnes un darbības, izejot no viesa režīma"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vai dzēst viesa darbības?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Šīs viesa sesijas darbības un dati tagad tiks dzēsti, un turpmākās viesu darbības tiks dzēstas katru reizi, kad iziesiet no viesa režīma."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Ieslēgt tālruņa zvanus"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ieslēgt tālruņa zvanus un īsziņas"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Dzēst lietotāju"</string>
@@ -4051,15 +4065,15 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Visi lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> paziņojumi"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Visi lietotnes <xliff:g id="APP_NAME">%1$s</xliff:g> paziņojumi"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptīvie paziņojumi"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="zero">Ap <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumiem dienā</item>
- <item quantity="one">Ap <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumu dienā</item>
- <item quantity="other">Ap <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumiem dienā</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="zero">Aptuveni <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumu dienā</item>
+ <item quantity="one">Aptuveni <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojums dienā</item>
+ <item quantity="other">Aptuveni <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumi dienā</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="zero">Ap <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumiem nedēļā</item>
- <item quantity="one">Ap <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumu nedēļā</item>
- <item quantity="other">Ap <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumiem nedēļā</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="zero">Aptuveni <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumu nedēļā</item>
+ <item quantity="one">Aptuveni <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojums nedēļā</item>
+ <item quantity="other">Aptuveni <xliff:g id="NUMBER_1">%,d</xliff:g> paziņojumi nedēļā</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nekad"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Ierīču un lietotņu paziņojumi"</string>
@@ -5339,7 +5353,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Neveikt nekādas darbības"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrēt"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Izslēgt skaņu"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Lai iespējotu, vispirms nomainiet iestatījumā “Barošanas pogas nospiešana un turēšana” piešķirto darbību uz barošanas izvēlnes atvēršanu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Lai iespējotu, vispirms nomainiet iestatījumu “Nospiest un turēt barošanas pogu” uz barošanas izvēlni."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Dati par tīklu"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Jūsu ierīces nosaukums ir redzams tālrunī instalētajām lietotnēm. Tas var būt redzams arī citām personām, ja izveidosiet savienojumu ar Bluetooth ierīcēm, Wi-Fi tīklu vai iestatīsiet Wi-Fi tīklāju."</string>
<string name="devices_title" msgid="649715719278562515">"Ierīces"</string>
@@ -5629,15 +5643,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ierīču vadīklas"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kartes un caurlaides"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kartes un caurlaides"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Barošanas pogas nospiešana un turēšana"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Nospiežot un turot tiek aktivizēts Asistents"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Nospiežot un turot tiek atvērta barošanas izvēlne"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Nospiešana un turēšana ir atspējota"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Nospiediet un turiet barošanas pogu"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Lai piekļūtu, nospiediet un turiet barošanas pogu"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Barošanas izvēlne"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitālais asistents"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Piekļūt digitālajam asistentam"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Piekļūt barošanas izvēlnei"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Lai to izmantotu, vispirms ir jāiestata ekrāna bloķēšana."</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Turēt, lai palaistu Asistentu"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Aktivizējiet Asistentu, turot barošanas pogu."</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Barošanas un ārkārtas izvēlne:\nvienlaikus nospiediet barošanas un skaļuma palielināšanas pogu."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Zvana signāla novēršana:\nsaīsne ir pieejama skaļuma izvēlnē."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Barošanas izvēlne:\nvienlaikus nospiediet barošanas pogu un skaļuma palielināšanas pogu"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Zvana signāla novēršana:\nlai izmantotu īsinājumtaustiņu, nospiediet skaļuma pogu"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Nospiešanas un turēšanas ilgums"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Pielāgojiet jutīgumu, izvēloties, cik ilgi nospiest un turēt barošanas pogu."</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Īsi"</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 648bac4..86d93fc 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"При користење на Pixel Imprint, моделот на отпечатокот се ажурира со слики. Сликите што се користат за создавање на моделот на отпечатокот на детето никогаш не се складираат, а самиот модел се складира безбедно во телефонот и никогаш не го напушта. Целата обработка се одвива безбедно во телефонот."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Сега може да ги избришете сликите и моделот на отпечатокот или да го исклучите „Отклучување со отпечаток на прст“ во кое било време во „Поставки“. Сликите и моделот на отпечатокот се складирани во телефонот додека не ги избришете."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Вие и вашето дете може да ги избришете сликите или моделот на отпечатокот или да го исклучите „Отклучувањето со отпечаток на прст“ во секое време во „Поставки“. Сликите и моделите на отпечатокот се складираат во телефонот додека не се избришат."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Телефонот може да се отклучи кога немате таква намера, како на пример, ако некој го допре до вашиот прст."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Телефонот може да се отклучи кога немате таква намера, како на пример, ако некој го допре до вашиот прст."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Таблетот може да се отклучи кога немате таква намера, како на пример, ако некој го допре до вашиот прст."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Уредот може да се отклучи кога немате таква намера, како на пример, ако некој го допре до вашиот прст."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Телефонот на вашето дете може да се отклучи кога детето нема намера за тоа, на пример, ако некој го постави телефонот под неговиот прст."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"За најдобри резултати, користете заштитник на екранот што е сертифициран со „Создадено за Google“. Со другите заштитници на екрани, отпечатоците може да не функционираат."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"За најдобри резултати, користете заштитник на екранот што е сертифициран со „Создадено за Google“. Со другите заштитници на екрани, отпечатоците на вашето дете може да не функционираат."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Илустрација со локација на уредот и сензорот за отпечаток"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Име"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Во ред"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Обидете се пак"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Избриши"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Допрете го сензорот"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Ставете го прстот на сензорот и подигнете го откако ќе почувствувате вибрации"</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Готово"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Упс, тоа не е сензорот"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Допрете го сензорот одзади со показалецот."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Регистрацијата не е завршена"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Времето за регистрирање отпечаток истече. Обидете се повторно."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Времето за поставување отпечаток истече"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Обидете се повторно сега или поставете отпечаток подоцна во „Поставки“"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Внесувањето отпечаток не успеа. Обидете се повторно или користете друг прст."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Додај друг"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Следно"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Приспособете го телефонот"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Пробајте различни стилови, тапети и друго"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Заштитник на екран"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"заштитник на екран"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Користи заштитник на екран"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Додека се полни или е приклучен"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"И во двата случаи"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Додека се полни"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Додека е приклучен на док"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Никогаш"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Исклучено"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"За да контролирате што се случува кога телефонот е приклучен на полнач и/или е во мирување, вклучете го заштитникот на екранот."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Кога да започне"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Тековен заштитник на екранот"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Поставки"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Автоматска осветленост"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Подигнете да се активира"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Амбиентален екран"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Поставете PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Поставете PIN за работен профил"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Поставете шема"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"За дополнителна безбедност, поставете шема за отклучување на уредот"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Поставете шема за работен профил"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"За отпечаток, поставете лозинка"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"За отпечаток, поставете шема"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Апликација за итност"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Ресетирај ги поставките за апликациите"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Да се ресетираат поставките за апликациите?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Со ова ќе се ресетираат сите поставки за:\n\n"<li>"оневозможените апликации"</li>\n<li>"оневозможените известувања за апликации"</li>\n<li>"стандардните апликации за дејства"</li>\n<li>"ограничувањата за интернет во заднина за апликациите"</li>\n<li>"сите ограничувања за дозволите"</li>\n\n"Нема да изгубите никакви податоци во апликациите."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Со ова ќе се ресетираат сите поставки за:\n\n"<li>"оневозможените апликации"</li>\n<li>"оневозможените известувања за апликации"</li>\n<li>"стандардните апликации за дејства"</li>\n<li>"ограничувањата за податоци од заднина за апликациите"</li>\n<li>"сите ограничувања за дозволите"</li>\n<li>"поставките за користење на батеријата"</li>\n\n"Нема да изгубите никакви податоци во апликациите."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Ресетирај апликации"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Управувај со простор"</string>
<string name="filter" msgid="9039576690686251462">"Филтер"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Ресетирај поставки"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Ресетирани се поставките за големина и текст на екранот"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Да се ресетираат големината и текстот на екранот?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Вашите поставки за големина и текст на екранот ќе се ресетираат на оригиналните поставки на телефонот"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Вашите поставки за големина и текст на екранот ќе се ресетираат на оригиналните поставки на телефонот"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Вашите поставки за големина и текст на екранот ќе се ресетираат на оригиналните поставки на таблетот"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Ресетирај"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Имате ли планови за викендот?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Одиме на плажа. Сакате да ни се придружите?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Не е користена од последното целосно полнење"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Не е користена во минатите 24 часа"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Други корисници"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Проценката за преостанатата батерија се базира врз користењето на уредот"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Проценето преостанато време"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"До целосно полнење"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Целосна услуга – клучен збор и интеракција"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Едноставна услуга – говор во текст"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Услугата за гласовен запис ќе може да извршува постојан гласовен надзор и да ги контролира гласовно овозможените апликации во ваше име. Ова доаѓа од апликацијата <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Овозможете користење на услугата?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Поставки за препознавање на уред"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Препознавање на уред"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Препознавање говор на уред"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Претпочитан софтвер"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Поставки на софтвер"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Брзина и интензитет на говор"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Избриши"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Сите апликации и податоци во сесијата ќе се избришат."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Отстрани"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Гостин (Вие)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Корисници"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Други корисници"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Избришете ја активноста на гостинот"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Избришете ги сите гостински апликации и податоци кога излегувате од режимот на гостин"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Да се избрише активноста на гостин?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Апликациите и податоците од оваа гостинска сесија ќе се избришат сега, а целата идна активност на гостите ќе се брише секој пат кога ќе излезете од режимот на гостин"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Вклучи телефонски повици"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Вклучи телефонски повици и SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Избриши корисник"</string>
@@ -4009,13 +4023,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Сите известувања од „<xliff:g id="APP_NAME">%1$s</xliff:g>“"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Сите известувања од <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Адаптивни известувања"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">околу <xliff:g id="NUMBER_1">%,d</xliff:g> известување дневно</item>
- <item quantity="other">околу <xliff:g id="NUMBER_1">%,d</xliff:g> известувања дневно</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Околу <xliff:g id="NUMBER_1">%,d</xliff:g> известување дневно</item>
+ <item quantity="other">Околу <xliff:g id="NUMBER_1">%,d</xliff:g> известувања дневно</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">околу <xliff:g id="NUMBER_1">%,d</xliff:g> известување неделно</item>
- <item quantity="other">околу <xliff:g id="NUMBER_1">%,d</xliff:g> известувања неделно</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Околу <xliff:g id="NUMBER_1">%,d</xliff:g> известување седмично</item>
+ <item quantity="other">Околу <xliff:g id="NUMBER_1">%,d</xliff:g> известувања седмично</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Никогаш"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Известувања во уреди и апликации"</string>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Не прави ништо"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Вибрации"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Исклучи звук"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"За да се овозможи, прво променете ја опцијата „Притиснете го и задржете го копчето за вклучување“ во менито на копчето за вклучување."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"За да се овозможи, прво променете ја опцијата „Притиснете го и задржете го копчето за вклучување“ во менито на копчето за вклучување."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Детали за мрежата"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Името на уредот е видливо за апликациите на телефонот. Може да го видат и други луѓе кога ќе се поврзете со уреди со Bluetooth, ќе се поврзете на Wi-Fi мрежа или кога ќе поставите точка на пристап за Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Уреди"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"контроли за уреди"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Картички и пропусници"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"картички и пропусници"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Притиснете и задржете го копчето за вклучување"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Притиснете и задржете за „Помошникот“"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Притиснете и задржете за менито на копчето за вклучување"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Притиснувањето и задржувањето е оневозможено"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Притиснете го и задржете го копчето за вклучување"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Притиснете го и задржете го копчето за вклучување за пристап"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Мени на копчето за вклучување"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Дигитален помошник"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Пристап до дигиталниот помошник"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Пристап до менито на копчето за вклучување"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"За да користите, прво поставете заклучување екран"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Задржете за „Помошникот“"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Стартувајте го „Помошникот“ со задржување на копчето за вклучување"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Мени на копчето за вклучување и за итни случаи:\nпритиснете ги копчињата за вклучување и зголемување на звукот истовремено."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Спречете ѕвонење:\nкратенката е достапна во менито за јачина на звук."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Мени на копчето за вклучување:\nпритиснете ги и задржете ги копчињата за вклучување и зголемување на звукот истовремено"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Спречете ѕвонење:\nпритиснете го копчето за јачина на звук за да ја користите кратенката"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Времетраење на притискање и задржување"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Приспособете ја чувствителноста со бирање колку долго треба да го притиснете и задржите копчето за вклучување"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Кратко"</string>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 28f988c..0d63904 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"അവർ Pixel Imprint ഉപയോഗിക്കുമ്പോൾ, അവരുടെ ഫിംഗർപ്രിന്റ് മോഡൽ അപ്ഡേറ്റ് ചെയ്യാൻ ചിത്രങ്ങൾ ഉപയോഗിക്കുന്നു. ഫിംഗർപ്രിന്റ് മോഡൽ സൃഷ്ടിക്കാൻ ഉപയോഗിക്കുന്ന ചിത്രങ്ങൾ സംഭരിക്കില്ലെങ്കിലും ഫിംഗർപ്രിന്റ് മോഡൽ സുരക്ഷിതമായി ഫോണിൽ സംഭരിക്കുന്നു, അത് ഒരിക്കലും ഫോണിൽ നിന്ന് പുറത്ത് പോകില്ല. എല്ലാ പ്രോസസിംഗും ഫോണിൽ സുരക്ഷിതമായി നടക്കുന്നു."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"നിങ്ങൾക്ക് ക്രമീകരണത്തിൽ ഏതുസമയത്തും ഫിംഗർപ്രിന്റ് ചിത്രങ്ങളും മോഡലും ഇല്ലാതാക്കാനോ ഫിംഗർപ്രിന്റ് അൺലോക്ക് ഓഫാക്കാനോ കഴിയും. നിങ്ങൾ ഇല്ലാതാക്കുന്നത് വരെ ഫിംഗർപ്രിന്റ് ചിത്രങ്ങളും മോഡലുകളും ഫോണിൽ സംഭരിക്കുന്നു."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"നിങ്ങൾക്കും കുട്ടിക്കും ക്രമീകരണത്തിൽ ഏതുസമയത്തും ഫിംഗർപ്രിന്റ് ചിത്രങ്ങളും മോഡലും ഇല്ലാതാക്കാനോ ഫിംഗർപ്രിന്റ് അൺലോക്ക് ഓഫാക്കാനോ കഴിയും. ഫിംഗർപ്രിന്റ് ചിത്രങ്ങളും മോഡലുകളും ഇല്ലാതാക്കുന്നത് വരെ അവ ഫോണിൽ സംഭരിക്കുന്നു."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"ആരെങ്കിലും ഫോൺ നിങ്ങളുടെ വിരലിൽ തട്ടിക്കുന്നത് പോലെ, നിങ്ങൾ ഉദ്ദേശിക്കാത്ത സന്ദർഭങ്ങളിലും ഫോൺ അൺലോക്ക് ചെയ്യാനാകും."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"ആരെങ്കിലും ഫോൺ നിങ്ങളുടെ വിരലിൽ തട്ടിക്കുന്നത് പോലെ, നിങ്ങൾ ഉദ്ദേശിക്കാത്ത സന്ദർഭങ്ങളിലും ഫോൺ അൺലോക്ക് ചെയ്യാനാകും."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"ആരെങ്കിലും ടാബ്ലെറ്റ് നിങ്ങളുടെ വിരലിൽ തട്ടിക്കുന്നത് പോലെ, നിങ്ങൾ ഉദ്ദേശിക്കാത്ത സന്ദർഭങ്ങളിലും ടാബ്ലെറ്റ് അൺലോക്ക് ചെയ്യാനാകും."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"ആരെങ്കിലും ഉപകരണം നിങ്ങളുടെ വിരലിൽ തട്ടിക്കുന്നത് പോലെ, നിങ്ങൾ ഉദ്ദേശിക്കാത്ത സന്ദർഭങ്ങളിലും ഉപകരണം അൺലോക്ക് ചെയ്യാനാകും."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"ആരെങ്കിലും ഫോൺ നിങ്ങളുടെ കുട്ടിയുടെ വിരലിന് നേരെ പിടിച്ചാൽ, അവർ ഉദ്ദേശിക്കാത്ത സന്ദർഭങ്ങളിലും ഫോൺ അൺലോക്ക് ചെയ്യാനാകും."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"മികച്ച ഫലങ്ങൾക്കായി, Google-നായി നിർമ്മിച്ചതെന്ന് സാക്ഷ്യപ്പെടുത്തിയ സ്ക്രീൻ പ്രൊട്ടക്ടർ ഉപയോഗിക്കുക. മറ്റ് സ്ക്രീൻ പ്രൊട്ടക്ടറുകളിൽ നിങ്ങളുടെ വിരലടയാളം പ്രവർത്തിക്കണമെന്നില്ല."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"മികച്ച ഫലങ്ങൾക്കായി, Google-നായി നിർമ്മിച്ചതെന്ന് സാക്ഷ്യപ്പെടുത്തിയ സ്ക്രീൻ പ്രൊട്ടക്ടർ ഉപയോഗിക്കുക. മറ്റ് സ്ക്രീൻ പ്രൊട്ടക്ടറുകളിൽ നിങ്ങളുടെ കുട്ടിയുടെ വിരലടയാളം പ്രവർത്തിക്കണമെന്നില്ല."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ഉപകരണത്തിലെ ചിത്രീകരണവും ഫിംഗർപ്രിന്റ് സെൻസർ ലൊക്കേഷനും"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"പേര്"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ശരി"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"വീണ്ടും ശ്രമിക്കുക"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"ഇല്ലാതാക്കുക"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"സെൻസർ സ്പർശിക്കുക"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"സെൻസറിൽ വിരൽ വച്ച് വൈബ്രേഷൻ അനുഭവപ്പെട്ട ശേഷം വിരൽ മാറ്റുക."</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"പൂർത്തിയായി"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"ക്ഷമിക്കണം, അത് സെൻസർ അല്ല"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"നിങ്ങളുടെ ഫോണിന്റെ പിൻവശത്തെ സെൻസർ സ്പർശിക്കുക. ചൂണ്ടുവിരൽ ഉപയോഗിക്കുക."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"എൻറോൾമെന്റ് പൂർത്തിയായിട്ടില്ല"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"ഫിംഗർപ്രിന്റ് എൻറോൾമെന്റിന്റെ സമയ പരിധി എത്തി. വീണ്ടും ശ്രമിക്കുക."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"ഫിംഗർപ്രിന്റ് സജ്ജീകരണം ടൈംഔട്ടായി"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ഇപ്പോൾ വീണ്ടും ശ്രമിക്കുക അല്ലെങ്കിൽ പിന്നീട് ക്രമീകരണത്തിൽ ഫിംഗർപ്രിന്റ് സജ്ജീകരിക്കുക"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ഫിംഗർപ്രിന്റ് എൻറോൾമെന്റ് പ്രവർത്തിച്ചില്ല. വീണ്ടും ശ്രമിക്കുകയോ മറ്റൊരു വിരൽ ഉപയോഗിക്കുകയോ ചെയ്യുക."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"മറ്റൊന്ന് ചേർക്കുക"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"അടുത്തത്"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"നിങ്ങളുടെ ഫോൺ ഇഷ്ടാനുസൃതമാക്കുക"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"വ്യത്യസ്ത സ്റ്റൈലുകളും വാൾപേപ്പറുകളും മറ്റും പരീക്ഷിക്കൂ"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"സ്ക്രീൻ സേവർ"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"സ്ക്രീൻ സേവർ"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"സ്ക്രീൻ സേവർ ഉപയോഗിക്കുക"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ചാർജ്/ഡോക്ക് ചെയ്യുമ്പോൾ"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"ഏതിലെങ്കിലും"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ചാർജ് ചെയ്യുമ്പോൾ"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ഡോക്ക് ചെയ്തിരിക്കുമ്പോൾ"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ഒരിക്കലും വേണ്ട"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ഓഫ്"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ഫോൺ ഡോക്ക് ചെയ്തിരിക്കുമ്പോൾ ഒപ്പം/അല്ലെങ്കിൽ ഉറക്കത്തിലായിരിക്കുമ്പോൾ ഫോണിൽ നടക്കുന്നതെല്ലാം നിയന്ത്രിക്കുന്നതിന് സ്ക്രീൻ സേവർ ഓണാക്കുക."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"എപ്പോൾ തുടങ്ങണം"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"നിലവിലെ സ്ക്രീൻ സേവർ"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ക്രമീകരണം"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"യാന്ത്രിക തെളിച്ചം"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"സജീവമാക്കാൻ ലിഫ്റ്റുചെയ്യുക"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"പാതിമയക്ക ഡിസ്പ്ലേ"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"പിൻ സജ്ജീകരിക്കുക"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"ഔദ്യോഗിക പിൻ സജ്ജീകരിക്കുക"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"പാറ്റേൺ സജ്ജീകരിക്കുക"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"അധിക സുരക്ഷയ്ക്ക്, ഉപകരണം അൺലോക്ക് ചെയ്യാനൊരു പാറ്റേൺ സജ്ജീകരിക്കുക"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"ഔദ്യോഗിക പാറ്റേൺ സജ്ജീകരിക്കുക"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കാൻ, പാസ്വേഡ് സജ്ജമാക്കുക"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കാൻ, പാറ്റേൺ സജ്ജമാക്കുക"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"അടിയന്തിര അപ്ലിക്കേഷൻ"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"ആപ്പ് മുൻഗണനകൾ റീസെറ്റ് ചെയ്യുക"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"ആപ്പ് മുൻഗണനകൾ റീസെറ്റ് ചെയ്യണോ?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ഇത് ഇനിപ്പറയുന്നവയ്ക്കുള്ള എല്ലാ മുൻഗണനകളും റീസെറ്റ് ചെയ്യും:\n\n"<li>"പ്രവർത്തനരഹിതമാക്കിയ ആപ്പുകൾ"</li>\n<li>"പ്രവർത്തനരഹിതമാക്കിയ ആപ്പ് അറിയിപ്പുകൾ"</li>\n<li>"പ്രവർത്തനങ്ങൾക്കുള്ള ഡിഫോൾട്ട് ആപ്പുകൾ"</li>\n<li>"ആപ്പുകൾക്കുള്ള പശ്ചാത്തല ഡാറ്റാ നിയന്ത്രണങ്ങൾ"</li>\n<li>" ഏതെങ്കിലും അനുമതി നിയന്ത്രണങ്ങൾ"</li>\n\n" നിങ്ങൾക്ക് ആപ്പ് ഡാറ്റയൊന്നും നഷ്ടമാകില്ല."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ഇത് ഇനിപ്പറയുന്നവയ്ക്കുള്ള എല്ലാ മുൻഗണനകളും റീസെറ്റ് ചെയ്യും:\n\n"<li>"പ്രവർത്തനരഹിതമാക്കിയ ആപ്പുകൾ"</li>\n<li>"പ്രവർത്തനരഹിതമാക്കിയ ആപ്പ് അറിയിപ്പുകൾ"</li>\n<li>"പ്രവർത്തനങ്ങൾക്കുള്ള ഡിഫോൾട്ട് ആപ്പുകൾ"</li>\n<li>"ആപ്പുകൾക്കുള്ള പശ്ചാത്തല ഡാറ്റാ നിയന്ത്രണങ്ങൾ"</li>\n<li>"ഏതെങ്കിലും അനുമതി നിയന്ത്രണങ്ങൾ"</li>\n<li>"ബാറ്ററി ഉപയോഗ ക്രമീകരണം"</li>\n\n"ഒരു ആപ്പ് ഡാറ്റയും നിങ്ങൾക്ക് നഷ്ടപ്പെടില്ല."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"ആപ്പുകൾ റീസെറ്റ് ചെയ്യുക"</string>
<string name="manage_space_text" msgid="9013414693633572277">"ഇടം മാനേജ് ചെയ്യുക"</string>
<string name="filter" msgid="9039576690686251462">"ഫിൽട്ടർ ചെയ്യുക"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"ക്രമീകരണം റീസെറ്റ് ചെയ്യൂ"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ഡിസ്പ്ലേ വലുപ്പവും ടെക്സ്റ്റ് ക്രമീകരണവും റീസെറ്റ് ചെയ്തു"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ഡിസ്പ്ലേ വലുപ്പവും ടെക്സ്റ്റും റീസെറ്റ് ചെയ്യണോ?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"നിങ്ങളുടെ ഡിസ്പ്ലേ വലുപ്പവും ടെക്സ്റ്റ് മുൻഗണനകളും ഫോണിന്റെ ഒറിജിനൽ ക്രമീകരണത്തിലേക്ക് റീസെറ്റ് ചെയ്യും"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"നിങ്ങളുടെ ഡിസ്പ്ലേ വലുപ്പവും ടെക്സ്റ്റ് മുൻഗണനകളും ഫോണിന്റെ ഒറിജിനൽ ക്രമീകരണത്തിലേക്ക് റീസെറ്റ് ചെയ്യും"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"നിങ്ങളുടെ ഡിസ്പ്ലേ വലുപ്പവും ടെക്സ്റ്റ് മുൻഗണനകളും ടാബ്ലെറ്റിന്റെ ഒറിജിനൽ ക്രമീകരണത്തിലേക്ക് റീസെറ്റ് ചെയ്യും"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"റീസെറ്റ് ചെയ്യുക"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"വാരാന്ത്യ പരിപാടികൾ എന്തെങ്കിലുമുണ്ടോ?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ബീച്ചിൽ പോകുന്നു. ചേരാൻ താൽപ്പര്യമുണ്ടോ?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"അവസാനം പൂർണ്ണമായി ചാർജ് ആയതിന് ശേഷം ഉപയോഗിച്ചിട്ടില്ല"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"കഴിഞ്ഞ 24 മണിക്കൂറിനിടെ ഉപയോഗിച്ചിട്ടില്ല"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"മറ്റ് ഉപയോക്താക്കൾ"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"നിങ്ങളുടെ ഉപകരണ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കിയുള്ളതാണ് ബാക്കിയുള്ള ബാറ്ററിയുടെ ഏകദേശക്കണക്ക്"</string>
<string name="estimated_time_left" msgid="948717045180211777">"അവശേഷിക്കുന്ന ഏകദേശ സമയം"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"പൂർണ്ണമായി ചാർജ്ജുചെയ്യുന്നത് വരെ"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"മുഴുവൻ ഹോട്ട്വേഡും ആശയവിനിമയവും"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"ലളിതമായ സ്പീച്ച് ടു ടെക്സ്റ്റ്"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"ഈ വോയ്സ് ഇൻപുട്ട് സേവനത്തിന് നിങ്ങൾക്കായി എപ്പോഴും വോയ്സ് നിരീക്ഷിക്കാനും വോയ്സ് പ്രവർത്തനക്ഷമമാക്കിയ അപ്ലിക്കേഷനുകളെ നിയന്ത്രിക്കാനുമാകും. ഇത് <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> അപ്ലിക്കേഷനിൽ നിന്നുള്ളതാണ്. ഈ സേവനത്തിന്റ ഉപയോഗം പ്രവർത്തനക്ഷമമാക്കണോ?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"ഉപകരണത്തിലെ തിരിച്ചറിയൽ ക്രമീകരണം"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"ഉപകരണത്തിലെ തിരിച്ചറിയൽ"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"ഉപകരണത്തിലെ സംഭാഷണം തിരിച്ചറിയൽ"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"മുൻഗണന നൽകുന്ന എഞ്ചിൻ"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"എഞ്ചിൻ ക്രമീകരണം"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"വായനയുടെ വേഗത, ഉച്ചത"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"ഇല്ലാതാക്കുക"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"ഈ സെഷനിലെ എല്ലാ ആപ്പുകളും ഡാറ്റയും ഇല്ലാതാക്കും."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"നീക്കംചെയ്യുക"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"അതിഥി (നിങ്ങൾ)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ഉപയോക്താക്കൾ"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"മറ്റ് ഉപയോക്താക്കൾ"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"അതിഥി ആക്റ്റിവിറ്റി ഇല്ലാതാക്കുക"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"അതിഥി മോഡിൽ നിന്ന് പുറത്തുകടക്കുമ്പോൾ എല്ലാ അതിഥി ആപ്പുകളും ഡാറ്റയും ഇല്ലാതാക്കുക"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"അതിഥി ആക്റ്റിവിറ്റി ഇല്ലാതാക്കണോ?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ഈ അതിഥി സെഷനിൽ നിന്നുള്ള ആപ്പുകളും ഡാറ്റയും ഇപ്പോൾ ഇല്ലാതാക്കും, അതിഥി മോഡിൽ നിന്ന് നിങ്ങൾ പുറത്തുകടക്കുമ്പോഴെല്ലാം ഭാവിയിലെ എല്ലാ അതിഥി ആക്റ്റിവിറ്റിയും ഇല്ലാതാക്കും"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ഫോൺ കോളുകൾ ഓണാക്കുക"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ഫോൺ കോളുകൾ, SMS എന്നിവ ഓണാക്കുക"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ഉപയോക്താവിനെ ഇല്ലാതാക്കുക"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"എല്ലാ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" അറിയിപ്പുകളും"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"എല്ലാ <xliff:g id="APP_NAME">%1$s</xliff:g> അറിയിപ്പുകളും"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"അഡാപ്റ്റീവ് അറിയിപ്പുകൾ"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">പ്രതിദിനം ~<xliff:g id="NUMBER_1">%,d</xliff:g> അറിയിപ്പുകൾ</item>
- <item quantity="one">പ്രതിദിനം ~<xliff:g id="NUMBER_0">%d</xliff:g> അറിയിപ്പ്</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">ഓരോ ദിവസവും ഏകദേശം <xliff:g id="NUMBER_1">%,d</xliff:g> അറിയിപ്പുകൾ</item>
+ <item quantity="one">ഓരോ ദിവസവും ഏകദേശം <xliff:g id="NUMBER_0">%d</xliff:g> അറിയിപ്പ്</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">പ്രതിവാരം ~<xliff:g id="NUMBER_1">%,d</xliff:g> അറിയിപ്പുകൾ</item>
- <item quantity="one">പ്രതിവാരം ~<xliff:g id="NUMBER_0">%d</xliff:g> അറിയിപ്പ്</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">ഓരോ ആഴ്ചയും ഏകദേശം <xliff:g id="NUMBER_1">%,d</xliff:g> അറിയിപ്പുകൾ</item>
+ <item quantity="one">ഓരോ ആഴ്ചയും ഏകദേശം <xliff:g id="NUMBER_0">%d</xliff:g> അറിയിപ്പ്</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"ഒരിക്കലും"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ഉപകരണ, ആപ്പ് അറിയിപ്പുകൾ"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"ഒന്നും ചെയ്യരുത്"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"വൈബ്രേറ്റ് ചെയ്യുക"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"മ്യൂട്ട് ചെയ്യുക"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"പ്രവർത്തനക്ഷമമാക്കാൻ ആദ്യം \"പവർ ബട്ടൺ അമർത്തിപ്പിടിക്കുക\" പവർ മെനുവിലേക്ക് മാറ്റുക."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"പ്രവർത്തനക്ഷമമാക്കാൻ, ആദ്യം \"പവർ ബട്ടൺ അമർത്തിപ്പിടിക്കുക\" പവർ മെനുവിലേക്ക് മാറ്റുക."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"നെറ്റ്വർക്ക് വിശദാംശങ്ങൾ"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"ഫോണിലെ ആപ്പുകൾക്ക് നിങ്ങളുടെ ഉപകരണത്തിന്റെ പേര് ദൃശ്യമാണ്. Bluetooth ഉപകരണങ്ങളിലേക്കോ വൈഫൈ നെറ്റ്വർക്കിലേക്കോ കണക്റ്റ് ചെയ്യുമ്പോഴോ ഒരു വൈഫൈ ഹോട്ട്സ്പോട്ട് സജ്ജീകരിക്കുമ്പോഴോ ഇത് മറ്റ് ആളുകൾക്കും കാണാനായേക്കും."</string>
<string name="devices_title" msgid="649715719278562515">"ഉപകരണങ്ങൾ"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ഉപകരണ നിയന്ത്രണങ്ങൾ"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"കാർഡുകളും പാസുകളും"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"കാർഡുകളും പാസുകളും"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"പവർ ബട്ടൺ അമർത്തിപ്പിടിക്കുക"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant-ന്, അമർത്തിപ്പിടിക്കുക"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"പവർ മെനുവിന്, അമർത്തിപ്പിടിക്കുക"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"അമർത്തിപ്പിടിക്കൽ പ്രവർത്തനരഹിതമാക്കി"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"പവർ ബട്ടൺ അമർത്തിപ്പിടിക്കുക"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"ആക്സസ് ചെയ്യാൻ പവർ ബട്ടൺ അമർത്തിപ്പിടിക്കുക"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"പവർ മെനു"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ഡിജിറ്റൽ അസിസ്റ്റന്റ്"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ഡിജിറ്റൽ അസിസ്റ്റന്റ് ആക്സസ് ചെയ്യുക"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"പവർ മെനു ആക്സസ് ചെയ്യുക"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ഉപയോഗിക്കാൻ, ആദ്യം സ്ക്രീൻ ലോക്ക് സജ്ജീകരിക്കുക"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant-നായി അമർത്തിപ്പിടിക്കുക"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"പവർ ബട്ടൺ അമർത്തിപ്പിടിച്ച് Assistant സജീവമാക്കുക"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"പവർ, അടിയന്തര മെനു:\nപവർ, ശബ്ദം കൂട്ടുക എന്നീ ബട്ടണുകൾ ഒരേസമയം അമർത്തുക."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"റിംഗ് ചെയ്യുന്നത് തടയുക:\nശബ്ദ മെനുവിൽ കുറുക്കുവഴി ലഭ്യമാണ്."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"പവർ മെനു:\nപവർ ബട്ടണും ശബ്ദം കൂട്ടുന്ന ബട്ടണും ഒരുമിച്ച് അമർത്തുക"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"റിംഗ് ചെയ്യുന്നത് തടയുക:\nകുറുക്കുവഴിക്കായി ഒരു വോളിയം ബട്ടൺ അമർത്തുക"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"സമയ ദൈർഘ്യം അമർത്തിപ്പിടിക്കുക"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"പവർ ബട്ടൺ എത്ര സമയം അമർത്തിപ്പിടിക്കണമെന്ന് തിരഞ്ഞെടുത്ത് സെൻസിറ്റിവിറ്റി ക്രമീകരിക്കുക"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"ദൈർഘ്യം കുറഞ്ഞത്"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 21f097a..f1fcceb 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Таны хүүхэд Pixel Imprint-г ашиглах үед зургийг түүний хурууны хээний загварыг шинэчлэхэд ашиглана. Таны хүүхдийн хурууны хээний загварыг үүсгэхэд ашигласан зургийг хэзээ ч хадгалахгүй хэдий ч хурууны хээний загварыг утсанд аюулгүйгээр хадгалах бөгөөд тэндээ үлдэнэ. Бүх боловсруулалт утсанд аюулгүйгээр хийгдэнэ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Та хүссэн үедээ Тохиргоо хэсэгт хурууны хээний зургууд болон загвараа устгах эсвэл Хурууны хээгээр түгжээ тайлах онцлогийг унтраах боломжтой. Хурууны хээний зургууд болон загваруудыг таныг устгах хүртэл утсан дээр хадгална."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Та болон таны хүүхэд хүссэн үедээ Тохиргоо хэсэгт түүний хурууны хээний зураг болон загварыг устгах эсвэл Хурууны хээгээр түгжээ тайлах онцлогийг унтраах боломжтой. Хурууны хээний зураг болон загварыг устгах хүртэл утсанд хадгална."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Таны утсыг хэн нэгэн хуруунд тань барьж хүргэх зэргээр түгжээг нь санамсаргүйгээр тайлах боломжтой."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Таны утсыг хэн нэгэн хуруунд тань барьж хүргэх зэргээр түгжээг нь санамсаргүйгээр тайлах боломжтой."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Таны таблетыг хэн нэгэн хуруунд тань барьж хүргэх зэргээр таныг хүсээгүй байхад түгжээг нь тайлах боломжтой."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Таны төхөөрөмжийг хэн нэгэн хуруунд тань барьж хүргэх зэргээр таныг хүсээгүй байхад түгжээг нь тайлах боломжтой."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Таны хүүхдийн утсыг хэн нэгэн хуруунд нь барьж хүргэх зэргээр түгжээг нь санамсаргүйгээр тайлах боломжтой."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Хамгийн сайн үр дүнд хүрэхийн тулд Made for Google-р баталгаажсан дэлгэц хамгаалагчийг ашиглана уу. Бусад дэлгэц хамгаалагчийг ашиглах үед таны хурууны хээг танихгүй байж болзошгүй."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Хамгийн сайн үр дүнд хүрэхийн тулд Made for Google-р баталгаажсан дэлгэц хамгаалагчийг ашиглана уу. Бусад дэлгэц хамгаалагчийг ашиглах үед таны хүүхдийн хурууны хээг танихгүй байж болзошгүй."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Төхөөрөмж болон хурууны хээний мэдрэгчийн байршлын зураг"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Нэр"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Дахин оролдох"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Устгах"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Мэдрэгчид хүрнэ үү"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Мэдрэгч дээр хуруугаа тавиад, чичиргээ мэдрэгдэхэд аваарай"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Болсон"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Уучлаарай, энэ мэдрэгч биш байна"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Утасныхаа ар талын мэдрэгчид хүрнэ үү. Долоовор хуруугаа ашиглана уу."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Бүртгэлийг гүйцэт хийж чадсангүй"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Хурууны хээ оруулах хугацаа өнгөрсөн байна. Дахин оруулна уу."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Хурууны хээний тохируулга завсарласан"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Одоо дахин оролдох эсвэл Тохиргоо хэсэгт хурууны хээгээ тохируулна уу"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Хурууны хээг оруулж чадсангүй. Дахин оролдох, эсвэл өөр хуруу ашиглана уу."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Өөрийг нэмэх"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Дараах"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Утсаа өөрчлөх"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Өөр загвар, дэлгэцийн зураг болон бусад зүйлийг туршиж үзнэ үү"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Дэлгэц амраагч"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"дэлгэц амраагч"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Дэлгэц амраагчийг ашиглах"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Цэнэглэх эсвэл суурилуулах үед"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Аль аль нь"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Цэнэглэж байх үед"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Док дээр суурилуулсан үед"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Хэзээ ч үгүй"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Идэвхгүй"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Утсыг суурилуулсан ба/эсвэл идэвхгүй үед хэрхэхийг удирдахын тулд дэлгэц амраагчийг асаана уу."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Эхлэх үе"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Одоогийн дэлгэц амраагч"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Тохиргоо"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Автомат гэрэлтүүлэг"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Сэрээхийн тулд өргөх"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Идэвхгүй дэлгэц"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"ПИН тохируулах"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Ажлын ПИН тохируулах"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Хээ тохируулах"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Хамгаалалтыг сайжруулахын тулд төхөөрөмжийн түгжээг тайлах хээ тохируулна уу"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Ажлын хээ тохируулах"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Хурууны хээ ашиглахын тулд нууц үг тохируулах"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Хурууны хээ ашиглахын тулд хээ тохируулах"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Яаралтай тусламжийн апп"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Апп тохируулгыг дахин шинэчлэх"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Апп тохируулгыг дахин шинэчлэх үү?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Энэ нь дараахын бүх тохиргоог шинэчилнэ:\n\n "<li>"Идэвхгүй болгосон хэрэглээний аппууд"</li>\n" "<li>"Идэвхгүй болгосон аппын мэдэгдлүүд"</li>\n" "<li>"Үйлдэл хийх өгөгдмөл аппууд"</li>\n" "<li>"Аппуудын цаана дата ашиглах хязгаарлалт"</li>\n" "<li>"Зөвшөөрлийн аливаа хязгаарлалт"</li>\n\n" Та аппын ямар ч өгөгдлөө алдахгүй."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Энэ нь дараахын бүх тохиргоог шинэчилнэ:\n\n"<li>"Идэвхгүй болгосон аппууд"</li>\n<li>"Идэвхгүй болгосон аппын мэдэгдэл"</li>\n<li>"Үйлдэл хийх өгөгдмөл аппликэйшнууд"</li>\n<li>"Аппуудын арын дата хязгаарлалт"</li>\n<li>"Аливаа зөвшөөрлийн хязгаарлалт"</li>\n<li>"Батарей ашиглалтын тохиргоо"</li>\n\n"Та ямар ч аппын өгөгдөл алдахгүй."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Апп-г дахин шинэчлэх"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Эзэлсэн зайг удирдах"</string>
<string name="filter" msgid="9039576690686251462">"Шүүлтүүр"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Тохиргоог шинэчлэх"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Дэлгэцийн хэмжээ болон текстийн тохиргоог шинэчилсэн"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Дэлгэцийн хэмжээ болон текстийг шинэчлэх үү?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Таны дэлгэцийн хэмжээ болон текстийн сонголтыг утасны эх тохиргоо руу шинэчилнэ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Таны дэлгэцийн хэмжээ болон текстийн сонголтыг утасны эх тохиргоо руу шинэчилнэ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Таны дэлгэцийн хэмжээ болон текстийн сонголтыг таблетын эх тохиргоо руу шинэчилнэ"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Шинэчлэх"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Амралтын өдрүүдээр ямар нэг төлөвлөгөө байна уу?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Далайн эрэг рүү явна. Цуг явах уу?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Сүүлд бүрэн цэнэглэснээс хойш ашиглаагүй"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Өнгөрсөн 24 цагийн турш ашиглаагүй"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Бусад хэрэглэгч"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Таны төхөөрөмжийн ашиглалтад үндэслэн батарейны үлдсэн түвшнийг тооцдог"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Барагцаалсан үлдсэн хугацаа"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Бүрэн цэнэглэх хүртэл"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Бүрэн хотворд болон харилцан үйлчлэл"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Энгийн яриаг бичвэрт буулгах"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Энэ дуун оруулгын үйлчилгээ нь дуун хяналтыг байнга ажиллуулах болон дуугаар ажиллах апп-уудыг таны өмнөөс хянах боломжтой болно.Үүнийг <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> аппликейшн нийлүүлдэг. Энэ үйлчилгээг идэвхжүүлэх үү?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Төхөөрөмж дээрх танилтын тохиргоо"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Төхөөрөмж дээрх танилт"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Төхөөрөмж дээрх яриа таних"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Давуу систем"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Хөдөлгүүрийн тохиргоо"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Ярианы түвшин, өнгө"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Устгах"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Энэ харилцан үйлдлийн бүх апп болон дата устах болно."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Хасах"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Зочин (Та)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Хэрэглэгчид"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Бусад хэрэглэгч"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Зочны үйл ажиллагааг устгах"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Бүх зочны апп болон өгөгдлийг зочны горимоос гарах үед устгана"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Зочны үйл ажиллагааг устгах уу?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Энэ зочны харилцан үйлдлийн аппууд болон өгөгдлийг одоо устгах бөгөөд ирээдүйн бүх зочны үйл ажиллагааг таныг зочны горимоос гарах бүрд устгана"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Утасны дуудлагыг идэвхжүүлэх"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Утасны дуудлага & SMS авах"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Хэрэглэгчийг устгах"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\"-н бүх мэдэгдэл"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>-н бүх мэдэгдэл"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Орчинтой тохирсон мэдэгдлүүд"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~Өдөрт <xliff:g id="NUMBER_1">%,d</xliff:g> мэдэгдэл</item>
- <item quantity="one">~Өдөрт <xliff:g id="NUMBER_0">%d</xliff:g> мэдэгдэл</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Өдөрт ойролцоогоор <xliff:g id="NUMBER_1">%,d</xliff:g> мэдэгдэл</item>
+ <item quantity="one">Өдөрт ойролцоогоор <xliff:g id="NUMBER_0">%d</xliff:g> мэдэгдэл</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~Долоо хоногт <xliff:g id="NUMBER_1">%,d</xliff:g> мэдэгдэл</item>
- <item quantity="one">~Долоо хоногт <xliff:g id="NUMBER_0">%d</xliff:g> мэдэгдэл</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Долоо хоногт ойролцоогоор <xliff:g id="NUMBER_1">%,d</xliff:g> мэдэгдэл</item>
+ <item quantity="one">Долоо хоногт ойролцоогоор <xliff:g id="NUMBER_0">%d</xliff:g> мэдэгдэл</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Хэзээ ч үгүй"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Төхөөрөмж, аппын мэдэгдлүүд"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Юу ч бүү хий"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Чичиргэх"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Дууг хаах"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Идэвхжүүлэхийн тулд эхлээд \"Асаах/унтраах товчийг удаан дарах\"-ыг асаах/унтраах цэс болгож өөрчлөөрэй."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Идэвхжүүлэхийн тулд эхлээд \"Асаах/унтраах товчийг удаан дарах\"-ыг асаах/унтраах цэс болгож өөрчлөөрэй."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Сүлжээний мэдээлэл"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Таны төхөөрөмжийн нэр таны утсан дээрх аппуудад харагдана. Үүнийг мөн таныг Bluetooth төхөөрөмжүүд болон Wi-Fi сүлжээнд холбогдох эсвэл Wi-Fi сүлжээний цэг тохируулах үед бусад хүн харж болзошгүй."</string>
<string name="devices_title" msgid="649715719278562515">"Төхөөрөмжүүд"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"төхөөрөмжийн хяналт"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Карт, тасалбарууд"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"карт, тасалбарууд"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Асаах/унтраах товчийг удаан дарна уу"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Туслахыг ашиглахын тулд удаан дарах товчийг идэвхжүүлсэн"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Асаах/унтраах цэсэд удаан дарах товчийг идэвхжүүлсэн"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Удаан дарах товчийг идэвхгүй болгосон"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Асаах/унтраах товчийг удаан дарна уу"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Нэвтрэхийн тулд асаах/унтраах товчийг удаан дарна уу"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Асаах/унтраах цэс"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Дижитал туслах"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Дижитал туслах руу нэвтрэх"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Асаах/унтраах цэс рүү нэвтрэх"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Ашиглахын тулд эхлээд дэлгэцийн түгжээг тохируулна уу"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Туслахыг дуудахын тулд удаан дарна уу"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Асаах/унтраах товчийг удаан дарснаар Туслахыг идэвхжүүлнэ үү"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Асаах/унтраах болон яаралтай тусламжийн цэс:\nАсаах/унтраах болон дууны түвшнийг нэмэх товчийг зэрэг дарна уу."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Хонх дуугаргахаас сэргийлэх:\nДууны түвшний цэсэд товчлол боломжтой байна."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Асааах унтраах цэс:\nАсаах/унтраах товч болон дууны түвшнийг нэмэх товчийг нэгэн зэрэг дарна уу"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Хонх дуугаргахаас сэргийлэх:\n Товчлолд зориулан дууны түвшний товчлуурыг дарна уу"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Дараад үргэлжлэх хугацааг удаан дарна уу"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Хэр удаан дарахаа сонгож мэдрэгшлийг тохируулаад асаах/унтраах товчийг удаан дарна уу"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Хурдан"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 69e1daf..6dc13c2 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"ते Pixel Imprint वापरतात तेव्हा, त्यांचे फिंगरप्रिंट मॉडेल अपडेट करण्यासाठी इमेज वापरल्या जातात. तुमच्या लहान मुलाचे फिंगरप्रिंट मॉडेल तयार करण्यासाठी वापरलेल्या इमेज कधीही स्टोअर केल्या जात नाहीत पण, फिंगरप्रिंट मॉडेल फोनवर सुरक्षितरीत्या स्टोअर केले जाते आणि ते फोनमध्येच राहते. फोनवर सर्व प्रक्रिया सुरक्षितरीत्या होते."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"तुम्ही तुमच्या फिंगरप्रिंट इमेज आणि मॉडेल हटवू शकता किंवा सेटिंग्ज मध्ये फिंगरप्रिंट अनलॉक कधीही बंद करू शकता. तुम्ही फिंगरप्रिंट इमेज आणि मॉडेल हे हटवत नाही तोपर्यंत, ते तुमच्या फोनमध्ये स्टोअर केलेले असतात."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"तुम्ही आणि तुमचे लहान मूल त्यांच्या फिंगरप्रिंट इमेज व मॉडेल हटवू शकते किंवा सेटिंग्ज मध्ये फिंगरप्रिंट अनलॉक कधीही बंद करू शकते. फिंगरप्रिंट इमेज आणि मॉडेल हटवली जात नाहीत तोपर्यंत, ती फोनमध्ये स्टोअर केलेली असतात."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"एखाद्या व्यक्तीने तुमच्या बोटावर तुमचा फोन धरल्यास, तुम्हाला तो अनलॉक करायचा नसतानादेखील तो अनलॉक होऊ शकतो."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"एखाद्या व्यक्तीने तुमच्या बोटावर तुमचा फोन धरल्यास, तुम्हाला तो अनलॉक करायचा नसतानादेखील तो अनलॉक होऊ शकतो."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"एखाद्या व्यक्तीने तुमच्या बोटावर तुमचा टॅबलेट धरल्यास, तुम्हाला टॅबलेट अनलॉक करायचा नसतानादेखील तो अनलॉक होऊ शकतो."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"एखाद्या व्यक्तीने तुमच्या बोटावर तुमचे डिव्हाइस धरल्यास, तुम्हाला डिव्हाइस अनलॉक करायचे नसतानादेखील ते अनलॉक होऊ शकते."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"एखाद्या व्यक्तीने तुमच्या लहान मुलाच्या बोटावर त्यांचा फोन धरल्यास, त्यांना तो अनलॉक करायचा नसतानादेखील तो अनलॉक होऊ शकतो."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"सर्वोत्तम परिणामांसाठी, Google साठी बनवलेले प्रमाणित असलेले स्क्रीन प्रोटेक्टर वापरा. इतर स्क्रीन प्रोटेक्टरसह, तुमचे फिंगरप्रिंट कदाचित काम करणार नाही."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"सर्वोत्तम परिणामांसाठी, Google साठी बनवलेले प्रमाणित असलेले स्क्रीन प्रोटेक्टर वापरा. इतर स्क्रीन प्रोटेक्टरसह, तुमच्या लहान मुलाचे फिंगरप्रिंट कदाचित काम करणार नाही."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"डिव्हाइस आणि फिंगरप्रिंट सेन्सर स्थानासह चित्रे"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"नाव"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ठीक आहे"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"पुन्हा प्रयत्न करा"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"हटवा"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"सेंसरला स्पर्श करा"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"तुमचे बोट सेन्सरवर ठेवा आणि व्हायब्रेशन जाणवल्यावर काढा"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"पूर्ण झाले"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"अरेरे, तो सेन्सर नाही"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"तुमच्या फोनच्या मागील बाजूस असलेल्या सेंसरला स्पर्श करा. तुमची तर्जनी वापरा."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"नोंदणी पूर्ण झाली नाही"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"फिंगरप्रिंट नोंदणी वेळ मर्यादा गाठली. पुन्हा प्रयत्न करा."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"फिंगरप्रिट सेट करण्याची वेळ संपली आहे"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"आता पुन्हा प्रयत्न करा किंवा सेटिंग्ज मध्ये तुमचे फिंगरप्रिंट नंतर सेट करा"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"फिंगरप्रिंट नोंदणीने कार्य केले नाही. पुन्हा प्रयत्न करा किंवा भिन्न बोट वापरून पहा."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"आणखी एक जोडा"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"पुढील"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"तुमचा फोन कस्टमाइझ करा"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"वेगळी शैली, वॉलपेपर आणि बरेच काही वापरून पहा"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"स्क्रीन सेव्हर"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"स्क्रीनसेव्हर"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"स्क्रीन सेव्हर वापरा"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"चार्ज होत असताना किंवा डॉक केलेले असताना"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"दोन्ही"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"चार्ज होत असताना"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"डॉक केलेले असताना"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"कधीही नाही"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"बंद"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"फोन डॉक केलेला असताना आणि/किंवा निष्क्रिय असताना काय होते हे नियंत्रित करण्यासाठी स्क्रीन सेव्हर सुरू करा."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"कधी सुरू करायचे"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"सध्याचा स्क्रीन सेव्हर"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"सेटिंग्ज"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"स्वयंचलित चकाकी"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"सक्रिय करण्यासाठी लिफ्ट"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"अँबियंट डिस्प्ले"</string>
@@ -1947,6 +1948,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"पिन सेट करा"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"कार्य प्रोफाईलसाठी पिन सेट करा"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"पॅटर्न सेट करा"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"अतिरिक्त सुरक्षेसाठी, डिव्हाइस अनलॉक करण्याकरिता पॅटर्न सेट करा"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"कार्य प्रोफाईलसाठी पॅटर्न सेट करा"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"फिंगरप्रिंट वापरण्यासाठी पासवर्ड सेट करा"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"फिंगरप्रिंट वापरण्यासाठी पॅटर्न सेट करा"</string>
@@ -2100,7 +2102,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"आणीबाणी अॅप"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"अॅप प्राधान्ये रीसेट करा"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"अॅप प्राधान्ये रीसेट करायची?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"हे यासाठी सर्व प्राधान्ये रीसेट करेल:\n\n"<li>"बंद केलेली अॅप्स"</li>\n<li>"बंद केलेल्या अॅप्स सूचना"</li>\n<li>"वेगवेगळ्या क्रियांसाठी डीफॉल्ट अॅप्लिकेशन"</li>\n<li>"अॅप्ससाठी बॅकग्राउंड डेटा प्रतिबंध"</li>\n<li>"परवानगीविषयक कोणतेही प्रतिबंध"</li>\n\n"तुम्ही कोणताही अॅप डेटा गमावणार नाही."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"हे यासाठी सर्व प्राधान्ये रीसेट करेल:\n\n"<li>"बंद केलेली अॅप्स"</li>\n<li>"बंद केलेल्या अॅप्स सूचना"</li>\n<li>"वेगवेगळ्या कृतींसाठी डीफॉल्ट अॅप्लिकेशन"</li>\n<li>"अॅप्ससाठी बॅकग्राउंड डेटा निर्बंध"</li>\n<li>"परवानगीशी संबंधित कोणतेही निर्बंध"</li>\n<li>"बॅटरीच्या वापराची सेटिंग्ज"</li>\n\n"तुम्ही कोणताही अॅप डेटा गमावणार नाही."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"अॅप्स रीसेट करा"</string>
<string name="manage_space_text" msgid="9013414693633572277">"जागा व्यवस्थापित करा"</string>
<string name="filter" msgid="9039576690686251462">"फिल्टर"</string>
@@ -2355,7 +2357,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"सेटिंग्ज रीसेट करा"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"डिस्प्ले आकार आणि मजकूर सेटिंग्ज रीसेट केली आहेत"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"डिस्प्ले आकार आणि मजकूर रीसेट करायचा आहे का?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"तुमचा डिस्प्ले आकार आणि मजकूर प्राधान्ये फोनच्या मूळ सेटिंग्जवर रीसेट होतील"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"तुमचा डिस्प्ले आकार आणि मजकूर प्राधान्ये फोनच्या मूळ सेटिंग्जवर रीसेट होतील"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"तुमचा डिस्प्ले आकार आणि मजकूर प्राधान्ये टॅबलेटच्या मूळ सेटिंग्जवर रीसेट होतील"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"रीसेट करा"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"विकेंड प्लॅन आहेत का?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"बीचवर जाणार आहे. सोबत यायचे आहे का?"</string>
@@ -2935,6 +2938,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"शेवटची पूर्ण चार्ज केल्यानंतर बॅटरी वापरलेली नाही"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"मागील २४ तासांमध्ये बॅटरी वापरलेली नाही"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"इतर वापरकर्ते"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"अंदाजे शिल्लक बॅटरी ही तुमच्या डिव्हाइसच्या वापरावर अवलंबून असते"</string>
<string name="estimated_time_left" msgid="948717045180211777">"अंदाजे शिल्लक वेळ"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"पूर्ण चार्ज होईपर्यंत"</string>
@@ -3024,6 +3028,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"पूर्ण हॉटवर्ड आणि परस्परसंवाद"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"मजकूर पाठविण्यासाठी सोपे उच्चारण"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"आपल्या वतीने व्हॉइस परीक्षण नेहमी-सुरू कार्यप्रदर्शन करण्यासाठी आणि व्हॉइस सक्षम ॲप्लिकेशन नियंत्रित करण्यासाठी व्हॉइस इनपुट सेवा सक्षम असेल. हे <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ॲप्लिकेशनावरून येते. या सेवेचा वापर सक्षम करायचा?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"डिव्हाइसवरील रेकग्निशन सेटिंग्ज"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"डिव्हाइसवरील रेकग्निशन"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"डिव्हाइसवरील स्पीच रेकग्निशन"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"प्राधान्य इंजीन"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"इंजीन सेटिंग्ज"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"भाषण गती आणि पिच"</string>
@@ -3416,6 +3423,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"हटवा"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"या सत्रातील सर्व अॅप्स आणि डेटा हटवला जाईल."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"काढा"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"अतिथी (तुम्ही)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"वापरकर्ते"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"इतर वापरकर्ते"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"अतिथी अॅक्टिव्हिटी हटवा"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"अतिथी मोडमधून बाहेर पडताना सर्व अतिथी अॅप्स आणि डेटा हटवा"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"अतिथी अॅक्टिव्हिटी हटवायची का?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"या अतिथी सत्रातील अॅप्स आणि डेटा आता हटवला जाईल व प्रत्येक वेळी तुम्ही अतिथी मोडमधून बाहेर पडाल, तेव्हा भविष्यातील सर्व अतिथी अॅक्टिव्हिटी हटवली जाईल"</string>
<string name="user_enable_calling" msgid="264875360626905535">"फोन कॉल सुरू करा"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"फोन कॉल आणि SMS सुरू करा"</string>
<string name="user_remove_user" msgid="8468203789739693845">"वापरकर्ता हटवा"</string>
@@ -4008,13 +4022,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"सर्व \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" सूचना"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"सर्व <xliff:g id="APP_NAME">%1$s</xliff:g> वरील सूचना"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"अॅडॅप्टिव्ह सूचना"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~दर दिवसाला <xliff:g id="NUMBER_1">%,d</xliff:g> सूचना</item>
- <item quantity="one">~दर दिवसाला <xliff:g id="NUMBER_0">%d</xliff:g> सूचना</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">प्रति दिवस साधारण <xliff:g id="NUMBER_1">%,d</xliff:g> सूचना</item>
+ <item quantity="one">प्रति दिवस साधारण <xliff:g id="NUMBER_0">%d</xliff:g> सूचना</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~दर आठवड्याला <xliff:g id="NUMBER_1">%,d</xliff:g> सूचना</item>
- <item quantity="one">~दर आठवड्याला <xliff:g id="NUMBER_0">%d</xliff:g> सूचना</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">प्रति आठवडा साधारण <xliff:g id="NUMBER_1">%,d</xliff:g> सूचना</item>
+ <item quantity="one">प्रति आठवडा साधारण <xliff:g id="NUMBER_0">%d</xliff:g> सूचना</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"कधीही नाही"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"डिव्हाइस आणि ॲप सूचना"</string>
@@ -5256,7 +5270,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"काहीही करू नका"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"व्हायब्रेट"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"म्यूट करा"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"सुरू करण्यासाठी, सर्वप्रथम \"पॉवर बटण दाबा आणि धरून ठेवा\" ला पॉवर मेनूवर बदला."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"सुरू करण्यासाठी, सर्वप्रथम \"पॉवर बटण दाबा & धरून ठेवा\" हे पॉवर मेनूवर बदला."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"नेटवर्क तपशील"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"तुमच्या डिव्हाइसचे नाव तुमच्या फोनवरील ॲप्सना दृश्यमान आहे. तुम्ही ब्लूटूथ डिव्हाइसशी कनेक्ट करता, वाय-फाय नेटवर्कशी कनेक्ट करता किंवा वाय-फाय हॉटस्पॉट सेट करता तेव्हा हे कदाचित इतर लोकदेखील पाहू शकतात."</string>
<string name="devices_title" msgid="649715719278562515">"डिव्हाइस"</string>
@@ -5543,15 +5557,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"डिव्हाइस नियंत्रणे"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"कार्डे आणि पास"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"कार्डे आणि पास"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"पॉवर बटण दाबा आणि धरून ठेवा"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant साठी दाबा आणि धरून ठेवा"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"पॉवर मेनूसाठी दाबा आणि धरून ठेवा"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"दाबणे आणि धरून ठेवणे बंद केले आहे"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"पॉवर बटण दाबा & धरून ठेवा"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"अॅक्सेस करण्यासाठी पॉवर बटण दाबा & धरून ठेवा"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"पॉवर मेनू"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"डिजिटल असिस्टंट"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"डिजिटल असिस्टंट अॅक्सेस करा"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"पॉवर मेनू अॅक्सेस करा"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"वापरण्यासाठी सर्वप्रथम स्क्रीन लॉक सेट करा"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant साठी धरून ठेवा"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"पॉवर बटण धरून ठेवून Assistant ट्रिगर करा"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"पॉवर आणि आणीबाणीशी संबंधित मेनू:\nपॉवर आणि व्हॉल्यूम जास्त ही बटणे एकाच वेळी दाबा."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"रिंग होणे थांबवणे:\nव्हॉल्यूम मेनूमध्ये शॉर्टकट उपलब्ध आहे."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"पॉवर मेनू:\nपॉवर बटण आणि व्हॉल्यूम जास्त बटण एकाचवेळी दाबा"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"रिंग होणे थांबवा:\nशॉर्टकटसाठी व्हॉल्यूम बटण दाबा"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"दाबून धरून ठेवण्याचा कालावधी"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"किती वेळासाठी पॉवर बटण दाबून धरून ठेवायचे हे निवडून संवेदनशीलता अॅडजस्ट करा"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"कमी वेळासाठी"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index f68ef59..0feb85c 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Apabila mereka menggunakan Pixel Imprint, imej digunakan untuk mengemas kini model cap jari mereka. Imej yang digunakan untuk menghasilkan model cap jari anak anda tidak akan disimpan, tetapi model cap jari disimpan dengan selamat pada telefon dan tidak akan keluar daripada telefon itu. Semua pemprosesan berlaku dengan selamat pada telefon."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Anda boleh memadamkan imej dan model cap jari anda atau mematikan Buka Kunci Cap Jari pada bila-bila masa dalam Tetapan. Imej dan model cap jari disimpan di telefon sehingga anda memadamkan imej dan model itu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Anda dan anak anda boleh memadamkan imej dan model cap jari mereka atau mematikan Buka Kunci Cap Jari pada bila-bila masa dalam Tetapan. Imej dan model cap jari disimpan pada telefon sehingga dipadamkan."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefon anda boleh dibuka kunci apabila anda tidak berniat untuk berbuat demikian, seperti jika seseorang menghalakan telefon dengan rapat pada jari anda."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefon anda boleh dibuka kunci apabila anda tidak berniat untuk berbuat demikian, seperti jika seseorang menghalakan telefon dengan rapat pada jari anda."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tablet anda boleh dibuka kunci walaupun anda tidak berniat untuk berbuat demikian, contohnya apabila seseorang mendekatkan tablet dengan jari anda."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Peranti anda boleh dibuka kunci walaupun anda tidak berniat untuk berbuat demikian, contohnya apabila seseorang mendekatkan peranti dengan jari anda."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefon anak anda boleh dibuka kunci apabila mereka tidak bermaksud untuk berbuat demikian, seperti jika seseorang menghalakan telefon dengan rapat pada jari mereka."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Untuk mendapatkan hasil yang terbaik, gunakan pelindung skrin yang diperakui Made For Google. Dengan pelindung skrin yang lain, cap jari anda mungkin tidak berfungsi."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Untuk mendapatkan hasil yang terbaik, gunakan pelindung skrin yang diperakui Made For Google. Dengan pelindung skrin yang lain, cap jari anak anda mungkin tidak berfungsi."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustrasi yang memaparkan peranti dan lokasi penderia cap jari"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nama"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Cuba lagi"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Padam"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Sentuh penderia"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Letakkan jari anda pada penderia, kemudian angkat jari itu selepas anda merasa getaran"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Selesai"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Op, itu bukan penderia"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Sntuh penderia di bhg blkg tel. Gnakan jari telunjuk."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Pendaftaran tidak selesai"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Had masa pendaftaran cap jari dicapai. Cuba lagi."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Persediaan cap jari telah tamat masa"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Cuba lagi sekarang atau sediakan cap jari anda kemudian dalam Tetapan"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Pendaftaran cap jari tidak berjaya. Cuba lagi atau gunakan jari yang lain."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Tambah yang lain"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Seterusnya"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Sesuaikan telefon anda"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Cuba gaya serta kertas dinding yang berbeza dan pelbagai lagi"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Penyelamat skrin"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"penyelamat skrin"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Gunakan penyelamat skrin"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Semasa dicas atau didok"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Salah satu"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Semasa mengecas"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Semasa didok"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Jangan sekali-kali"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Mati"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Untuk mengawal perkara yang berlaku semasa telefon didok dan/atau tidur, hidupkan penyelamat skrin."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Masa untuk mulakan"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Penyelamat skrin semasa"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Tetapan"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Kecerahan automatik"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Angkat untuk bangunkan"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Paparan ambien"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Tetapkan PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Tetapkan PIN kerja"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Tetapkan corak"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Untuk keselamatan tambahan, tetapkan corak untuk membuka kunci peranti"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Tetapkan corak kerja"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Buat kata laluan untuk guna cap jari"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Buat corak untuk guna cap jari"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Apl kecemasan"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Tetapkan semula pilihan apl"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Tetapkan semula pilihan apl?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Tindakan ini akan menetapkan semula semua pilihan untuk:\n\n"<li>"Apl yang dilumpuhkan"</li>\n<li>"Pemberitahuan untuk apl yang dilumpuhkan"</li>\n<li>"Aplikasi lalai untuk tindakan"</li>\n<li>"Sekatan data latar belakang untuk apl"</li>\n<li>"Sebarang sekatan kebenaran"</li>\n\n"Anda tidak akan kehilangan sebarang data apl."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Tindakan ini akan menetapkan semula semua pilihan untuk:\n\n"<li>"Apl yang dilumpuhkan"</li>\n<li>"Pemberitahuan untuk apl yang dilumpuhkan"</li>\n<li>"Aplikasi lalai untuk tindakan"</li>\n<li>"Sekatan data latar belakang untuk apl"</li>\n<li>"Mana-mana sekatan kebenaran"</li>\n<li>"Tetapan penggunaan bateri"</li>\n\n"Anda tidak akan kehilangan apa-apa data apl."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Tetapkan semula apl"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Urus ruang"</string>
<string name="filter" msgid="9039576690686251462">"Tapis"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Tetapkan semula tetapan"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Tetapan paparan saiz dan teks telah ditetapkan semula"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Tetapkan semula saiz paparan dan teks?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Saiz paparan dan pilihan teks anda akan ditetapkan semula kepada tetapan asal telefon"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Saiz paparan dan pilihan teks anda akan ditetapkan semula kepada tetapan asal telefon"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Saiz paparan dan pilihan teks anda akan ditetapkan semula kepada tetapan asal tablet"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Tetapkan semula"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Ada apa-apa rancangan hujung minggu?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Bercadang pergi ke pantai. Mahu ikut sekali?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Tiada penggunaan sejak cas penuh terakhir"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Tiada penggunaan untuk tempoh 24 jam yang lalu"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Pengguna lain"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Anggaran baki bateri adalah berdasarkan penggunaan peranti anda"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Anggaran baki masa"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Sehingga dicas penuh"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Sebutan laluan penuh dan interaksi"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Pertuturan kepada teks mudah"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Perkhidmatan input suara ini akan dapat melaksanakan pemantauan suara sentiasa hidup dan mengawal aplikasi didayakan suara bagi pihak anda. Ini datang dari aplikasi <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Dayakan penggunaan perkhidmatan ini?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Tetapan pengecaman pada peranti"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Pengecaman pada peranti"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Pengecaman pertuturan pada peranti"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Enjin pilihan"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Tetapan enjin"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Kadar pertuturan & nada"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Padam"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Semua apl dan data dalam sesi ini akan dipadam."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Alih keluar"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Tetamu (Anda)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Pengguna"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Pengguna lain"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Padamkan aktiviti tetamu"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Padamkan semua apl dan data tetamu semasa keluar daripada mod tetamu"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Padamkan aktiviti tetamu?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apl dan data daripada sesi tetamu ini akan dipadamkan sekarang dan semua aktiviti tetamu pada masa hadapan akan dipadamkan setiap kali anda keluar daripada mod tetamu"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Hidupkan panggilan telefon"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Hidupkan panggilan telefon & SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Padamkan pengguna"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Semua pemberitahuan \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Semua pemberitahuan <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Pemberitahuan Boleh Suai"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> pemberitahuan sehari</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> pemberitahuan sehari</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Lebih kurang <xliff:g id="NUMBER_1">%,d</xliff:g> pemberitahuan setiap hari</item>
+ <item quantity="one">Lebih kurang <xliff:g id="NUMBER_0">%d</xliff:g> pemberitahuan setiap hari</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> pemberitahuan seminggu</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> pemberitahuan seminggu</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Lebih kurang <xliff:g id="NUMBER_1">%,d</xliff:g> pemberitahuan setiap minggu</item>
+ <item quantity="one">Lebih kurang <xliff:g id="NUMBER_0">%d</xliff:g> pemberitahuan setiap minggu</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Jangan sekali-kali"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Pemberitahuan peranti & apl"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Jangan buat apa-apa"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Bergetar"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Redam"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Untuk mendayakan tetapan tersebut, tukar \"Tekan dan tahan butang kuasa\" pada menu kuasa terlebih dahulu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Untuk mendayakan tetapan ini, tukar \"Tekan & tahan butang kuasa\" kepada menu kuasa terlebih dahulu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Butiran rangkaian"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Nama peranti anda boleh dilihat oleh apl pada telefon anda. Nama peranti anda juga boleh dilihat oleh orang lain apabila anda menyambung kepada peranti Bluetooth, menyambung kepada rangkaian Wi-Fi atau menyediakan tempat liputan Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Peranti"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"kawalan peranti"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kad & pas"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kad & pas"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Tekan dan tahan butang kuasa"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Tekan dan tahan untuk Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Tekan dan tahan untuk menu kuasa"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Tekan dan tahan dilumpuhkan"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Tekan & tahan butang kuasa"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Tekan & tahan butang kuasa untuk mengakses"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu kuasa"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Pembantu digital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Akses pembantu digital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Akses menu kuasa"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Untuk menggunakan, mula-mula tetapkan kunci skrin"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Tahan untuk Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Cetuskan Assistant dengan menahan butang kuasa"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu Kuasa & Kecemasan:\nTekan Kuasa dan Naikkan kelantangan pada masa yang sama."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Halang deringan:\nPintasan tersedia pada menu kelantangan."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu kuasa:\nTekan butang kuasa dan butang naikkan kelantangan pada masa yang sama"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Halang deringan:\nTekan butang kelantangan untuk pintasan"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Tempoh tekan & tahan"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Laraskan kepekaan dengan memilih tempoh untuk menekan & menahan butang kuasa"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Pendek"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 67e4286..ebad7bf 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"သူက Pixel Imprint သုံးသောအခါ သူ၏လက်ဗွေနမူနာကို အပ်ဒိတ်လုပ်ရန် ပုံများကို သုံးသည်။ သင့်ကလေး၏ လက်ဗွေနမူနာပြုလုပ်ရန် သုံးထားသောပုံများကို မည်သည့်အခါမှ မသိမ်းပါ။ သို့သော် လက်ဗွေနမူနာကို ဖုန်းတွင် လုံခြုံစွာသိမ်းပြီး စက်အတွင်း၌သာ ထားပါသည်။ လုပ်ဆောင်ချက်အားလုံး ဖုန်းတွင် လုံခြုံစွာ ဖြစ်ပေါ်သည်။"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"‘ဆက်တင်များ’ တွင် သင့်လက်ဗွေပုံများနှင့် နမူနာကို ဖျက်ခြင်း (သို့) ‘လက်ဗွေသုံးသော့ဖွင့်ခြင်း’ ကို ပိတ်ခြင်းတို့ အချိန်မရွေး လုပ်နိုင်သည်။ လက်ဗွေပုံနှင့် နမူနာများကို သင်မဖျက်မချင်း ဖုန်းတွင်သိမ်းထားသည်။"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"သင်နှင့် သင့်ကလေးက ဆက်တင်များတွင် လက်ဗွေပုံများနှင့် နမူနာကို ဖျက်ခြင်း (သို့) ‘လက်ဗွေသုံး လော့ခ်ဖွင့်ခြင်း’ ကို ပိတ်ခြင်းတို့ အချိန်မရွေး လုပ်နိုင်သည်။ လက်ဗွေပုံနှင့် နမူနာများကို မဖျက်မချင်း ဖုန်းတွင် သိမ်းထားသည်။"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"တစ်စုံတစ်ယောက်က သင့်လက်ချောင်းရှေ့တွင် သင့်ဖုန်းကို ကိုင်ထားခြင်းကဲ့သို့ သင်မရည်ရွယ်သည့်အချိန်တွင် ၎င်းကို လော့ခ်ဖွင့်နိုင်သည်။"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"တစ်စုံတစ်ယောက်က သင့်လက်ချောင်းရှေ့တွင် သင့်ဖုန်းကို ကိုင်ထားခြင်းကဲ့သို့ သင်မရည်ရွယ်သည့်အချိန်တွင် ၎င်းကို လော့ခ်ဖွင့်နိုင်သည်။"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"တစ်စုံတစ်ယောက်က သင့်လက်ချောင်းရှေ့တွင် သင့်တက်ဘလက်ကို ကိုင်ထားခြင်းကဲ့သို့ သင်မရည်ရွယ်သည့်အချိန်တွင် ၎င်းကို လော့ခ်ဖွင့်နိုင်သည်။"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"တစ်စုံတစ်ယောက်က သင့်လက်ချောင်းရှေ့တွင် သင့်စက်ကို ကိုင်ထားခြင်းကဲ့သို့ သင်မရည်ရွယ်သည့်အချိန်တွင် ၎င်းကို လော့ခ်ဖွင့်နိုင်သည်။"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"တစ်စုံတစ်ယောက်က သင့်ကလေး၏ဖုန်းကို သူ၏လက်ချောင်းရှေ့တွင် ကိုင်ထားခြင်းကဲ့သို့ သူ မရည်ရွယ်သည့်အချိန်တွင် ၎င်းကို လော့ခ်ဖွင့်နိုင်သည်။"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"အကောင်းဆုံးရလဒ်များအတွက် ‘Google အတွက် ပြုလုပ်ထားသည်’ လက်မှတ်ရ ဖန်သားပြင် အကာအကွယ်ကို သုံးနိုင်သည်။ အခြားဖန်သားပြင် အကာအကွယ်များသုံးပါက သင်၏လက်ဗွေ အလုပ်မလုပ်နိုင်ပါ။"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"အကောင်းဆုံးရလဒ်များအတွက် Google အတွက် ပြုလုပ်ထားသည့် လက်မှတ်ရ ဖန်သားပြင် အကာအကွယ်သုံးနိုင်သည်။ အခြားဖန်သားပြင် အကာအကွယ်များသုံးပါက သင့်ကလေး၏လက်ဗွေ အလုပ်မလုပ်နိုင်ပါ။"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"စက်နှင့် လက်ဗွေအာရုံခံကိရိယာကို တည်နေရာနှင့်အတူ သရုပ်ဖော်ပုံ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"အမည်"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ထပ်စမ်းကြည့်ရန်"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"ဖျက်ရန်"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"အာရုံခံကိရိယာကို ထိပါ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"သင့်လက်ချောင်းကို အာရုံခံကိရိယာပေါ်သို့ တင်လိုက်ပြီး တုန်ခါမှုကို ခံစားရချိန်တွင် ပြန်ရုပ်လိုက်ပါ"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"ပြီးပါပြီ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"အိုး။ ဒါ အာရုံခံကိရိယာမဟုတ်ဘူး"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"သင့်ဖုန်း ကျောဘက်ရှိ အာရုံခံကိရိယာကို ထိပါ။ လက်ညှိုးကို အသုံးပြုပါ။"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"စာရင်းသွင်းမှု မပြီးစီးခဲ့ပါ"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"လက်ဗွေစာရင်းသွင်းမှု ကန့်သတ်ချိန် ကုန်သွားပြီ။ ထပ်စမ်းကြည့်ပါ။"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"လက်ဗွေစနစ်ထည့်သွင်းချိန် ကုန်သွားပါပြီ"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ယခုထပ်စမ်းကြည့်ပါ (သို့) ‘ဆက်တင်များ’ တွင် လက်ဗွေကို နောက်မှ စနစ်ထည့်သွင်းပါ"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"လက်ဗွေထည့်သွင်းမှု အဆင်မပြေပါ။ အခြားလက်ချောင်းကို သုံးပါ သို့မဟုတ် ထပ်စမ်းကြည့်ပါ။"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"နောက်တစ်ခု ထည့်ရန်"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"ရှေ့သို့"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"သင့်ဖုန်းကို စိတ်ကြိုက်လုပ်ပါ"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"မတူသည့် ပုံစံများ၊ နောက်ခံများနှင့် အခြားအရာများကို စမ်းကြည့်ပါ"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"ဖန်သားပြင်ချွေတာစနစ်"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ဖန်သားပြင်နားချိန်"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"ဖန်သားပြင်ချွေတာစနစ် သုံးခြင်း"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"အားသွင်းနေစဉ် သို့မဟုတ် တပ်ဆင်ထားစဉ်"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"နှစ်မျိုးအနက် တမျိုးရွေးချယ်ရန်"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"အားသွင်းနေစဉ်"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"အထိုင်တွင်တပ်ထားစဉ်"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ဘယ်တော့မှ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ပိတ်"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ဖုန်းကို အထိုင်တွင် တပ်ဆင်လိုက်ချိန် နှင့်/သို့မဟုတ် အနားယူနေချိန်တွင် လုပ်ဆောင်မည့်အရာများကို ထိန်းချုပ်ရန်၊ ဖန်သားပြင်အသုံးပြုမှု ချွေတာမှုစနစ်ကို ဖွင့်ပါ။"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"စတင်ရန်အချိန်"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"လက်ရှိဖန်သားပြင်ချွေတာစနစ်"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ဆက်တင်များ"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"အလိုအလျောက်အလင်းချိန်ခြင်း။"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"‘မ’ ယူ၍ နှိုးရန်"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ဝန်းကျင်ပြသမှု"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"ပင်နံပါတ် သတ်မှတ်ပါ"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"အလုပ်သုံးပင်နံပါတ် သတ်မှတ်ပါ"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"ပုံစံ သတ်မှတ်ပါ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"လုံခြုံရေး တိုးမြှင့်ရန်အတွက် စက်ကို လော့ခ်ဖွင့်ရန် ပုံစံ သတ်မှတ်ပါ"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"အလုပ်သုံးပုံစံ သတ်မှတ်ပါ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"လက်ဗွေသုံးရန် စကားဝှက်သတ်မှတ်ပါ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"လက်ဗွေသုံးရန် ပုံစံသတ်မှတ်ပါ"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"အရေးပေါ်အပ်ဖ်"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"အက်ပ်သတ်မှတ်ချက်များ ပြန်လုပ်ရန်"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"အက်ပ်သတ်မှတ်ချက်များကို ပြန်လုပ်မလား။"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"၎င်းက အောက်ပါတို့အတွက် ဦးစားပေးများအားလုံးကို ပြင်ဆင်သတ်မှတ်ပါမည်-\n\n"<li>"ပိတ်ထားသော အက်ပ်များ"</li>\n<li>"ပိတ်ထားသော အက်ပ် အကြောင်းကြားချက်များ"</li>\n<li>"လုပ်ဆောင်ချက်များအတွက် မူရင်းအပလီကေးရှင်းများ"</li>\n<li>"အက်ပ်များအတွက် နောက်ခံဒေတာ ကန့်သတ်မှုများ"</li>\n<li>"မည်သည့် ခွင့်ပြုချက် ကန့်သတ်မှုများမဆို"</li>\n\n"မည်သည့်အက်ပ်ဒေတာကိုမျှ ဆုံးရှုံးမည်မဟုတ်ပါ။"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"၎င်းက အောက်ပါတို့အတွက် အားလုံးကို ပြင်ဆင်သတ်မှတ်ပါမည်-\n\n"<li>"ပိတ်ထားသော အက်ပ်များ"</li>\n<li>"ပိတ်ထားသော အက်ပ် အကြောင်းကြားချက်များ"</li>\n<li>"လုပ်ဆောင်ချက်များအတွက် မူရင်းအပလီကေးရှင်းများ"</li>\n<li>"အက်ပ်များအတွက် နောက်ခံဒေတာ ကန့်သတ်မှုများ"</li>\n<li>"မည်သည့် ခွင့်ပြုချက် ကန့်သတ်မှုများမဆို"</li>\n<li>"ဘက်ထရီ အသုံးပြုမှု ဆက်တင်များ"</li>\n\n"မည်သည့်အက်ပ်ဒေတာကိုမျှ ဆုံးရှုံးမည်မဟုတ်ပါ။"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"အက်ပ်ပြန်လည်သတ်မှတ်ရန်"</string>
<string name="manage_space_text" msgid="9013414693633572277">"နေရာ စီမံရန်"</string>
<string name="filter" msgid="9039576690686251462">"စီစစ်ရန်"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"ဆက်တင်ပြင်ဆင်သတ်မှတ်ရန်"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ပြကွက်အရွယ်အစားနှင့် စာသားဆက်တင်များကို ပြင်ဆင်သတ်မှတ်ထားသည်"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ပြကွက်အရွယ်နှင့် စာသားပြင်ဆင်သတ်မှတ်မလား။"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"သင့်ပြကွက်နှင့် စာသားသတ်မှတ်ချက်များကို ဖုန်း၏ မူလဆက်တင်များသို့ ပြင်ဆင်သတ်မှတ်ပါမည်"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"သင့်ပြကွက်နှင့် စာသားသတ်မှတ်ချက်များကို ဖုန်း၏ မူလဆက်တင်များသို့ ပြင်ဆင်သတ်မှတ်ပါမည်"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ပြကွက်နှင့် စာသားရွေးချယ်မှုများကို တက်ဘလက်၏ မူလဆက်တင်များသို့ ပြင်ဆင်သတ်မှတ်မည်"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"ပြင်ဆင်သတ်မှတ်ရန်"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"စနေ၊ တနင်္ဂနွေမှာ တစ်ခုခုစီစဉ်ထားလား။"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ကမ်းခြေသွားမလို့။ လိုက်မလား။"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"နောက်ဆုံးအကြိမ် အားအပြည့်သွင်းပြီးနောက် အသုံးပြုမှု မရှိပါ"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"ပြီးခဲ့သော ၂၄ နာရီအတွက် အသုံးပြုမှု မရှိပါ"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"အခြားအသုံးပြုသူများ"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"ဘက်ထရီလက်ကျန်ခန့်မှန်းချက်သည် သင့်စက်၏ အသုံးပြုမှုအပေါ် အခြေခံပါသည်"</string>
<string name="estimated_time_left" msgid="948717045180211777">"ခန့်မှန်း ကျန်ရှိချိန်"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"အားပြည့်ရန် လိုအပ်ချိန်"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"စကားလုံးတို နှင့် ပြန်လှန်တုံ့ပြန်မှု အပြည့်"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"ရိုးရိုး စကားမှ စာသို့"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"ဒီအသံဖြင့် ရိုက်သွင်းရေး ဝန်ဆောင်မှုက သင့်ကိုယ်စား အမြဲတမ်း အသံကို စောင့်ကြပ်ပေးလျက် အသံကို ဖွင့်ပေးထားသည့် အပလီကေးရှင်းများကို ထိန်းချုပ်ပေးသည်။ ၎င်းကို <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> အပလီကေးရှင်းက ဆောင်ရွက်ပေးသည်။ ဒီဝန်ဆောင်မှု သုံးရန်ကို ဖွင့်ပေးရမလား?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"စက်ပစ္စည်းတွင်ပါသော မှတ်သားမှုဆက်တင်များ"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"စက်ပစ္စည်းတွင်ပါသော မှတ်သားမှု"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"စက်ပစ္စည်းတွင်ပါသော စကားသံ မှတ်သားမှု"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"ဦးစားပေးအင်ဂျင်"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"အင်ဂျင်ဆက်တင်များ"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"စကားပြောဆိုမှုနှုန်းနှင့် အသံပေါက်"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"ဖျက်ရန်"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"ဤချိတ်ဆက်မှုမှ အက်ပ်နှင့် ဒေတာအားလုံးကို ဖျက်ပါမည်။"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"ဖယ်ထုတ်ပါ"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"ဧည့်သည် (သင်)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"အသုံးပြုသူများ"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"အခြားအသုံးပြုသူများ"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"ဧည့်သည်လုပ်ဆောင်ချက် ဖျက်ရန်"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"ဧည့်သည်မုဒ်မှ ထွက်ချိန်တွင် ဧည့်သည်အက်ပ်နှင့် ဒေတာအားလုံးကို ဖျက်ရန်"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ဧည့်သည်လုပ်ဆောင်ချက် ဖျက်မလား။"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ဤဧည့်သည် စက်ရှင်မှ အက်ပ်နှင့် ဒေတာများကို ယခုဖျက်လိုက်မည်ဖြစ်ပြီး လာမည့်ဧည့်သည် လုပ်ဆောင်ချက်အားလုံးကို ဧည့်သည်မုဒ်မှ ထွက်ချိန်တိုင်းတွင် ဖျက်လိုက်ပါမည်"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ဖုန်းခေါ်ဆိုမှုများ ဖွင့်ရန်"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ဖုန်းခေါ်ဆိုမှုနှင့် SMS ဖွင့်မည်"</string>
<string name="user_remove_user" msgid="8468203789739693845">"အသုံးပြုသူကို ဖျက်ပါ"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" အကြောင်းကြားချက်အားလုံး"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> အကြောင်းကြားချက် အားလုံး"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"အလိုက်သင့် အကြောင်းကြားချက်များ"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">တစ်နေ့လျှင် အကြောင်းကြားချက်~<xliff:g id="NUMBER_1">%,d</xliff:g> ခု</item>
- <item quantity="one">တစ်နေ့လျှင် အကြောင်းကြားချက်~<xliff:g id="NUMBER_0">%d</xliff:g> ခု</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">တစ်ရက်လျှင် အကြောင်းကြားချက် <xliff:g id="NUMBER_1">%,d</xliff:g> ခုခန့်</item>
+ <item quantity="one">တစ်ရက်လျှင် အကြောင်းကြားချက် <xliff:g id="NUMBER_0">%d</xliff:g> ခုခန့်</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">တစ်ပတ်လျှင် အကြောင်းကြားချက်~<xliff:g id="NUMBER_1">%,d</xliff:g> ခု</item>
- <item quantity="one">တစ်ပတ်လျှင် အကြောင်းကြားချက်~<xliff:g id="NUMBER_0">%d</xliff:g> ခု</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">တစ်ပတ်လျှင် အကြောင်းကြားချက် <xliff:g id="NUMBER_1">%,d</xliff:g> ခုခန့်</item>
+ <item quantity="one">တစ်ပတ်လျှင် အကြောင်းကြားချက် <xliff:g id="NUMBER_0">%d</xliff:g> ခုခန့်</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"ဘယ်တော့မှ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"စက်နှင့်အက်ပ် အကြောင်းကြားချက်များ"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"ပြောင်းလဲမှု မလုပ်ပါနှင့်"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"တုန်ခါသည်"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"အသံတိတ်သည်"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ဖွင့်ရန်အတွက် ဦးစွာ \"ဖွင့်ပိတ်ခလုတ် နှိပ်ထားခြင်း\" ကို ပါဝါမီနူးသို့ ပြောင်းပါ။"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ဖွင့်ရန် \"ဖွင့်ပိတ်ခလုတ်ကို နှိပ်ထားခြင်း\" ကို ပါဝါမီနူးသို့ အရင်ပြောင်းပါ။"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"ကွန်ရက် အသေးစိတ်များ"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"သင့်စက်ပစ္စည်းအမည်ကို သင့်ဖုန်းပေါ်ရှိ အက်ပ်များက မြင်ရပါသည်။ သင် ဘလူးတုသ်သုံးစက်များသို့ ချိတ်ဆက်သည့်အခါ၊ Wi-Fi ကွန်ရက်သို့ ချိတ်ဆက်သည့်အခါ သို့မဟုတ် Wi-Fi ဟော့စပေါ့ ထုတ်လွှင့်သည့်အခါ တို့တွင်လည်း ၎င်းကို အခြားသူများက မြင်နိုင်ပါသည်။"</string>
<string name="devices_title" msgid="649715719278562515">"စက်များ"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"စက်ထိန်းစနစ်"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"ကတ်နှင့်လက်မှတ်များ"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"ကတ်များနှင့် ဖြတ်သန်းခွင့်များ"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"ဖွင့်ပိတ်ခလုတ် နှိပ်ထားခြင်း"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant အတွက် နှိပ်ထားနိုင်သည်"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"နှိပ်ထားလျှင် ပါဝါမီနူးပေါ်လာသည်"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"နှိပ်ထားခြင်းကို ပိတ်ထားသည်"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"ဖွင့်ပိတ်ခလုတ်ကို နှိပ်ထားခြင်း"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"အသုံးပြုရန် ဖွင့်ပိတ်ခလုတ်ကို နှိပ်ထားခြင်း"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"ပါဝါမီနူး"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ဒစ်ဂျစ်တယ် Assistant"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ဒစ်ဂျစ်တယ် Assistant သုံးရန်"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"ပါဝါမီနူး သုံးရန်"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"အသုံးပြုရန် ဖန်သားပြင် လော့ခ်ကို ဦးစွာသတ်မှတ်ပါ"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant ဖွင့်ရန် ဖိထားပါ"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"ဖွင့်ပိတ်ခလုတ်ကို ဖိထားခြင်းဖြင့် Assistant ကိုဖွင့်ပါ"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"ပါဝါနှင့် အရေးပေါ် မီနူး-\nဖွင့်ပိတ်ခလုတ်နှင့် အသံချဲ့ခလုတ်ကို တစ်ပြိုင်တည်းနှိပ်ပါ။"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"အသံမြည်ခြင်းကို ပိတ်ရန်-\nအသံထိန်း မီနူးတွင် ဖြတ်လမ်းလင့်ခ် ရနိုင်သည်။"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"ပါဝါမီနူး-\nဖွင့်ပိတ်ခလုတ်နှင့် အသံချဲ့ခလုတ်ကို တစ်ပြိုင်တည်း နှိပ်ပါ"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"အသံမမြည်စေရန်-\nဖြတ်လမ်းလင့်ခ်အနေဖြင့် အသံထိန်း ခလုတ်တစ်ခုကို နှိပ်ပါ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"နှိပ်ထားရမည့်အချိန်"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"ဖွင့်ပိတ်ခလုတ်နှိပ်ထားရမည့် ကြာချိန်ကိုရွေးပြီး အာရုံခံနိုင်စွမ်းကို ချိန်ညှိပါ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"အတို"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index be82aa2..796ae4e 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Når hen bruker Pixel Imprint, brukes bilder til å oppdatere fingeravtrykkmodellen. Bildene som brukes til å lage barnets fingeravtrykkmodell, lagres aldri, men fingeravtrykkmodellen lagres på en sikker måte på telefonen og forlater aldri telefonen. All behandling skjer på en sikker måte på telefonen."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Du kan når som helst slette fingeravtrykkbildene og -modellen din eller slå av opplåsing med fingeravtrykk i innstillingene. Fingeravtrykkbildene og -modellene lagres på telefonen til du sletter dem."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Du og barnet ditt kan når som helst slette fingeravtrykkbildene og -modellen til barnet eller slå av opplåsing med fingeravtrykk i innstillingene. Fingeravtrykkbildene og -modellene lagres på telefonen til de slettes."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefonen kan låses opp selv om det ikke er meningen, for eksempel hvis noen holder den opp mot fingeren din."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefonen kan låses opp selv om det ikke er meningen, for eksempel hvis noen holder den opp mot fingeren din."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Nettbrettet kan låses opp selv om det ikke er meningen, for eksempel hvis noen holder den opp mot fingeren din."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Enheten kan låses opp selv om det ikke er meningen, for eksempel hvis noen holder den opp mot fingeren din."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefonen til barnet ditt kan låses opp selv om det ikke er meningen, for eksempel hvis noen holder den opp mot fingeren til barnet."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Du får best resultater ved å bruke en skjermbeskytter som er Made For Google-sertifisert. Fingeravtrykket ditt fungerer muligens ikke med andre skjermbeskyttere."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Du får best resultater ved å bruke en skjermbeskytter som er Made For Google-sertifisert. Fingeravtrykket til barnet ditt fungerer muligens ikke med andre skjermbeskyttere."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustrasjon med enheten og plasseringen av fingeravtrykksensoren"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Navn"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Prøv igjen"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Slett"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Berør sensoren"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Legg fingeren på sensoren, og løft den når du kjenner en vibrasjon"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Ferdig"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ops, det er ikke sensoren"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Berør sensoren på baksiden av telefonen. Bruk pekefingeren."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registreringen er ikke fullført"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Tidsgrensen for registrering av fingeravtrykk er nådd. Prøv på nytt."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Konfigurering av fingeravtrykk er tidsavbrutt"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Prøv på nytt nå, eller konfigurer fingeravtrykket senere i innstillingene"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Registrering av fingeravtrykket mislyktes. Prøv på nytt, eller bruk en annen finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Legg til ett til"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Neste"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Tilpass telefonen"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Prøv forskjellige stiler, bakgrunner med mer"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Skjermsparer"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"skjermsparer"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Bruk skjermsparer"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Når enheten lades / er i dokken"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Begge"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Når enheten lades"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Når enheten er i dokken"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Aldri"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Av"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"For å kontrollere hva som skjer når telefonen er plassert i dokken og/eller i hvilemodus, slå på skjermspareren."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Starttidspunkt"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Aktiv skjermsparer"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Innstillinger"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatisk lysstyrke"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Aktiver enheten med løftebevegelser"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Passiv skjerm"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Angi en PIN-kode"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Angi en jobb-PIN-kode"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Angi et mønster"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"For å øke sikkerheten, angi et mønster for å låse opp enheten"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Angi et jobbmønster"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Angi passord for å bruke fingeravtrykk"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Angi mønster for å bruke fingeravtrykk"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Nødapp"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Tilbakestill app-innstillingene"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Vil du tilbakestille app-innstillingene?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Dette tilbakestiller alle innstillinger for\n\n"<li>"deaktiverte apper"</li>\n<li>"deaktiverte appvarsler"</li>\n<li>"standardapper for handlinger"</li>\n<li>"begrensninger på bakgrunnsdata for apper"</li>\n<li>"eventuelle tillatelsesbegrensninger"</li>\n\n"Du mister ingen appdata."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Dette tilbakestiller alle innstillinger for\n\n"<li>"deaktiverte apper"</li>\n<li>"deaktiverte appvarsler"</li>\n<li>"standardapper for handlinger"</li>\n<li>"begrensninger for bakgrunnsdata for apper"</li>\n<li>"eventuelle tillatelsesbegrensninger"</li>\n<li>"innstillinger for batteribruk"</li>\n\n"Du mister ingen appdata."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Tilbakestill apper"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Styr lagring"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Tilbakestill valgene"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Skjermstørrelsen og tekstinnstillingene er tilbakestilt"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Vil du tilbakestille visningsstørrelse og tekst?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Innstillingene for visningsstørrelse og tekst blir tilbakestilt til de opprinnelge telefoninnstillingene"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Innstillingene for visningsstørrelse og tekst blir tilbakestilt til de opprinnelge telefoninnstillingene"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Innstillingene for visningsstørrelse og tekst blir tilbakestilt til de opprinnelige nettbrettinnstillingene"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Tilbakestill"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Har du planer for helgen?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Jeg skal til stranden. Vil du bli med?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Ingen bruk siden sist batteriet var fulladet"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Ingen bruk de siste 24 timene"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Andre brukere"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Beregnet gjenværende batteritid er basert på måten du bruker enheten på"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Anslått tid som er igjen"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Til det er fulladet"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Full tjeneste for kommandoord og interaksjon"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Enkel tjeneste for tale til tekst"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Denne taleinndata-tjenesten kan utføre «alltid på»-taleovervåking og kontrollere taleaktiverte apper på dine vegne. Den kommer fra <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>-appen. Vil du slå på denne tjenesten?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Innstillinger for gjenkjenning på enheten"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Gjenkjenning på enheten"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Talegjenkjenning på enheten"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Foretrukket motor"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Innstillinger for motor"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Talehastighet og stemmeleie"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Slett"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Alle apper og data i denne økten blir slettet."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Fjern"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gjest (du)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Brukere"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Andre brukere"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Slett gjesteaktivitet"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Slett alle gjesteapper og -data når du avslutter gjestemodus"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vil du slette gjesteaktivitet?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apper og data fra denne gjesteøkten slettes nå, og all fremtidig gjesteaktivitet slettes hver gang du avslutter gjestemodus"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Slå på telefonsamtaler"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Slå på telefonsamtaler og SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Slett brukeren"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"«<xliff:g id="APP_NAME">%1$s</xliff:g>»: alle varsler"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>: alle varsler"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Varsler som kan tilpasses"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> varsler per dag</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> varsel per dag</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Omtrent <xliff:g id="NUMBER_1">%,d</xliff:g> varsler per dag</item>
+ <item quantity="one">Omtrent <xliff:g id="NUMBER_0">%d</xliff:g> varsel per dag</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">ca. <xliff:g id="NUMBER_1">%,d</xliff:g> varsler per uke</item>
- <item quantity="one">ca. <xliff:g id="NUMBER_0">%d</xliff:g> varsel per uke</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Omtrent <xliff:g id="NUMBER_1">%,d</xliff:g> varsler per uke</item>
+ <item quantity="one">Omtrent <xliff:g id="NUMBER_0">%d</xliff:g> varsel per uke</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Aldri"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Enhets- og appvarsler"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ikke gjør noe"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrer"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Ignorer"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"For å slå på, endre først «Trykk og hold på av/på-knappen» til av/på-menyen."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"For å slå på dette, endre først «Trykk og hold på av/på-knappen» til av/på-menyen."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Nettverksdetaljer"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Enhetsnavnet ditt er synlig for apper på telefonen. Det kan også ses av andre personer når du kobler til Bluetooth-enheter, kobler til et Wi-Fi-nettverk eller konfigurerer en wifi-sone."</string>
<string name="devices_title" msgid="649715719278562515">"Enheter"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"enhetsstyring"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kort og billetter"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kort og billetter"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Trykk og hold av/på-knappen"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Trykk og hold for assistenten"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Trykk og hold for av/på-menyen"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Trykk og hold er slått av"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Trykk og hold på av/på-knappen"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Trykk og hold på av/på-knappen for å åpne"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Av/på-meny"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digital assistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Åpne den digitale assistenten"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Åpne av/på-menyen"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Du må angi en skjermlås for å bruke denne funksjonen"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Hold for å starte assistenten"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Start assistenten ved å holde inne av/på-knappen"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Av/på- og nødmeny:\nTrykk inn av/på og volum opp samtidig."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Forhindre ringing:\nEn snarvei er tilgjengelig i volummenyen."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Av/på-meny:\nTrykk på av/på-knappen og volum opp-knappen samtidig"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Forhindre ringing:\nTrykk på en volumknapp for å bruke snarveien"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Varighet for trykk og hold"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Juster følsomheten ved å velge hvor lenge av/på-knappen skal holdes inne"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kort"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 487f7b7..1809cc4 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"तपाईंका बच्चाले Pixel Imprint प्रयोग गर्दा उनको फिंगरप्रिन्ट मोडेल अपडेट गर्न ती फोटोहरू प्रयोग गरिन्छन्। तपाईंका बच्चाको फिंगरप्रिन्ट मोडेल बनाउन प्रयोग गरिने फोटोहरू कहिल्यै पनि भण्डारण गरिँदैन तर यो फिंगरप्रिन्ट मोडेल यो फोनमा सुरक्षित तरिकाले भण्डारण गरिन्छ र कहिल्यै पनि यो फोनबाहेक अन्यत्र पठाइँदैन। यी सबै कारबाही यो फोनमा सुरक्षित तरिकाले गरिन्छ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"तपाईं जुनसुकै बेला सेटिङमा गई आफ्नो फिंगरप्रिन्टका फोटो र मोडेल मेटाउन वा फिंगरप्रिन्ट अनलक अफ गर्न सक्नुहुन्छ। फिंगरप्रिन्टका फोटो र मोडेल तपाईंले नमेटाउञ्जेलसम्म तपाईंको फोनमा सुरक्षित तरिकाले भण्डारण गरिन्छ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"तपाईं र तपाईंका बच्चा सेटिङमा गई जुनसुकै बेला उनको फिंगरप्रिन्टका फोटो र मोडेल मेटाउन वा फिंगरप्रिन्ट अनलक अफ गर्न सक्नुहुन्छ। तपाईंले फिंगरप्रिन्टका फोटो र मोडेलहरू नमेटाउन्जेल ती मोडेल र फोटो फोनमा नै भण्डारण गरिन्छन्।"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"तपाईंले अनलक गर्न नचाहेका बेलामा पनि फोन अनलक हुन सक्छ। जस्तै: कसैले तपाईंका औँला फोनको फिंगरप्रिन्ट सेन्सरमा छुवाए भने फोन अनलक हुन सक्छ।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"तपाईंले अनलक गर्न नचाहेका बेलामा पनि फोन अनलक हुन सक्छ। जस्तै: कसैले तपाईंका औँला फोनको फिंगरप्रिन्ट सेन्सरमा छुवाए भने फोन अनलक हुन सक्छ।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"तपाईंले अनलक गर्न नचाहेका बेलामा पनि ट्याब्लेट अनलक हुन सक्छ। जस्तै: कसैले तपाईंका औँला फोनको फिंगरप्रिन्ट सेन्सरमा छुवाए भने फोन अनलक हुन सक्छ।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"तपाईंले अनलक गर्न नचाहेका बेलामा पनि डिभाइस अनलक हुन सक्छ। जस्तै: कसैले तपाईंका औँला फोनको फिंगरप्रिन्ट सेन्सरमा छुवाए भने फोन अनलक हुन सक्छ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"तपाईंका बच्चाले अनलक गर्न नचाहेका बेला पनि फोन अनलक हुन सक्छ। जस्तै कसैले तपाईंका बच्चाको औँला फोनको फिंगरप्रिन्ट सेन्सरमा छुवाए भने फोन अनलक हुन सक्छ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"उत्कृष्ट परिणाम प्राप्त गर्न \"Google का लागि बनाइएको\" प्रमाणपत्र प्राप्त स्क्रिन प्रोटेक्टर प्रयोग गर्नुहोस्। तपाईंले अन्य स्क्रिन प्रोटेक्टरहरू हाल्नुभयो भने तपाईंको फिंगरप्रिन्टले काम नगर्न सक्छ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"उत्कृष्ट परिणाम प्राप्त गर्न \"Google का लागि बनाइएको\" प्रमाणपत्र प्राप्त स्क्रिन प्रोटेक्टर प्रयोग गर्नुहोस्। तपाईंले अन्य स्क्रिन प्रोटेक्टरहरू हाल्नुभयो भने तपाईंको बच्चाको फिंगरप्रिन्टले काम नगर्न सक्छ।"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"यन्त्र साथ चित्रण र फिंगरप्रिन्ट सेन्सर स्थान"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"नाम"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ठिक छ"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"फेरि प्रयास गर्नुहोस्"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"मेटाउनुहोस्"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"सेन्सरमा छुनुहोस्"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"सेन्सरमा आफ्नो औंला राख्नुहोस् र भाइब्रेसन भएपछि उठाउनुहोस्"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"सम्पन्न भयो"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"आच्यौं, त्यो सेन्सर होइन नि त"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"तपाईंको फोनको पछाडि भागमा रहेको सेन्सरमा छुनुहोस्। चोर औंला प्रयोग गर्नुहोस्।"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"दर्ता गर्न सकिएन"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"फिंगरप्रिन्ट दर्ताको समय सीमा पुग्यो। पुन: प्रयास गर्नुहोस्।"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"फिंगरप्रिन्ट सेट अप गर्ने समय सकियो"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"अहिले नै फेरि प्रयास गर्नुहोस् वा पछि सेटिङमा गई फिंगरप्रिन्ट सेटअप गर्नुहोस्"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"फिंगरप्रिन्ट दर्ता गर्न सकिएन। पुन: प्रयास गर्नुहोस् वा अरू औँलाको प्रयोग गर्नुहोस्।"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"अर्को हाल्नुहोस्"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"अर्को"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"आफ्नो फोन आफूले चाहे जस्तो पार्नुहोस्"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"विभिन्न शैली, वालपेपर र थप कुरा चलाएर हेर्नुहोस्"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"स्क्रिन सेभर"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"स्क्रिनसेभर"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"स्क्रिन सेभर प्रयोग गरियोस्"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"चार्ज वा डक गरिरहँदा"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"कुनै"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"चार्ज गरिरहेका बेला"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"डक गरिएको बेला"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"कहिल्यै पनि होइन"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"बन्द"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"फोन डकमा र/वा शयन अवस्थामा हुँदा हुने कुरालाई नियन्त्रण गर्न स्क्रिन सेभरलाई अन गर्नुहोस्।"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"सुरु हुने समय"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"हालको स्क्रिन सेभर"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"सेटिङहरू"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"स्वचालित उज्यालोपना"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"चालु गर्न उठाउनुहोस्"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"एम्बियन्ट प्रदर्शन"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"कार्य प्रोफाइलको PIN सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"प्याटर्न सेट गर्नुहोस्"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"यो डिभाइस थप सुरक्षित बनाउनका लागि यसलाई अनलक गर्ने प्याटर्न सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"कार्य प्रोफाइलको प्याटर्न सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"फिंगरप्रिन्ट प्रयोग गर्न पासवर्ड सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"फिंगरप्रिन्ट प्रयोग गर्न प्याटर्न सेट गर्नुहोस्"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"आपत्कालीन एप"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"एपका प्राथमिकताहरू रिसेट गर्नुहोस्"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"एपका प्राथमिकताहरू रिसेट गर्ने हो?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"यस कार्यले निम्न सुविधाहरूका सबै प्राथमिकताहरूलाई रिसेट गर्ने छ:\n\n"<li>"असक्षम पारिएका एपहरू"</li>\n<li>"असक्षम पारिएका एपसम्बन्धी सूचनाहरू"</li>\n<li>"कारबाहीका लागि तोकिएका डिफल्ट एप"</li>\n<li>"एपको ब्याकग्राउन्ड डेटासम्बन्धी बन्देजहरू"</li>\n<li>"अनुमतिसम्बन्धी सबै बन्देजहरू"</li>\n\n"तपाईं एपको कुनै पनि डेटा गुमाउनु हुने छैन।"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"तपाईंले यसो गर्नुभयो भने तल दिइएका कुराहरूसँग सम्बन्धित सबै प्राथमिकताहरू रिसेट हुने छन्:\n\n"<li>"अफ गरिएका एपहरू"</li>\n<li>"अफ गरिएका एपका सूचनाहरू"</li>\n<li>"विभिन्न कार्य गर्न प्रयोग गरिने डिफल्ट एपहरू"</li>\n<li>"एपहरूमा ब्याकग्राउन्ड डेटासम्बन्धी प्रतिबन्धहरू"</li>\n<li>"अनुमतिसँग सम्बन्धित सबै प्रतिबन्धहरू"</li>\n<li>"ब्याट्रीको खपतसम्बन्धी सेटिङ"</li>\n\n"तपाईंले एपसम्बन्धी कुनै पनि डेटा गुमाउनु हुने छैन।"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"एपहरू रिसेट गर्नुहोस्"</string>
<string name="manage_space_text" msgid="9013414693633572277">"उपलब्ध भण्डारणको व्यवस्थापन गर्नुहोस्"</string>
<string name="filter" msgid="9039576690686251462">"फिल्टर गर्नुहोस्"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"सेटिङ रिसेट गर्नुहोस्"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"डिस्प्लेको आकार तथा टेक्स्ट सेटिङ रिसेट गरिएका छन्"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"डिस्प्लेको आकार र टेक्स्टसम्बन्धी सेटिङ रिसेट गर्ने हो?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"डिस्प्लेको आकार र टेक्स्टसम्बन्धी सेटिङ रिसेट गरी फोनको डिफल्ट सेटिङ लागू गरिने छ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"डिस्प्लेको आकार र टेक्स्टसम्बन्धी सेटिङ रिसेट गरी फोनको डिफल्ट सेटिङ लागू गरिने छ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"डिस्प्लेको आकार र टेक्स्टसम्बन्धी सेटिङ रिसेट गरी ट्याब्लेटको डिफल्ट सेटिङ लागू गरिने छ"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"रिसेट गर्नुहोस्"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"सप्ताहान्त कसरी बिताउने योजना छ?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"समुद्री तटतिर जाँदै छु। तपाईं पनि मसँगै जाने हो?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"पछिल्लो पटक पूर्ण चार्ज भएदेखि ब्याट्री प्रयोग गरिएको छैन"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"पछिल्लो २४ घन्टामा ब्याट्री प्रयोग गरिएन"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"अन्य प्रयोगकर्ताहरू"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"बाँकी रहेको ब्याट्रीको प्रतिशतको अनुमान तपाईंको डिभाइसको प्रयोगमा आधारित हुन्छ"</string>
<string name="estimated_time_left" msgid="948717045180211777">"अनुमानित बाँकी समय"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"पूर्ण चार्ज नभएसम्म"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"पूर्ण हटवर्ड शब्द र अन्तरक्रिया"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"पाठको लागि सरल बोली"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"यो आवाज प्रविष्ट सेवाले आफ्नो तर्फबाट सधैं-आवाज अनुगमन र आवाज नियन्त्रण उपकरण सक्षम प्रदर्शन गर्न सक्षम हुनेछ। यो <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> उपकरणबाट आउँछ। यो सेवाको प्रयोग सक्षम गर्ने हो?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"डिभाइसमै चल्ने पहिचानसम्बन्धी सेटिङ"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"डिभाइसमै चल्ने पहिचान"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"डिभाइसमै चल्ने वाक् पहिचान"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"रुचाइएको इन्जिन"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"इन्जिन सम्बन्धी सेटिङहरू"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"बोलीको तीव्रता र तीक्षणता"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"मेट्नुहोस्"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"यो सत्रमा भएका सबै एपहरू र डेटा मेटाइने छ।"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"हटाउनुहोस्"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"अतिथि (तपाईं)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"प्रयोगकर्ताहरू"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"अन्य प्रयोगकर्ताहरू"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"अतिथि सत्रका क्रियाकलाप मेटाउनुहोस्"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"अतिथि मोडबाट बाहिरिँदा अतिथि सत्रका सबै एप तथा डेटा मेटाइऊन्"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"अतिथि सत्रका क्रियाकलाप मेटाउने हो?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"यो अतिथि सत्रका एप तथा डेटा अहिले नै मेटाइने छ र भविष्यमा तपाईं अतिथि मोडबाट बाहिरिँदा हरेक पटक अतिथि सत्रमा गरिने सबै क्रियाकलाप मेटाइने छन्"</string>
<string name="user_enable_calling" msgid="264875360626905535">"फोन गर्ने सेवा सक्रिय गरियोस्"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"फोन कल तथा SMS सक्षम पार्नुहोस्"</string>
<string name="user_remove_user" msgid="8468203789739693845">"प्रयोगकर्ता मेटाउनुहोस्"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" का सबै सूचनाहरू"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> सम्बन्धी सबै सूचनाहरू"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"अनुकूल पार्न मिल्ने सूचनाहरू"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">प्रति दिन लगभग <xliff:g id="NUMBER_1">%,d</xliff:g> सूचनाहरू</item>
- <item quantity="one">प्रति दिन लगभग <xliff:g id="NUMBER_0">%d</xliff:g> सूचना</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">हरेक दिन लगभग <xliff:g id="NUMBER_1">%,d</xliff:g> वटा सूचना</item>
+ <item quantity="one">हरेक दिन लगभग <xliff:g id="NUMBER_0">%d</xliff:g> सूचना</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">प्रति हप्ता लगभग <xliff:g id="NUMBER_1">%,d</xliff:g> सूचनाहरू</item>
- <item quantity="one">प्रति हप्ता लगभग <xliff:g id="NUMBER_0">%d</xliff:g> सूचना</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">हरेक हप्ता लगभग <xliff:g id="NUMBER_1">%,d</xliff:g> वटा सूचना</item>
+ <item quantity="one">हरेक हप्ता लगभग <xliff:g id="NUMBER_0">%d</xliff:g> सूचना</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"कहिल्यै होइन"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"डिभाइस तथा एपसम्बन्धी सूचनाहरू"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"केही पनि नगर्नुहोस्"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"भाइब्रेट गरियोस्"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"म्युट गर्नुहोस्"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"तपाईंले पावर मेनुमा गएर \"पावर बटन थिचिराख्नुहोस्\" परिवर्तन गरेपछि मात्र यो सेटिङ अन गर्न मिल्छ।"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"तपाईंले पावर मेनुमा गएर \"पावर बटन थिचिराख्नुहोस्\" परिवर्तन गरेपछि मात्र यो सेटिङ अन गर्न मिल्छ।"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"नेटवर्कको विवरण"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"तपाईंको फोनमा रहेका एपको प्रयोग गरी तपाईंको डिभाइसको नाम हेर्न सकिन्छ। तपाईंले ब्लुटुथ चल्ने डिभाइसमा कनेक्ट गर्दा, कुनै Wi-Fi नेटवर्कमा कनेक्ट गर्दा वा कुनै Wi-Fi हटस्पट सेटअप गर्दा अरू मान्छेहरू पनि यसलाई देख्न सक्छन्।"</string>
<string name="devices_title" msgid="649715719278562515">"यन्त्रहरू"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"डिभाइस नियन्त्रण गर्ने विजेटहरू"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"कार्ड तथा पासहरू"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"कार्ड तथा पासहरू"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"पावर बटन थिचिराख्नुहोस्"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"सहायता पाउन पावर बटन थिचिराख्नुहोस्"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"पावर मेनु प्रयोग गर्न पावर बटन थिचिराख्नुहोस्"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"पावर बटन थिचिराखेर सहायता लिने सुविधा अफ गरिएको छ"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"पावर बटन थिचिराख्नुहोस्"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"पावर मेनु प्रयोग गर्न पावर बटन थिचिराख्नुहोस्"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"पावर मेनु"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"डिजिटल सहायक"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"डिजिटल सहायक प्रयोग गर्नुहोस्"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"पावर मेनु प्रयोग गर्नुहोस्"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"यो सुविधा प्रयोग गर्न सर्वप्रथम स्क्रिन लक हाल्नुहोस्"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"पावर बटन थिच्दा सहायक अन गरियोस्"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"पावर बटन थिच्दा सहायक खुलोस्"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"पावर र आपत्कालीन मेनु:\nपावर र भोल्युम बढाउने बटन एकै पटक थिच्नुहोस्।"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"डिभाइसको घण्टी म्युट गरियोस्:\nसर्टकट भोल्युम मेनुमा छ।"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"पावर मेनु:\nपावर बटन र भोल्युम बढाउने बटन एकै चोटि थिच्नुहोस्"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"घण्टी बज्न नदिनुहोस्:\nसर्टकट प्रयोग गर्न भोल्युम बटन थिच्नुहोस्"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"थिचिराख्ने अवधि"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"कति समयसम्म पावर बटन थिचिराख्ने भन्ने कुरा छनौट गरेर संवेदनशीलता मिलाउनुहोस्"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"छोटो"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index f500a29..fd06fd8 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Als je kind Pixel Imprint gebruikt, worden foto\'s gebruikt om het vingerafdrukmodel van je kind te updaten. De foto\'s die worden gebruikt om het vingerafdrukmodel van je kind te maken, worden nooit opgeslagen, maar het vingerafdrukmodel zelf wordt beveiligd opgeslagen op de telefoon en verlaat deze nooit. Alle verwerking vindt beveiligd plaats op de telefoon."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Je kunt je vingerafdrukafbeeldingen en -model op elk moment verwijderen of ontgrendeling via vingerafdruk uitzetten in Instellingen. Vingerafdrukafbeeldingen en -modellen worden opgeslagen op de telefoon totdat je ze verwijdert."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Jij en je kind kunnen op elk moment de vingerafdrukfoto\'s en het vingerafdrukmodel van het kind verwijderen of ontgrendelen met vingerafdruk uitzetten in Instellingen. Vingerafdrukfoto\'s en -modellen worden opgeslagen op de telefoon totdat ze worden verwijderd."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Je telefoon kan onbedoeld worden ontgrendeld, bijvoorbeeld wanneer iemand deze tegen je vinger houdt."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Je telefoon kan onbedoeld worden ontgrendeld, bijvoorbeeld wanneer iemand deze tegen je vinger houdt."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Je tablet kan onbedoeld worden ontgrendeld, bijvoorbeeld als iemand deze tegen je vinger houdt."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Je apparaat kan onbedoeld worden ontgrendeld, bijvoorbeeld als iemand het tegen je vinger houdt."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"De telefoon van je kind kan onbedoeld worden ontgrendeld, bijvoorbeeld als iemand deze tegen de vinger van je kind houdt."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Voor de beste resultaten gebruik je een gecertificeerde Made for Google-screenprotector. Bij andere screenprotectors werkt je vingerafdruk misschien niet."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Voor de beste resultaten gebruik je een gecertificeerde Made for Google-screenprotector. Bij andere screenprotectors werkt de vingerafdruk van je kind misschien niet."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustratie met apparaat en locatie van vingerafdruksensor"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Naam"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Opnieuw proberen"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Verwijderen"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Raak de sensor aan"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Plaats je vinger op de sensor en til deze op nadat je een trilling hebt gevoeld."</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Klaar"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Dat is niet de sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Raak de sensor achter op je telefoon aan. Gebruik je wijsvinger."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registratie is niet voltooid"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Tijdlimiet voor vingerafdrukregistratie is bereikt. Probeer het opnieuw."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Time-out bij instellen van vingerafdruk"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Probeer het nu opnieuw of stel je vingerafdruk later in via Instellingen"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Vingerafdrukregistratie is mislukt. Probeer het opnieuw of gebruik een andere vinger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Nog een toevoegen"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Volgende"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Je telefoon aanpassen"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Probeer verschillende stijlen, achtergronden en meer"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Screensaver"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Screensaver gebruiken"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Tijdens opladen of docken"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Tijdens beide"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Tijdens het opladen"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Tijdens het docken"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nooit"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Uit"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Zet de screensaver aan om te bepalen wat er gebeurt als de telefoon is gedockt en/of de slaapstand actief is."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Wanneer starten"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Huidige screensaver"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Instellingen"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatische helderheid"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Optillen om te activeren"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Inactief scherm"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Stel een pincode in"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Een werkpincode instellen"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Stel een patroon in"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Stel voor extra beveiliging een patroon in om het apparaat te ontgrendelen"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Een werkpatroon instellen"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Stel wachtwoord in voor gebruik van vingerafdruk"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Stel patroon in voor gebruik van vingerafdruk"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Nood-app"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"App-voorkeuren resetten"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"App-voorkeuren resetten?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Dit reset alle voorkeuren voor:\n\n"<li>"Uitgezette apps"</li>\n<li>"Uitgezette app-meldingen"</li>\n<li>"Standaardapps voor acties"</li>\n<li>"Beperkingen voor achtergrondgegevens voor apps"</li>\n<li>"Rechtenbeperkingen"</li>\n\n"Je verliest geen app-gegevens."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Hiermee worden alle voorkeuren gereset voor:\n\n"<li>"Uitgezette apps"</li>\n<li>"Uitgezette app-meldingen"</li>\n<li>"Standaard-apps voor acties"</li>\n<li>"Beperkingen voor achtergrondgegevens voor apps"</li>\n<li>"Rechtenbeperkingen"</li>\n<li>"Instellingen voor batterijgebruik"</li>\n\n"Je verliest geen app-gegevens."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Apps resetten"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Ruimte beheren"</string>
<string name="filter" msgid="9039576690686251462">"Filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Instellingen resetten"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Instellingen voor weergavegrootte en tekst zijn gereset"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Weergavegrootte en tekst resetten?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Je weergavegrootte en tekstvoorkeuren worden gereset naar de oorspronkelijke instellingen van de telefoon"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Je weergavegrootte en tekstvoorkeuren worden gereset naar de oorspronkelijke instellingen van de telefoon"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Je weergavegrootte en tekstvoorkeuren worden gereset naar de oorspronkelijke instellingen van de tablet"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Resetten"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Heb je plannen voor het weekend?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Ik ga naar het strand. Ga je mee?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Geen gebruik sinds laatste volledige lading"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Geen gebruik in de afgelopen 24 u"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Andere gebruikers"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Schatting van resterende batterijduur is gebaseerd op je apparaatgebruik"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Geschatte resterende tijd"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Tot volledige lading"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Volledige hotword- en interactieservice"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Eenvoudige spraak-naar-tekst"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Deze spraakinvoerservice kan doorlopend de spraakinvoer volgen en namens jou spraakgestuurde apps bedienen. De service wordt geleverd door de <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Wil je het gebruik van deze service aanzetten?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Instellingen voor herkenning op het apparaat"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Herkenning op het apparaat"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Spraakherkenning op het apparaat"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Voorkeursengine"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Engine-instellingen"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Spreeksnelheid en toonhoogte"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Verwijderen"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Alle apps en gegevens in deze sessie worden verwijderd."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Verwijderen"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gast (jij)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Gebruikers"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Andere gebruikers"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Gastactiviteit verwijderen"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Verwijder alle gast-apps en -gegevens bij het afsluiten van de gastmodus"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Gastactiviteit verwijderen?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Apps en gegevens van deze gastsessie worden nu verwijderd en alle toekomstige gastactiviteit wordt verwijderd telkens wanneer je de gastmodus afsluit"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Telefoonoproepen aanzetten"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefoonoproepen en sms aanzetten"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Gebruiker verwijderen"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Alle meldingen van <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Alle meldingen van <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Aanpasbare meldingen"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> meldingen per dag</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> melding per dag</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Ongeveer <xliff:g id="NUMBER_1">%,d</xliff:g> meldingen per dag</item>
+ <item quantity="one">Ongeveer <xliff:g id="NUMBER_0">%d</xliff:g> melding per dag</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> meldingen per week</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> melding per week</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Ongeveer <xliff:g id="NUMBER_1">%,d</xliff:g> meldingen per week</item>
+ <item quantity="one">Ongeveer <xliff:g id="NUMBER_0">%d</xliff:g> melding per week</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nooit"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Apparaat- en app-meldingen"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Niets doen"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Trillen"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Geluid uit"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Als je dit wilt aanzetten, wijzig je eerst \'Aan/uit-knop ingedrukt houden\' in het aan/uit-menu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Als je dit wilt aanzetten, wijzig je eerst \'Aan/uit-knop ingedrukt houden\' in het aan/uit-menu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Netwerkgegevens"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Je apparaatnaam is zichtbaar voor apps op je telefoon. De apparaatnaam kan ook door andere mensen worden gezien als je verbinding maakt met bluetooth-apparaten of een wifi-netwerk, of als je een wifi-hotspot instelt."</string>
<string name="devices_title" msgid="649715719278562515">"Apparaten"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"apparaatbediening"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kaarten en passen"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kaarten en passen"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Aan/uit-knop ingedrukt houden"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Houd ingedrukt voor de Assistent"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Ingedrukt houden voor het aan/uit-menu"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Ingedrukt houden staat uit"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Aan/uit-knop ingedrukt houden"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Aan/uit-knop ingedrukt houden voor toegang"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Aan/uit-menu"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitale assistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Digitale assistent openen"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Aan/uit-menu openen"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Stel voor gebruik eerst een schermvergrendeling in"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Vasthouden voor de Assistent"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Houd de aan/uit-knop ingedrukt om de Assistent te activeren"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Aan/uit- en noodmenu:\ndruk tegelijkertijd op de aan/uit-knop en de knop Volume omhoog"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Ringtone uitzetten:\nsnelkoppeling beschikbaar in het volumemenu."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Aan/uit-menu:\nDruk tegelijkertijd op de aan/uit-knop en de knop Volume omhoog"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Ringtone uitzetten:\nDruk op een volumeknop voor de sneltoets"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Duur van ingedrukt houden"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Pas de gevoeligheid aan door te kiezen hoelang je de aan/uit-knop ingedrukt moet houden"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kort"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 00fd66a..24f24b1 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"ସେ Pixel Imprint ବ୍ୟବହାର କରିବା ସମୟରେ, ତା\'ର ଟିପଚିହ୍ନ ମଡେଲକୁ ଅପଡେଟ୍ କରିବା ପାଇଁ ଛବିଗୁଡ଼ିକୁ ବ୍ୟବହାର କରାଯାଏ। ଆପଣଙ୍କ ପିଲାର ଟିପଚିହ୍ନ ମଡେଲ୍ ତିଆରି କରିବା ପାଇଁ ବ୍ୟବହୃତ ଛବିଗୁଡ଼ିକୁ କେବେ ବି ଷ୍ଟୋର୍ କରାଯାଏ ନାହିଁ, କିନ୍ତୁ ଟିପଚିହ୍ନ ମଡେଲକୁ ଫୋନରେ ସୁରକ୍ଷିତ ଭାବେ ଷ୍ଟୋର୍ କରାଯାଇଥାଏ ଏବଂ କେବେ ବି ଫୋନରୁ କାଢ଼ି ଦିଆଯାଏ ନାହିଁ। ସମସ୍ତ ପ୍ରକ୍ରିୟାକରଣ ସୁରକ୍ଷିତ ଭାବେ ଫୋନରେ କରାଯାଇଥାଏ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"ଆପଣ ଆପଣଙ୍କ ଟିପଚିହ୍ନର ଛବି ଓ ମଡେଲଗୁଡ଼ିକୁ ଡିଲିଟ କରିପାରିବେ କିମ୍ବା ଯେ କୌଣସି ସମୟରେ ସେଟିଂସରେ ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକକୁ ବନ୍ଦ କରିପାରିବେ। ଟିପଚିହ୍ନର ଛବି ଓ ମଡେଲଗୁଡ଼ିକୁ ଆପଣ ଡିଲିଟ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ତାହା ଫୋନରେ ଷ୍ଟୋର ହୋଇ ରହିଥାଏ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"ଟିପଚିହ୍ନର ଛବି ଓ ମଡେଲକୁ ଆପଣ ଏବଂ ଆପଣଙ୍କ ପିଲା ଡିଲିଟ କରିପାରିବେ କିମ୍ବା ଯେ କୌଣସି ସମୟରେ ସେଟିଂସରେ ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ଅନଲକ ବନ୍ଦ କରିପାରିବେ। ଟିପଚିହ୍ନ ଛବି ଏବଂ ମଡେଲଗୁଡ଼ିକୁ ଡିଲିଟ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ସେଗୁଡ଼ିକ ଫୋନରେ ଷ୍ଟୋର ହୋଇ ରହିଥାଏ।"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"ଯଦି କେହି ଜଣେ ବ୍ୟକ୍ତି ଆପଣଙ୍କ ଫୋନକୁ ଆପଣଙ୍କ ଆଙ୍ଗୁଠିରେ ସ୍ପର୍ଶ କରାନ୍ତି, ତେବେ ଆପଣଙ୍କ ଅଜାଣତରେ ମଧ୍ୟ ଏହାକୁ ଅନଲକ୍ କରାଯାଇପାରିବ।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"ଯଦି କେହି ଜଣେ ବ୍ୟକ୍ତି ଆପଣଙ୍କ ଫୋନକୁ ଆପଣଙ୍କ ଆଙ୍ଗୁଠିରେ ସ୍ପର୍ଶ କରାନ୍ତି, ତେବେ ଆପଣଙ୍କ ଅଜାଣତରେ ମଧ୍ୟ ଏହାକୁ ଅନଲକ୍ କରାଯାଇପାରିବ।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"ଯଦି କେହି ଜଣେ ବ୍ୟକ୍ତି ଆପଣଙ୍କ ଟାବଲେଟକୁ ଆପଣଙ୍କ ଆଙ୍ଗୁଠିରେ ସ୍ପର୍ଶ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ଅଜାଣତରେ ମଧ୍ୟ ଏହାକୁ ଅନଲକ କରାଯାଇପାରିବ।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"ଯଦି କେହି ଜଣେ ବ୍ୟକ୍ତି ଆପଣଙ୍କ ଡିଭାଇସକୁ ଆପଣଙ୍କ ଆଙ୍ଗୁଠିରେ ସ୍ପର୍ଶ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ଅଜାଣତରେ ମଧ୍ୟ ଏହାକୁ ଅନଲକ କରାଯାଇପାରିବ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"ଯଦି କେହି ଜଣେ ବ୍ୟକ୍ତି ଆପଣଙ୍କ ପିଲାର ଫୋନକୁ ତା’ର ଆଙ୍ଗୁଠିରେ ସ୍ପର୍ଶ କରେ, ତେବେ ତା’ର ଅଜାଣତରେ ମଧ୍ୟ, ଏହାକୁ ଅନଲକ୍ କରାଯାଇପାରିବ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"ସର୍ବୋତ୍ତମ ଫଳାଫଳ ପାଇଁ, Made for Google ସ୍ୱୀକୃତିପ୍ରାପ୍ତ ଏକ ସ୍କ୍ରିନ ପ୍ରୋଟେକ୍ଟର ବ୍ୟବହାର କରନ୍ତୁ। ଅନ୍ୟ ସ୍କ୍ରିନ ପ୍ରୋଟେକ୍ଟରଗୁଡ଼ିକ ସହିତ, ଆପଣଙ୍କ ଟିପଚିହ୍ନ କାମ କରିନପାରେ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"ସର୍ବୋତ୍ତମ ଫଳାଫଳ ପାଇଁ, Made for Google ସ୍ୱୀକୃତିପ୍ରାପ୍ତ ଏକ ସ୍କ୍ରିନ ପ୍ରୋଟେକ୍ଟର ବ୍ୟବହାର କରନ୍ତୁ। ଅନ୍ୟ ସ୍କ୍ରିନ ପ୍ରୋଟେକ୍ଟରଗୁଡ଼ିକ ସହିତ, ଆପଣଙ୍କ ପିଲାର ଟିପଚିହ୍ନ କାମ କରିନପାରେ।"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ଡିଭାଇସ୍ ଏବଂ ଟିପଚିହ୍ନ ସେନସର୍ ଲୋକେସନ୍ ଚିତ୍ରଣ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"ନାମ"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ଠିକ୍ ଅଛି"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"ସେନ୍ସରକୁ ସ୍ପର୍ଶ କରନ୍ତୁ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"ନିଜ ଆଙ୍ଗୁଠିକୁ ସେନ୍ସର୍ ଉପରେ ରଖନ୍ତୁ ଏବଂ ଏକ ଭାଇବ୍ରେସନ୍ ଅନୁଭବ କରିବା ପରେ ଉଠାଇଦିଅନ୍ତୁ"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"ହୋଇଗଲା"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"ଆଃ, ସେଇଟା ସେନ୍ସର୍ ନୁହେଁ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"ଆପଣଙ୍କ ଫୋନ୍ର ପଛରେ ଥିବା ସେନସର୍ ସ୍ପର୍ଶ କରନ୍ତୁ। ଆପଣଙ୍କ ତର୍ଜନୀ ବ୍ୟବହାର କରନ୍ତୁ।"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"ପଞ୍ଜିକରଣ ସମ୍ପୂର୍ଣ୍ଣ ହୋଇନାହିଁ"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"ଟିପଚିହ୍ନ ପଞ୍ଜିକରଣ ସମୟ ସୀମା ଶେଷ ହୋଇଯାଇଛି। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ସେଟଅପ ସମୟସୀମା ସମାପ୍ତ ହୋଇଯାଇଛି"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ବର୍ତ୍ତମାନ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ କିମ୍ବା ପରେ ସେଟିଂସରେ ଆପଣଙ୍କ ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ସେଟ ଅପ କରନ୍ତୁ"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ଟିପଚିହ୍ନ ଏନରୋଲମ୍ୟାଣ୍ଟ କାମ କଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ କିମ୍ବା ଭିନ୍ନ ଏକ ଆଙ୍ଗୁଠି ବ୍ୟବହାର କରନ୍ତୁ।"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"ଆଉ ଗୋଟିଏ ଯୋଗ କରନ୍ତୁ"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"ପରବର୍ତ୍ତୀ"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"ଆପଣଙ୍କର ଫୋନ୍ କଷ୍ଟମାଇଜ୍ କରନ୍ତୁ"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"ବିଭିନ୍ନ ଷ୍ଟାଇଲ୍, ୱାଲ୍ପେପର୍ ଏବଂ ଆହୁରି ଅନେକ କିଛି ବ୍ୟବହାର କରି ଦେଖନ୍ତୁ"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"ସ୍କ୍ରିନ୍ ସେଭର୍"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ସ୍କ୍ରିନସେଭର"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"ସ୍କ୍ରିନ ସେଭର ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ଚାର୍ଜ ହେଉଥିବା କିମ୍ବା ଡକ୍ ହୋଇଥିବା ବେଳେ"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"ଏହା କିମ୍ବା ତାହା"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ଚାର୍ଜ ହେଉଥିବାବେଳେ"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ଡକ୍ ହୋଇଥିବାବେଳେ"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ଆଦୌ ନୁହେଁ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ବନ୍ଦ"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ଫୋନ୍ ଡକ୍ କରାଯାଇଥିଲେ ଏବଂ/କିମ୍ବା ସୁପ୍ତ ଥିବାବେଳେ ସେଥିରେ ହେଉଥିବା ଘଟଣାଗୁଡ଼ିକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ସ୍କ୍ରୀନ୍ ସେଭର୍ ଅନ୍ କରନ୍ତୁ।"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"କେତେବେଳେ ଆରମ୍ଭ କରିବେ"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"ବର୍ତ୍ତମାନର ସ୍କ୍ରିନ୍ ସେଭର୍"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ସେଟିଂସ"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ସ୍ୱଚାଳିତ ଉଜ୍ଜ୍ୱଳତା"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"ଉଠାଇଲେ ଜାଗ୍ରତ ହେବ"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ଆମ୍ବିଏଣ୍ଟ୍ ଡିସ୍ପ୍ଲେ"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"ଏକ PIN ସେଟ୍ କରନ୍ତୁ"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"ଏକ ୱାର୍କ PIN ସେଟ୍ କରନ୍ତୁ"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"ଏକ ପାଟର୍ନ ସେଟ୍ କରନ୍ତୁ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ, ଡିଭାଇସ ଅନଲକ କରିବାକୁ ଏକ ପାଟର୍ନ ସେଟ କରନ୍ତୁ"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"ଏକ ୱାର୍କ ପାଟର୍ନ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ଟିପଚିହ୍ନ ବ୍ୟବହାର କରିବା ପାଇଁ ପାସ୍ୱାର୍ଡ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ଟିପଚିହ୍ନ ବ୍ୟବହାର କରିବା ପାଇଁ ପାଟର୍ନ ସେଟ୍ କରନ୍ତୁ"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"ଜରୁରୀକାଳୀନ ଆପ୍"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"ଆପ୍ ପସନ୍ଦ ରିସେଟ୍ କରନ୍ତୁ"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"ଆପ୍ ପସନ୍ଦଗୁଡ଼ିକୁ ରିସେଟ୍ କରିବେ?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ଏହା ନିମ୍ନରେ ଥିବା ସମସ୍ତ ପସନ୍ଦକୁ ରିସେଟ୍ କରିବ:\n\n"<li>" ଅକ୍ଷମ କରାଯାଇଥିବା ଆପ୍ସ"</li>\n<li>" ଅକ୍ଷମ କରାଯାଇଥିବା ଆପ୍ ବିଜ୍ଞପ୍ତି"</li>\n<li>" କାର୍ଯ୍ୟ ପାଇଁ ଡିଫଲ୍ଟ ଆପ୍ଲିକେସନ୍ଗୁଡ଼ିକ"</li>\n<li>"ଆପ୍ସ ପାଇଁ ବ୍ୟାକଗ୍ରାଉଣ୍ଡ ଡାଟା ପ୍ରତିବନ୍ଧକ"</li>\n<li>"ଯେ କୌଣସି ଅନୁମତି ପ୍ରତିବନ୍ଧକ"</li>\n\n"ଆପଣ କୌଣସି ଆପ୍ ଡାଟା ହରାଇବେ ନାହିଁ।"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ନିମ୍ନୋକ୍ତ ପାଇଁ ଏହା ସମସ୍ତ ପସନ୍ଦକୁ ରିସେଟ କରିବ:\n\n "<li>"ଅକ୍ଷମ କରାଯାଇଥିବା ଆପ୍ସ"</li>\n<li>"ଅକ୍ଷମ କରାଯାଇଥିବା ଆପ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ"</li>\n<li>"କାର୍ଯ୍ୟଗୁଡ଼ିକ ପାଇଁ ଡିଫଲ୍ଟ ଆପ୍ଲିକେସନଗୁଡ଼ିକ"</li>\n<li>"ଆପ୍ସ ପାଇଁ ପୃଷ୍ଠପଟ ଡାଟା ପ୍ରତିବନ୍ଧକଗୁଡ଼ିକ"</li>\n<li>"ଯେ କୌଣସି ଅନୁମତି ପ୍ରତିବନ୍ଧକ"</li>\n<li>"ବ୍ୟାଟେରୀ ବ୍ୟବହାର ସେଟିଂସ"</li>\n\n"ଆପଣ କୌଣସି ଆପ ଡାଟା ହରାଇବେ ନାହିଁ।"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"ଆପ୍ଗୁଡ଼ିକୁ ରିସେଟ୍ କରନ୍ତୁ"</string>
<string name="manage_space_text" msgid="9013414693633572277">"ସ୍ଥାନ ପରିଚାଳନା କରନ୍ତୁ"</string>
<string name="filter" msgid="9039576690686251462">"ଫିଲ୍ଟର୍"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"ସେଟିଂସକୁ ରିସେଟ କରନ୍ତୁ"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ଡିସପ୍ଲେ ଆକାର ଏବଂ ଟେକ୍ସଟ ସେଟିଂସକୁ ରିସେଟ କରାଯାଇଛି"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ଡିସପ୍ଲେର ଆକାର ଏବଂ ଟେକ୍ସଟକୁ ରିସେଟ କରିବେ?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ଆପଣଙ୍କ ଡିସପ୍ଲେର ଆକାର ଏବଂ ଟେକ୍ସଟ ପସନ୍ଦଗୁଡ଼ିକ ଫୋନର ମୂଳ ସେଟିଂସରେ ରିସେଟ ହେବ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ଆପଣଙ୍କ ଡିସପ୍ଲେର ଆକାର ଏବଂ ଟେକ୍ସଟ ପସନ୍ଦଗୁଡ଼ିକ ଫୋନର ମୂଳ ସେଟିଂସରେ ରିସେଟ ହେବ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ଆପଣଙ୍କ ଡିସପ୍ଲେର ଆକାର ଏବଂ ଟେକ୍ସଟ ପସନ୍ଦଗୁଡ଼ିକ ଟାବଲେଟର ମୂଳ ସେଟିଂସରେ ରିସେଟ ହେବ"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"ରିସେଟ କରନ୍ତୁ"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"ସପ୍ତାହାନ୍ତ ପାଇଁ କୌଣସି ପ୍ଲାନ ଅଛି?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ବେଳାଭୂମିକୁ ବୁଲିବା ପାଇଁ ଯାଉଛି। ଯୋଗ ଦେବାକୁ ଚାହୁଁଛନ୍ତି?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"ଗତଥର ସମ୍ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପରଠାରୁ ବ୍ୟବହାର କରାଯାଇନାହିଁ"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"ଗତ 24 ଘଣ୍ଟାରେ ବ୍ୟବହାର କରାଯାଇନାହିଁ"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"ଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତାମାନେ"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"ଆପଣଙ୍କ ଡିଭାଇସ୍ର ବ୍ୟବହାରକୁ ନେଇ ବଳକା ଥିବା ବ୍ୟାଟେରୀର ଅନୁମାନ କରାଯାଇଥାଏ"</string>
<string name="estimated_time_left" msgid="948717045180211777">"ଆନୁମାନିକ ବଳକା ସମୟ"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପାଇଁ"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"ସମ୍ପୂର୍ଣ୍ଣ hotword ଓ ଯୋଗାଯୋଗ"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"କଥା ରୁ ଲେଖା"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"ଏହି ଭଏସ୍ ଇନପୁଟ୍ ସେବା ସର୍ବଦା-ଅନ୍ ଭଏସ୍ ନୀରିକ୍ଷଣ ସମ୍ପାଦନ କରିପାରିବ ଏବଂ ଆପଣଙ୍କ ତରଫରୁ ଭଏସ୍ ସକ୍ଷମ ହୋଇଥିବା ଆପ୍ଲିକେସନଗୁଡିକ ନିୟନ୍ତ୍ରଣ କରିପାରିବେ। ଏହା <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ଆପ୍ଲିକେସନରୁ ଆସିଥାଏ। ଏହି ସେବାର ବ୍ୟବହାର ସକ୍ଷମ କରିବେ?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"ଅନ-ଡିଭାଇସ ଚିହ୍ନଟକରଣ ସେଟିଂସ"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"ଅନ-ଡିଭାଇସ ଚିହ୍ନଟକରଣ"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"ଅନ-ଡିଭାଇସ ସ୍ପିଚ ଚିହ୍ନଟକରଣ"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"ନିଜ ପସନ୍ଦର ଇଞ୍ଜିନ୍"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"ଇଞ୍ଜିନ ସେଟିଂସ"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"ସ୍ପୀଚ୍ ବେଗ ଓ ପିଚ୍"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"ଏହି ସେସନ୍ର ସମସ୍ତ ଆପ୍ ଏବଂ ଡାଟା ଡିଲିଟ୍ ହୋଇଯିବ।"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"କାଢିଦିଅନ୍ତୁ"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"ଅତିଥି (ଆପଣ)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ଉପଯୋଗକର୍ତ୍ତାମାନେ"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"ଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତାମାନେ"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"ଅତିଥି କାର୍ଯ୍ୟକଳାପକୁ ଡିଲିଟ କରନ୍ତୁ"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"ଅତିଥି ମୋଡରୁ ବାହାରକୁ ଯିବା ସମୟରେ ସମସ୍ତ ଅତିଥି ଆପ୍ସ ଏବଂ ଡାଟା ଡିଲିଟ କରନ୍ତୁ"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ଅତିଥି କାର୍ଯ୍ୟକଳାପକୁ ଡିଲିଟ କରିବେ?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ବର୍ତ୍ତମାନ ଏହି ଅତିଥି ସେସନରୁ ଆପ୍ସ ଏବଂ ଡାଟା ଡିଲିଟ ହୋଇଯିବ ଏବଂ ଆପଣ ପ୍ରତ୍ୟେକ ଥର ଅତିଥି ମୋଡରୁ ବାହାରକୁ ଗଲେ ଭବିଷ୍ୟତର ସମସ୍ତ ଅତିଥି କାର୍ଯ୍ୟକଳାପ ଡିଲିଟ ହୋଇଯିବ"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ଫୋନ୍ କଲ୍ ଚାଲୁ କରନ୍ତୁ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ଫୋନ୍ କଲ୍ ଓ SMS ଚାଲୁ କରନ୍ତୁ"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ଡିଲିଟ୍ କରନ୍ତୁ"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"ସମସ୍ତ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ବିଜ୍ଞପ୍ତି"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> ବିଷୟରେ ସମସ୍ତ ବିଜ୍ଞପ୍ତି"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"ଆଡେପ୍ଟିଭ୍ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">ପ୍ରତି ବିଜ୍ଞପ୍ତି ~<xliff:g id="NUMBER_1">%,d</xliff:g>ଟି ବିଜ୍ଞପ୍ତି</item>
- <item quantity="one">ପ୍ରତି ଦିନ ~<xliff:g id="NUMBER_0">%d</xliff:g>ଟି ବିଜ୍ଞପ୍ତି</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">ପ୍ରତି ଦିନ ପ୍ରାୟ <xliff:g id="NUMBER_1">%,d</xliff:g>ଟି ବିଜ୍ଞପ୍ତି</item>
+ <item quantity="one">ପ୍ରତି ଦିନ ପ୍ରାୟ <xliff:g id="NUMBER_0">%d</xliff:g>ଟି ବିଜ୍ଞପ୍ତି</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">ପ୍ରତି ସପ୍ତାହ~<xliff:g id="NUMBER_1">%,d</xliff:g>ଟି ବିଜ୍ଞପ୍ତି</item>
- <item quantity="one">ପ୍ରତି ସପ୍ତାହ~<xliff:g id="NUMBER_0">%d</xliff:g>ଟି ବିଜ୍ଞପ୍ତି</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">ପ୍ରତି ସପ୍ତାହରେ ପ୍ରାୟ <xliff:g id="NUMBER_1">%,d</xliff:g>ଟି ବିଜ୍ଞପ୍ତି</item>
+ <item quantity="one">ପ୍ରତି ସପ୍ତାହରେ ପ୍ରାୟ <xliff:g id="NUMBER_0">%d</xliff:g>ଟି ବିଜ୍ଞପ୍ତି</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"ଆଦୌ ନୁହେଁ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ଡିଭାଇସ୍ ଓ ଆପ୍ ବିଜ୍ଞପ୍ତି"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"କିଛି କରନ୍ତୁ ନାହିଁ"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"ଭାଇବ୍ରେଟ୍ କରନ୍ତୁ"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"ମ୍ୟୁଟ୍ କରନ୍ତୁ"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ସକ୍ଷମ କରିବାକୁ, ପାୱାର ମେନୁରେ ପ୍ରଥମେ \"ପାୱାର ବଟନକୁ ଦବାଇ ଧର\"କୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ।"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ସକ୍ଷମ କରିବା ପାଇଁ, ପାୱାର ମେନୁରେ ପ୍ରଥମେ \"ପାୱାର ବଟନକୁ ଦବାଇ ଧରି ରଖନ୍ତୁ\"କୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ।"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"ନେଟୱାର୍କ୍ ବିବରଣୀ"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"ଆପଣଙ୍କ ଫୋନରେ ଥିବା ଆପଗୁଡ଼ିକୁ ଆପଣଙ୍କ ଡିଭାଇସ୍ ନାମ ଦୃଶ୍ୟମାନ ହୋଇଥାଏ। ଯେତେବେଳେ ଆପଣ ବ୍ଲୁଟୁଥ୍ ଡିଭାଇସଗୁଡ଼ିକ ସହ ସଂଯୋଗ କରନ୍ତି, ଏକ ୱାଇ-ଫାଇ ନେଟୱାର୍କ ସହ ସଂଯୋଗ କରନ୍ତି କିମ୍ବା ଏକ ୱାଇ-ଫାଇ ହଟସ୍ପଟ୍ ସେଟ୍ ଅପ୍ କରନ୍ତି, ସେତେବେଳେ ଏହା ଅନ୍ୟ ଲୋକମାନଙ୍କୁ ମଧ୍ୟ ଦେଖାଯାଇପାରେ।"</string>
<string name="devices_title" msgid="649715719278562515">"ଡିଭାଇସ୍"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ଡିଭାଇସ୍ ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"କାର୍ଡ ଓ ପାସଗୁଡ଼ିକ"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"କାର୍ଡ ଓ ପାସଗୁଡ଼ିକ"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"ପାୱାର ବଟନକୁ ଦବାଇ ଧରି ରଖନ୍ତୁ"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant ପାଇଁ ଦବାଇ ଧରି ରଖନ୍ତୁ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"ପାୱାର ମେନୁ ପାଇଁ ଦବାଇ ଧରି ରଖନ୍ତୁ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"\"ଦବାଇ ଧରି ରଖିବା\"କୁ ଅକ୍ଷମ କରାଯାଇଛି"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"ପାୱାର ବଟନକୁ ଦବାଇ ଧରି ରଖନ୍ତୁ"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"ଆକ୍ସେସ କରିବା ପାଇଁ ପାୱାର ବଟନକୁ ଦବାଇ ଧରି ରଖନ୍ତୁ"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"ପାୱାର ମେନୁ"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ଡିଜିଟାଲ ଆସିଷ୍ଟାଣ୍ଟ"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ଡିଜିଟାଲ ଆସିଷ୍ଟାଣ୍ଟକୁ ଆକ୍ସେସ କରନ୍ତୁ"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"ପାୱାର ମେନୁକୁ ଆକ୍ସେସ କରନ୍ତୁ"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ବ୍ୟବହାର କରିବାକୁ, ପ୍ରଥମେ ଏକ ସ୍କ୍ରିନ୍ ଲକ୍ ସେଟ୍ କରନ୍ତୁ"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant ପାଇଁ ଧରି ରଖନ୍ତୁ"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"ପାୱାର ବଟନକୁ ଧରି ରଖି Assistantକୁ ଟ୍ରିଗର୍ କରନ୍ତୁ"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"ପାୱାର ଏବଂ ଜରୁରୀକାଳୀନ ମେନୁ:\nସମାନ ସମୟରେ \"ପାୱାର\" ଏବଂ \"ଭଲ୍ୟୁମ୍ ବଢ଼ାନ୍ତୁ\"କୁ ଦବାନ୍ତୁ।"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"ରିଙ୍ଗ ହେବାକୁ ପ୍ରତିରୋଧ କରନ୍ତୁ:\nଭଲ୍ୟୁମ୍ ମେନୁରେ ସର୍ଟକଟ୍ ଉପଲବ୍ଧ ଅଛି।"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"ପାୱାର ମେନୁ:\nପାୱାର ବଟନ ଏବଂ ଭଲ୍ୟୁମ ଅପ ବଟନକୁ ସମାନ ସମୟରେ ଦବାନ୍ତୁ"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"ରିଂ ହେବା ବନ୍ଦ କରନ୍ତୁ:\nସର୍ଟକଟ ପାଇଁ ଏକ ଭଲ୍ୟୁମ ବଟନ ଦବାନ୍ତୁ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"ଦବାଇ ଧରି ରଖିବାର ଅବଧି"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"ପାୱାର ବଟନକୁ କେତେ ସମୟ ଦବାଇ ଧରି ରଖିବେ, ତାହା ବାଛି ସମ୍ବେଦନଶୀଳତାକୁ ଆଡଜଷ୍ଟ କରନ୍ତୁ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"କମ୍ ସମୟ"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 7928e3a..93f308c 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"ਜਦੋਂ ਉਹ Pixel Imprint ਵਰਤਦਾ ਹੈ, ਤਾਂ ਉਸਦੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੇ ਮਾਡਲ ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਲਈ ਚਿੱਤਰ ਵਰਤੇ ਜਾਂਦੇ ਹਨ। ਤੁਹਾਡੇ ਬੱਚੇ ਦੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਮਾਡਲ ਬਣਾਉਣ ਲਈ ਵਰਤੇ ਜਾਂਦੇ ਚਿੱਤਰ ਕਦੇ ਵੀ ਸਟੋਰ ਨਹੀਂ ਕੀਤੇ ਜਾਂਦੇ, ਪਰ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੇ ਮਾਡਲ ਨੂੰ ਉਹਨਾਂ ਦੇ ਫ਼ੋਨ \'ਤੇ ਸੁਰੱਖਿਅਤ ਤਰੀਕੇ ਨਾਲ ਸਟੋਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਇਹ ਕਦੇ ਵੀ ਫ਼ੋਨ ਤੋਂ ਬਾਹਰ ਨਹੀਂ ਜਾਂਦਾ। ਸਾਰੀ ਪ੍ਰਕਿਰਿਆ ਫ਼ੋਨ \'ਤੇ ਸੁਰੱਖਿਅਤ ਤਰੀਕੇ ਨਾਲ ਵਾਪਰਦੀ ਹੈ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਕਿਸੇ ਵੇਲੇ ਵੀ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੇ ਚਿੱਤਰਾਂ ਅਤੇ ਮਾਡਲ ਨੂੰ ਮਿਟਾ ਸਕਦੇ ਹੋ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਨੂੰ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ। ਫਿੰਗਰਪ੍ਰਿੰਟ ਚਿੱਤਰ ਅਤੇ ਮਾਡਲ ਫ਼ੋਨ \'ਤੇ ਉਦੋਂ ਤੱਕ ਸਟੋਰ ਰਹਿੰਦੇ ਹਨ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਨ੍ਹਾਂ ਨੂੰ ਮਿਟਾਉਂਦੇ ਨਹੀਂ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"ਤੁਸੀਂ ਅਤੇ ਤੁਹਾਡਾ ਬੱਚਾ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਕਿਸੇ ਵੇਲੇ ਵੀ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੇ ਚਿੱਤਰਾਂ ਅਤੇ ਮਾਡਲ ਨੂੰ ਮਿਟਾ ਸਕਦੇ ਹਨ ਜਾਂ ਫਿੰਗਰਪ੍ਰਿੰਟ ਅਣਲਾਕ ਨੂੰ ਬੰਦ ਕਰ ਸਕਦੇ ਹਨ। ਫਿੰਗਰਪ੍ਰਿੰਟ ਚਿੱਤਰ ਅਤੇ ਮਾਡਲ ਫ਼ੋਨ \'ਤੇ ਉਦੋਂ ਤੱਕ ਸਟੋਰ ਰਹਿੰਦੇ ਹਨ ਜਦੋਂ ਤੱਕ ਉਨ੍ਹਾਂ ਨੂੰ ਮਿਟਾਇਆ ਨਹੀਂ ਜਾਂਦਾ।"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"ਤੁਹਾਡੇ ਨਾ ਚਾਹੁੰਦੇ ਹੋਏ ਵੀ ਕਈ ਵਾਰ ਤੁਹਾਡਾ ਫ਼ੋਨ ਅਣਲਾਕ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ, ਜੇ ਕੋਈ ਵਿਅਕਤੀ ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਤੁਹਾਡੀ ਉਂਗਲ ਕੋਲ ਲਿਜਾ ਕੇ ਸਪਰਸ਼ ਕਰਵਾ ਦੇਵੇ।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"ਤੁਹਾਡੇ ਨਾ ਚਾਹੁੰਦੇ ਹੋਏ ਵੀ ਕਈ ਵਾਰ ਤੁਹਾਡਾ ਫ਼ੋਨ ਅਣਲਾਕ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ, ਜੇ ਕੋਈ ਵਿਅਕਤੀ ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਤੁਹਾਡੀ ਉਂਗਲ ਕੋਲ ਲਿਜਾ ਕੇ ਸਪਰਸ਼ ਕਰਵਾ ਦੇਵੇ।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"ਤੁਹਾਡੇ ਨਾ ਚਾਹੁੰਦੇ ਹੋਏ ਵੀ ਕਈ ਵਾਰ ਤੁਹਾਡਾ ਫ਼ੋਨ ਅਣਲਾਕ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ, ਜੇ ਕੋਈ ਵਿਅਕਤੀ ਤੁਹਾਡੇ ਟੈਬਲੈੱਟ ਨੂੰ ਤੁਹਾਡੀ ਉਂਗਲ ਕੋਲ ਲਿਜਾ ਕੇ ਸਪਰਸ਼ ਕਰਵਾ ਦੇਵੇ।"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"ਤੁਹਾਡੇ ਨਾ ਚਾਹੁੰਦੇ ਹੋਏ ਵੀ ਕਈ ਵਾਰ ਤੁਹਾਡਾ ਫ਼ੋਨ ਅਣਲਾਕ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ, ਜੇ ਕੋਈ ਵਿਅਕਤੀ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨੂੰ ਤੁਹਾਡੀ ਉਂਗਲ ਕੋਲ ਲਿਜਾ ਕੇ ਸਪਰਸ਼ ਕਰਵਾ ਦੇਵੇ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"ਜੇ ਕੋਈ ਵਿਅਕਤੀ ਤੁਹਾਡੇ ਬੱਚੇ ਦੇ ਫ਼ੋਨ ਨੂੰ ਉਸਦੀ ਉਂਗਲ ਕੋਲ ਲਿਜਾ ਕੇ ਸਪਰਸ਼ ਕਰਵਾ ਦੇਵੇ, ਤਾਂ ਨਾ ਚਾਹੁੰਦੇ ਹੋਏ ਵੀ ਇਹ ਅਣਲਾਕ ਹੋ ਸਕਦਾ ਹੈ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"ਬਿਹਤਰੀਨ ਨਤੀਜਿਆਂ ਲਈ, Made for Google ਵੱਲੋਂ ਪ੍ਰਮਾਣਿਤ ਸਕ੍ਰੀਨ ਰੱਖਿਅਕ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਹੋਰ ਸਕ੍ਰੀਨ ਰੱਖਿਅਕਾਂ ਨਾਲ, ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਹਾਡਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਕੰਮ ਨਾ ਕਰੇ।"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"ਬਿਹਤਰੀਨ ਨਤੀਜਿਆਂ ਲਈ, Made for Google ਵੱਲੋਂ ਪ੍ਰਮਾਣਿਤ ਸਕ੍ਰੀਨ ਰੱਖਿਅਕ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਹੋਰ ਸਕ੍ਰੀਨ ਰੱਖਿਅਕਾਂ ਨਾਲ, ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਹਾਡੇ ਬੱਚੇ ਦਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਕੰਮ ਨਾ ਕਰੇ।"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ਡੀਵਾਈਸ ਵਾਲੀ ਤਸਵੀਰ ਅਤੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਟਿਕਾਣਾ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"ਨਾਮ"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ਠੀਕ ਹੈ"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"ਮਿਟਾਓ"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"ਸੈਂਸਰ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"ਆਪਣੀ ਉਂਗਲ ਨੂੰ ਸੈਂਸਰ ’ਤੇ ਰੱਖੋ ਅਤੇ ਇੱਕ ਥਰਥਰਾਹਟ ਮਹਿਸੂਸ ਹੋਣ ਤੋਂ ਬਾਅਦ ਚੁੱਕ ਲਵੋ"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"ਹੋ ਗਿਆ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"ਓਹੋ, ਉਹ ਸੈਂਸਰ ਨਹੀਂ ਹੈ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"ਫ਼ੋਨ ਦੇ ਪਿਛਲੇ ਪਾਸੇ ਸੈਂਸਰ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ। ਪਹਿਲੀ ਉਂਗਲ ਵਰਤੋ।"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"ਦਰਜਾਬੰਦੀ ਪੂਰੀ ਨਹੀਂ ਹੋਈ"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਰਜ ਕਰਨ ਦੀ ਸਮਾਂ ਸੀਮਾ ਪੂਰੀ ਹੋ ਗਈ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਸੈੱਟਅੱਪ ਕਰਨ ਲਈ ਸਮਾਂ ਸਮਾਪਤ ਹੋਇਆ"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ਹੁਣੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਬਾਅਦ ਵਿੱਚ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਰਜ ਨਹੀਂ ਹੋਇਆ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ ਕੋਈ ਵੱਖਰੀ ਉਂਗਲ ਵਰਤੋ।"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"ਇੱਕ ਹੋਰ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"ਅੱਗੇ"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"ਵੱਖ-ਵੱਖ ਸਟਾਈਲ, ਵਾਲਪੇਪਰ ਵਰਤ ਕੇ ਦੇਖੋ ਅਤੇ ਹੋਰ ਬਹੁਤ ਕੁਝ"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"ਸਕ੍ਰੀਨ ਸੇਵਰ"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ਸਕ੍ਰੀਨ-ਸੇਵਰ"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"ਸਕ੍ਰੀਨ ਸੇਵਰ ਵਰਤੋ"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ਚਾਰਜ ਕਰਨ ਵੇਲੇ ਜਾਂ ਡੌਕ ਕੀਤੇ ਹੋਣ ਦੌਰਾਨ"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"ਦੋਵਾਂ ਵਿੱਚੋਂ ਇੱਕ"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ਚਾਰਜ ਕਰਨ ਵੇਲੇ"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ਜਦੋਂ ਡੌਕ ਕੀਤਾ ਹੋਵੇ"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ਕਦੇ ਵੀ ਨਹੀਂ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ਬੰਦ"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ਇਹ ਕੰਟਰੋਲ ਕਰਨ ਲਈ ਕਿ ਜਦੋਂ ਫ਼ੋਨ ਡੌਕ ਕੀਤਾ ਅਤੇ/ਜਾਂ ਸਲੀਪ ਮੋਡ ਵਿੱਚ ਹੁੰਦਾ ਹੈ ਉਦੋਂ ਕੀ ਹੁੰਦਾ ਹੈ, ਸਕ੍ਰੀਨ ਸੇਵਰ ਚਾਲੂ ਕਰੋ।"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"ਕਦੋਂ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"ਮੌਜੂਦਾ ਸਕ੍ਰੀਨ ਸੇਵਰ"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ਸੈਟਿੰਗਾਂ"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ਸਵੈਚਲਿਤ ਚਮਕ"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"ਕਿਰਿਆਸ਼ੀਲ ਕਰਨ ਲਈ ਚੁੱਕੋ"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ਸਰਗਰਮ ਡਿਸਪਲੇ"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"ਪਿੰਨ ਸੈੱਟ ਕਰੋ"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"ਕੰਮ ਸੰਬੰਧੀ ਪਿੰਨ ਸੈੱਟ ਕਰੋ"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"ਪੈਟਰਨ ਸੈੱਟ ਕਰੋ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"ਵਾਧੂ ਸੁਰੱਖਿਆ ਲਈ, ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਵਾਸਤੇ ਪੈਟਰਨ ਸੈੱਟ ਕਰੋ"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"ਕੰਮ ਸੰਬੰਧੀ ਪੈਟਰਨ ਸੈੱਟ ਕਰੋ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤਣ ਲਈ ਪਾਸਵਰਡ ਸੈੱਟ ਕਰੋ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤਣ ਲਈ ਪੈਟਰਨ ਸੈੱਟ ਕਰੋ"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"ਆਪਾਤਕਾਲ ਐਪ"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"ਐਪ ਤਰਜੀਹਾਂ ਰੀਸੈੱਟ ਕਰੋ"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"ਕੀ ਐਪ ਤਰਜੀਹਾਂ ਰੀਸੈੱਟ ਕਰਨੀਆਂ ਹਨ?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ਇਹ ਹੇਠਲੀਆਂ ਸਾਰੀਆਂ ਤਰਜੀਹਾਂ ਨੂੰ ਰੀਸੈੱਟ ਕਰ ਦੇਵੇਗਾ:\n\n"<li>" ਬੰਦ ਕੀਤੀਆਂ ਐਪਾਂ"</li>\n<li>"ਬੰਦ ਕੀਤੀਆਂ ਐਪ ਸੂਚਨਾਵਾਂ"</li>\n<li>"ਕਾਰਵਾਈਆਂ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਐਪਲੀਕੇਸ਼ਨਾਂ"</li>\n<li>" ਐਪਾਂ ਲਈ ਬੈਕਗ੍ਰਾਊਂਡ ਡਾਟੇ ਸੰਬੰਧੀ ਪਾਬੰਦੀਆਂ"</li>\n<li>"ਕੋਈ ਵੀ ਇਜਾਜ਼ਤ ਸੰਬੰਧੀ ਪਾਬੰਦੀ"</li>\n\n"ਤੁਸੀਂ ਕੋਈ ਵੀ ਐਪ ਡਾਟਾ ਨਹੀਂ ਗੁਆਓਗੇ।"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ਇਹ ਹੇਠਲੀਆਂ ਸਾਰੀਆਂ ਤਰਜੀਹਾਂ ਨੂੰ ਰੀਸੈੱਟ ਕਰ ਦੇਵੇਗਾ:\n\n"<li>"ਬੰਦ ਕੀਤੀਆਂ ਐਪਾਂ"</li>\n<li>"ਬੰਦ ਕੀਤੀਆਂ ਐਪ ਸੂਚਨਾਵਾਂ"</li>\n<li>"ਕਾਰਵਾਈਆਂ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਐਪਲੀਕੇਸ਼ਨਾਂ"</li>\n<li>"ਐਪਾਂ ਲਈ ਬੈਕਗ੍ਰਾਊਂਡ ਡਾਟੇ ਸੰਬੰਧੀ ਪਾਬੰਦੀਆਂ"</li>\n<li>"ਕੋਈ ਵੀ ਇਜਾਜ਼ਤ ਸੰਬੰਧੀ ਪਾਬੰਦੀਆਂ"</li>\n<li>"ਬੈਟਰੀ ਵਰਤੋਂ ਸੰਬੰਧੀ ਸੈਟਿੰਗਾਂ"</li>\n\n"ਤੁਸੀਂ ਕੋਈ ਵੀ ਐਪ ਡਾਟਾ ਨਹੀਂ ਗੁਆਓਗੇ।"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"ਐਪਾਂ ਰੀਸੈੱਟ ਕਰੋ"</string>
<string name="manage_space_text" msgid="9013414693633572277">"ਜਗ੍ਹਾ ਵਿਵਸਥਿਤ ਕਰੋ"</string>
<string name="filter" msgid="9039576690686251462">"ਫਿਲਟਰ"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"ਸੈਟਿੰਗਾਂ ਰੀਸੈੱਟ ਕਰੋ"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ਡਿਸਪਲੇ ਦੇ ਅਕਾਰ ਅਤੇ ਲਿਖਤ ਸੈਟਿੰਗਾਂ ਨੂੰ ਰੀਸੈੱਟ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ਕੀ ਡਿਸਪਲੇ ਦੇ ਆਕਾਰ ਅਤੇ ਲਿਖਤ ਨੂੰ ਰੀਸੈੱਟ ਕਰਨਾ ਹੈ?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ਤੁਹਾਡੀ ਡਿਸਪਲੇ ਦਾ ਆਕਾਰ ਅਤੇ ਲਿਖਤ ਸੰਬੰਧੀ ਤਰਜੀਹਾਂ ਫ਼ੋਨ ਦੀਆਂ ਮੂਲ ਸੈਟਿੰਗਾਂ \'ਤੇ ਰੀਸੈੱਟ ਹੋ ਜਾਣਗੀਆਂ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ਤੁਹਾਡੀ ਡਿਸਪਲੇ ਦਾ ਆਕਾਰ ਅਤੇ ਲਿਖਤ ਸੰਬੰਧੀ ਤਰਜੀਹਾਂ ਫ਼ੋਨ ਦੀਆਂ ਮੂਲ ਸੈਟਿੰਗਾਂ \'ਤੇ ਰੀਸੈੱਟ ਹੋ ਜਾਣਗੀਆਂ"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ਤੁਹਾਡੀ ਡਿਸਪਲੇ ਦੇ ਆਕਾਰ ਅਤੇ ਲਿਖਤ ਸੰਬੰਧੀ ਤਰਜੀਹਾਂ ਟੈਬਲੈੱਟ ਦੀਆਂ ਮੂਲ ਸੈਟਿੰਗਾਂ \'ਤੇ ਰੀਸੈੱਟ ਹੋ ਜਾਣਗੀਆਂ"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"ਰੀਸੈੱਟ ਕਰੋ"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"ਕੀ ਵੀਕੈਂਡ ਲਈ ਕੋਈ ਪਲਾਨ ਹੈ?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ਬੀਚ \'ਤੇ ਜਾ ਰਹੇ ਹਾਂ। ਨਾਲ ਆਓਗੇ?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"ਪਿਛਲੀ ਵਾਰ ਪੂਰਾ ਚਾਰਜ ਕਰਨ ਤੋਂ ਬਾਅਦ ਕੋਈ ਵਰਤੋਂ ਨਹੀਂ"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"ਪਿਛਲੇ 24 ਘੰਟਿਆਂ ਦੌਰਾਨ ਕੋਈ ਵਰਤੋਂ ਨਹੀਂ"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"ਹੋਰ ਵਰਤੋਂਕਾਰ"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"ਬਾਕੀ ਬਚੀ ਬੈਟਰੀ ਦਾ ਅਨੁਮਾਨ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੀ ਵਰਤੋਂ \'ਤੇ ਆਧਾਰਿਤ ਹੈ"</string>
<string name="estimated_time_left" msgid="948717045180211777">"ਅਨੁਮਾਨਿਤ ਬਾਕੀ ਸਮਾਂ"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"ਪੂਰਾ ਚਾਰਜ ਹੋਣ ਲਈ"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"ਪੂਰਾ ਹੌਟਵਰਡ ਅਤੇ ਇੰਟਰੈਕਸ਼ਨ"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"ਸਧਾਰਨ ਬੋਲੀ ਤੋਂ ਲਿਖਤ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"ਇਹ ਵੌਇਸ ਇਨਪੁੱਟ ਸੇਵਾ ਹਮੇਸ਼ਾਂ-ਚਾਲੂ ਵੌਇਸ ਨਿਰੀਖਣ ਪਰਫੌਰਮ ਕਰਨ ਵਿੱਚ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਵੌਇਸ ਸਮਰਥਿਤ ਐਪਲੀਕੇਸ਼ਨਾਂ ਤੇ ਨਿਯੰਤਰਣ ਪਾਉਣ ਵਿੱਚ ਸਮਰੱਥ ਹੋਵੇਗੀ। ਇਹ <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>ਐਪਲੀਕੇਸ਼ਨ ਤੋਂ ਆਉਂਦੀ ਹੈ। ਕੀ ਇਸ ਸੇਵਾ ਦੀ ਵਰਤੋਂ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਹੈ?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"ਡੀਵਾਈਸ \'ਤੇ ਪਛਾਣ ਸੈਟਿੰਗਾਂ"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"ਡੀਵਾਈਸ \'ਤੇ ਪਛਾਣ"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"ਡੀਵਾਈਸ \'ਤੇ ਬੋਲੀ ਪਛਾਣ"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"ਤਰਜੀਹੀ ਇੰਜਣ"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"ਇੰਜਣ ਦੀਆਂ ਸੈਟਿੰਗਾਂ"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"ਬੋਲਣ ਦੀ ਗਤੀ ਅਤੇ ਸੁਰ"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"ਮਿਟਾਓ"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"ਇਸ ਸੈਸ਼ਨ ਵਿਚਲੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟਾ ਨੂੰ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"ਹਟਾਓ"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"ਮਹਿਮਾਨ (ਤੁਸੀਂ)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ਵਰਤੋਂਕਾਰ"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"ਹੋਰ ਵਰਤੋਂਕਾਰ"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"ਮਹਿਮਾਨ ਦੀ ਸਰਗਰਮੀ ਮਿਟਾਓ"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"ਮਹਿਮਾਨ ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਣ \'ਤੇ ਮਹਿਮਾਨ ਦੀਆਂ ਸਾਰੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟੇ ਨੂੰ ਮਿਟਾਓ"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ਕੀ ਮਹਿਮਾਨ ਦੀ ਸਰਗਰਮੀ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ਇਸ ਮਹਿਮਾਨ ਸੈਸ਼ਨ ਦੀਆਂ ਐਪਾਂ ਅਤੇ ਡਾਟੇ ਨੂੰ ਹੁਣੇ ਮਿਟਾਇਆ ਜਾਵੇਗਾ ਅਤੇ ਮਹਿਮਾਨ ਦੀ ਸਾਰੀ ਭਵਿੱਖੀ ਸਰਗਰਮੀ ਨੂੰ ਤੁਹਾਡੇ ਮਹਿਮਾਨ ਮੋਡ ਤੋਂ ਬਾਹਰ ਜਾਣ \'ਤੇ ਹਰ ਵਾਰ ਮਿਟਾਇਆ ਜਾਵੇਗਾ"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ਫ਼ੋਨ ਕਾਲਾਂ ਚਾਲੂ ਕਰੋ"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ਫ਼ੋਨ ਕਾਲਾਂ ਅਤੇ SMS ਚਾਲੂ ਕਰੋ"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ਵਰਤੋਂਕਾਰ ਨੂੰ ਮਿਟਾਓ"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"ਸਾਰੀਆਂ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ਸੂਚਨਾਵਾਂ"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"ਸਾਰੀਆਂ <xliff:g id="APP_NAME">%1$s</xliff:g> ਸੂਚਨਾਵਾਂ"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"ਅਡੈਪਟਿਵ ਸੂਚਨਾਵਾਂ"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">ਹਰ ਰੋਜ਼ ~<xliff:g id="NUMBER_1">%,d</xliff:g> ਸੂਚਨਾ</item>
- <item quantity="other">ਹਰ ਰੋਜ਼ ~<xliff:g id="NUMBER_1">%,d</xliff:g> ਸੂਚਨਾਵਾਂ</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">ਪ੍ਰਤੀ ਦਿਨ ਲਗਭਗ <xliff:g id="NUMBER_1">%,d</xliff:g> ਸੂਚਨਾ</item>
+ <item quantity="other">ਪ੍ਰਤੀ ਦਿਨ ਲਗਭਗ <xliff:g id="NUMBER_1">%,d</xliff:g> ਸੂਚਨਾਵਾਂ</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~ਹਰ ਹਫ਼ਤੇ <xliff:g id="NUMBER_1">%,d</xliff:g> ਸੂਚਨਾ</item>
- <item quantity="other">~ਹਰ ਹਫ਼ਤੇ <xliff:g id="NUMBER_1">%,d</xliff:g> ਸੂਚਨਾਵਾਂ</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">ਪ੍ਰਤੀ ਹਫ਼ਤੇ ਲਗਭਗ <xliff:g id="NUMBER_1">%,d</xliff:g> ਸੂਚਨਾ</item>
+ <item quantity="other">ਪ੍ਰਤੀ ਹਫ਼ਤੇ ਲਗਭਗ <xliff:g id="NUMBER_1">%,d</xliff:g> ਸੂਚਨਾਵਾਂ</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"ਕਦੇ ਵੀ ਨਹੀਂ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ਡੀਵਾਈਸ ਅਤੇ ਐਪ ਸੂਚਨਾਵਾਂ"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"ਕੁਝ ਨਾ ਕਰੋ"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"ਥਰਥਰਾਹਟ ਕਰੋ"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"ਮਿਊਟ ਕਰੋ"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ਚਾਲੂ ਕਰਨ ਲਈ, ਪਹਿਲਾਂ ਪਾਵਰ ਮੀਨੂ ਲਈ \"ਪਾਵਰ ਬਟਨ ਨੂੰ ਦਬਾਈ ਰੱਖੋ\" ਵਿਕਲਪ ਨੂੰ ਬਦਲੋ।"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ਚਾਲੂ ਕਰਨ ਲਈ, ਪਹਿਲਾਂ ਪਾਵਰ ਮੀਨੂ ਲਈ \"ਪਾਵਰ ਬਟਨ ਨੂੰ ਦਬਾਈ ਰੱਖੋ\" ਵਿਕਲਪ ਨੂੰ ਬਦਲੋ।"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"ਨੈੱਟਵਰਕ ਵੇਰਵੇ"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਨਾਮ ਤੁਹਾਡੇ ਫ਼ੋਨ \'ਤੇ ਐਪਾਂ ਨੂੰ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ। ਇਸਨੂੰ ਤੁਹਾਡੇ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸ ਨਾਲ ਕਨੈਕਟ ਕਰਨ, ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਜਾਂ ਵਾਈ-ਫਾਈ ਹੌਟਸਪੌਟ ਸੈੱਟਅੱਪ ਕਰਨ \'ਤੇ ਹੋਰ ਲੋਕਾਂ ਵੱਲੋਂ ਵੀ ਦੇਖਿਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
<string name="devices_title" msgid="649715719278562515">"ਡੀਵਾਈਸਾਂ"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ਡੀਵਾਈਸ ਕੰਟਰੋਲ"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"ਕਾਰਡ ਅਤੇ ਪਾਸ"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"ਕਾਰਡ ਅਤੇ ਪਾਸ"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"ਪਾਵਰ ਬਟਨ ਨੂੰ ਦਬਾਈ ਰੱਖੋ"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant ਲਈ ਦਬਾਈ ਰੱਖੋ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"ਪਾਵਰ ਮੀਨੂ ਲਈ ਦਬਾਈ ਰੱਖੋ"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"ਦਬਾਈ ਰੱਖਣ ਦੀ ਸੁਵਿਧਾ ਬੰਦ ਹੈ"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"ਪਾਵਰ ਬਟਨ ਨੂੰ ਦਬਾ ਕੇ ਰੱਖੋ"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"ਪਹੁੰਚ ਲਈ ਪਾਵਰ ਬਟਨ ਨੂੰ ਦਬਾ ਕੇ ਰੱਖੋ"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"ਪਾਵਰ ਮੀਨੂ"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ਡਿਜੀਟਲ ਸਹਾਇਕ"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ਡਿਜੀਟਲ ਸਹਾਇਕ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"ਪਾਵਰ ਮੀਨੂ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ਵਰਤਣ ਲਈ, ਪਹਿਲਾਂ ਸਕ੍ਰੀਨ ਲਾਕ ਸੈੱਟ ਕਰੋ"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant ਲਈ ਪਾਵਰ ਬਟਨ ਨੂੰ ਕੁਝ ਸਮਾਂ ਦਬਾਈ ਰੱਖੋ"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"ਪਾਵਰ ਬਟਨ ਨੂੰ ਕੁਝ ਸਮਾਂ ਦਬਾਈ ਰੱਖ ਕੇ Assistant ਨੂੰ ਟ੍ਰਿਗਰ ਕਰੋ"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"ਪਾਵਰ ਅਤੇ ਐਮਰਜੈਂਸੀ ਮੀਨੂ:\nਪਾਵਰ ਬਟਨ ਅਤੇ \'ਅਵਾਜ਼ ਵਧਾਓ\' ਬਟਨ ਨੂੰ ਇੱਕੋ ਸਮੇਂ ਦਬਾਓ।"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"ਘੰਟੀ ਵੱਜਣ ਤੋਂ ਰੋਕੋ:\nਸ਼ਾਰਟਕੱਟ ਅਵਾਜ਼ ਮੀਨੂ ਵਿੱਚ ਉਪਲਬਧ ਹੈ।"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"ਪਾਵਰ ਮੀਨੂ:\nਪਾਵਰ ਬਟਨ ਅਤੇ \'ਅਵਾਜ਼ ਵਧਾਓ\' ਬਟਨ ਨੂੰ ਇੱਕੋ ਸਮੇਂ ਦਬਾ ਕੇ ਰੱਖੋ"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"ਘੰਟੀ ਵੱਜਣ ਤੋਂ ਰੋਕੋ:\nਸ਼ਾਰਟਕੱਟ ਲਈ ਅਵਾਜ਼ ਬਟਨ ਦਬਾਓ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"ਦਬਾਈ ਰੱਖਣ ਦੀ ਮਿਆਦ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"ਪਾਵਰ ਬਟਨ ਨੂੰ ਦਬਾਈ ਰੱਖਣ ਦੀ ਮਿਆਦ ਦੀ ਚੋਣ ਕਰਕੇ ਸੰਵੇਦਨਸ਼ੀਲਤਾ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰੋ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"ਛੋਟਾ"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 9f231e0..69cb349 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -472,7 +472,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Obrazy tworzone, gdy dziecko korzysta z funkcji Pixel Imprint, służą do aktualizowania modelu odcisku jego palca. Obrazy użyte do utworzenia modelu odcisku palca nigdy nie są zapisywane, a sam model jest bezpiecznie przechowywany na telefonie i nigdy go nie opuszcza. Przetwarzanie danych odbywa się w całości na telefonie w bezpieczny sposób."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"W dowolnej chwili możesz usunąć obrazy oraz model odcisku palca i wyłączyć funkcję odblokowywania odciskiem palca w Ustawieniach. Obrazy i modele odcisku palca będą przechowywane na telefonie, dopóki ich nie usuniesz."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Ty i Twoje dziecko w dowolnej chwili możecie usunąć obrazy oraz model odcisku palca i wyłączyć odblokowywanie odciskiem palca w Ustawieniach. Obrazy i modele odcisku palca są przechowywane na telefonie, dopóki nie zostaną usunięte."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefon może się niechcący odblokować, jeżeli inna osoba przyłoży do niego Twój palec."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefon może się niechcący odblokować, jeżeli inna osoba przyłoży do niego Twój palec."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tablet może się odblokować wbrew Twojej woli, jeżeli inna osoba przyłoży do niego Twój palec."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Urządzenie może się odblokować wbrew Twojej woli, jeżeli inna osoba przyłoży do niego Twój palec."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefon dziecka może zostać odblokowany, jeżeli inna osoba go do palca dziecka."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Najlepsze efekty daje osłona ekranu z oznaczeniem „Made for Google”. W przypadku innych osłon ekranu Twój odcisk palca może nie zadziałać."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Najlepsze efekty daje osłona ekranu z oznaczeniem „Made for Google”. W przypadku innych osłon ekranu odcisk palca Twojego dziecka może nie zadziałać."</string>
@@ -522,6 +524,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustracja pokazująca urządzenie i umiejscowienie czytnika linii papilarnych"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nazwa"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Spróbuj ponownie"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Usuń"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Dotknij czytnika"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Przyłóż palec do czytnika. Podnieś go, gdy poczujesz wibracje."</string>
@@ -599,8 +602,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Gotowe"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ups, to nie jest czytnik"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Dotknij czytnika z tyłu telefonu. Użyj palca wskazującego."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Nie ukończono rejestracji"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Osiągnięto limit czasu rejestracji odcisku palca. Spróbuj ponownie."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Upłynął limit czasu konfiguracji odcisku palca"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Spróbuj ponownie lub skonfiguruj odcisk palca później w Ustawieniach"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Nie udało się zarejestrować odcisku palca. Spróbuj ponownie lub przyłóż inny palec."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Dodaj kolejny"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Dalej"</string>
@@ -1488,17 +1491,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Dostosowywanie telefonu"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Wypróbuj różne style, tapety i inne elementy"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Wygaszacz ekranu"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"wygaszacz ekranu"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Używaj wygaszacza ekranu"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Podczas ładowania lub po zadokowaniu"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Po zadokowaniu lub podczas ładowania"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Podczas ładowania"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Po zadokowaniu"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nigdy"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Wył."</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Włącz wygaszacz ekranu, by kontrolować to, co dzieje się, gdy telefon jest w stacji dokującej i/lub w trybie uśpienia."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kiedy włączać"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Bieżący wygaszacz ekranu"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Ustawienia"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatyczna"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Podnieś, by wybudzić"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Wygaszacz z powiadomieniami"</string>
@@ -1990,6 +1991,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Ustaw kod PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Ustaw służbowy kod PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Ustaw wzór"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Dla większego bezpieczeństwa ustaw wzór do odblokowywania urządzenia"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Ustaw wzór służbowy"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Aby korzystać z odcisku palca, ustaw hasło"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Aby korzystać z odcisku palca, ustaw wzór"</string>
@@ -2147,7 +2149,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplikacja alarmowa"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Resetuj ustawienia aplikacji"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Zresetować ustawienia aplikacji?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"To działanie zresetuje wszystkie ustawienia:\n\n"<li>"wyłączonych aplikacji,"</li>\n<li>"wyłączonych powiadomień z aplikacji,"</li>\n<li>"domyślnych aplikacji dla wybranych czynności,"</li>\n<li>"ograniczeń korzystania przez aplikacje z danych w tle,"</li>\n<li>"wszystkich ograniczeń dotyczących uprawnień."</li>\n\n"Nie stracisz żadnych danych aplikacji."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"To działanie zresetuje wszystkie ustawienia dotyczące:\n\n"<li>"wyłączonych aplikacji,"</li>\n<li>"wyłączonych powiadomień aplikacji,"</li>\n<li>"domyślnych aplikacji dla wybranych czynności,"</li>\n<li>"ograniczeń użycia danych w tle dla aplikacji,"</li>\n<li>"wszelkich ograniczeń dostępu,"</li>\n<li>"ustawień wykorzystania baterii."</li>\n\n"Nie utracisz żadnych danych aplikacji."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Resetuj aplikacje"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Zarządzaj miejscem"</string>
<string name="filter" msgid="9039576690686251462">"Filtr"</string>
@@ -2402,7 +2404,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Resetuj ustawienia"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Rozmiar wyświetlacza i ustawienia tekstu zostały zresetowane"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Zresetować rozmiar wyświetlacza i tekst?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Ustawienia rozmiaru wyświetlacza i tekstu zostaną zresetowane do ustawień fabrycznych telefonu"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Ustawienia rozmiaru wyświetlacza i tekstu zostaną zresetowane do ustawień fabrycznych telefonu"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Ustawienia rozmiaru wyświetlacza i tekstu zostaną zresetowane do ustawień fabrycznych tabletu"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Resetuj"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Masz plany na weekend?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Wybieram się na plażę. Przyłączysz się?"</string>
@@ -3010,6 +3013,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Brak użycia od ostatniego pełnego naładowania"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Brak wykorzystania w ciągu ostatnich 24 godzin"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Inni użytkownicy"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Pozostały czas pracy na baterii jest szacowany na podstawie wykorzystania urządzenia"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Szacowany pozostały czas"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Do pełnego naładowania"</string>
@@ -3099,6 +3103,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Pełne słowo-klucz i interakcja"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Prosta zamiana mowy na tekst"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ta usługa głosowego wprowadzania tekstu będzie mogła nieustannie monitorować aktywność głosową i sterować aplikacjami z włączoną obsługą głosową w Twoim imieniu. Pochodzi z tej aplikacji: <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Włączyć ją?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Ustawienia rozpoznawania na urządzeniu"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Rozpoznawanie na urządzeniu"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Rozpoznawanie mowy na urządzeniu"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Preferowany mechanizm"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Ustawienia mechanizmu"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Szybkość mowy i ton głosu"</string>
@@ -3499,6 +3506,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Usuń"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Wszystkie aplikacje i dane w tej sesji zostaną usunięte."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Usuń"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gość (Ty)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Użytkownicy"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Inni użytkownicy"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Usuń aktywność gościa"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Usuwaj wszystkie aplikacje i dane gościa podczas zamykania trybu gościa"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Usunąć aktywność gościa?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacje i dane z tej sesji gościa zostaną teraz usunięte. Cała przyszła aktywność gościa będzie usuwana podczas zamykania trybu gościa."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Włącz rozmowy telefoniczne"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Włącz rozmowy telefoniczne i SMS-y"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Usuń użytkownika"</string>
@@ -4095,17 +4109,17 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Wszystkie powiadomienia z aplikacji „<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Wszystkie powiadomienia z aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Powiadomienia adaptacyjne"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> powiadomienia dziennie</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> powiadomień dziennie</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> powiadomienia dziennie</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> powiadomienie dziennie</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="few">Mniej więcej <xliff:g id="NUMBER_1">%,d</xliff:g> powiadomienia dziennie</item>
+ <item quantity="many">Mniej więcej <xliff:g id="NUMBER_1">%,d</xliff:g> powiadomień dziennie</item>
+ <item quantity="other">Mniej więcej <xliff:g id="NUMBER_1">%,d</xliff:g> powiadomienia dziennie</item>
+ <item quantity="one">Mniej więcej <xliff:g id="NUMBER_0">%d</xliff:g> powiadomienie dziennie</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> powiadomienia tygodniowo</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> powiadomień tygodniowo</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> powiadomienia tygodniowo</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> powiadomienie tygodniowo</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="few">Mniej więcej <xliff:g id="NUMBER_1">%,d</xliff:g> powiadomienia tygodniowo</item>
+ <item quantity="many">Mniej więcej <xliff:g id="NUMBER_1">%,d</xliff:g> powiadomień tygodniowo</item>
+ <item quantity="other">Mniej więcej <xliff:g id="NUMBER_1">%,d</xliff:g> powiadomienia tygodniowo</item>
+ <item quantity="one">Mniej więcej <xliff:g id="NUMBER_0">%d</xliff:g> powiadomienie tygodniowo</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nigdy"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Powiadomienia na urządzeniu i w aplikacjach"</string>
@@ -5423,7 +5437,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Nic nie rób"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Wibracje"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Wyciszenie"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Aby włączyć, najpierw zmień „Naciśnij i przytrzymaj przycisk zasilania” na menu zasilania."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Aby włączyć, najpierw zmień „Naciśnij i przytrzymaj przycisk zasilania” na menu zasilania."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Szczegóły sieci"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Nazwa urządzenia jest widoczna dla aplikacji na telefonie. Mogą ją też zobaczyć inne osoby, gdy łączysz się z urządzeniami przez Bluetooth, łączysz się z siecią Wi-Fi lub konfigurujesz hotspot Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Urządzenia"</string>
@@ -5716,15 +5730,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"sterowanie urządzeniami"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Karty i bilety"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"Karty i bilety"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Naciśnij i przytrzymaj przycisk zasilania"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Naciśnij i przytrzymaj, aby uruchomić Asystenta"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Naciśnij i przytrzymaj, aby wyświetlić menu zasilania"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Opcja Naciśnij i przytrzymaj jest wyłączona"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Naciśnij i przytrzymaj przycisk głośności"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Naciśnij i przytrzymaj przycisk zasilania, aby uzyskać dostęp"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu zasilania"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Asystent cyfrowy"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Otwórz asystenta cyfrowego"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Otwórz menu zasilania"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Najpierw ustaw blokadę ekranu"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Przytrzymaj, aby włączyć Asystenta"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Przytrzymaj przycisk zasilania, aby uaktywnić Asystenta"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu zasilania i alarmowe:\nNaciśnij jednocześnie przyciski zasilania i zwiększania głośności."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Zapobiegaj włączeniu się dzwonka:\nSkrót dostępny w menu głośności."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu zasilania:\nnaciśnij jednocześnie przycisk zasilania i przycisk zwiększania głośności"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Wyłączanie dzwonków:\naby uruchomić ten skrót, naciśnij przycisk głośności"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Czas naciskania i przytrzymywania przycisku głośności"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Dostosuj czułość, określając, jak długo ma być naciskany i przytrzymywany przycisk głośności"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Krótko"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 1f695f9..d068e8b 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Quando a criança utiliza o Pixel Imprint, as imagens são usadas para atualizar o modelo de impressão digital dela. As imagens usadas para criar o modelo da criança nunca são armazenadas, mas ele fica salvo em segurança no smartphone, sem deixar o dispositivo. Todo o processamento ocorre de forma segura no smartphone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Você pode excluir as imagens e o modelo da impressão digital ou desativar o Desbloqueio por impressão digital a qualquer momento nas configurações. As imagens e os modelos de impressão digital são armazenados no smartphone até serem excluídos."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Você e a criança podem excluir as imagens e o modelo de impressão digital dela ou desativar o Desbloqueio por impressão digital a qualquer momento nas Configurações. As imagens e os modelos de impressão digital ficam armazenados no smartphone até serem excluídos."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"O smartphone pode ser desbloqueado mesmo se não for sua intenção. Por exemplo, se alguém colocar seu dedo no sensor."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"O smartphone pode ser desbloqueado mesmo se não for sua intenção. Por exemplo, se alguém colocar seu dedo no sensor."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"O tablet poderá ser desbloqueado mesmo se essa não for sua intenção. Por exemplo, se alguém colocar seu dedo no sensor."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"O dispositivo poderá ser desbloqueado mesmo se essa não for sua intenção. Por exemplo, se alguém colocar seu dedo no sensor."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"O smartphone da criança poderá ser desbloqueado mesmo quando essa não for a intenção. Por exemplo, se alguém levar o leitor ao dedo dela."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Para conseguir melhores resultados, use uma película com certificação Made For Google. Sua impressão digital pode não funcionar com outras películas."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Para conseguir melhores resultados, use uma película com certificação Made For Google. A impressão digital da criança pode não funcionar com outras películas."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustração mostrando a localização do sensor de impressão digital no dispositivo"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nome"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Ok"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Tentar novamente"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Excluir"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Toque no sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Encoste o dedo no sensor e, após sentir uma vibração, tire o dedo"</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Concluído"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Opa, este não é o sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Toque no sensor na parte traseira do smartphone. Use o dedo indicador."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"O registro não foi concluído"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Tempo limite para registro de impressões digitais atingido. Tente novamente."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"A configuração da impressão digital expirou"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Tente novamente ou configure a impressão digital mais tarde nas configurações"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"O registro da impressão digital não funcionou. Tente novamente ou use um dedo diferente."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Adicionar outra"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Próxima"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personalizar seu smartphone"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Use diferentes estilos, planos de fundo e muito mais"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Protetor de tela"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"protetor de tela"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Usar o protetor de tela"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Ao carregar ou quando encaixado na base"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Ambos"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Ao carregar"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Encaixado na base"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nunca"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Desativado"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Para controlar o que acontece quando o smartphone está na base e/ou no modo de suspensão, ative o protetor de tela."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Quando começar"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Protetor de tela atual"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Configurações"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Brilho automático"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Levantar para ativar"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Tela ambiente"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Definir um PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Defina um PIN de trabalho"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Definir um padrão"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Para aumentar a segurança, defina um padrão para desbloquear o dispositivo"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Definir um padrão de trabalho"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Para usar a impressão digital, defina uma senha"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Para usar a impressão digital, defina um padrão"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"App de emergência"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Redefinir apps"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Redefinir apps?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Isso redefinirá todas as preferências para:\n\n"<li>" apps desativados;"</li>" \n "<li>"notificações de apps desativados; "</li>\n<li>"apps padrão para ações;"</li>\n<li>"restrições de dados em segundo plano para apps; "</li>\n<li>"qualquer restrição de permissão."</li>\n\n"Você não perderá os dados dos apps."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Isso vai redefinir todas as preferências para:\n\n"<li>"apps desativados;"</li>\n<li>"notificações de apps desativados;"</li>\n<li>"apps padrão para ações;"</li>\n<li>"restrições de dados em segundo plano para apps;"</li>\n<li>"qualquer restrição de permissão;"</li>\n<li>"configurações de uso da bateria."</li>\n\n"Você não vai perder nenhum dado do app."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Redefinir apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Gerenciar espaço"</string>
<string name="filter" msgid="9039576690686251462">"Filtro"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Redefinir configurações"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"As definições de tamanho e texto da tela foram redefinidas"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Redefinir o texto e o tamanho da tela?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"As preferências de texto e tamanho da tela serão redefinidas para as configurações originais do smartphone"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"As preferências de texto e tamanho da tela serão redefinidas para as configurações originais do smartphone"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"As preferências de texto e tamanho da tela serão redefinidas para as configurações originais do tablet"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Redefinir"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Algum plano para o fim de semana?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Vou para a praia. Quer ir também?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Sem uso desde a última carga completa"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Sem uso nas últimas 24h"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Outros usuários"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"A estimativa de carga da bateria restante é baseada no uso que você faz do dispositivo"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Tempo restante estimado"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Até a carga completa"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Hotword completa e interação"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Conversão simples de fala em texto"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Este serviço de entrada por voz poderá executar monitoramento por voz sempre ativado e apps com o recurso de comando de voz em seu nome. Ele está incluído no app <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Quer ativar o uso deste serviço?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Configurações de reconhecimento no dispositivo"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Reconhecimento no dispositivo"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Reconhecimento de fala no dispositivo"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Mecanismo preferencial"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Configurações do mecanismo"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Velocidade da fala e tom de voz"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Excluir"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Todos os apps e dados nesta sessão serão excluídos."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Remover"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Visitante (você)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Usuários"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Outros usuários"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Excluir atividade de convidado"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Excluir todos os apps e dados do convidado ao sair do modo convidado"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Excluir atividade do convidado?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Os apps e dados desta sessão de convidado serão excluídos agora e toda a atividade futura será excluída sempre que você sair do modo convidado"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Ativar chamadas telefônicas"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ativar chamadas telefônicas e SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Excluir usuário"</string>
@@ -4009,12 +4023,12 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Todas as notificações de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Todas as notificações do app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notificações adaptáveis"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
<item quantity="one">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificação por dia</item>
<item quantity="other">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificações por dia</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one"><xliff:g id="NUMBER_1">%,d</xliff:g> notificação por semana</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificação por semana</item>
<item quantity="other">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificações por semana</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nunca"</string>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Não fazer nada"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrar"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Desativar som"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Para ativar, mude a opção \"Aperte no botão liga/desliga e o mantenha pressionado\" para o menu liga/desliga."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Para ativar, mude a opção \"Aperte o botão liga/desliga e o mantenha pressionado\" para o menu liga/desliga."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalhes da rede"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"O nome do seu dispositivo está visível para os apps no smartphone. Ele também pode ser visto por outras pessoas quando você se conecta a dispositivos Bluetooth ou a uma rede Wi-Fi ou quando configura um ponto de acesso Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Dispositivos"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"controles do dispositivo"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cartões e passes"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cartões e passes"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Aperte o botão liga/desliga e o mantenha pressionado"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Aperte o botão e o mantenha pressionado para abrir o Google Assistente"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Aperte o botão e o mantenha pressionado para abrir o menu liga/desliga"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"A opção de apertar o botão e mantê-lo pressionado não está disponível"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Aperte o botão liga/desliga e o mantenha pressionado"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Mantenha o botão liga/desliga pressionado para acessar"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu liga/desliga"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Assistente digital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Acessar o assistente digital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Acessar o menu liga/desliga"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Para usar, primeiro defina um bloqueio de tela"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Segurar para ativar o Google Assistente"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Mantenha o botão liga/desliga pressionado para acionar o Google Assistente"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu liga/desliga e de emergência:\nPressione os botões liga/desliga e aumentar volume ao mesmo tempo."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Impedir o toque:\nAtalho disponível no menu de volumes."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu liga/desliga:\nAperte os botões liga/desliga e de aumentar volume ao mesmo tempo"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Impedir o toque do telefone:\nAperte o botão de volume para usar o atalho"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Duração do pressionamento"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Ajuste a sensibilidade escolhendo por quanto tempo manter o botão liga/desliga pressionado"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Curto"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 901bb9b..5ab6930 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Quando a criança utiliza o Pixel Imprint, são utilizadas imagens para atualizar o respetivo modelo de impressão digital. As imagens utilizadas para criar o modelo de impressão digital da criança nunca são armazenadas, mas o modelo de impressão digital é guardado em segurança no telemóvel e nunca sai do mesmo. Todo o processamento ocorre de forma segura no telemóvel."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Pode eliminar o modelo e as imagens da sua impressão digital ou desativar o Desbloqueio por impressão digital em qualquer altura nas Definições. Os modelos e as imagens de impressões digitais são armazenados no telemóvel até os eliminar."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"O utilizador e a criança podem eliminar o modelo e as imagens da impressão digital ou desativar o Desbloqueio por impressão digital em qualquer altura nas Definições. Os modelos e as imagens de impressões digitais são armazenados no telemóvel até serem eliminados."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"O telemóvel pode ser desbloqueado involuntariamente (por exemplo, se alguém o encostar ao seu dedo)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"O telemóvel pode ser desbloqueado involuntariamente (por exemplo, se alguém o encostar ao seu dedo)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"O tablet pode ser desbloqueado involuntariamente (por exemplo, se alguém o encostar ao seu dedo)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"O dispositivo pode ser desbloqueado involuntariamente (por exemplo, se alguém o encostar ao seu dedo)."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"O telemóvel da criança pode ser desbloqueado involuntariamente, como se alguém o encostar ao dedo da criança."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Para obter os melhores resultados, use um protetor de ecrã com a certificação Made For Google. Com outros protetores de ecrã, a sua impressão digital pode não funcionar."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Para obter os melhores resultados, use um protetor de ecrã com a certificação Made For Google. Com outros protetores de ecrã, a impressão digital da criança pode não funcionar."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustração com o dispositivo e a localização do sensor de impressões digitais"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nome"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Tentar novamente"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Eliminar"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Toque no sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Coloque o dedo sobre o sensor e levante-o depois de sentir uma vibração"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Concluído"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ups, isso não é o sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Toque no sensor na parte traseira do telemóvel com o indicador."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"A inscrição não foi concluída"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Atingiu o tempo limite da inscrição de impressões digitais. Tente novamente."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"A configuração da impressão digital expirou"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Tente novamente agora ou configure a impressão digital mais tarde nas Definições"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"A inscrição de impressões digitais não funcionou. Tente novamente ou utilize um dedo diferente."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Adicionar outra"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Seguinte"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personalizar o telemóvel"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Experimente diferentes estilos, imagens de fundo e muito mais"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Proteção de ecrã"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"proteção de ecrã"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Usar proteção de ecrã"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Ao carregar ou na estação de ancoragem"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Ambos os casos"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Ao carregar"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Ancorado"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nunca"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Desligado"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Para controlar o que acontece quando o telemóvel está ancorado e/ou em suspensão, ative a proteção de ecrã."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Quando iniciar"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Proteção de ecrã atual"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Definições"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Brilho automático"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Ativar ao levantar"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Visualização ambiente"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Defina um PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Defina um PIN de trabalho"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Defina um padrão"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Para maior segurança, defina um padrão para desbloquear o dispositivo"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Defina um padrão de trabalho"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Defina palavra-passe para usar impressão digital"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Defina padrão para usar impressão digital"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplicação de emergência"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Repor preferências de apps"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Repor preferências de apps?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Esta ação irá repor todas as preferências de:\n\n"<li>"Apps desativadas"</li>\n<li>"Notificações de aplicações desativadas"</li>\n<li>"Apps predefinidas para ações"</li>\n<li>"Restrições de dados de segundo plano para aplicações"</li>\n<li>"Todas as restrições de autorização"</li>\n\n"Não irá perder quaisquer dados das aplicações."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Isto irá repor todas as preferências de:\n\n"<li>"Apps desativadas"</li>\n<li>"Notificações de apps desativadas"</li>\n<li>"Aplicações predefinidas para ações"</li>\n<li>"Restrições de dados de segundo plano para apps"</li>\n<li>"Quaisquer restrições de autorização"</li>\n<li>"Definições de utilização da bateria"</li>\n\n"Não irá perder quaisquer dados de apps."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Repor aplicações"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Gerir espaço"</string>
<string name="filter" msgid="9039576690686251462">"Filtrar"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Repor definições"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"As definições de texto e tamanho do ecrã foram repostas"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Repor texto e tamanho da visualização?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"As suas preferências de texto e tamanho do ecrã vão ser repostas para as definições originais do telemóvel"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"As suas preferências de texto e tamanho do ecrã vão ser repostas para as definições originais do telemóvel"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"As suas preferências de texto e tamanho do ecrã vão ser repostas para as definições originais do tablet"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Repor"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Algum plano para o fim de semana?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Vou à praia. Quer juntar-se?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Nenhuma utilização desde o último carregamento"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nenhuma utilização nas últimas 24 h"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Outros utilizadores"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"A estimativa de bateria restante baseia-se na utilização do dispositivo"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Tempo restante estimado"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Até ficar totalmente carregada"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Palavra de ativação e interação completas"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Serviço simples de voz para texto"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Este serviço de entrada de texto por voz poderá efetuar monitorização de voz permanente e controlar aplicações ativadas por voz em seu nome. É proveniente da aplicação <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Permitir a utilização deste serviço?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Definições de reconhecimento no dispositivo"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Reconhecimento no dispositivo"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Reconhecimento de voz no dispositivo"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Motor preferido"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Definições do motor"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Taxa e tom de voz"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Eliminar"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Todas as apps e dados desta sessão serão eliminados."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Remover"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Convidado (utilizador)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Utilizadores"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Outros utilizadores"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Elimine a atividade de convidado"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Elimine todas as apps e dados de convidado ao sair do modo convidado"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Eliminar a atividade de convidado?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"As apps e os dados desta sessão de convidado vão ser eliminados agora e toda a atividade de convidado futura é eliminada sempre que sair do modo convidado"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Ativar chamadas telefónicas"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ativar chamadas telefónicas e SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Eliminar utilizador"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Todas as notificações da app \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Todas as notificações da app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notificações adaptáveis"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notificações por dia</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notificação por dia</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificações por dia</item>
+ <item quantity="one">Cerca de <xliff:g id="NUMBER_0">%d</xliff:g> notificação por dia</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> notificações por semana</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notificação por semana</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificações por semana</item>
+ <item quantity="one">Cerca de <xliff:g id="NUMBER_0">%d</xliff:g> notificação por semana</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nunca"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificações do dispositivo e de apps"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Não fazer nada"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrar"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Desativar som"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Para ativar, comece por alterar \"Premir sem soltar o botão ligar/desligar\" para o menu ligar/desligar."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Para ativar, comece por alterar \"Premir sem soltar o botão ligar/desligar\" para o menu ligar/desligar."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalhes da rede"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"O nome do seu dispositivo é visível para as apps do telemóvel. Também pode ser visto por outras pessoas quando se liga a dispositivos Bluetooth ou a uma rede Wi-Fi, assim como quando configura uma zona Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Dispositivos"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"controlos de dispositivos"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cartões e passes"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cartões e passes"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Prima sem soltar o botão ligar/desligar"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Prima sem soltar para obter o Assistente"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Prima sem soltar para obter o menu ligar/desligar"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Premir sem soltar desativado"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Prima sem soltar o botão ligar/desligar"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Prima sem soltar o botão ligar/desligar para aceder"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu ligar/desligar"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Assistente digital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Aceda ao assistente digital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Aceda ao menu ligar/desligar"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Para utilizar, defina primeiro um bloqueio de ecrã"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Manter premido para chamar o Assistente"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Acione o Assistente ao manter premido o botão ligar/desligar"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu ligar/desligar e de emergência:\nprima os botões ligar/desligar e aumentar volume em simultâneo."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Impedir o toque:\natalho disponível no menu do volume."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu ligar/desligar:\nprima os botões ligar/desligar e aumentar volume em simultâneo"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Impedir o toque:\nprima um botão de volume para o atalho"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Duração de premir sem soltar"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Ajuste a sensibilidade ao escolher durante quanto tempo o botão ligar/desligar deve ser premido sem soltar"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Curta"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 1f695f9..d068e8b 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Quando a criança utiliza o Pixel Imprint, as imagens são usadas para atualizar o modelo de impressão digital dela. As imagens usadas para criar o modelo da criança nunca são armazenadas, mas ele fica salvo em segurança no smartphone, sem deixar o dispositivo. Todo o processamento ocorre de forma segura no smartphone."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Você pode excluir as imagens e o modelo da impressão digital ou desativar o Desbloqueio por impressão digital a qualquer momento nas configurações. As imagens e os modelos de impressão digital são armazenados no smartphone até serem excluídos."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Você e a criança podem excluir as imagens e o modelo de impressão digital dela ou desativar o Desbloqueio por impressão digital a qualquer momento nas Configurações. As imagens e os modelos de impressão digital ficam armazenados no smartphone até serem excluídos."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"O smartphone pode ser desbloqueado mesmo se não for sua intenção. Por exemplo, se alguém colocar seu dedo no sensor."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"O smartphone pode ser desbloqueado mesmo se não for sua intenção. Por exemplo, se alguém colocar seu dedo no sensor."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"O tablet poderá ser desbloqueado mesmo se essa não for sua intenção. Por exemplo, se alguém colocar seu dedo no sensor."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"O dispositivo poderá ser desbloqueado mesmo se essa não for sua intenção. Por exemplo, se alguém colocar seu dedo no sensor."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"O smartphone da criança poderá ser desbloqueado mesmo quando essa não for a intenção. Por exemplo, se alguém levar o leitor ao dedo dela."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Para conseguir melhores resultados, use uma película com certificação Made For Google. Sua impressão digital pode não funcionar com outras películas."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Para conseguir melhores resultados, use uma película com certificação Made For Google. A impressão digital da criança pode não funcionar com outras películas."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustração mostrando a localização do sensor de impressão digital no dispositivo"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nome"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Ok"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Tentar novamente"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Excluir"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Toque no sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Encoste o dedo no sensor e, após sentir uma vibração, tire o dedo"</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Concluído"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Opa, este não é o sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Toque no sensor na parte traseira do smartphone. Use o dedo indicador."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"O registro não foi concluído"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Tempo limite para registro de impressões digitais atingido. Tente novamente."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"A configuração da impressão digital expirou"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Tente novamente ou configure a impressão digital mais tarde nas configurações"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"O registro da impressão digital não funcionou. Tente novamente ou use um dedo diferente."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Adicionar outra"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Próxima"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personalizar seu smartphone"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Use diferentes estilos, planos de fundo e muito mais"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Protetor de tela"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"protetor de tela"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Usar o protetor de tela"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Ao carregar ou quando encaixado na base"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Ambos"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Ao carregar"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Encaixado na base"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nunca"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Desativado"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Para controlar o que acontece quando o smartphone está na base e/ou no modo de suspensão, ative o protetor de tela."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Quando começar"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Protetor de tela atual"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Configurações"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Brilho automático"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Levantar para ativar"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Tela ambiente"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Definir um PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Defina um PIN de trabalho"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Definir um padrão"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Para aumentar a segurança, defina um padrão para desbloquear o dispositivo"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Definir um padrão de trabalho"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Para usar a impressão digital, defina uma senha"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Para usar a impressão digital, defina um padrão"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"App de emergência"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Redefinir apps"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Redefinir apps?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Isso redefinirá todas as preferências para:\n\n"<li>" apps desativados;"</li>" \n "<li>"notificações de apps desativados; "</li>\n<li>"apps padrão para ações;"</li>\n<li>"restrições de dados em segundo plano para apps; "</li>\n<li>"qualquer restrição de permissão."</li>\n\n"Você não perderá os dados dos apps."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Isso vai redefinir todas as preferências para:\n\n"<li>"apps desativados;"</li>\n<li>"notificações de apps desativados;"</li>\n<li>"apps padrão para ações;"</li>\n<li>"restrições de dados em segundo plano para apps;"</li>\n<li>"qualquer restrição de permissão;"</li>\n<li>"configurações de uso da bateria."</li>\n\n"Você não vai perder nenhum dado do app."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Redefinir apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Gerenciar espaço"</string>
<string name="filter" msgid="9039576690686251462">"Filtro"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Redefinir configurações"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"As definições de tamanho e texto da tela foram redefinidas"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Redefinir o texto e o tamanho da tela?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"As preferências de texto e tamanho da tela serão redefinidas para as configurações originais do smartphone"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"As preferências de texto e tamanho da tela serão redefinidas para as configurações originais do smartphone"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"As preferências de texto e tamanho da tela serão redefinidas para as configurações originais do tablet"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Redefinir"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Algum plano para o fim de semana?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Vou para a praia. Quer ir também?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Sem uso desde a última carga completa"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Sem uso nas últimas 24h"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Outros usuários"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"A estimativa de carga da bateria restante é baseada no uso que você faz do dispositivo"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Tempo restante estimado"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Até a carga completa"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Hotword completa e interação"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Conversão simples de fala em texto"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Este serviço de entrada por voz poderá executar monitoramento por voz sempre ativado e apps com o recurso de comando de voz em seu nome. Ele está incluído no app <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Quer ativar o uso deste serviço?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Configurações de reconhecimento no dispositivo"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Reconhecimento no dispositivo"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Reconhecimento de fala no dispositivo"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Mecanismo preferencial"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Configurações do mecanismo"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Velocidade da fala e tom de voz"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Excluir"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Todos os apps e dados nesta sessão serão excluídos."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Remover"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Visitante (você)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Usuários"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Outros usuários"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Excluir atividade de convidado"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Excluir todos os apps e dados do convidado ao sair do modo convidado"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Excluir atividade do convidado?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Os apps e dados desta sessão de convidado serão excluídos agora e toda a atividade futura será excluída sempre que você sair do modo convidado"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Ativar chamadas telefônicas"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Ativar chamadas telefônicas e SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Excluir usuário"</string>
@@ -4009,12 +4023,12 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Todas as notificações de <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Todas as notificações do app <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notificações adaptáveis"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
<item quantity="one">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificação por dia</item>
<item quantity="other">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificações por dia</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one"><xliff:g id="NUMBER_1">%,d</xliff:g> notificação por semana</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificação por semana</item>
<item quantity="other">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificações por semana</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nunca"</string>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Não fazer nada"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrar"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Desativar som"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Para ativar, mude a opção \"Aperte no botão liga/desliga e o mantenha pressionado\" para o menu liga/desliga."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Para ativar, mude a opção \"Aperte o botão liga/desliga e o mantenha pressionado\" para o menu liga/desliga."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalhes da rede"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"O nome do seu dispositivo está visível para os apps no smartphone. Ele também pode ser visto por outras pessoas quando você se conecta a dispositivos Bluetooth ou a uma rede Wi-Fi ou quando configura um ponto de acesso Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Dispositivos"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"controles do dispositivo"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Cartões e passes"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"cartões e passes"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Aperte o botão liga/desliga e o mantenha pressionado"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Aperte o botão e o mantenha pressionado para abrir o Google Assistente"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Aperte o botão e o mantenha pressionado para abrir o menu liga/desliga"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"A opção de apertar o botão e mantê-lo pressionado não está disponível"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Aperte o botão liga/desliga e o mantenha pressionado"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Mantenha o botão liga/desliga pressionado para acessar"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menu liga/desliga"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Assistente digital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Acessar o assistente digital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Acessar o menu liga/desliga"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Para usar, primeiro defina um bloqueio de tela"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Segurar para ativar o Google Assistente"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Mantenha o botão liga/desliga pressionado para acionar o Google Assistente"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu liga/desliga e de emergência:\nPressione os botões liga/desliga e aumentar volume ao mesmo tempo."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Impedir o toque:\nAtalho disponível no menu de volumes."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menu liga/desliga:\nAperte os botões liga/desliga e de aumentar volume ao mesmo tempo"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Impedir o toque do telefone:\nAperte o botão de volume para usar o atalho"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Duração do pressionamento"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Ajuste a sensibilidade escolhendo por quanto tempo manter o botão liga/desliga pressionado"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Curto"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index a94e4fc..cb2f0a0 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -468,7 +468,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Când folosește Pixel Imprint, imaginile sunt folosite pentru a-i actualiza modelul de amprentă. Imaginile folosite pentru a crea modelul de amprentă al copilului dvs. nu sunt stocate niciodată, dar modelul de amprentă este stocat în siguranță pe telefon și nu părăsește niciodată dispozitivul. Toată procesarea are loc în siguranță pe telefon."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Puteți să ștergeți imaginile amprentelor și modelul de amprentă sau să dezactivați deblocarea cu amprenta oricând din Setări. Imaginile amprentelor și modelul de amprentă sunt stocate pe telefon până când le ștergeți."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Dvs. și copilul dvs. puteți să ștergeți imaginile amprentelor și modelul de amprentă sau să dezactivați Deblocarea cu amprenta oricând din Setări. Imaginile amprentelor și modelele de amprentă sunt stocate pe telefon până când le ștergeți."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefonul poate fi deblocat când nu doriți, de exemplu, dacă cineva îl ține în dreptul degetului dvs."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefonul poate fi deblocat când nu doriți, de exemplu, dacă cineva îl ține în dreptul degetului dvs."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tableta poate fi deblocată când nu doriți, de exemplu, dacă cineva o ține în dreptul degetului dvs."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Dispozitivul poate fi deblocat când nu doriți, de exemplu, dacă cineva îl ține în dreptul degetului dvs."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefonul copilului dvs. poate fi deblocat și când nu dorește, de exemplu, dacă cineva îl ține în dreptul degetului său."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Pentru rezultate optime, folosiți o protecție pentru ecran care este certificată Made for Google. Este posibil ca amprenta să nu funcționeze cu alte protecții pentru ecran."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Pentru rezultate optime, folosiți o protecție pentru ecran care este certificată Made for Google. Este posibil ca amprenta copilului să nu funcționeze cu alte protecții pentru ecran."</string>
@@ -518,6 +520,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Imagine cu dispozitivul și poziția senzorului de amprentă"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Denumiți"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Încercați din nou"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Ștergeți"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Atingeți senzorul"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Puneți degetul pe senzor și ridicați-l după ce simțiți o vibrație"</string>
@@ -597,8 +600,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Terminat"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Hopa, acela nu este senzorul"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Atingeți senzorul de pe spatele telefonului. Folosiți degetul arătător."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Înregistrarea nu a fost finalizată"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Timpul limită pentru înregistrarea amprentei a expirat. Încercați din nou."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Configurarea amprentei a expirat"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Încercați din nou acum sau configurați amprenta mai târziu în Setări"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Înregistrarea amprentei nu a funcționat. Încercați din nou sau folosiți un alt deget."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Adăugați altă amprentă"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Înainte"</string>
@@ -1470,17 +1473,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personalizați-vă telefonul"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Încercați diverse stiluri, imagini de fundal și altele"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Economizor de ecran"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Folosiți screensaverul"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"În timpul încărcării sau andocării"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"În ambele situații"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"În timpul încărcării"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Când dispozitivul este andocat"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Niciodată"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Dezactivat"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Pentru a stabili ce se întâmplă când telefonul este andocat și/sau inactiv, activați economizorul de ecran."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Când pornește"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Screensaver actual"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Setări"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Luminozitate automată"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Ridicați pentru a reactiva"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Afișaj ambiental"</string>
@@ -1970,6 +1971,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Setați un cod PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Setați un cod PIN de serviciu"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Setați un model"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Pentru mai multă siguranță, setați un model pentru deblocarea dispozitivului"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Setați un model de serviciu"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Pentru a utiliza amprenta, setați parola"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Pentru a utiliza amprenta, setați modelul"</string>
@@ -2125,7 +2127,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplicația de urgență"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Resetați preferințele pentru aplicații"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Resetați preferințele pentru aplicații?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Astfel vor fi resetate toate preferințele pentru:\n\n"<li>"aplicații dezactivate,"</li>\n<li>"notificări de aplicații dezactivate,"</li>\n<li>"aplicații prestabilite pentru acțiuni,"</li>\n<li>"restricții privind datele de fundal pentru aplicații,"</li>\n<li>"orice restricții de permisiuni."</li>\n\n"Nu veți pierde datele aplicațiilor."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Astfel vor fi resetate toate preferințele pentru:\n\n"<li>"aplicații dezactivate,"</li>\n<li>"notificări de aplicații dezactivate,"</li>\n<li>"aplicații prestabilite pentru acțiuni,"</li>\n<li>"restricții privind datele de fundal pentru aplicații,"</li>\n<li>"orice restricții de permisiuni,"</li>\n<li>"setări pentru folosirea bateriei."</li>\n\n"Nu veți pierde datele aplicațiilor."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Resetați aplicațiile"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Gestionați spațiul"</string>
<string name="filter" msgid="9039576690686251462">"Filtrați"</string>
@@ -2380,7 +2382,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Restabiliți setările"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Setările privind dimensiunea pentru afișare și textul au fost resetate"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Resetați textul și dimensiunea ecranului?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Preferințele privind textul și dimensiunea ecranului se vor reseta la setările inițiale ale telefonului"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Preferințele privind textul și dimensiunea ecranului se vor reseta la setările inițiale ale telefonului"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Preferințele privind textul și dimensiunea ecranului se vor reseta la setările inițiale ale tabletei"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Resetați"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Ai planuri de weekend?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Mă duc la plajă. Vrei să vii cu mine?"</string>
@@ -2974,6 +2977,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Nu a fost folosită de la ultima încărcare completă"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nu a fost folosită în ultimele 24 h"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Alți utilizatori"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Estimarea bateriei rămase se bazează pe utilizarea dispozitivului"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Timp estimat rămas"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Până la încărcarea completă"</string>
@@ -3063,6 +3067,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Expresie de activare și interacțiune complete"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Transformare simplă a vorbirii în text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Acest serviciu de introducere vocală va putea să asigure în permanență monitorizarea vocală și să controleze aplicațiile cu comenzi vocale în locul dvs. Acesta provine din aplicația <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Activați utilizarea acestui serviciu?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Setări de recunoaștere pe dispozitiv"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Recunoaștere pe dispozitiv"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Recunoaștere vocală pe dispozitiv"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Motor preferat"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Setările motorului"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Viteza și tonalitatea vorbirii"</string>
@@ -3459,6 +3466,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Ștergeți"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Toate aplicațiile și datele din această sesiune vor fi șterse."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Ștergeți"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Invitat (dvs.)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Utilizatori"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Alți utilizatori"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Ștergeți activitatea invitatului"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Ștergeți toate aplicațiile și datele invitatului când ieșiți din modul pentru invitați"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Ștergeți activitatea invitatului?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplicațiile și datele din această sesiune pentru invitați vor fi șterse acum și toate activitățile viitoare ale invitaților vor fi șterse de fiecare dată când ieșiți din modul pentru invitați"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Activați apelurile telefonice"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Activați apelurile telefonice și SMS-urile"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Ștergeți utilizatorul"</string>
@@ -4053,15 +4067,15 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Toate notificările din „<xliff:g id="APP_NAME">%1$s</xliff:g>”"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Toate notificările din <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Notificări adaptive"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> notificări pe zi</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> de notificări pe zi</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notificare pe zi</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="few">Aproximativ <xliff:g id="NUMBER_1">%,d</xliff:g> notificări pe zi</item>
+ <item quantity="other">Aproximativ <xliff:g id="NUMBER_1">%,d</xliff:g> de notificări pe zi</item>
+ <item quantity="one">Aproximativ <xliff:g id="NUMBER_0">%d</xliff:g> notificare pe zi</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> notificări pe săptămână</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> de notificări pe săptămână</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> notificare pe săptămână</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="few">Aproximativ <xliff:g id="NUMBER_1">%,d</xliff:g> notificări pe săptămână</item>
+ <item quantity="other">Aproximativ <xliff:g id="NUMBER_1">%,d</xliff:g> de notificări pe săptămână</item>
+ <item quantity="one">Aproximativ <xliff:g id="NUMBER_0">%d</xliff:g> notificare pe săptămână</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Niciodată"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificări pe dispozitive și în aplicații"</string>
@@ -5341,7 +5355,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Nicio acțiune"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrație"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Dezactivați sunetul"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Pentru activare, mai întâi modificați opțiunea Apăsați lung butonul de pornire din meniul de pornire."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Pentru activare, mai întâi modifică opțiunea Apasă lung butonul de pornire din meniul de pornire."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detalii despre rețea"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Numele dispozitivului este vizibil pentru aplicațiile de pe telefon. Poate fi văzut și de alte persoane când vă conectați la dispozitivele Bluetooth sau la o rețea Wi-Fi sau când configurați un hotspot Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Dispozitive"</string>
@@ -5631,15 +5645,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"comenzile dispozitivelor"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Carduri și permise"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"carduri și permise"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Apăsați lung pe butonul de pornire"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Apăsați lung pentru Asistent"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Apăsați lung pentru meniul de pornire"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Apăsarea lungă este dezactivată"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Apasă lung pe butonul de pornire"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Apasă lung butonul de pornire pentru a accesa"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Meniul de pornire"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Asistent digital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Accesează asistentul digital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Accesează meniul de pornire"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Pentru utilizare, setați mai întâi un ecran de blocare"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Apăsați lung pentru Asistent"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Declanșați Asistentul apăsând lung butonul de pornire"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Meniul Pornire și urgențe:\napăsați simultan pe butonul de pornire și pe cel de creștere a volumului"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Împiedicați sunatul:\ncomandă rapidă disponibilă în meniul de volum"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Meniul de pornire:\napasă simultan pe butonul de pornire și pe cel de creștere a volumului"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Împiedică sunatul:\napasă pe un buton de volum pentru comanda rapidă"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Durata cât țineți apăsat"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Ajustați sensibilitatea alegând cât să țineți apăsat butonul de pornire"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Scurtă"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 28e65b5..e7367ba 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -472,7 +472,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Изображения, создаваемые во время работы функции Pixel Imprint, будут использоваться для обновления модели. Обработка снимков и модели происходит только на устройстве. Сами изображения не сохраняются, а модель отпечатка хранится только на вашем устройстве и никуда не отправляется."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Вы можете в любой момент удалить изображения и модель вашего отпечатка или отключить функцию разблокировки по отпечатку пальца в настройках. Изображения и модель хранятся на телефоне, пока вы не удалите их."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Вы и ваш ребенок в любой момент можете удалить модель и снимки отпечатка пальца или отключить функцию разблокировки по отпечатку пальца в настройках. Изображения и модель хранятся на телефоне, пока вы не удалите их."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"В некоторых ситуациях телефон может быть разблокирован без вашего желания, например если кто-то приложит его к вашему пальцу."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"В некоторых ситуациях телефон может быть разблокирован без вашего желания, например если кто-то приложит его к вашему пальцу."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"В некоторых ситуациях планшет может быть разблокирован без вашего желания, например если кто-то приложит его к вашему пальцу."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"В некоторых ситуациях устройство может быть разблокировано без вашего желания, например если кто-то приложит его к вашему пальцу."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"В некоторых ситуациях телефон может быть разблокирован без желания ребенка, например если кто-то приложит устройство к пальцу ребенка."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Рекомендуем использовать защитное стекло или пленку из серии \"Сделано для Google\". Устройства с другими стеклами или пленками могут не распознавать отпечаток пальца."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Рекомендуем использовать защитное стекло или пленку из серии \"Сделано для Google\". Устройства с другими стеклами или пленками могут не распознавать отпечаток пальца ребенка."</string>
@@ -522,6 +524,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"На этом рисунке показано, где находится сканер"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Название"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ОК"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Повторить"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Удалить"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Коснитесь сканера отпечатков"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Прикладывайте палец к сканеру и удерживайте, пока не почувствуете вибрацию."</string>
@@ -599,8 +602,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Готово"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Мимо! Это не сканер отпечатков пальцев..."</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Найдите сканер на задней панели и коснитесь его указательным пальцем."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Отпечаток не добавлен"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Превышен срок ожидания. Повторите попытку."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Время настройки отпечатка пальца истекло"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Повторите попытку или добавьте отпечаток пальца позже в настройках."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Не удалось добавить отпечаток. Повторите попытку или попробуйте сохранить отпечаток другого пальца."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Добавить ещё"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Далее"</string>
@@ -1488,17 +1491,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Настройка телефона"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Пробуйте разные стили, обои и не только"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Заставка"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"заставка"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Использовать заставку"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Во время зарядки и на док-станции"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Всегда"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Во время зарядки"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"На док-станции"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Никогда"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Отключено"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Чтобы настроить поведение телефона при подключении к док-станции и в спящем режиме, включите заставку."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Когда запускать"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Текущая заставка"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Настройки"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Автонастройка"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Активация в вертикальном положении"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Автоматич. включение экрана"</string>
@@ -1990,6 +1991,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Задайте PIN-код"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Задайте PIN-код для рабочего профиля"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Задайте графический ключ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Чтобы обеспечить дополнительную безопасность, задайте графический ключ для разблокировки этого устройства"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Задайте граф. ключ для рабочего профиля"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Задайте пароль"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Задайте графический ключ"</string>
@@ -2147,7 +2149,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Тревожное оповещение"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Сбросить настройки приложений"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Сбросить настройки?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Будут сброшены следующие настройки:\n\n"<li>"отключенные приложения;"</li>\n<li>"отключенные уведомления приложений;"</li>\n<li>"приложения по умолчанию;"</li>\n<li>"ограничения на передачу данных в фоновом режиме;"</li>\n<li>"все ограничения разрешений."</li>\n\n"Данные приложений не будут удалены."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Будут сброшены следующие настройки:\n\n"<li>"отключенные приложения;"</li>\n<li>"отключенные уведомления приложений;"</li>\n<li>"приложения по умолчанию;"</li>\n<li>"ограничения на передачу данных приложениями в фоновом режиме;"</li>\n<li>"все ограничения разрешений;"</li>\n<li>"настройки расхода заряда батареи."</li>\n\n"Данные приложений удалены не будут."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Сбросить"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Управление местом"</string>
<string name="filter" msgid="9039576690686251462">"Фильтр"</string>
@@ -2402,7 +2404,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Сбросить настройки"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Масштаб изображения на экране и настройки текста сброшены."</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Сбросить настройки текста и размера экрана?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Будут восстановлены исходные параметры текста и размера экрана, заданные на телефоне."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Будут восстановлены исходные параметры текста и размера экрана, заданные на телефоне."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Для планшета будут восстановлены исходные параметры текста и масштаба изображения"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Сбросить"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Есть планы на выходные?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Мы собираемся на пляж. Хочешь присоединиться?"</string>
@@ -3010,6 +3013,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Батарея не использовалась с момента последней полной зарядки"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Батарея не использовалась за последние 24 часа"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Другие пользователи"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Оставшееся время работы рассчитано с учетом того, как используется устройство."</string>
<string name="estimated_time_left" msgid="948717045180211777">"Расчетное время работы без подзарядки"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"До полной зарядки"</string>
@@ -3099,6 +3103,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Расширенный режим: управление с помощью голосовых команд"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Обычный режим: распознавание речи"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Эта служба голосового ввода сможет выполнять непрерывный мониторинг речи и управлять приложениями от вашего имени. Для ее работы необходимо установить приложение \"<xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>\". Включить службу?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Настройки распознавания на устройстве"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Распознавание на устройстве"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Распознавание речи на устройстве"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Синтезатор речи по умолчанию"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Настройки синтеза"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Скорость речи и тон"</string>
@@ -3499,6 +3506,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Удалить"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Все приложения и данные этого профиля будут удалены."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Удалить"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Гость (вы)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Пользователи"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Другие пользователи"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Удалить историю гостевого сеанса"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Удалять все приложения и данные при выходе из гостевого режима"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Удалить историю гостевого сеанса?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Все данные и приложения этого гостевого сеанса будут удалены. В дальнейшем история будет очищаться каждый раз при выходе из гостевого режима."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Включить звонки"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Включить звонки и SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Удалить пользователя"</string>
@@ -4095,17 +4109,17 @@
<string name="notification_switch_label" msgid="8029371325967501557">"<xliff:g id="APP_NAME">%1$s</xliff:g>: все уведомления"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Показывать все уведомления приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Адаптивные уведомления"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~ <xliff:g id="NUMBER_1">%,d</xliff:g> уведомление в день</item>
- <item quantity="few">~ <xliff:g id="NUMBER_1">%,d</xliff:g> уведомления в день</item>
- <item quantity="many">~ <xliff:g id="NUMBER_1">%,d</xliff:g> уведомлений в день</item>
- <item quantity="other">~ <xliff:g id="NUMBER_1">%,d</xliff:g> уведомления в день</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Примерно <xliff:g id="NUMBER_1">%,d</xliff:g> уведомление в день</item>
+ <item quantity="few">Примерно <xliff:g id="NUMBER_1">%,d</xliff:g> уведомления в день</item>
+ <item quantity="many">Примерно <xliff:g id="NUMBER_1">%,d</xliff:g> уведомлений в день</item>
+ <item quantity="other">Примерно <xliff:g id="NUMBER_1">%,d</xliff:g> уведомления в день</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> уведомление в неделю</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> уведомления в неделю</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> уведомлений в неделю</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> уведомления в неделю</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Примерно <xliff:g id="NUMBER_1">%,d</xliff:g> уведомление в неделю</item>
+ <item quantity="few">Примерно <xliff:g id="NUMBER_1">%,d</xliff:g> уведомления в неделю</item>
+ <item quantity="many">Примерно <xliff:g id="NUMBER_1">%,d</xliff:g> уведомлений в неделю</item>
+ <item quantity="other">Примерно <xliff:g id="NUMBER_1">%,d</xliff:g> уведомления в неделю</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Никогда"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Уведомления на устройствах и в приложениях"</string>
@@ -5423,7 +5437,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Не менять настройки"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Вибрация"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Отключение звука"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Чтобы включить эту функцию, сначала измените параметр \"Долгое нажатие кнопки питания\" в ее меню."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Чтобы включить эту функцию, сначала установите для параметра \"Долгое нажатие кнопки питания\" значение \"Меню кнопки питания\"."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Сведения о сети"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"У приложений на телефоне есть доступ к названию устройства. Его могут видеть другие пользователи, когда вы подключаетесь к устройствам по Bluetooth или настраиваете точку доступа Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Устройства"</string>
@@ -5716,15 +5730,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"виджеты управления устройством"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Карты, билеты и пропуска"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"Карты, билеты и пропуска"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Долгое нажатие кнопки питания"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"После долгого нажатия запускается Ассистент"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"После долгого нажатия открывается меню кнопки питания"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Долгое нажатие отключено"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Долгое нажатие кнопки питания"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Выберите, что открывается при долгом нажатии кнопки питания"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Меню кнопки питания"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Цифровой помощник"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Открытие цифрового помощника"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Открытие меню кнопки питания"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Сначала необходимо настроить блокировку экрана"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Запускать Ассистента долгим нажатием"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Нажмите и удерживайте кнопку питания для запуска Ассистента"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Меню кнопки питания и экстренных вызовов:\nЧтобы его открыть, одновременно нажмите кнопки питания и увеличения громкости."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Отключение звука звонка:\nБыстрый запуск функции доступен в меню регулировки громкости."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Меню кнопки питания\nОдновременно нажмите кнопку питания и кнопку увеличения громкости."</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Отключение звука звонка\nНажмите кнопку регулировки громкости, чтобы применить сочетание клавиш."</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Длительность нажатия и удержания"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Настройте чувствительность, выбрав длительность нажатия и удержания кнопки питания."</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Быстро"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 1b94aba..e7b5021 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"ඔවුන් Pixel Imprint භාවිත කරන විට, ඔවුන්ගේ ඇඟිලි සලකුණු ආකෘතිය යාවත්කාලීන කිරීමට රූප භාවිත කෙරේ. ඔබගේ දරුවාගේ ඇඟිලි සලකුණු ආකෘතිය තැනීමට භාවිත කරන රූප කිසි විටක ගබඩා නොකරනු ඇත, නමුත් ඇඟිලි සලකුණු ආකෘතිය දුරකථනයේ ආරක්ෂිතව ගබඩා කර ඇති අතර කිසි විටක දුරකථනය හැර නොයයි. සියලු සැකසීම් දුරකථනයේ ආරක්ෂිතව සිදු වේ."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"ඔබට සැකසීම් තුළ ඕනෑම වේලාවක ඔබගේ ඇඟිලි සලකුණු රූප සහ ආකෘතිය මැකීමට, හෝ ඇඟිලි සලකුණු අගුලු හැරීම ක්රියාවිරහිත කිරීමට හැකිය. ඇඟිලි සලකුණු රූප සහ මාදිලි ඔබ මකන තෙක් දුරකථනයේ ගබඩා කර ඇත."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"ඔබට සහ ඔබගේ දරුවාට සැකසීම් තුළ ඕනෑම වේලාවක සිය ඇඟිලි සලකුණු රූප සහ ආකෘතිය මැකීමට, හෝ ඇඟිලි සලකුණු අගුලු හැරීම ක්රියාවිරහිත කිරීමට හැකිය. ඇඟිලි සලකුණු රූප සහ ආකෘති ඔබ ඒවා මකන තෙක් දුරකථනයේ ගබඩා කර ඇත."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"යම් කෙනෙක් එය ඔබගේ ඇඟිල්ලට තබාගෙන සිටින විට වැනි, ඔබ අදහස් නොකරන විටක ඔබගේ දුරකථනය අගුලු හැරීමට හැකිය."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"යම් කෙනෙක් එය ඔබගේ ඇඟිල්ලට තබාගෙන සිටින විට වැනි, ඔබ අදහස් නොකරන විටක ඔබගේ දුරකථනය අගුලු හැරීමට හැකිය."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"කිසිවෙකු ඔබේ ටැබ්ලටය ඔබගේ ඇඟිල්ලට තබා ගෙන සිටින විට වැනි, ඔබ අදහස් නොකරන විටක ඔබගේ දුරකථනය අගුලු හැරීමට හැකි ය."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"කිසිවෙකු ඔබේ උපාංගය ඔබගේ ඇඟිල්ලට තබා ගෙන සිටින විට වැනි, ඔබ අදහස් නොකරන විටක ඔබගේ දුරකථනය අගුලු හැරීමට හැකි ය."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"යම් කෙනෙක් එය ඔවුන්ගේ ඇඟිල්ලට තබාගෙන සිටින විට වැනි, ඔවුන් අදහස් නොකරන විටක ඔබගේ දරුවාගේ දුරකථනය අගුලු හැරීමට හැකිය."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"හොඳම ප්රතිඵල සඳහා, සහතික කළ Google සඳහා තනන ලද තිර ආරක්ෂකයක් භාවිත කරන්න. වෙනත් තිර ආරක්ෂක සමඟ, ඔබගේ ඇඟිලි සලකුණ ක්රියා නොකරනු ඇත."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"හොඳම ප්රතිඵල සඳහා, සහතික කළ Google සඳහා තනන ලද තිර ආරක්ෂකයක් භාවිත කරන්න. වෙනත් තිර ආරක්ෂක සමඟ, ඔබගේ දරුවාගේ ඇඟිලි සලකුණ ක්රියා නොකළ හැකිය."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"උපාංගයේ ඇඟිලි සලකුණු සංවේදකයේ පිහිටීම නිරූපණය"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"නම"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"හරි"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"නැවත උත්සාහ කරන්න"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"මකන්න"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"සංවේදකය ස්පර්ශ කරන්න"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"ඔබගේ ඇඟිල්ල සංවේදකය මත තබා කම්පනයක් දැනෙන විට ඔසවන්න"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"නිමයි"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"අපොයි, එය සංවේදකය නොවෙයි"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"දුරකථනය පිටුපස ඇති සංවේදකය ස්පර්ශ ක. දබරැඟිල්ල භාවිත ක."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"බඳවා ගැනීම අවසන් නොකරන ලදී"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"ඇඟිලි සලකුණ ඇතුළත් කිරිමේ කාල සීමාව ළඟා විය. නැවත උත්සාහ කරන්න."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"ඇඟිලි සලකුණු සැකසීමේ කාලය නිමා විය"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"නැවත උත්සාහ කරන්න, නැතහොත් සැකසුම් වෙත පිවිස පසුව ඔබේ ඇඟිලි සලකුණ සකසන්න"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"ඇඟිලි සලකුණ ඇතුළත් කිරිම ක්රියා කළේ නැත. නැවත උත්සාහ කරන්න, නැතහොත් වෙනත් ඇඟිල්ලක් භාවිත කරන්න."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"තවත් එකක් එක් කරන්න"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"මීළඟ"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"ඔබේ දුරකථනය අභිරුචිකරණය කරන්න"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"වෙනත් මෝස්තර, වෝල්පේපර, සහ තවත් ඒවා උත්සාහ කරන්න"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"තිර සුරැකුම"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"තිර සුරැකුම"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"තිර සුරැකුම භාවිත කරන්න"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ආරෝපණය හෝ ඩොක් කර ඇති විට"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"දෙකෙන් එකක්"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ආරෝපණය වන අතරතුර"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ඩොක් කර ඇති විට"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"කවදාවත් නෑ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"අක්රියයි"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"දුරකථනය රඳවා ඇති විට සහ/හෝ නිද්රාවේ ඇති විට සිදු වන දේ පාලනය කිරීමට, තිර සුරැකුම ක්රියාත්මක කරන්න."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"පටන් ගන්න මොන වේලාවටද"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"වර්තමාන තිර සුරැකුම"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"සැකසීම්"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ස්වයංක්රිය දීප්තිය"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"අවදි කිරීමට ඔසවන්න"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ස්ථානික සංදර්ශකය"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN අංකයක් සකසන්න"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"කාර්යාල PIN එකක් සකසන්න"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"රටාවක් සකසන්න"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"එක් කළ ආරක්ෂාව සඳහා, උපාංගය අගුලු හැරීමට රටාවක් සකසන්න"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"කාර්යාල රටාවක් සකසන්න"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ඇඟිලි සලකුණ භාවිත කිරීමට, මුරපදයක් සකසන්න"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ඇඟිලි සලකුණ භාවිත කිරීමට, රටාවක් සකසන්න"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"හදිසි යෙදුම"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"යෙදුම් මනාප නැවත සකසන්න"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"යෙදුම් මනාප නැවත සකසන්නද?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"මෙය මේ සඳහා සියලු මනාප යළි සකසනු ඇත:\n\n"<li>"අබලිත යෙදුම්"</li>\n<li>"අබලිත යෙදුම් දැනුම්දීම්"</li>\n<li>"ක්රියා සඳහා පෙරනිමි යෙදුම්"</li>\n<li>"යෙදුම් සඳහා පසුබිම් දත්ත සීමා කිරීම්"</li>\n<li>"ඕනෑම අවසර සීමා"</li>\n\n"ඔබට යෙදුම් දත්ත කිසිවක් අහිමි නොවනු නැත."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"මෙය මේ සඳහා සියලු මනාප යළි සකසනු ඇත:\n\n"<li>"අබලිත යෙදුම්"</li>\n<li>"අබලිත යෙදුම් දැනුම්දීම්"</li>\n<li>"ක්රියා සඳහා පෙරනිමි යෙදුම්"</li>\n<li>"යෙදුම් සඳහා පසුබිම් දත්ත සීමා කිරීම්"</li>\n<li>"ඕනෑම අවසර සීමා"</li>\n<li>"බැටරි භාවිත සැකසීම්"</li>\n\n"ඔබට යෙදුම් දත්ත කිසිවක් අහිමි නොවනු ඇත."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"යෙදුම් මනාප නැවත සකසන්න"</string>
<string name="manage_space_text" msgid="9013414693633572277">"ඉඩ කළමනාකරණය"</string>
<string name="filter" msgid="9039576690686251462">"පෙරහන කරන්න"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"සැකසීම් යළි සකසන්න"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"සංදර්ශක තරම සහ පෙළ සැකසීම් යළි සකසා ඇත"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"සංදර්ශක තරම සහ පෙළ යළි සකසන්නද?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ඔබගේ සංදර්ශක තරම සහ පෙළ මනාප දුරකථනයේ මුල් සැකසීම් වෙත යළි සකසනු ඇත"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ඔබගේ සංදර්ශක තරම සහ පෙළ මනාප දුරකථනයේ මුල් සැකසීම් වෙත යළි සකසනු ඇත"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ඔබේ සංදර්ශක තරම සහ පාඨ මනාප ටැබ්ලටයේ මුල් සැකසීම් වෙත සකසයි"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"යළි සකසන්න"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"සති අන්තයේ මොකද කරන්නේ?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"මුහුදු වෙරළට යනවා. එක් වීමට කැමති ද?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"අවසන් පූර්ණ ආරෝපණයේ සිට භාවිත කර නැත"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"පසුගිය පැය 24 සඳහා භාවිතයක් නැත"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"වෙනත් පරිශීලකයින්"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"ඉතිරිව ඇති බැටරි ඇස්තමේන්තුව ඔබගේ උපාංග භාවිතය මත පදනම් වේ"</string>
<string name="estimated_time_left" msgid="948717045180211777">"ඇස්තමේන්තුගත ඉතිරි කාලය"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"පූර්ණ ආරෝපණය වන තෙක්"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"සම්පුර්ණ අණවදන සහ අන්තර්ක්රියාව"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"සරළ කථනයෙන් පෙළට"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"හඬ නිරීක්ෂණය කිරීම සැමවිටම සක්රියව තැබීමට සහ ඔබ වෙනුවෙන් හඬ සබල කර ඇති යෙදුම් පාලනය කිරීමට හැකියාව හඬ ආදාන සේවාවට තිබේ. <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> යෙදුමෙන් එය පැමිණේ. මෙම සේවාවේ භාවිතා කිරීම සබල කරන්නද?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"උපාංගයේ හැඳුනුම් සැකසුම්"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"උපාංගය මත හඳුනා ගැනීම"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"උපාංගය මත කථන හඳුනා ගැනීම"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"මනාප යාන්ත්රණය"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"යාන්ත්රණ සැකසීම්"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"කථන අනුපාතය සහ තාරතාව"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"මකන්න"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"මෙම සැසියේ සියළුම යෙදුම් සහ දත්ත මකාවී."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"ඉවත් කරන්න"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"ආගන්තුකයා (ඔබ)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"පරිශීලකයින්"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"වෙනත් පරිශීලකයින්"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"ආගන්තුක ක්රියාකාරකම් මකන්න"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"ආගන්තුක ප්රකාරයෙන් පිටවන විට සියලු ආගන්තුක යෙදුම් සහ දත්ත මකන්න"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ආගන්තුක ක්රියාකාරකම මකන්නද?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"මෙම ආගන්තුක සැසියේ යෙදුම් සහ දත්ත දැන් මකනු ඇති අතර, ඔබ ආගන්තුක ප්රකාරයෙන් පිටවන සෑම අවස්ථාවකම අනාගත ආගන්තුකයන්ගේ ක්රියාකාරකම් සියල්ල මකනු ඇත"</string>
<string name="user_enable_calling" msgid="264875360626905535">"දුරකථන ඇමතුම් ක්රියාත්මක කරන්න"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"දුරකථන ඇමතුම් සහ SMS ක්රියාත්මක කරන්න?"</string>
<string name="user_remove_user" msgid="8468203789739693845">"පරිශීලකයා මකන්න"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"සියලු \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" දැනුම් දීම්"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"සියලු <xliff:g id="APP_NAME">%1$s</xliff:g> දැනුම් දීම්"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"අනුවර්තී දැනුම්දීම්"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">දිනකට දැනුම්දීම් ~<xliff:g id="NUMBER_1">%,d</xliff:g> ක්</item>
- <item quantity="other">දිනකට දැනුම්දීම් ~<xliff:g id="NUMBER_1">%,d</xliff:g> ක්</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">දිනකට දැනුම්දීම් <xliff:g id="NUMBER_1">%,d</xliff:g>ක් පමණ</item>
+ <item quantity="other">දිනකට දැනුම්දීම් <xliff:g id="NUMBER_1">%,d</xliff:g>ක් පමණ</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">සතියකට දැනුම්දීම් ~<xliff:g id="NUMBER_1">%,d</xliff:g> ක්</item>
- <item quantity="other">සතියකට දැනුම්දීම් ~<xliff:g id="NUMBER_1">%,d</xliff:g> ක්</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">සතියකට දැනුම්දීම් <xliff:g id="NUMBER_1">%,d</xliff:g>ක් පමණ</item>
+ <item quantity="other">සතියකට දැනුම්දීම් <xliff:g id="NUMBER_1">%,d</xliff:g>ක් පමණ</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"කිසි විටක නැත"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"උපාංගය සහ යෙදුම් දැනුම්දීම්"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"කිසිවක් නොකරන්න"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"කම්පනය"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"නිහඬ කරන්න"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"සබල කිරීමට, පළමුව බල මෙනුවට \"බල බොත්තම ඔබා අල්ලාගෙන සිටින්න\" යන්න වෙනස් කරන්න."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"සබල කිරීම සඳහා, පළමුව බල මෙනුවට \"බල බොත්තම ඔබා සිටින්න\" යන්න වෙනස් කරන්න."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"ජාල විස්තර"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"ඔබගේ උපාංගයේ නම ඔබගේ දුරකථනයේ යෙදුම්වලට දෘශ්යමානය. ඔබ බ්ලූටූත්වලට සම්බන්ධ වූ විට හෝ Wi-Fi හොට්ස්පොට් එකක් පිහිටු වූ විට වෙනත් පුද්ගලයන්ද එය දැකිය හැකිය."</string>
<string name="devices_title" msgid="649715719278562515">"උපාංග"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"උපාංග පාලන"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"කාඩ්පත් & ප්රවේශපත්"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"කාඩ්පත් & ප්රවේශපත්"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"බල බොත්තම ඔබා අල්ලාගෙන සිටින්න"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"සහායක සඳහා ඔබා අල්ලාගෙන සිටින්න"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"බල මෙනුව සඳහා ඔබා අල්ලාගෙන සිටින්න"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"අබලයි ඔබා අල්ලාගෙන සිටින්න"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"බල බොත්තම ඔබා සිටින්න"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"ප්රවේශ වීමට බල බොත්තම ඔබා සිටින්න"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"බල මෙනුව"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ඩිජිටල් සහායක"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ඩිජිටල් සහායක වෙත ප්රවේශ වන්න"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"බල මෙනුවට ප්රවේශ වන්න"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"භාවිත කිරීමට, පළමුව තීර අගුල සකසන්න"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"සහායක සඳහා රඳවා ගන්න"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"බල බොත්තම තද කර ගෙන සිටීමෙන් සහායක ප්රේරණය කරන්න"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"බලය සහ හදිසි අවස්ථා මෙනුව:\nඑකම අවස්ථාවේදී බලය සහ හඬ ඉහළට බොත්තම ඔබන්න."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"නාද වීම වළක්වන්න:\nකෙටි මග හඬ පරිමා මෙනුවෙහි තිබේ."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"බල මෙනුව:\nබල බොත්තම සහ හඬ පරිමාව වැඩි කිරීමේ බොත්තම එකවර ඔබන්න"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"නාද වීම වළක්වන්න:\nකෙටිමඟ සඳහා ශබ්ද බොත්තමක් ඔබන්න"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"ඔබා අල්ලාගෙන සිටින කාල සීමාව"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"බල බොත්තම කොපමණ වේලාවක් ඔබා අල්ලාගෙන සිටින්නේද යන්න තෝරා සංවේදීතාව සීරුමාරු කරන්න"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"කෙටි"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 932821d..2f94c71 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -472,7 +472,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Keď použije Pixel Imprint, model odtlačku prsta sa aktualizuje pomocou príslušných fotiek. Fotky, pomocou ktorých bol vytvorený model prsta vášho dieťaťa, sa za žiadnych okolností neukladajú. Model odtlačku prsta je bezpečne uložený v telefóne a nikdy ho neopustí. Všetko sa bezpečne spracúva v telefóne."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"V Nastaveniach môžete kedykoľvek odstrániť obrázky aj model odltačku prsta alebo vypnúť odomknutie odtlačkom prsta. Obrázky a modely odtlačku prsta sú uložené v telefóne, dokým ich neodstránite."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Vy a vaše dieťa môžete v Nastaveniach kedykoľvek fotky a model odtlačku prsta odstrániť alebo odomknutie odtlačkom prsta vypnúť. Fotky a modely odtlačku prsta sú uložené v telefóne, kým ich neodstránite."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefón môže byť odomknutý, aj keď to nechcete, napríklad keď ho niekto priloží k vášmu prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefón môže byť odomknutý, aj keď to nechcete, napríklad keď ho niekto priloží k vášmu prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tablet môže byť odomknutý, aj keď to nechcete, napríklad keď ho niekto priloží k vášmu prstu."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Zariadenie môže byť odomknuté aj keď to nechcete, napríklad keď ho niekto priloží k vášmu prstu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefón vášho dieťaťa sa dá odomknúť aj náhodne, napríklad keď naň niekto priloží prst."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Najlepšie výsledky dosiahnete, keď použijete ochranu obrazovky s certifikátom Made for Google. S inými ochranami obrazovky nemusí odtlačok prsta fungovať."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Najlepšie výsledky dosiahnete, keď použijete ochranu obrazovky s certifikátom Made for Google. S inými ochranami obrazovky nemusí odtlačok prsta vášho dieťa fungovať."</string>
@@ -522,6 +524,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustrácia zariadenia a umiestnenia senzora odtlačku prsta"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Názov"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Skúsiť znova"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Odstrániť"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Dotknite sa senzora"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Priložte prst k senzoru a zdvihnite ho, keď zacítite vibráciu"</string>
@@ -601,8 +604,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Hotovo"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ojoj, to nie je senzor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Dotknite sa senzora na zadnej strane telefónu. Použite ukazovák."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registrácia nebola dokončená"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Časový limit registrácie odtlačku prsta vypršal. Skúste to znova."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Nastavenie odtlačku prsta vypršalo"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Skúste to znova alebo odtlačok nastavte neskôr v Nastaveniach"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Registrácia odtlačku prsta nefungovala. Skúste to znova alebo použite iný prst."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Pridať ďalší"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Ďalej"</string>
@@ -1490,17 +1493,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Prispôsobenie telefónu"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Vyskúšajte rôzne štýly, tapety atď."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Šetrič obrazovky"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"šetrič obrazovky"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Použiť šetrič obrazovky"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Pri nabíjaní alebo v doku"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"V oboch prípadoch"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Pri nabíjaní"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Pri vložení do doku"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nikdy"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Vypnuté"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Ak chcete ovládať, čo sa má stať, keď je telefón v doku alebo v režime spánku, zapnite šetrič obrazovky."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Čas spustenia"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Aktuálny šetrič obrazovky"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Nastavenia"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatický jas"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Prebudiť zdvihnutím"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambientné zobrazenie"</string>
@@ -1992,6 +1993,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Nastavte si PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Nastavenie pracovného kódu PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Nastavenie vzoru"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"V záujme zvýšenia zabezpečenia nastavte vzor na odomknutie zariadenia"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Nastavenie pracovného vzoru"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Ak chcete použiť odtlačok prsta, nastavte heslo"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Ak chcete použiť odtlačok prsta, nastavte vzor"</string>
@@ -2149,7 +2151,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplikácia pre tiesňové volania"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Resetovať nastavenia aplikácií"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Chcete resetovať nastavenia aplikácií?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Táto akcia resetuje predvoľby \n\n"<li>"zakázaných aplikácií;"</li>\n<li>"upozornení zakázaných aplikácií;"</li>\n<li>"predvolených aplikácií pre akcie;"</li>\n<li>"obmedzení dát na pozadí pre aplikácie;"</li>\n<li>"akýchkoľvek obmedzení povolení."</li>\n\n"Neprídete o žiadne dáta aplikácií."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Touto akciou resetujete nasledujúce nastavenia:\n\n"<li>"deaktivované aplikácie,"</li>\n<li>"deaktivované upozornenia aplikácií,"</li>\n<li>"predvolené aplikácie pre rôzne akcie,"</li>\n<li>"obmedzenia dát na pozadí pre aplikácie,"</li>\n<li>"všetky obmedzenia povolení"</li>\n<li>"nastavenia spotreby batérie."</li>\n\n"Neprídete o žiadne dáta aplikácií."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Obnoviť aplikácie"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Spravovať pamäť"</string>
<string name="filter" msgid="9039576690686251462">"Filtrovať"</string>
@@ -2404,7 +2406,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Resetovať nastavenia"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Nastavenia veľkosti obrazovky a textu boli resetované"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Chcete resetovať veľkosť zobrazenia a textu?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Veľkosť zobrazenia a predvoľby textu budú resetované na pôvodné nastavenia telefónu"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Veľkosť zobrazenia a predvoľby textu budú resetované na pôvodné nastavenia telefónu"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Veľkosť zobrazenia a predvoľby textu budú resetované na pôvodné nastavenia tabletu"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Resetovať"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Máš nejaké plány na víkend?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Chystám sa na pláž. Chceš sa pridať?"</string>
@@ -3012,6 +3015,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Žiadne použitie od posledného úplného dobitia"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Žiadne použitie za posledných 24 hodín"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Ďalší používatelia"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Odhad zostávajúcej batérie vychádza z vášho používania zariadenia"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Odhadovaný zostávajúci čas:"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Do úplného dobitia"</string>
@@ -3101,6 +3105,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Úplná aktivácia kľúčových slov a interakcia"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Jednoduchý prevod reči na text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Táto služba hlasového vstupu bude môcť neustále monitorovať hlas a ovládať za vás aplikácie so zapnutým hlasovým vstupom. Pochádza z aplikácie <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Chcete povoliť používanie tejto služby?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Nastavenia rozpoznávania v zariadení"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Rozpoznávanie v zariadení"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Rozpoznávanie reči v zariadení"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Preferovaný nástroj"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Nastavenia nástroja"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Rýchlosť reči a výška hlasu"</string>
@@ -3501,6 +3508,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Odstrániť"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Všetky aplikácie a údaje v tejto relácii budú odstránené."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Odstrániť"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Hosť (vy)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Používatelia"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Ďalší používatelia"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Odstrániť aktivitu hosťa"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Odstrániť všetky aplikácie a údaje hosťa pri ukončení režimu pre hostí"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Chcete odstrániť aktivitu hosťa?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikácie a údaje z tejto relácie hosťa sa teraz odstránia a budúca aktivita hosťa sa odstráni vždy pri ukončení režimu pre hostí"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Zapnúť telefonické hovory"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Zapnúť telefonáty a SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Odobrať používateľa"</string>
@@ -4097,17 +4111,17 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Všetky upozornenia aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Všetky upozornenia aplikácie <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Adaptívne upozornenia"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> upozornenia denne</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> upozornení denne</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> upozornenie denne</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="few">Približne <xliff:g id="NUMBER_1">%,d</xliff:g> upozornenia denne</item>
+ <item quantity="many">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per day</item>
+ <item quantity="other">Približne <xliff:g id="NUMBER_1">%,d</xliff:g> upozornení denne</item>
+ <item quantity="one">Približne <xliff:g id="NUMBER_0">%d</xliff:g> upozornenie denne</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> upozornenia týždenne</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> upozornení týždenne</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> upozornenie týždenne</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="few">Približne <xliff:g id="NUMBER_1">%,d</xliff:g> upozornenia týždenne</item>
+ <item quantity="many">About <xliff:g id="NUMBER_1">%,d</xliff:g> notifications per week</item>
+ <item quantity="other">Približne <xliff:g id="NUMBER_1">%,d</xliff:g> upozornení týždenne</item>
+ <item quantity="one">Približne <xliff:g id="NUMBER_0">%d</xliff:g> upozornenie týždenne</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nikdy"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Upozornenia v zariadeniach a aplikáciách"</string>
@@ -5425,7 +5439,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Nerobiť nič"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibrovať"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Vypnúť zvuk"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Ak chcete túto možnosť povoliť, najprv zmeňte Pridržať vypínač na ponuku vypínača."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Ak chcete túto funkciu zapnúť, najprv zmeňte možnosť Pridržanie vypínača na ponuku vypínača."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Podrobnosti siete"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Názov zariadenia uvidia aplikácie v telefóne. Keď sa pripojíte k zariadeniam s rozhraním Bluetooth alebo sieti Wi‑Fi, prípadne ak nastavíte hotspot Wi‑Fi, môžu ho uvidieť aj ostatní ľudia."</string>
<string name="devices_title" msgid="649715719278562515">"Zariadenia"</string>
@@ -5718,15 +5732,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ovládanie zariadení"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Karty a lístky"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"karty a lístky"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Pridržanie vypínača"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Pridržaním aktivovať Asistenta"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Pridržaním zobrazte ponuku vypínača"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Pridržte, je deaktivovaný"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Pridržanie vypínača"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Prístup získate pridržaním vypínača"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Ponuka vypínača"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitálny asistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Prístup k digitálnemu asistentovi"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Otvorenie ponuky vypínača"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Pred použitím je potrebné nastaviť zámku obrazovky"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Pridržaním aktivovať Asistenta"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Spustiť Asistenta pridržaním vypínača"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Ponuka vypínača a stavu tiesne:\nNaraz stlačte vypínač a tlačidlo zvýšenia hlasitosti."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Nezvoniť:\nskratka v ponuke hlasitosti."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Ponuka vypínača:\nstlačte naraz vypínač a tlačidlo zvýšenia hlasitosti"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Vypnutie zvonenia:\nskratku zobrazíte stlačením tlačidla hlasitosti"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Trvanie pridržania"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Upravte citlivosť tak, že vyberiete, ako dlho treba pridržať vypínač"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Krátke"</string>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 9bfa8ce..1ac239e 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -472,7 +472,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Ko otrok uporablja Pixel Imprint, se model prstnega odtisa posodablja s slikami iz teh interakcij. Slike, iz katerih je ustvarjen model otrokovega prstnega odtisa, se nikoli ne shranijo, model prstnega odtisa pa se varno shrani v telefon in ga nikoli ne zapusti. Celotna obdelava je izvedena varno v telefonu."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"V nastavitvah lahko kadar koli izbrišete slike in model prstnega odtisa ali izklopite odklepanje s prstnim odtisom. Slike in modeli prstnih odtisov so shranjeni v telefonu, dokler jih ne izbrišete."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Vi in otrok lahko v nastavitvah kadar koli izbrišete slike in model prstnega odtisa ali izklopite odklepanje s prstnim odtisom. Slike in modeli prstnega odtisa so shranjeni v telefonu, dokler niso izbrisani."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefon lahko odklenete tudi nenamerno, na primer če ga nekdo podrži pred vašim prstom."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefon lahko odklenete tudi nenamerno, na primer če ga nekdo podrži pred vašim prstom."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tablični računalnik je mogoče odkleniti tudi nenamerno, na primer če ga nekdo podrži pred vašim prstom."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Napravo je mogoče odkleniti tudi nenamerno, na primer če jo nekdo podrži pred vašim prstom."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Otrokov telefon je mogoče odkleniti tudi nenamerno, na primer če ga nekdo podrži pred njegovim prstom."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Za najboljše rezultate uporabljajte zaščito zaslona, ki ima potrdilo »Narejeno za Google«. Če uporabljate druge zaščite zaslona, prstni odtis morda ne bo deloval."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Za najboljše rezultate uporabljajte zaščito zaslona, ki ima potrdilo »Narejeno za Google«. Če uporabljate druge zaščite zaslona, otrokov prstni odtis morda ne bo deloval."</string>
@@ -522,6 +524,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustracija z napravo in lokacijo tipala prstnih odtisov"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Ime"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"V redu"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Poskusite znova"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Izbriši"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Dotaknite se tipala"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Prst položite na tipalo in ga dvignite, ko začutite vibriranje."</string>
@@ -601,8 +604,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Končano"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Ups, to ni tipalo"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"S kazalcem se dotaknite tipala na hrbtni strani telefona."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registracija ni bila dokončana"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Dosežena je časovna omejitev za registracijo prstnega odtisa. Poskusite znova."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Čas za nastavitev prstnega odtisa je potekel."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Poskusite znova zdaj ali nastavite prstni odtis pozneje v nastavitvah."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Registracija prstnega odtisa ni uspela. Poskusite znova ali uporabite drug prst."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Dodaj še enega"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Naprej"</string>
@@ -1490,17 +1493,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Prilagajanje telefona"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Preizkusite različne sloge, ozadja in drugo"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Ohranjevalnik zaslona"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ohranjevalnik zaslona"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Uporabi ohranjevalnik zaslona"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Med polnjenjem ali v stojalu"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Eno ali drugo"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Med polnjenjem"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Ko je v stojalu"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Nikoli"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Izklopljeno"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Če želite nadzirati, kaj se dogaja, ko je telefon na nosilcu in/ali v stanju pripravljenosti, vklopite ohranjevalnik zaslona."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kdaj naj se zažene"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Trenutni ohranjevalnik zaslona"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Nastavitve"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Samodejna svetlost"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Preklop iz stanja pripravlj. z dviganjem"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Prikaz na podlagi okolja"</string>
@@ -1992,6 +1993,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Nastavite kodo PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Nastavitev kode PIN za službo"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Nastavite vzorec"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Za večjo varnost nastavite vzorec za odklepanje naprave."</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Nastavitev vzorca za službo"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Nastavite geslo za prstni odtis"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Nastavite vzorec za prstni odtis"</string>
@@ -2149,7 +2151,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplikacija v sili"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Ponastavitev nastavitev aplikacij"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Želite ponastaviti nastavitve aplikacij?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"S tem bodo ponastavljene vse nastavitve za:\n\n"<li>" onemogočene aplikacije,"</li>\n<li>" obvestila za onemogočene aplikacije,"</li>\n<li>" privzete aplikacije za dejanja,"</li>\n<li>" omejitve prenosa podatkov v ozadju za aplikacije,"</li>\n<li>" omejitve dovoljenj."</li>\n\n" Podatkov aplikacij ne boste izgubili."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"S tem bodo ponastavljene vse nastavitve za:\n\n"<li>"onemogočene aplikacije,"</li>\n<li>"onemogočena obvestila aplikacij,"</li>\n<li>"privzete aplikacije za dejanja,"</li>\n<li>"omejitev prenosa podatkov v ozadju za aplikacije,"</li>\n<li>"omejitve dovoljenj,"</li>\n<li>"porabo energije baterije."</li>\n\n"Podatkov iz aplikacij ne boste izgubili."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Ponastavi aplikacije"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Upravljaj prostor"</string>
<string name="filter" msgid="9039576690686251462">"Filtriraj"</string>
@@ -2404,7 +2406,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Ponastavi nastavitve"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Nastavitve besedila in velikosti prikaza so bile ponastavljene."</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Želite ponastaviti velikost prikaza in besedilo?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Nastavitve velikosti prikaza in besedila bodo ponastavljene na prvotne nastavitve telefona."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Nastavitve velikosti prikaza in besedila bodo ponastavljene na prvotne nastavitve telefona."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Nastavitve besedila in velikosti prikaza bodo ponastavljene na prvotne nastavitve tabličnega računalnika."</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Ponastavi"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Imaš kakšne načrte za konec tedna?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Odpravljam se na Obalo. Greš zraven?"</string>
@@ -3012,6 +3015,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Ni bilo uporabe od zadnje polne napolnjenosti."</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Ni bilo uporabe v zadnjih 24 urah."</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Drugi uporabniki"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Ocena preostalega časa delovanja na baterijsko napajanje temelji na načinu uporabe naprave."</string>
<string name="estimated_time_left" msgid="948717045180211777">"Približni preostali čas"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Do napolnjenosti"</string>
@@ -3101,6 +3105,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Polna uporaba sprožilnih besed in govora"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Pretvorba preprostega govora v besedilo"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Storitev glasovnega vnosa bo lahko izvajala stalno vklopljeno nadziranje glasu in v vašem imenu upravljala aplikacije, ki omogočajo glasovno upravljanje. Storitev izvira iz aplikacije <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Želite omogočiti njeno uporabo?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Nastavitve prepoznavanja v napravi"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Prepoznavanje v napravi"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Prepoznavanje govora v napravi"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Prednostni mehanizem"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Nastavitve mehanizma"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Hitrost in višina tona govora"</string>
@@ -3501,6 +3508,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Izbriši"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Vse aplikacije in podatki v tej seji bodo izbrisani."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Odstrani"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gost (vi)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Uporabniki"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Drugi uporabniki"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Izbriši dejavnost gosta"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Brisanje vseh aplikacij in podatkov gosta ob zaprtju načina za goste"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Želite izbrisati dejavnost gosta?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Aplikacije in podatki v tej seji gosta bodo zdaj izbrisani, prihodnja dejavnost gosta pa bo izbrisana vsakič, ko zaprete način za goste."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Vklopi telefonske klice"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Vklop telefonskih klicev in sporočil SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Brisanje uporabnika"</string>
@@ -4097,17 +4111,17 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Vsa obvestila aplikacije »<xliff:g id="APP_NAME">%1$s</xliff:g>«"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Vsa obvestila aplikacije <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Prilagodljiva obvestila"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~ <xliff:g id="NUMBER_1">%,d</xliff:g> obvestilo na dan</item>
- <item quantity="two">~ <xliff:g id="NUMBER_1">%,d</xliff:g> obvestili na dan</item>
- <item quantity="few">~ <xliff:g id="NUMBER_1">%,d</xliff:g> obvestila na dan</item>
- <item quantity="other">~ <xliff:g id="NUMBER_1">%,d</xliff:g> obvestil na dan</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obvestilo na dan</item>
+ <item quantity="two">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obvestili na dan</item>
+ <item quantity="few">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obvestila na dan</item>
+ <item quantity="other">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obvestil na dan</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~ <xliff:g id="NUMBER_1">%,d</xliff:g> obvestilo na teden</item>
- <item quantity="two">~ <xliff:g id="NUMBER_1">%,d</xliff:g> obvestili na teden</item>
- <item quantity="few">~ <xliff:g id="NUMBER_1">%,d</xliff:g> obvestila na teden</item>
- <item quantity="other">~ <xliff:g id="NUMBER_1">%,d</xliff:g> obvestil na teden</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obvestilo na teden</item>
+ <item quantity="two">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obvestili na teden</item>
+ <item quantity="few">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obvestila na teden</item>
+ <item quantity="other">Približno <xliff:g id="NUMBER_1">%,d</xliff:g> obvestil na teden</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Nikoli"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Obvestila naprave in aplikacij"</string>
@@ -5425,7 +5439,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ne naredi ničesar"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibriranje"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Izklop zvoka"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Če želite omogočiti, najprej spremenite »Pridržanje gumba za vklop« na meni za vklop/izklop."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Če želite omogočiti, najprej spremenite »Pridržanje gumba za vklop« na meni za vklop/izklop."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Podatki o omrežju"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Ime naprave je vidno aplikacijam v telefonu. Ko vzpostavite povezavo z napravami Bluetooth ali omrežjem Wi-Fi ali nastavite dostopno točko Wi-Fi, ga bodo morda videle tudi druge osebe."</string>
<string name="devices_title" msgid="649715719278562515">"Naprave"</string>
@@ -5718,15 +5732,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"kontrolniki naprave"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kartice in vstopnice"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kartice in vstopnice"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Pridržanje gumba za vklop"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Pritisnite in pridržite za Pomočnika."</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Pridržanje za meni za vklop/izklop"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Pridržanje je onemogočeno."</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Pridržanje gumba za vklop"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Pridržanje gumba za vklop omogoči dostop do:"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Meni za vklop/izklop"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digitalni pomočnik"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Dostop do digitalnega pomočnika"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Dostop do menija za vklop/izklop"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Za uporabo najprej nastavite zaklepanje zaslona."</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Pridržanje za Pomočnika"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Sprožite Pomočnika tako, da pridržite gumb za vklop."</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Meni za vklop/izklop in nujne primere:\nSočasno pritisnite gumba za vklop in povečanje glasnosti."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Preprečevanje zvonjenja:\nBližnjica je na voljo v meniju za glasnost."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Meni za vklop/izklop:\nHkrati pritisnite gumb za vklop in gumb za povečanje glasnosti ter ju pridržite."</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Preprečevanje zvonjenja:\nZa bližnjico pritisnite gumb za glasnost."</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Dolžina pridržanja"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Prilagodite občutljivost z izbiro dolžine pridržanja gumba za vklop."</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kratko"</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 53ee141..433a186 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Kur të përdorë Pixel Imprint, imazhet përdoren për të përditësuar modelin e tij të gjurmës së gishtit. Imazhet e përdorura për të krijuar modelin e gjurmës së gishtit të fëmijës tënd nuk ruhen asnjëherë, por modeli i gjurmës së gishtit ruhet në mënyrë të sigurt në telefon dhe nuk largohet kurrë nga telefoni. I gjithë përpunimi ndodh në mënyrë të sigurt në telefon."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Mund t\'i fshish imazhet dhe modelin e gjurmës sate të gishtit ose çaktivizoje \"Shkyçjen me gjurmën e gishtit\" në çdo kohë te \"Cilësimet\". Imazhet dhe modelet e gjurmës së gishtit ruhen në telefon deri kur t\'i fshish."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Ti dhe fëmija yt mund t\'i fshini imazhet dhe modelin e gjurmës së tij të gishtit ose ta çaktivizoni \"Shkyçjen me gjurmën e gishtit\" në çfarëdo kohe te \"Cilësimet\". Imazhet dhe modelet e gjurmës së gishtit ruhen në telefon derisa të fshihen."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefoni yt mund të shkyçet edhe nëse nuk ke për qëllim një gjë të tillë, p.sh. nëse dikush ta mban te gishti."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefoni yt mund të shkyçet edhe nëse nuk ke për qëllim një gjë të tillë, p.sh. nëse dikush ta mban te gishti."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tableti yt mund të shkyçet edhe nëse nuk ke për qëllim një gjë të tillë, p.sh. nëse dikush ta mban te gishti."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Pajisja jote mund të shkyçet edhe nëse nuk ke për qëllim një gjë të tillë, p.sh. nëse dikush ta mban te gishti."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefoni i fëmijës tënd mund të shkyçet pa dashje, si p.sh. nëse dikush ia mban te gishti."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Për rezultate më të mira, përdor një mbrojtës ekrani që është i certifikuar nga \"Prodhuar për Google\". Me mbrojtës të tjerë ekrani, gjurma jote e gishtit mund të mos funksionojë."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Për rezultate më të mira, përdor një mbrojtës ekrani që është i certifikuar nga \"Prodhuar për Google\". Me mbrojtës të tjerë ekrani, gjurma e gishtit e fëmijës tënd mund të mos funksionojë."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ilustrim me pajisjen dhe vendndodhjen e sensorit të gjurmës së gjishtit"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Emri"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Në rregull"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Provo sërish"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Fshi"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Prek sensorin"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Vendose gishtin mbi sensor dhe ngrije pasi të ndjesh një dridhje"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"U krye"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Jo, sensori nuk është ai"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Prek sensorin në pjesën e pasme të telefonit. Përdor gishtin tregues."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Regjistrimi nuk përfundoi"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"U arrit kufiri kohor për regjistrimin e gjurmës së gishtit. Provo përsëri."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Konfigurimi i gjurmës së gishtit skadoi"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Provo sërish tani ose konfiguro gjurmën e gishtit më vonë te \"Cilësimet\""</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Regjistrimi i gjurmës së gishtit nuk funksionoi. Provo përsëri ose përdor një gisht tjetër."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Shto një tjetër"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Para"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Personalizo telefonin"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Provo stile, imazhe sfondi të ndryshme etj."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Mbrojtësi i ekranit"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"mbrojtësi i ekranit"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Përdor mbrojtësin e ekranit"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Gjatë karikimit ose lidhjes me stacionin"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Në të dyja rastet"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Gjatë karikimit"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Kur vendoset në stacion"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Asnjëherë"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Çaktivizuar"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Për të kontrolluar se çfarë ndodh kur telefonin e vendos te stacioni dhe/ose në gjumë, aktivizo mbrojtësin e ekranit."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kur të fillojë"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Mbrojtësi aktual i ekranit"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Cilësimet"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Ndriçimi automatik"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Ngrije për ta zgjuar"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Shfaqja e ambientit"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Cakto një kod PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Cakto një kod PIN për punën"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Cakto një motiv"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Për më shumë siguri, cakto një motiv për shkyçjen e pajisjes"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Cakto një motiv për punën"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Për të përdorur gjurmën e gishtit, vendos fjalëkalimin"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Për të përdorur gjurmën e gishtit, vendos motivin"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Aplikacioni i emergjencave"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Rivendos preferencat e apl."</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Të rivendosen preferencat e aplikacionit?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Kjo do t\'i rivendosë të gjitha preferencat për:\n\n"<li>" Aplikacionet e çaktivizuara"</li>\n<li>" Njoftimet e aplikacioneve të çaktivizuara"</li>\n<li>" Aplikacionet e parazgjedhura për veprimet"</li>\n<li>" Kufizimet e të dhënave në sfond për aplikacionet"</li>\n<li>" Çdo kufizim të autorizimeve"</li>\n\n" Nuk do të humbësh asnjë të dhënë aplikacioni."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Kjo do t\'i rivendosë të gjitha preferencat për:\n\n"<li>"Aplikacionet e çaktivizuara"</li>\n<li>"Njoftimet e aplikacioneve të çaktivizuara"</li>\n<li>"Aplikacionet e parazgjedhura për veprimet"</li>\n<li>"Kufizimet e të dhënave në sfond për aplikacionet"</li>\n<li>"Kufizimet e lejeve"</li>\n<li>"Cilësimet e përdorimit të baterisë"</li>\n\n"Nuk do të humbasësh asnjë të dhënë të aplikacionit."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Rivendos aplikacionet"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Menaxho hapësirën"</string>
<string name="filter" msgid="9039576690686251462">"Filtro"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Rivendos cilësimet"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Cilësimet e madhësisë së ekranit dhe tekstit janë rivendosur"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Të rivendosen madhësia e ekranit dhe teksti?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Preferencat e tua për madhësinë e ekranit dhe tekstin do të rivendosen në cilësimet origjinale të telefonit"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Preferencat e tua për madhësinë e ekranit dhe tekstin do të rivendosen në cilësimet origjinale të telefonit"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Preferencat e tua për madhësinë e ekranit dhe tekstin do të rivendosen në cilësimet origjinale të tabletit"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Rivendos"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Ke plane për fundjavën?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Mendoj të shkoj në plazh. Dëshiron të më bashkohesh?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Pa përdorim nga karikimi i fundit i plotë"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Nuk është përdorur për 24 orët e fundit"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Përdorues të tjerë"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Përllogaritja për baterinë e mbetur bazohet në përdorimin e pajisjes tënde"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Koha e vlerësuar e mbetur"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Deri në ngarkimin e plotë"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Ndërveprimi dhe fjalëkyçi i aktivizimit (hotword), i plotë"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Shërbim i thjeshtë \"ligjërim-në-tekst\""</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ky shërbim i hyrjes së zërit do të kryejë gjithmonë monitorim të zërit si dhe do të kontrollojë në emrin tënd, të gjitha aplikacionet që mundësohen me zë. Ai ofrohet nga aplikacioni <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Të aktivizohet përdorimi e këtij shërbimi?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Cilësimet e njohjes në pajisje"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Njohja në pajisje"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Njohja e ligjërimit në pajisje"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Motori i preferuar"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Cilësimet e motorit"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Shpejtësia e të folurës dhe intonacioni"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Fshi"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Të gjitha aplikacionet dhe të dhënat në këtë sesion do të fshihen."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Hiq!"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Vizitor (ti)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Përdoruesit"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Përdorues të tjerë"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Fshi aktivitetin e vizitorit"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Fshi të gjitha aplikacionet dhe të dhënat e vizitorit kur del nga modaliteti \"vizitor\""</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Të fshihet aktiviteti i vizitorit?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Tani aplikacionet dhe të dhënat nga ky sesion për vizitorë do të fshihen dhe të gjitha aktivitetet e ardhshme të vizitorit do të fshihen sa herë që të dalësh nga modaliteti \"vizitor\""</string>
<string name="user_enable_calling" msgid="264875360626905535">"Aktivizo telefonatat"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktivizo telefonatat dhe SMS-të"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Fshi përdoruesin"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Të gjitha njoftimet e \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Të gjitha njoftimet e <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Njoftimet me përshtatje"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> njoftime në ditë</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> njoftim në ditë</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Rreth <xliff:g id="NUMBER_1">%,d</xliff:g> njoftime në ditë</item>
+ <item quantity="one">Rreth <xliff:g id="NUMBER_0">%d</xliff:g> njoftim në ditë</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> njoftime në javë</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> njoftim në javë</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Rreth <xliff:g id="NUMBER_1">%,d</xliff:g> njoftime në javë</item>
+ <item quantity="one">Rreth <xliff:g id="NUMBER_0">%d</xliff:g> njoftim në javë</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Asnjëherë"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Njoftimet e pajisjes dhe aplikacioneve"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Mos bëj asgjë"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Lësho dridhje"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Hiqi zërin"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Për ta aktivizuar, në fillim ndrysho \"Shtyp dhe mbaj shtypur butonin e energjisë\" te menyja e energjisë."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Për ta aktivizuar, në fillim ndrysho \"Shtyp dhe mbaj shtypur butonin e energjisë\" te menyja e energjisë."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Detajet e rrjetit"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Emri i pajisjes sate është i dukshëm për aplikacionet në telefonin tënd. Ai mund të shikohet po ashtu nga persona të tjerë kur lidhesh me pajisje me Bluetooth, kur lidhesh me një rrjet Wi-Fi ose kur konfiguron një zonë të qasjes për internet me Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Pajisjet"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"kontrollet e pajisjes"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kartat dhe lejet e kalimit"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kartat dhe lejet e kalimit"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Shtyp dhe mbaj shtypur butonin e energjisë"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Shtyp dhe mbaj shtypur për \"Asistetin\""</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Shtyp dhe mbaj shtypur për menynë e energjisë"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Shtypja dhe mbajta shtypur është e çaktivizuar"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Shtyp dhe mbaj shtypur butonin e energjisë"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Shtyp dhe mbaj shtypur butonin e energjisë për qasje"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menyja e energjisë"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Asistenti dixhital"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Qasje tek asistenti dixhital"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Qasje te menyja e energjisë"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Për ta përdorur, në fillim cakto një kyçje ekrani"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Mbaje shtypur për \"Asistentin\""</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Aktivizo \"Asistentin\" duke mbajtur shtypur butonin e energjisë"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menyja \"Energjia dhe urgjenca\":\nShtyp njëherësh \"Energjinë\" dhe \"Volumin lart\"."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Parandalo rënien e ziles:\nKa shkurtore në menynë e volumit."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menyja e energjisë:\nShtyp butonin e energjisë dhe butonin e volumit lart njëkohësisht"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Parandalo rënien e ziles:\nShtyp një buton volumi për shkurtoren"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Kohëzgjatja e mbajtjes shtypur"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Rregullo ndjeshmërinë duke zgjedhur kohëzgjatjen e mbajtjes shtypur të butonit të energjisë"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"E shkurtër"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 73b03a0..e5e9e12 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -468,7 +468,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Када користи Pixel Imprint, слике се користе за ажурирање модела отиска прста. Слике које се користе за прављење дететовог модела отиска прста никада се не чувају, али се модел отиска прста безбедно чува на телефону и остаје само на њему. Цео процес обраде се безбедно одвија на телефону."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Можете да избришете слике и модел отиска прста или да искључите Откључавање отискoм прста у било ком тренутку у Подешавањима. Слике и модели отисака прстију се чувају на телефону док их не избришете."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Ви и дете можете да избришете слике и модел отиска прста или да искључите откључавање отискoм прста у било ком тренутку у подешавањима. Слике и модели отисака прстију се чувају на телефону док их не избришете."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Телефон може да се откључа када то не намеравате. На пример, ако га неко приближи вашем прсту."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Телефон може да се откључа када то не намеравате. На пример, ако га неко приближи вашем прсту."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Таблет може да се откључа када то не намеравате. На пример, ако га неко приближи вашем прсту."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Уређај може да се откључа када то не намеравате. На пример, ако га неко приближи вашем прсту."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Телефон детета може да се откључа када дете то не намерава. На пример, ако неко приближи телефон дететовом прсту."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Да бисте имали најбоље резултате, користите заштиту за екран са сертификатом Направљено за Google. Отисак прста можда неће радити са другим заштитама за екран."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Да бисте имали најбоље резултате, користите заштиту за екран са сертификатом Направљено за Google. Отисак прста детета можда неће радити са другим заштитама за екран."</string>
@@ -518,6 +520,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Илустрација са уређајем и локацијом сензора за отисак прста"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Назив"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Потврди"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Пробај поново"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Избриши"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Додирните сензор"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Ставите прст на сензор и подигните га када осетите вибрацију"</string>
@@ -595,8 +598,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Готово"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Упс, то није сензор"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Додирните сензор на задњој страни телефона. Користите кажипрст."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Регистрација није завршена"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Временско ограничење за регистрацију отиска прста је истекло. Пробајте поново."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Време за подешавање отиска прста је истекло"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Пробајте поново одмах или подесите отисак прста касније у Подешавањима"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Регистрација отиска прста није успела. Пробајте поново или користите други прст."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Додајте још један"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Даље"</string>
@@ -1468,17 +1471,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Прилагодите телефон"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Пробајте другачије стилове, позадине и још тога"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Чувар екрана"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"чувар екрана"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Користи чувар екрана"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Током пуњења или на базној станици"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Било које од ова два"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Током пуњења"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Док је на базној станици"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Никада"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Искључено"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Да бисте контролисали шта се дешава када је телефон на базној станици и/или у стању спавања, укључите чувар екрана."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Када да почне"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Тренутни чувар екрана"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Подешавања"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Аутоматски ниво осветљености"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Подигни за активацију"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Амбијентални екран"</string>
@@ -1968,6 +1969,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Подесите PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Подесите PIN за пословни профил"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Подесите шаблон"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Ради веће безбедности подесите шаблон за откључавање уређаја"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Подесите шаблон за пословни профил"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Подесите лозинку да бисте користили отисак"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Да бисте користили отисак прста, подесите шаблон"</string>
@@ -2123,7 +2125,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Апликација за хитне случајеве"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Ресетуј подешавања апликација"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Желите да ресетујете подешавања апликације?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Овим ћете ресетовати сва подешавања за:\n\n"<li>"Онемогућене апликације"</li>\n<li>"Обавештења о онемогућеним апликацијама"</li>\n<li>"Подразумеване апликације за радње"</li>\n<li>"Ограничења за позадинске податке за апликације"</li>\n<li>"Сва ограничења за дозволе"</li>\n\n"Нећете изгубити никакве податке апликације."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Овим ћете ресетовати сва подешавања за:\n\n"<li>"Онемогућене апликације"</li>\n<li>"Обавештења о онемогућеним апликацијама"</li>\n<li>"Подразумеване апликације за радње"</li>\n<li>"Ограничења за позадинске податке за апликације"</li>\n<li>"Сва ограничења за дозволе"</li>\n<li>"Подешавања потрошње батерије"</li>\n\n"Нећете изгубити никакве податке апликације."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Ресетуј апликације"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Управљај простором"</string>
<string name="filter" msgid="9039576690686251462">"Филтрирај"</string>
@@ -2378,7 +2380,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Ресетуј подешавања"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Подешавања величине екрана и текста су ресетована"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Желите да ресетујете величину приказа и текст?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Величина приказа и подешавања текста ће се ресетовати на првобитна подешавања телефона"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Величина приказа и подешавања текста ће се ресетовати на првобитна подешавања телефона"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Величина приказа и подешавања текста ће се ресетовати на првобитна подешавања таблета"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Ресетуј"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Имаш ли планове за викенд?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Идем на плажу. Хоћеш са мном?"</string>
@@ -2972,6 +2975,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Нема коришћења од последњег потпуног пуњења"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Нема коришћења у последња 24 сата"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Остали корисници"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Процена преосталог нивоа напуњености батерије је заснована на коришћењу уређаја"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Процењено преостало време"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"До потпуног пуњења"</string>
@@ -3061,6 +3065,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Цела актуелна реч и интеракција"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Једноставан говор у текст"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ова услуга гласовног уноса ће моћи уместо вас да обавља константно гласовно праћење и контролише апликације у којима је омогућен глас. Она је део апликације <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Желите ли да омогућите коришћење ове услуге?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Подешавања препознавања на уређају"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Препознавање на уређају"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Препознавање говора на уређају"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Жељени механизам"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Подешавања механизма"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Брзина и јачина говора"</string>
@@ -3457,6 +3464,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Избриши"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Све апликације и подаци у овој сесији ће бити избрисани."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Уклони"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Гост (ви)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Корисници"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Остали корисници"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Избриши активности госта"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Избришите све апликације и податке госта при излазу из режима госта"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Избрисаћете активности госта?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Апликације и подаци из ове сесије госта биће одмах избрисане, а све будуће активности госта биће избрисане сваки пут када изађете из режима госта"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Укључи телефонске позиве"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Укључи телефонске позиве и SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Избришите корисника"</string>
@@ -4051,15 +4065,15 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Сва обавештења апликације <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Сва обавештења апликације <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Прилагодљива обавештења"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> обавештење дневно</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> обавештења дневно</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> обавештења дневно</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Отприлике <xliff:g id="NUMBER_1">%,d</xliff:g> обавештење дневно</item>
+ <item quantity="few">Отприлике <xliff:g id="NUMBER_1">%,d</xliff:g> обавештења дневно</item>
+ <item quantity="other">Отприлике <xliff:g id="NUMBER_1">%,d</xliff:g> обавештења дневно</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> обавештење недељно</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> обавештења недељно</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> обавештења недељно</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Отприлике <xliff:g id="NUMBER_1">%,d</xliff:g> обавештење недељно</item>
+ <item quantity="few">Отприлике <xliff:g id="NUMBER_1">%,d</xliff:g> обавештења недељно</item>
+ <item quantity="other">Отприлике <xliff:g id="NUMBER_1">%,d</xliff:g> обавештења недељно</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Никад"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Обавештења на уређајима и у апликацијама"</string>
@@ -5339,7 +5353,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Не ради ништа"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Вибрирај"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Искључи звук"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Да бисте омогућили ово, прво промените опцију Притисните и задржите дугме за укључивање у мени дугмета за укључивање."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Да бисте омогућили ово, прво промените опцију Притисните и задржите дугме за укључивање у мени дугмета за укључивање."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Детаљи о мрежи"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Апликације на телефону могу да виде назив уређаја. И други људи могу да виде назив уређаја могу када се повежете са Bluetooth уређајима или WiFi мрежом или подесите WiFi хотспот."</string>
<string name="devices_title" msgid="649715719278562515">"Уређаји"</string>
@@ -5629,15 +5643,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"контроле уређаја"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Карте и картице"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"карте и картице"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Притисните и задржите дугме за укључивање"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Притисните и задржите за Помоћника"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Притисните и задржите мени дугмета за укључивање"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Онемогућено је притискање и задржавање"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Притисните и задржите дугме за укључивање"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Притисните и задржите дугме за укључивање ради приступа"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Мени дугмета за укључивање"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Дигитални помоћник"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Приступајте дигиталном помоћнику"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Приступајте менију дугмета за укључивање"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Да бисте ово користили, прво подесите закључавање екрана"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Задржите за Помоћник"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Покрените Помоћник тако што ћете задржати дугме за укључивање"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Мени дугмета за укључивање и за хитне случајеве:\nИстовремено притисните дугме за укључивање и дугме за појачавање звука."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Спречи звоњење:\nПречица је доступна у менију дугмета за јачину звука."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Мени дугмета за укључивање:\nПритисните дугме за укључивање и дугме за појачавање звука у исто време"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Спречите звоно:\nПритисните дугме за јачину звука ако желите пречицу"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Колико дуго да притиснете и задржите"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Прилагодите осетљивост тако што ћете одабрати колико дуго треба да се притиснете и задржите дугме за укључивање"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Кратко"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index b2b5cae..61b44c3 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"När barnet använder Pixel Imprint uppdateras fingeravtrycksmodellen med hjälp av bilder. De bilder som används för att skapa fingeravtrycksmodellen lagras aldrig, men fingeravtrycksmodellen lagras säkert på telefonen och lämnar den aldrig. All behandling görs säkert på telefonen."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Du kan radera fingeravtrycksbilderna och fingeravtrycksmodellen eller inaktivera fingeravtryckslås när du vill i inställningarna. Fingeravtrycksbilderna och fingeravtrycksmodellerna lagras på telefonen tills du raderar dem."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Du och ditt barn kan radera fingeravtrycksbilderna och fingeravtrycksmodellen eller inaktivera fingeravtryckslås när som helst i inställningarna. Fingeravtrycksbilderna och fingeravtrycksmodellerna lagras på telefonen tills du raderar dem."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefonen kan låsas upp oavsiktligt, t.ex. om någon håller den mot ditt finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefonen kan låsas upp oavsiktligt, t.ex. om någon håller den mot ditt finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Surfplattan kan låsas upp oavsiktligt, t.ex. om någon håller den mot ditt finger."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Enheten kan låsas upp oavsiktligt, t.ex. om någon håller den mot ditt finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Ditt barns telefon kan låsas upp oavsiktligt, till exempel om någon håller den mot ditt barnets finger."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Använd ett skärmskydd märkt Made for Google för bästa resultat. Fingeravtrycket kanske inte registreras med andra skärmskydd."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Använd ett skärmskydd märkt Made for Google för bästa resultat. Ditt barns fingeravtryck kanske inte registreras med andra skärmskydd."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Illustration med enheten och fingeravtryckssensorns plats"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Namn"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Försök igen"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Radera"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Tryck på sensorn"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Lägg fingret på sensorn och ta bort det när du känner en vibration"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Klar"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Hoppsan! Det där är inte sensorn"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Tryck på sensorn på mobilens baksida. Använd pekfingret."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Registreringen slutfördes inte"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Tidsgränsen för registreringen av fingeravtryck har uppnåtts. Försök igen."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Fingeravtryckskonfigurering nådde tidsgränsen"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Försök igen direkt eller konfigurera fingeravtryck senare i inställningarna"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Det gick inte att registrera fingeravtrycket. Försök igen eller använd ett annat finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Lägg till ännu ett"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Nästa"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Anpassa telefonen"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Testa olika format, bakgrunder med mera"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Skärmsläckare"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"skärmsläckare"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Använd skärmsläckare"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Vid laddning eller dockning"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Båda"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Vid laddning"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Vid dockning"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Aldrig"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Av"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Om du vill styra vad som händer när mobilen är dockad eller i viloläge aktiverar du skärmsläckaren."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Startas"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Aktuell skärmsläckare"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Inställningar"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Automatisk ljusstyrka"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Gå ur viloläget vid lyft"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Aktiv låsskärm"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Ange en pinkod"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Ange en pinkod för jobbet"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Ange ett mönster"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Stärk säkerheten genom att ställa in ett mönster för att låsa upp enheten"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Ställ in ett mönster för jobbet"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Lösenord krävs för fingeravtryck"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Rita mönster för fingeravtryck"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"App för nödsituationer"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Återställ appinställningarna"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Vill du återställa?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Detta återställer alla inställningar för:\n\n"<li>"Inaktiverade appar"</li>\n<li>"Inaktiverade appmeddelanden"</li>\n<li>"Standardappar för åtgärder"</li>\n<li>"Begränsningar av bakgrundsdata för appar"</li>\n<li>"Alla begränsningar av behörigheter"</li>\n\n"Ingen appdata försvinner."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Detta återställer alla inställningar för följande:\n\n"<li>"inaktiverade appar"</li>\n<li>"inaktiverade appaviseringar"</li>\n<li>"standardappar för åtgärder"</li>\n<li>"begränsningar i bakgrundsdata för appar"</li>\n<li>"begränsningar för alla behörigheter"</li>\n<li>"inställningar för batteriförbrukning."</li>\n\n"Ingen appdata försvinner."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Återställ appar"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Hantera utrymme"</string>
<string name="filter" msgid="9039576690686251462">"Filtrera"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Återställ inställningar"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Inställningarna för skärmstorlek och text har återställts"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Vill du återställa skärmstorlek och text?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Inställningarna för skärmstorlek och text återställs till telefonens standardinställningar"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Inställningarna för skärmstorlek och text återställs till telefonens standardinställningar"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Inställningarna för skärmstorlek och text återställs till surfplattans standardinställningar"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Återställ"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Några planer för helgen?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"På väg till stranden. Hänger du med?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Har inte använts sedan batteriet senast var fulladdat"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Har inte använts under de senaste 24 timmarna"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Andra användare"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Uppskattad återstående batteritid baseras på enhetsanvändningen"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Beräknad återstående tid"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Tills fulladdad"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Alla kommandoord och fullständig interaktion"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Enkelt tal till text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Den här röstinmatningstjänsten kan ha röstövervakning aktiverad hela tiden och styra röstaktiverade appar åt dig. Den kommer från <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Vill du aktivera tjänsten?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Inställningar för igenkänning på enheten"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Igenkänning på enheten"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Taligenkänning på enheten"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Prioriterad motor"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Inställningar för motor"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Talhastighet och tonhöjd"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Ta bort"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Alla appar och data i denna session kommer att raderas."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Ta bort"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Gäst (du)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Användare"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Andra användare"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Radera gästaktivitet"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Radera alla appar och all data för gästen när gästläget avslutas"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Vill du radera gästaktivitet?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Appar och data från den här gästsessionen raderas nu och i fortsättningen raderas all gästaktivitet när du avslutar gästläget"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Aktivera telefonsamtal"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Aktivera telefonsamtal och sms"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Radera användare"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Alla aviseringar från <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Alla aviseringar från <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Anpassade aviseringar"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">ca <xliff:g id="NUMBER_1">%,d</xliff:g> aviseringar om dagen</item>
- <item quantity="one">ca <xliff:g id="NUMBER_0">%d</xliff:g> avisering om dagen</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Cirka <xliff:g id="NUMBER_1">%,d</xliff:g> aviseringar per dag</item>
+ <item quantity="one">Cirka <xliff:g id="NUMBER_0">%d</xliff:g> avisering per dag</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">Ca <xliff:g id="NUMBER_1">%,d</xliff:g> aviseringar i veckan</item>
- <item quantity="one">Ca <xliff:g id="NUMBER_0">%d</xliff:g> avisering i veckan</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Cirka <xliff:g id="NUMBER_1">%,d</xliff:g> aviseringar per vecka</item>
+ <item quantity="one">Cirka <xliff:g id="NUMBER_0">%d</xliff:g> avisering per vecka</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Aldrig"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Enhets- och appaviseringar"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Gör ingenting"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Vibration"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Ljud av"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"För att aktivera ska du först ändra alternativet ”Håll strömbrytaren nedtryckt” till startmenyn."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"För att aktivera ändrar du först alternativet ”Håll strömbrytaren nedtryckt” till startmenyn."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Nätverksinformation"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Enhetens namn är synligt för appar i mobilen. Det kan också vara synligt för andra personer när du ansluter till Bluetooth-enheter eller ett wifi-nätverk, eller om du skapar en wifi-surfzon."</string>
<string name="devices_title" msgid="649715719278562515">"Enheter"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"enhetsstyrning"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kort och värdekort"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kort och värdekort"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Håll strömbrytaren nedtryckt"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Håll nedtryckt för att öppna assistenten"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Håll nedtryckt för att öppna startmenyn"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Funktionen håll nedtryckt har inaktiverats"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Håll strömbrytaren nedtryckt"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Håll strömbrytaren nere för att öppna"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Startmeny"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digital assistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Öppna digital assistent"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Öppna startmenyn"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Ställ först in ett skärmlås"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Håll ned för att öppna assistenten"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Öppna assistenten genom att hålla ned strömbrytaren"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Startmenyn och menyn för nödsituationer:\nTryck på strömbrytaren + höj volymen samtidigt"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Inaktivera ringsignal:\nEn genväg finns i volymmenyn."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Startmeny:\nTryck på strömbrytaren och knappen för att höja volymen samtidigt"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Inaktivera ringsignal:\nTryck på en volymknapp för att använda genvägen"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Längd på tryck"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Justera känsligheten genom att välja hur länge strömbrytaren ska hållas nedtryckt"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kort"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index d4d09f7..4605cfe 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Anapotumia Pixel Imprint, picha zinatumiwa ili kusasisha muundo wa alama ya kidole chake. Picha zinazotumiwa kuunda muundo wa alama ya kidole cha mtoto wako hazihifadhiwi, ila muundo wa alama ya kidole unahifadhiwa kwa njia salama na kusalia kwenye simu. Mchakato wote hufanyika kwenye simu kwa njia salama."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Unaweza kufuta muundo na picha za alama ya kidole chako, au uzime kipengele cha Kufungua kwa Alama ya Kidole wakati wowote katika Mipangilio. Miundo na picha za alama ya kidole zinahifadhiwa kwenye simu hadi utakapozifuta."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Wewe na mtoto wako mnaweza kufuta muundo na picha za alama ya kidole chake, au kuzima kipengele cha Kufungua kwa Alama ya Kidole wakati wowote katika Mipangilio. Miundo na picha za alama ya kidole zinahifadhiwa kwenye simu hadi utakapozifuta."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Simu yako inaweza kufunguliwa wakati hujakusudia, kama vile mtu mwingine akiishikilia kwenye kidole chako."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Simu yako inaweza kufunguliwa wakati hujakusudia, kama vile mtu mwingine akiishikilia kwenye kidole chako."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Kompyuta kibao yako inaweza kufunguliwa wakati hujakusudia, kama vile ikiwa mtu mwingine akiishikilia kwenye kidole chako."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Kifaa chako kinaweza kufunguliwa wakati hujakusudia, kama vile ikiwa mtu mwingine akikishikilia kwenye kidole chako."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Simu ya mtoto wako inaweza kufunguliwa wakati hajakusudia, kama vile mtu mwingine akiishikilia kwenye kidole chake."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Kwa matokeo bora, tumia ulinzi wa skrini ambao umethibitishwa na Made for Google. Ukitumia ulinzi mwingine wa skrini, alama yako ya kidole huenda isifanye kazi."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Kwa matokeo bora, tumia ulinzi wa skrini ambao umethibitishwa na Made for Google. Ukitumia ulinzi mwingine wa skrini, alama ya kidole ya mtoto wako huenda isifanye kazi."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Mchoro unaooyesha mahali kitambua alama ya kidole kilipo kwenye kifaa"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Jina"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"SAWA"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Jaribu tena"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Futa"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Gusa kitambua alama ya kidole"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Weka kidole chako juu ya kitambua alama kisha ukiinue baada ya kuhisi mtetemo"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Nimemaliza"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Lo, hicho si kitambuzi"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Gusa kitambua alama ya kidole kilicho nyuma ya simu yako. Tumia kidole chako cha shahada."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Usajili wako haujakamilika"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Muda wa kuweka alama ya kidole umekwisha. Jaribu tena."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Muda wa kuweka alama ya kidole umeisha"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Jaribu tena sasa au uweke mipangilio ya alama ya kidole chako baadaye katika Mipangilio"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Alama ya kidole haijawekwa. Jaribu tena au utumie kidole tofauti."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Ongeza kingine"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Endelea"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Weka mapendeleo kwenye simu yako"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Jaribu miundo, mandhari tofauti na zaidi"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Taswira ya skrini"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"taswira ya skrini"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Tumia taswira ya skrini"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Wakati imeunganishwa na kifaa kingine au inapochaji"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Yoyote kati ya hizi mbili"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Inapochaji"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Wakati imeunganishwa na kifaa kingine"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Isiwahi"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Imezimwa"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Ili udhibiti kinachotendeka wakati simu imeambatishwa na/au iko katika hali tuli, washa taswira ya skrini."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Ianze lini?"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Taswira ya skrini ya sasa"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Mipangilio"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Mwangaza wa kiotomatiki"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Inua ili uondoe kifaa katika hali tuli"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Onyesho tulivu"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Weka PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Weka PIN ya wasifu wa kazini"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Weka mchoro"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Ili kuimarisha usalama, weka mchoro wa kufungua kifaa"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Weka mchoro wa wasifu wa kazini"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Weka nenosiri ili utumie alama ya kidole"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Weka mchoro ili utumie alama ya kidole"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Programu ya dharura"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Badilisha mapendeleo ya programu"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Ungependa kubadilisha mapendeleo ya programu?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Hatua hii itaweka upya mapendeleo yote ya:\n\n"<li>"Programu zilizozimwa"</li>\n<li>"Arifa za programu zilizozimwa"</li>\n<li>"Programu chaguomsingi za vitendo"</li>\n<li>"Udhibiti wa data ya chinichini katika programu"</li>\n<li>"Udhibiti wowote wa ruhusa"</li>\n\n"Hutapoteza data yoyote ya programu."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Hatua hii itaweka upya mapendeleo yote ya:\n\n"<li>"Programu zilizozimwa"</li>\n<li>"Arifa za programu zilizozimwa"</li>\n<li>"Programu chaguomsingi za vitendo"</li>\n<li>"Udhibiti wa data ya chinichini katika programu"</li>\n<li>"Udhibiti wowote wa ruhusa"</li>\n<li>"Mipangilio ya Matumizi ya betri"</li>\n\n"Hutapoteza data yoyote ya programu."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Weka upya"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Dhibiti nafasi"</string>
<string name="filter" msgid="9039576690686251462">"Kichujio"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Badilisha mipangilio"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Mipangilio ya ukubwa wa skrini na maandishi imebadilishwa"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Ungependa kubadilisha ukubwa wa skrini na maandishi?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Mapendeleo ya maandishi na ukubwa wa skrini yako yatarejeshwa kwenye mipangilio halisi ya simu"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Mapendeleo ya maandishi na ukubwa wa skrini yako yatarejeshwa kwenye mipangilio halisi ya simu"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Mapendeleo yako ya maandishi na ukubwa wa skrini yatarejeshwa katika mipangilio halisi ya kompyuta kibao"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Badilisha"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Una mipango yoyote ya wikendi?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Ninaelekea ufukweni. Ungependa kuja?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Haijatumika tangu ilipojazwa chaji mara ya mwisho"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Haijatumika katika saa 24 zilizopita"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Watumiaji wengine"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Kadirio la chaji ya betri iliyosalia linategemea matumizi ya kifaa chako"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Kadirio la muda uliosalia"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Hadi chaji ijae"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Neno tekelezi na mwingiliano kamilifu"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Huduma rahisi ya kunakili yanayotamkwa"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Huduma hii ya kuweka data kwa kutamka itakuwa na uwezo wa kutekeleza ufuatiliaji wa hali ya kuwashwa muda wote na kudhibiti programu zinazowashwa kwa sauti kwa niaba yako. Inatoka katika programu ya <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Ungependa kuwasha huduma hii kwa matumizi?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Mipangilio ya utambuzi kwenye kifaa"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Utambuzi kwenye kifaa"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Utambuzi wa matamshi kwenye kifaa"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Mtambo unaopendelewa"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Mipangilio ya Injini"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Kasi na kiwango cha matamshi"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Futa"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Data na programu zote katika kipindi hiki zitafutwa."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Ondoa"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Mgeni (Wewe)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Watumiaji"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Watumiaji wengine"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Futa shughuli za mgeni"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Futa programu na data yote ya mgeni pale unapofunga matumizi ya wageni"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Ungependa kufuta shughuli za mgeni?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Programu na data kutoka kwenye kipindi hiki cha mgeni itafutwa sasa na kila shughuli ya mgeni ya baadaye itafutwa kila mara unapofunga matumizi ya wageni"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Ruhusu upigaji simu"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Washa kipengele cha SMS na kupiga simu"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Futa mtumiaji"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Arifa zote za \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Arifa zote za <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Arifa Zinazojirekebisha"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">Takriban arifa <xliff:g id="NUMBER_1">%,d</xliff:g> kwa siku</item>
- <item quantity="one">Takriban arifa <xliff:g id="NUMBER_0">%d</xliff:g> kwa siku</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Kuhusu arifa <xliff:g id="NUMBER_1">%,d</xliff:g> kwa siku</item>
+ <item quantity="one">Kuhusu arifa <xliff:g id="NUMBER_0">%d</xliff:g> kwa siku</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">Takriban arifa <xliff:g id="NUMBER_1">%,d</xliff:g> kwa wiki</item>
- <item quantity="one">Takriban arifa <xliff:g id="NUMBER_0">%d</xliff:g> kwa wiki</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Kuhusu arifa <xliff:g id="NUMBER_1">%,d</xliff:g> kwa wiki</item>
+ <item quantity="one">Kuhusu arifa <xliff:g id="NUMBER_0">%d</xliff:g> kwa wiki</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Kamwe"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Arifa za programu na vifaa"</string>
@@ -5256,7 +5270,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Isifanye chochote"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Tetema"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Zima sauti"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Ili uwashe, kwanza badilisha \"Kitufe cha kuwasha/kuzima cha kubonyeza na kushikilia\" kiwe menyu ya kuzima/kuwasha."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Ili uwashe, kwanza badilisha \"Kitufe cha kuwasha/kuzima cha kubonyeza na kushikilia\" kiwe menyu ya kuzima/kuwasha."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Maelezo ya mtandao"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Jina la kifaa chako litaonekana kwa programu zilizo kwenye simu yako. Pia, watu wengine wanaweza kuliona unapounganisha kwenye vifaa vya Bluetooth, unapounganisha kwenye mtandao wa Wi-Fi au kuweka mipangilio ya mtandao pepe wa Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Vifaa"</string>
@@ -5543,15 +5557,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"vidhibiti vya vifaa"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kadi na pasi"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kadi na pasi"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Bonyeza na ushikilie kitufe cha kuwasha/kuzima"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Bonyeza na ushikilie kitufe ili upate programu ya Mratibu"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Bonyeza na ushikilie ili upate menyu ya kuwasha/kuzima"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Kitufe cha kubonyeza na kushikilia kimezimwa"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Bonyeza na ushikilie kitufe cha kuwasha/kuzima"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Bonyeza na ushikilie kitufe cha kuwasha au kuzima ili ufikie"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Menyu ya kuzima au kuwasha"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Mratibu dijitali"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Fikia mratibu dijitali"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Fikia menyu ya kuzima/kuwasha"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Ili utumie, weka mbinu ya kufunga skrini kwanza"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Shikilia ili ufungue programu ya Mratibu"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Anzisha programu ya Mratibu kwa kushikilia kitufe cha kuwasha/kuzima"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menyu ya Dharura na ya Kuzima/Kuwasha:\nBonyeza Kuongeza Sauti na Kuzima/Kuwasha kwa wakati mmoja."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Zuia mlio:\nNjia ya mkato inapatikana katika menyu ya sauti."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Menyu ya kuzima/kuwasha:\nBonyeza kitufe cha kuwasha/kuzima na kitufe cha kuongeza sauti kwa wakati mmoja"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Zuia mlio: \n Bonyeza kitufe cha sauti ili utumie njia ya mkato"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Muda wa kubonyeza na kushikilia"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Rekebisha kiwango cha hisi kwa kuchagua muda wa kubonyeza na kushikilia kitufe cha kuwasha/kuzima"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Mfupi"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index f43243a..b50e23b 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Pixel Imprint அம்சத்தைப் பயன்படுத்தும்போது அவரின் கைரேகைப் பதிவைப் புதுப்பிக்க படங்கள் பயன்படுத்தப்படும். உங்கள் பிள்ளையின் கைரேகைப் பதிவை உருவாக்கப் பயன்படுத்தப்படும் படங்கள் ஒருபோதும் சேமிக்கப்படாது. ஆனால் கைரேகைப் பதிவு மொபைலில் பாதுகாப்பாகச் சேமிக்கப்படும், அது யாருடனும் பகிரப்படாது. அனைத்துச் செயலாக்கங்களும் மொபைலில் பாதுகாப்பாக நடைபெறும்."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"அமைப்புகளில் எப்போது வேண்டுமானாலும் கைரேகைப் படங்களையும் பதிவையும் நீக்கலாம், ‘கைரேகை அன்லாக்’ அம்சத்தை முடக்கலாம். கைரேகைப் படங்களையும் பதிவுகளையும் நீங்கள் நீக்கும்வரை உங்கள் மொபைலில் அவை பாதுகாப்பாகச் சேமிக்கப்படும்."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"அமைப்புகளில் எப்போது வேண்டுமானாலும் நீங்களும் உங்கள் பிள்ளையும் அவரின் கைரேகைப் படங்களையும் பதிவுகளையும் நீக்கலாம், கைரேகை அன்லாக் அம்சத்தை முடக்கலாம். நீக்கப்படும் வரை கைரேகைப் படங்களும் பதிவுகளும் மொபைலிலேயே சேமிக்கப்பட்டிருக்கும்."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"மொபைலை அன்லாக் செய்யும் எண்ணம் உங்களுக்கு இல்லாதபோதும் அது திறக்கக்கூடும். உதாரணமாக, வேறொருவர் உங்கள் விரலில் மொபைல் சென்சாரை வைத்துத் திறக்கலாம்."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"மொபைலை அன்லாக் செய்யும் எண்ணம் உங்களுக்கு இல்லாதபோதும் அது திறக்கக்கூடும். உதாரணமாக, வேறொருவர் உங்கள் விரலில் மொபைல் சென்சாரை வைத்துத் திறக்கலாம்."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"டேப்லெட்டை அன்லாக் செய்யும் எண்ணம் உங்களுக்கு இல்லாதபோதும் அது அன்லாக் செய்யப்படலாம் (வேறொருவர் உங்கள் விரலுக்கு அருகில் டேப்லெட்டைப் பிடித்திருப்பது போன்ற சமயங்களில்)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"சாதனத்தை அன்லாக் செய்யும் எண்ணம் உங்களுக்கு இல்லாதபோதும் அது அன்லாக் செய்யப்படலாம் (வேறொருவர் உங்கள் விரலுக்கு அருகில் மொபைலைப் பிடித்திருப்பது போன்ற சமயங்களில்)."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"மொபைலை அன்லாக் செய்யும் எண்ணம் உங்கள் பிள்ளைக்கு இல்லாதபோதும் அது அன்லாக் ஆகக்கூடும். உதாரணமாக, வேறொருவர் உங்கள் பிள்ளையின் விரலுக்கு நேரே மொபைலைக் காட்டி அதை அன்லாக் செய்யலாம்."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"சிறந்த முடிவுகளுக்கு, Made for Google சான்றளிக்கப்பட்ட ஸ்கிரீன் கார்டைப் பயன்படுத்துங்கள். உங்கள் கைரேகை மற்ற ஸ்கிரீன் கார்டுகளுடன் பொருந்தாமல் போகக்கூடும்."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"சிறந்த முடிவுகளுக்கு, Made for Google சான்றளிக்கப்பட்ட ஸ்கிரீன் கார்டைப் பயன்படுத்துங்கள். உங்கள் பிள்ளையின் கைரேகை மற்ற ஸ்கிரீன் கார்டுகளுடன் பொருந்தாமல் போகக்கூடும்."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"சாதனத்தில் கைரேகை சென்சார் அமைந்துள்ள இடத்தின் விளக்கப்படம்"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"பெயர்"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"சரி"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"மீண்டும் முயல்க"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"நீக்கு"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"சென்சாரைத் தொடவும்"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"விரலை சென்சாரில் வைத்து, அதிர்வை உணர்ந்த பின்னர் விரலை எடுக்கவும்"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"முடிந்தது"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"அச்சச்சோ, அது சென்சார் இல்லை"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"ஆள்காட்டி விரலால் சென்சாரைத் தொடவும்."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"பதிவுசெய்ய முடியவில்லை"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"கைரேகையைப் பதிவுசெய்வதற்கான நேரம் முடிந்தது. மீண்டும் முயற்சிக்கவும்."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"கைரேகை அமைவுக்கான நேரம் முடிந்துவிட்டது"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"இப்போதே மீண்டும் முயற்சி செய்யவும் அல்லது அமைப்புகளில் உங்கள் கைரேகையைப் பின்னர் அமைக்கவும்"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"கைரேகையைப் பதிவுசெய்ய முடியவில்லை. மீண்டும் முயற்சிக்கவும் அல்லது வேறு விரலைப் பயன்படுத்தவும்."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"மற்றொன்றைச் சேர்"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"அடுத்து"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"மொபைலைப் பிரத்தியேகமாக்கல்"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"மாறுபட்ட ஸ்டைல்கள், வால்பேப்பர்கள் மற்றும் பலவற்றை முயல்க"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"ஸ்கிரீன் சேவர்"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ஸ்கிரீன் சேவர்"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"ஸ்கிரீன் சேவரை உபயோகித்தல்"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"இரண்டின் போதும்"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"இவற்றில் ஒன்று"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"சார்ஜ் செய்யப்படும்போது"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"சாதனத்தில் இணைந்திருக்கும்போது"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ஒருபோதும் வேண்டாம்"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ஆஃப்"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"மொபைல் உறக்கநிலையில் அல்லது சார்ஜாகும்போது, நிகழ்வுகளைக் கட்டுப்படுத்த பகல்கனாவை இயக்கு."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"தொடங்க வேண்டிய நேரம்"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"தற்போதைய ஸ்கிரீன் சேவர்"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"அமைப்பு"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"தானாக ஒளிர்வைச் சரிசெய்தல்"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"விரலை எடுக்கும் போது இயங்கு"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"சூழல்சார் திரை"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"பின்னை அமையுங்கள்"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"பணிக்கான பின்னை அமையுங்கள்"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"பேட்டர்னை அமையுங்கள்"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"கூடுதல் பாதுகாப்பிற்கு, சாதனத்தை அன்லாக் செய்வதற்கான பேட்டர்னை அமைக்கவும்"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"பணிக்கான பேட்டர்னை அமையுங்கள்"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"கடவுச்சொல்லை அமைக்கவும்"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"வடிவத்தை அமைக்கவும்"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"அவசரப் ஆப்ஸ்"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"ஆப்ஸ் அமைப்பை மீட்டமை"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"அமைப்பை மீட்டமைக்கவா?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"பின்வரும் விருப்பத்தேர்வுகளை இது மீட்டமைக்கும்:\n\n"<li>"முடக்கப்பட்டுள்ள ஆப்ஸ்"</li>\n<li>"முடக்கப்பட்டுள்ள ஆப்ஸ் அறிவிப்புகள்"</li>\n<li>"செயல்பாடுகளுக்கான இயல்புநிலை ஆப்ஸ்"</li>\n<li>"ஆப்ஸிற்கான பின்புலத் தரவுக் கட்டுப்பாடுகள்"</li>\n<li>"ஏதேனும் அனுமதிக் கட்டுப்பாடுகள்"</li>\n\n"இதன் காரணமாக எந்த ஆப்ஸ் தரவையும் இழக்கமாட்டீர்கள்."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"இது பின்வருபவற்றின் விருப்பத்தேர்வுகள் அனைத்தையும் மீட்டமைக்கும்:\n\n"<li>"முடக்கப்பட்ட ஆப்ஸ்"</li>\n<li>"முடக்கப்பட்ட ஆப்ஸின் அறிவிப்புகள்"</li>\n<li>"செயல்பாடுகளுக்கான இயல்புநிலை ஆப்ஸ்"</li>\n<li>"ஆப்ஸுக்கான பின்புலத் தரவுக் கட்டுப்பாடுகள்"</li>\n<li>"அனைத்து அனுமதிக் கட்டுப்பாடுகளும்"</li>\n<li>"பேட்டரி உபயோக அமைப்புகள்"</li>\n\n"எந்த ஆப்ஸ் தரவையும் இழக்கமாட்டீர்கள்."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"ஆப்ஸை மீட்டமை"</string>
<string name="manage_space_text" msgid="9013414693633572277">"காலி இடத்தை நிர்வகி"</string>
<string name="filter" msgid="9039576690686251462">"வடிகட்டு"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"அமைப்புகளை ரீசெட் செய்தல்"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"காட்சி அளவும் வார்த்தை அமைப்புகளும் ரீசெட் செய்யப்பட்டன"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"காட்சியின் அளவையும் வார்த்தைகளுக்கான விருப்பத்தேர்வுகளையும் ரீசெட் செய்யவா?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"உங்கள் காட்சியின் அளவும் வார்த்தைகளுக்கான விருப்பத்தேர்வுகளும் மொபைலின் அசல் அமைப்புகளுக்கு ரீசெட் செய்யப்படும்"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"உங்கள் காட்சியின் அளவும் வார்த்தைகளுக்கான விருப்பத்தேர்வுகளும் மொபைலின் அசல் அமைப்புகளுக்கு ரீசெட் செய்யப்படும்"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"உங்கள் காட்சியளவும் வார்த்தைகளுக்கான விருப்பத்தேர்வுகளும் டேப்லெட்டின் அசல் அமைப்புகளுக்கு ரீசெட் செய்யப்படும்"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"ரீசெட் செய்"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"வாரயிறுதி நாட்களில் ஏதேனும் திட்டங்கள் உள்ளதா?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"கடற்கரைக்குச் செல்கிறோம். நீங்களும் வருகிறீர்களா?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"கடந்த முறை முழு சார்ஜ் ஆனதிலிருந்து எந்த உபயோகமும் இல்லை"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"கடந்த 24 மணிநேரத்தில் எந்த உபயோகமும் இல்லை"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"பிற பயனர்கள்"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"சாதனத்தை உபயோகிப்பதன் அடிப்படையில், மீதமுள்ள பேட்டரியின் தோராய அளவு கணக்கிடப்படுகிறது"</string>
<string name="estimated_time_left" msgid="948717045180211777">"கணக்கிடப்பட்ட மீதமுள்ள நேரம்"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"முழு சார்ஜ் ஆக"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"முழுக் குறிப்பிட்ட சொல்லும் ஊடாடுதலும்"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"எளிய பேச்சிலிருந்து உரை"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"குரல் உள்ளீட்டு சேவையால் தொடர்ச்சியாக குரலைக் கண்காணிக்க முடியும், உங்கள் சார்பாக குரல் வசதி இயக்கப்பட்ட ஆப்ஸ்களை உங்கள் சார்பாக கட்டுப்படுத்தவும் முடியும். <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ஆப்ஸ் வழங்குகிறது. இந்தச் சேவையை இயக்கி, பயன்படுத்தவா?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"சாதனத்தில் கண்டறிதல் அமைப்புகள்"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"சாதனத்தில் கண்டறிதல்"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"சாதனத்தில் பேச்சு அறிதல்"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"விருப்பத்தேர்வு"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"இன்ஜின் அமைப்புகள்"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"பேச்சு வீதமும் குரல் அழுத்தமும்"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"நீக்கு"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"இந்த அமர்வின் எல்லா பயன்பாடுகளும், தரவும் நீக்கப்படும்."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"அகற்று"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"கெஸ்ட் (நீங்கள்)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"பயனர்கள்"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"பிற பயனர்கள்"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"கெஸ்ட் செயல்பாடுகளை நீக்குதல்"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"கெஸ்ட் பயன்முறையிலிருந்து வெளியேறும்போது கெஸ்ட் அமர்வின் ஆப்ஸ் மற்றும் தரவு அனைத்தும் நீக்கப்படும்"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"கெஸ்ட் செயல்பாடுகளை நீக்கவா?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"இந்த கெஸ்ட் அமர்வின் ஆப்ஸும் தரவும் இப்போது நீக்கப்படும். இனி கெஸ்ட் பயன்முறையிலிருந்து வெளியேறும் ஒவ்வொரு முறையும் கெஸ்ட் செயல்பாடுகள் நீக்கப்படும்"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ஃபோன் அழைப்புகளை இயக்கு"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ஃபோன் அழைப்புகள் & SMSஐ இயக்கு"</string>
<string name="user_remove_user" msgid="8468203789739693845">"பயனரை நீக்குதல்"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"அனைத்து \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" அறிவிப்புகளும்"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"அனைத்து <xliff:g id="APP_NAME">%1$s</xliff:g> அறிவிப்புகளும்"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"சூழலுக்கேற்ற அறிவிப்புகள்"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> அறிவிப்புகள் / நாள்</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> அறிவிப்பு / நாள்</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">ஒரு நாளுக்குச் சுமார் <xliff:g id="NUMBER_1">%,d</xliff:g> அறிவிப்புகள்</item>
+ <item quantity="one">ஒரு நாளுக்குச் சுமார் <xliff:g id="NUMBER_0">%d</xliff:g> அறிவிப்பு</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> அறிவிப்புகள் / வாரம்</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> அறிவிப்பு / வாரம்</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">ஒரு வாரத்திற்குச் சுமார் <xliff:g id="NUMBER_1">%,d</xliff:g> அறிவிப்புகள்</item>
+ <item quantity="one">ஒரு வாரத்திற்குச் சுமார் <xliff:g id="NUMBER_0">%d</xliff:g> அறிவிப்பு</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"ஒருபோதும் அனுப்பியதில்லை"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"சாதனம் & ஆப்ஸ் அறிவிப்புகள்"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"எதுவும் செய்ய வேண்டாம்"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"அதிர்வு"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"ஒலியடக்கு"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"இயக்க, \"பவர் பட்டனை அழுத்திப் பிடித்திருக்கவும்\" என்பதைப் பவர் மெனுவில் மாற்றுங்கள்."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"இயக்க, \"பவர் பட்டனை அழுத்திப் பிடித்திருக்கவும்\" என்பதைப் பவர் மெனுவில் மாற்றுங்கள்."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"நெட்வொர்க் விவரங்கள்"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"உங்கள் மொபைலில் உள்ள ஆப்ஸால் உங்கள் சாதனத்தின் பெயரைப் பார்க்க முடியும். புளூடூத் சாதனங்கள், வைஃபை நெட்வொர்க் ஆகியவற்றுடன் இணைக்கும்போதோ வைஃபை ஹாட்ஸ்பாட்டை அமைக்கும்போதோ அப்பெயர் பிறருக்கும் காட்டப்படக்கூடும்."</string>
<string name="devices_title" msgid="649715719278562515">"சாதனங்கள்"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"சாதனக் கட்டுப்பாடுகள்"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"கார்டுகளும் பாஸ்களும்"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"கார்டுகளும் பாஸ்களும்"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"பவர் பட்டனை அழுத்திப் பிடித்தல்"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistantடை இயக்க அழுத்திப் பிடித்திருக்கவும்"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"பவர் மெனு தோன்றுவதற்கு அழுத்திப் பிடித்திருக்கவும்"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Assistantடை முடக்க அழுத்திப் பிடித்திருக்கவும்"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"பவர் பட்டனை அழுத்திப் பிடித்திருக்கவும்"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"அணுக, பவர் பட்டனை அழுத்திப் பிடியுங்கள்"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"பவர் மெனு"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"டிஜிட்டல் அசிஸ்டண்ட்"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"டிஜிட்டல் அசிஸ்டண்ட்டை அணுகுங்கள்"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"பவர் மெனுவை அணுகுங்கள்"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"பயன்படுத்த முதலில் திரைப்பூட்டை அமைக்கவும்"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistantடிற்காக அழுத்திப் பிடித்தல்"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"பவர் பட்டனை அழுத்திப் பிடித்து Assistantடைத் தொடங்கலாம்"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"பவர் மற்றும் அவசரகால மெனு:\nபவர் பட்டனையும் ஒலியளவை அதிகரிக்கும் பட்டனையும் ஒன்றாக அழுத்தவும்."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"ஒலிப்பதைத் தடுத்தல்:\nஇதற்கான ஷார்ட்கட் ஒலியளவு மெனுவில் உள்ளது."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"பவர் மெனு:\nபவர் பட்டனையும் ஒலியளவை அதிகரிக்கும் பட்டனையும் ஒன்றாக அழுத்தவும்"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"ஒலிப்பதைத் தடுத்தல்:\nஷார்ட்கட்டிற்கு ஒலியளவு பட்டனை அழுத்தவும்"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"அழுத்திப் பிடிப்பதற்கான கால அளவு"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"எவ்வளவு நேரம் பவர் பட்டனை அழுத்திப் பிடிக்க வேண்டும் என்பதைத் தேர்ந்தெடுப்பதன் மூலம் உணர்திறனைச் சரிசெய்யலாம்"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"குறைந்தபட்சம்"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 9338fdf..5ea3c56 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"వారు Pixel Imprintను ఉపయోగించినప్పుడు, వారి వేలిముద్ర మోడల్ను అప్డేట్ చేయడానికి ఇమేజ్లు ఉపయోగించబడతాయి. మీ చిన్నారి వేలిముద్ర మోడల్ను క్రియేట్ చేయడానికి ఉపయోగించే ఇమేజ్లు ఎప్పుడూ స్టోర్ చేయబడవు, కానీ వేలిముద్ర మోడల్ ఫోన్లో సురక్షితంగా స్టోర్ చేయబడుతుంది, ఫోన్ నుండి బయటకు పంపబడదు. మొత్తం ప్రాసెస్ విధానం ఫోన్లో సురక్షితంగా జరుగుతుంది."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"మీరు సెట్టింగ్లలో ఎప్పుడైనా మీ వేలిముద్ర ఇమేజ్లను, మోడల్ను తొలగించవచ్చు లేదా \'వేలిముద్ర అన్లాక్\'ను ఆఫ్ చేయవచ్చు. వేలిముద్ర ఇమేజ్లు, మోడల్లు మీరు వాటిని తొలగించే వరకు ఫోన్లో స్టోర్ చేయబడతాయి."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"మీరు మరియు మీ చిన్నారి వారి వేలిముద్ర ఇమేజ్లను, మోడల్ను తొలగించవచ్చు లేదా సెట్టింగ్లలో ఎప్పుడైనా వేలిముద్ర అన్లాక్ను ఆఫ్ చేయవచ్చు. వేలిముద్ర ఇమేజ్లు అలాగే మోడల్లు తొలగించబడే వరకు ఫోన్లో స్టోర్ చేయబడతాయి."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"మీరు అనుకోని సందర్భాలలో కూడా, మీ వేలి వద్దకు స్క్రీన్ను తీసుకురావడం ద్వారా ఇతరులు కూడా అన్లాక్ చేయగలుగుతారు."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"మీరు అనుకోని సందర్భాలలో కూడా, మీ వేలి వద్దకు స్క్రీన్ను తీసుకురావడం ద్వారా ఇతరులు కూడా అన్లాక్ చేయగలుగుతారు."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"మీ టాబ్లెట్ను మీరు అన్లాక్ చేయకూడదనుకున్నప్పుడు కూడా ఎవరైనా దానిని మీ వేలి వద్దకు స్క్రీన్ను తీసుకురావడం ద్వారా అన్లాక్ చేయవచ్చు."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"మీ పరికరాన్ని మీరు అన్లాక్ చేయకూడదనుకున్నప్పుడు కూడా ఎవరైనా దానిని మీ వేలి వద్దకు స్క్రీన్ను తీసుకురావడం ద్వారా అన్లాక్ చేయవచ్చు."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"కొంతమంది వారి వేలిని పట్టుకొని దాని దగ్గరకు తీసుకొచ్చినట్లు, మీ చిన్నారి ఫోన్ను ఉద్దేశం లేకపోయినప్పటికీ అన్లాక్ చేసే అవకాశం ఉండవచ్చు."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"ఉత్తమ ఫలితాల కోసం, Google చేత సర్టిఫైడ్ చేయబడి తయారు చేయబడిన స్క్రీన్ ప్రొటెక్టర్ను ఉపయోగించండి. ఇతర స్క్రీన్ ప్రొటెక్టర్లతో, మీ వేలిముద్ర పని చేయకపోవచ్చు."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"ఉత్తమ ఫలితాల కోసం, Google చేత సర్టిఫైడ్ చేయబడి తయారు చేయబడిన స్క్రీన్ ప్రొటెక్టర్ను ఉపయోగించండి. ఇతర స్క్రీన్ ప్రొటెక్టర్లతో, మీ పిల్లల వేలిముద్ర పని చేయకపోవచ్చు."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"పరికరం మరియు వేలిముద్ర సెన్సార్ లొకేషన్తో చిత్రపటం"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"పేరు"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"సరే"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"మళ్లీ ట్రై చేయండి"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"తొలగించండి"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"సెన్సార్ని తాకండి"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"మీ వేలిని సెన్సార్పై ఉంచి, మీకు వైబ్రేషన్ అనుభూతి కలిగిన తర్వాత దాన్ని తీసివేయండి"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"పూర్తయింది"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"అయ్యో, అది సెన్సార్ కాదు"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"మీ ఫోన్ వెనుక ఉన్న సెన్సార్ని తాకండి. మీ చూపుడు వేలిని వాడండి."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"ఎన్రోల్మెంట్ పూర్తి కాలేదు"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"వేలిముద్ర నమోదు సమయ పరిమితి చేరుకుంది. మళ్లీ ప్రయత్నించండి."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"వేలిముద్ర సెటప్ సమయం ముగిసింది"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ఇప్పుడు మళ్లీ ట్రై చేయండి లేదా సెట్టింగ్లలో మీ వేలిముద్రను తర్వాత సెటప్ చేయండి"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"వేలిముద్ర నమోదు పని చేయలేదు. మళ్లీ ప్రయత్నించండి లేదా మరొక వేలిని ఉపయోగించండి."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"మరొకటి జోడించు"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"తర్వాత"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"మీ ఫోన్ను అనుకూలంగా మార్చండి"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"వివిధ శైలులు, వాల్పేపర్లు, మరిన్నింటిని ప్రయత్నించండి"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"స్క్రీన్ సేవర్"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"స్క్రీన్ సేవర్"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"స్క్రీన్ సేవర్ను ఉపయోగించండి"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ఛార్జ్ చేసేటప్పుడు లేదా డాక్ చేసినప్పుడు"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"పై రెండు సందర్భాల్లోనూ"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ఛార్జింగ్లో ఉన్నప్పుడు"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"డాక్ చేయబడినప్పుడు"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ఎప్పటికీ వద్దు"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ఆఫ్లో ఉంది"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"ఫోన్ డాక్ చేయబడినప్పుడు మరియు/లేదా నిద్రావస్థలో ఉన్నప్పుడు ఏమి జరగాలో నియంత్రించడానికి, స్క్రీన్ సేవర్ను ఆన్ చేయండి."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"ఎప్పుడు ప్రారంభించాలి"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"ప్రస్తుత స్క్రీన్ సేవర్"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"సెట్టింగ్లు"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ఆటోమేటిక్ ప్రకాశం"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"సక్రియం చేయడానికి వేళ్లను తీసివేయండి"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"యాంబియంట్ డిస్ప్లే"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PINను సెట్ చేయండి"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"వర్క్ PINను సెట్ చేయండి"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"ఆకృతిని సెట్ చేయండి"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"అదనపు సెక్యూరిటీ కోసం, పరికరాన్ని అన్లాక్ చేయడానికి ఆకృతిని సెట్ చేయండి"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"వర్క్ ఆకృతిని సెట్ చేయండి"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"వేలిముద్ర కోసం పాస్వర్డ్ సెట్ చేయండి"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"వేలిముద్రకు ఆకృతి సెట్ చేయండి"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"అత్యవసర యాప్"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"యాప్ ప్రాధాన్యతలను రీసెట్ చేయి"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"యాప్ ప్రాధాన్యతలను రీసెట్ చేయాలా?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"ఇది వీటి కోసం అన్ని ప్రాధాన్యతలను రీసెట్ చేస్తుంది:\n\n"<li>"డిజేబుల్ చేయబడిన యాప్లు"</li>\n<li>"డిజేబుల్ చేయబడిన యాప్ నోటిఫికేషన్లు"</li>\n<li>"చర్యల కోసం ఆటోమేటిక్ యాప్లు"</li>\n<li>"యాప్ల కోసం బ్యాక్గ్రౌండ్ డేటా పరిమితులు"</li>\n<li>"ఏవైనా అనుమతి పరిమితులు"</li>\n\n"మీరు ఏ యాప్ డేటానూ కోల్పోరు."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"ఇది వీటి కోసం అన్ని ప్రాధాన్యతలను రీసెట్ చేస్తుంది:\n\n"<li>"డిజేబుల్ చేయబడిన యాప్లు"</li>\n<li>"డిజేబుల్ చేయబడిన యాప్ నోటిఫికేషన్లు"</li>\n<li>"చర్యల కోసం ఆటోమేటిక్ యాప్లు"</li>\n<li>"యాప్ల కోసం బ్యాక్గ్రౌండ్ డేటా పరిమితులు"</li>\n<li>"ఏవైనా అనుమతి పరిమితులు"</li>\n<li>"బ్యాటరీ వినియోగం సెట్టింగ్లు"</li>\n\n"మీరు ఏ యాప్ డేటాను కోల్పోరు."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"యాప్లను రీసెట్ చేయి"</string>
<string name="manage_space_text" msgid="9013414693633572277">"స్పేస్ను మేనేజ్ చేయండి"</string>
<string name="filter" msgid="9039576690686251462">"ఫిల్టర్ చేయి"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"సెట్టింగ్స్ రీసెట్ చేయండి"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"డిస్ప్లే సైజ్, టెక్స్ట్ సెట్టింగ్లు రీసెట్ చేయబడ్డాయి"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"డిస్ప్లే సైజు, టెక్స్ట్ను రీసెట్ చేయాలా?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"మీ డిస్ప్లే సైజు, టెక్స్ట్ ప్రాధాన్యతలు ఫోన్ అసలు సెట్టింగ్లకు రీసెట్ చేయబడతాయి"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"మీ డిస్ప్లే సైజు, టెక్స్ట్ ప్రాధాన్యతలు ఫోన్ అసలు సెట్టింగ్లకు రీసెట్ చేయబడతాయి"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"మీ డిస్ప్లే సైజ్, టెక్స్ట్ ప్రాధాన్యతలు, టాబ్లెట్ ఒరిజినల్ సెట్టింగ్లకు రీసెట్ చేయబడతాయి"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"రీసెట్ చేయండి"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"వారాంతపు ప్లాన్లు ఏమైనా ఉన్నాయా?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"బీచ్ వైపు వెళ్తున్నాను. నాతో పాటు వస్తారా?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"చివరిగా పూర్తి ఛార్జింగ్ చేసినప్పటి నుండి ఎలాంటి వినియోగం లేదు"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"గత 24 గంటల నుండి ఎలాంటి వినియోగం లేదు"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"ఇతర యూజర్లు"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"పరికరం వినియోగాన్ని బట్టి మిగిలి ఉన్న బ్యాటరీ అంచనా వేయబడుతుంది"</string>
<string name="estimated_time_left" msgid="948717045180211777">"అంచనా వేసిన సమయం మిగిలి ఉంది"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"పూర్తిగా ఛార్జ్ కావడానికి పట్టే సమయం"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"పూర్తి హాట్వర్డ్ మరియు పరస్పర చర్య"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"సరళ ప్రసంగ-వచన రూపం"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"ఈ వాయిస్ ఇన్పుట్ సర్వీస్ ఎల్లప్పుడూ ఆన్లో ఉండే వాయిస్ పర్యవేక్షణని అమలు చేయగలదు అలాగే మీ తరపున వాయిస్ ప్రారంభిత యాప్లను కంట్రోల్ చేయగలదు. ఇది <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> యాప్ నుండి అందించబడుతుంది. ఈ సర్వీస్ వినియోగాన్ని ప్రారంభించాలా?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"పరికరంలో స్పీచ్ రికగ్నిషన్ సెట్టింగ్లు"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"పరికరంలో రికగ్నిషన్"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"పరికరంలో స్పీచ్ రికగ్నిషన్"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"ప్రాధాన్య ఇంజిన్"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"ఇంజిన్ సెట్టింగ్లు"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"ప్రసంగం రేట్ & స్థాయి"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"తొలగించండి"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"ఈ సెషన్లోని అన్ని యాప్లు మరియు డేటా తొలగించబడతాయి."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"తీసివేయండి"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"గెస్ట్ (మీరు)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"యూజర్లు"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"ఇతర యూజర్లు"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"గెస్ట్ యాక్టివిటీని తొలగించండి"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"గెస్ట్ మోడ్ నుండి నిష్క్రమించినప్పుడు అన్ని గెస్ట్ యాప్లు, డేటాను తొలగించండి"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"గెస్ట్ యాక్టివిటీని తొలగించాలా?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ఈ గెస్ట్ సెషన్లోని యాప్లు, డేటా ఇప్పుడు తొలగించబడతాయి, మీరు గెస్ట్ మోడ్ నుండి నిష్క్రమించిన ప్రతిసారీ భవిష్యత్ గెస్ట్ యాక్టివిటీ మొత్తం తొలగించబడుతుంది"</string>
<string name="user_enable_calling" msgid="264875360626905535">"ఫోన్ కాల్స్ను ఆన్ చేయి"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ఫోన్ కాల్స్ & SMS ఆన్ చేయి"</string>
<string name="user_remove_user" msgid="8468203789739693845">"వినియోగదారుని తొలగించు"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"\"<xliff:g id="APP_NAME">%1$s</xliff:g>\" నోటిఫికేషన్లన్నీ"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"అన్ని <xliff:g id="APP_NAME">%1$s</xliff:g> నోటిఫికేషన్లు"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"అనుకూల నోటిఫికేషన్లు"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">రోజుకు~<xliff:g id="NUMBER_1">%,d</xliff:g> నోటిఫికేషన్లు</item>
- <item quantity="one">రోజుకు ~<xliff:g id="NUMBER_0">%d</xliff:g> నోటిఫికేషన్</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">ఒక రోజుకు సుమారుగా <xliff:g id="NUMBER_1">%,d</xliff:g> నోటిఫికేషన్లు</item>
+ <item quantity="one">ఒక రోజుకు సుమారుగా <xliff:g id="NUMBER_0">%d</xliff:g> నోటిఫికేషన్</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">వారానికి ~<xliff:g id="NUMBER_1">%,d</xliff:g>నోటిఫికేషన్లు</item>
- <item quantity="one">వారానికి ~<xliff:g id="NUMBER_0">%d</xliff:g> నోటిఫికేషన్</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">వారానికి సుమారుగా <xliff:g id="NUMBER_1">%,d</xliff:g> నోటిఫికేషన్లు</item>
+ <item quantity="one">వారానికి సుమారుగా <xliff:g id="NUMBER_0">%d</xliff:g> నోటిఫికేషన్</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"ఎప్పటికీ వద్దు"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"పరికరం & యాప్ నోటిఫికేషన్లు"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"ఏమీ చేయవద్దు"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"వైబ్రేట్"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"మ్యూట్ చేసినవి"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"ఎనేబుల్ చేయడానికి, మొదట \"నొక్కి, పట్టుకోండి పవర్ బటన్\"ను పవర్ మెనూకు మార్చండి."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"ఎనేబుల్ చేయడానికి, మొదట \"పవర్ బటన్ను నొక్కి & పట్టుకోండి\" తర్వాత పవర్ మెనూకు మార్చండి."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"నెట్వర్క్ వివరాలు"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"మీ పరికరంలోని పేరు మీ ఫోన్లోని యాప్లకు కనిపిస్తుంది. మీరు బ్లూటూత్ పరికరాలకు కనెక్ట్ చేసినప్పుడు, Wi-Fi నెట్వర్క్కు కనెక్ట్ చేసినప్పుడు లేదా Wi-Fi హాట్స్పాట్ను సెటప్ చేసినప్పుడు ఇతర వ్యక్తులకు కూడా ఇది కనిపించవచ్చు."</string>
<string name="devices_title" msgid="649715719278562515">"పరికరాలు"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"డివైజ్ కంట్రోల్స్"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"కార్డ్లు & పాస్లు"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"కార్డ్లు & పాస్లు"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"పవర్ బటన్ను నొక్కి, పట్టుకోండి"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Assistant కోసం నొక్కి, పట్టుకోండి"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"పవర్ మెనూ కోసం నొక్కి, పట్టుకోండి"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"నొక్కి, పట్టుకోండి బటన్ డిజేబుల్ చేయబడింది"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"పవర్ బటన్ను నొక్కి & పట్టుకోండి"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"యాక్సెస్ చేయడానికి పవర్ బటన్ను నొక్కి & పట్టుకోండి"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"పవర్ మెనూ"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"డిజిటల్ అసిస్టెంట్"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"డిజిటల్ అసిస్టెంట్ను యాక్సెస్ చేయండి"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"పవర్ మెనూను యాక్సెస్ చేయండి"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"ఉపయోగించడానికి, ముందుగా స్క్రీన్ లాక్ను సెట్ చేయండి"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Assistant కోసం హోల్డ్ చేయండి"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"పవర్ బటన్ను హోల్డ్ చేయడం ద్వారా Assistantను ట్రిగ్గర్ చేయండి"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"పవర్ & ఎమర్జెన్సీ మెనూ:\nపవర్ బటన్ను, అలాగే వాల్యూమ్ పెంపు బటన్ను ఒకే సమయంలో నొక్కండి."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"రింగ్ అవ్వడాన్ని నిరోధించండి:\nవాల్యూమ్ మెనూలో షార్ట్కట్ అందుబాటులో ఉంది."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"పవర్ మెనూ:\nపవర్ బటన్, వాల్యూమ్ పెంపు బటన్ను ఒకేసారి నొక్కండి"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"రింగ్ చేయడాన్ని నివారించండి:\n షార్ట్కట్ కోసం వాల్యూమ్ బటన్ను నొక్కండి"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"నొక్కి ఉంచాల్సిన సమయం"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"పవర్ బటన్ను ఎంతసేపు నొక్కి ఉంచాలో ఎంచుకోవడం ద్వారా సెన్సిటివిటీని సర్దుబాటు చేయండి"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"తక్కువ నిడివి"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index a36d071..5e14110 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"เมื่อใช้ Pixel Imprint ระบบจะใช้รูปภาพเพื่ออัปเดตรูปแบบลายนิ้วมือ ระบบจะไม่เก็บรูปภาพที่ใช้สร้างรูปแบบลายนิ้วมือของบุตรหลาน แต่จะเก็บรูปแบบลายนิ้วมือไว้อย่างปลอดภัยในโทรศัพท์และจะไม่มีการส่งออกไปไหน การประมวลผลข้อมูลทั้งหมดเกิดขึ้นอย่างปลอดภัยในโทรศัพท์"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"คุณลบรูปภาพและรูปแบบลายนิ้วมือหรือปิดการปลดล็อกด้วยลายนิ้วมือได้ทุกเมื่อในการตั้งค่า ระบบจะจัดเก็บรูปภาพและรูปแบบลายนิ้วมือไว้ในโทรศัพท์จนกว่าคุณจะลบออก"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"คุณและบุตรหลานลบรูปภาพและรูปแบบลายนิ้วมือ หรือปิดการปลดล็อกด้วยลายนิ้วมือได้ทุกเมื่อในการตั้งค่า ระบบจะเก็บรูปภาพและรูปแบบลายนิ้วมือไว้ในโทรศัพท์จนกว่าจะมีการลบออก"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"โทรศัพท์อาจปลดล็อกโดยที่คุณไม่ได้ตั้งใจ เช่น มีใครบางคนจ่อโทรศัพท์ที่นิ้วของคุณ"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"โทรศัพท์อาจปลดล็อกโดยที่คุณไม่ได้ตั้งใจ เช่น มีใครบางคนจ่อโทรศัพท์ที่นิ้วของคุณ"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"แท็บเล็ตอาจปลดล็อกโดยที่คุณไม่ได้ตั้งใจ เช่น หากมีใครบางคนจ่อแท็บเล็ตที่นิ้วของคุณ"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"อุปกรณ์อาจปลดล็อกโดยที่คุณไม่ได้ตั้งใจ เช่น หากมีใครบางคนจ่ออุปกรณ์ที่นิ้วของคุณ"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"โทรศัพท์ของบุตรหลานอาจปลดล็อกโดยที่ไม่ได้ตั้งใจ เช่น มีใครบางคนเอาโทรศัพท์ไปแตะที่นิ้วของบุตรหลาน"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"ใช้แผ่นปกป้องหน้าจอที่มีป้ายรับรอง Made For Google เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด หากใช้แผ่นปกป้องหน้าจออื่นๆ อาจใช้ลายนิ้วมือของคุณไม่ได้"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"ใช้แผ่นปกป้องหน้าจอที่มีป้ายรับรอง Made For Google เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด หากใช้แผ่นปกป้องหน้าจออื่นๆ อาจใช้ลายนิ้วมือของบุตรหลานไม่ได้"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"ภาพประกอบที่มีตำแหน่งของอุปกรณ์และเซ็นเซอร์ลายนิ้วมือ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"ชื่อ"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ตกลง"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"ลองอีกครั้ง"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"ลบ"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"แตะเซ็นเซอร์"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"วางนิ้วบนเซ็นเซอร์และยกขึ้นหลังจากรู้สึกถึงการสั่น"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"เสร็จสิ้น"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"อ๊ะ นั่นไม่ใช่เซ็นเซอร์"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"แตะเซ็นเซอร์ที่ด้านหลังโทรศัพท์โดยใช้นิ้วชี้"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"การลงทะเบียนยังไม่เสร็จสมบูรณ์"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"หมดเวลาลงทะเบียนลายนิ้วมือ โปรดลองอีกครั้ง"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"การตั้งค่าลายนิ้วมือหมดเวลา"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ลองอีกครั้งตอนนี้หรือตั้งค่าลายนิ้วมือภายหลังในการตั้งค่า"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"การลงทะเบียนลายนิ้วมือไม่ทำงาน โปรดลองอีกครั้งหรือใช้นิ้วอื่น"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"เพิ่มอีก"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"ถัดไป"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"ปรับแต่งโทรศัพท์"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"ลองใช้รูปแบบ วอลเปเปอร์ และอื่นๆ ที่มีหลากหลาย"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"โปรแกรมรักษาหน้าจอ"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"โปรแกรมรักษาหน้าจอ"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"ใช้โปรแกรมรักษาหน้าจอ"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ขณะชาร์จหรือวางอยู่บนแท่นชาร์จ"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"แบบใดก็ได้"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"ขณะที่ชาร์จ"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ขณะวางอยู่บนแท่นชาร์จ"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"ไม่เลย"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"ปิด"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"หากต้องการควบคุมสิ่งที่เกิดขึ้นขณะที่โทรศัพท์อยู่บนแท่นชาร์จและ/หรืออยู่ในโหมดสลีป ให้เปิดโปรแกรมรักษาหน้าจอ"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"เริ่มเมื่อใด"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"โปรแกรมรักษาหน้าจอในปัจจุบัน"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"การตั้งค่า"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"ปรับความสว่างอัตโนมัติ"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"ยกขึ้นเพื่อเวก"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"หน้าจอแอมเบียนท์"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"ตั้ง PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"ตั้ง PIN โปรไฟล์งาน"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"ตั้งรูปแบบ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"ตั้งค่ารูปแบบสำหรับปลดล็อกอุปกรณ์เพื่อให้ปลอดภัยยิ่งขึ้น"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"ตั้งรูปแบบโปรไฟล์งาน"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"ตั้งรหัสผ่านเพื่อใช้ลายนิ้วมือ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"ตั้งรูปแบบเพื่อใช้ลายนิ้วมือ"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"แอปฉุกเฉิน"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"รีเซ็ตค่ากำหนดแอป"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"รีเซ็ตค่ากำหนดแอปไหม"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"คำสั่งนี้จะรีเซ็ตค่ากำหนดทั้งหมดของรายการต่อไปนี้\n\n"<li>"แอปที่ปิดใช้"</li>\n<li>"การแจ้งเตือนของแอปที่ปิดใช้"</li>\n<li>"แอปพลิเคชันเริ่มต้นสำหรับการทำงานต่างๆ"</li>\n<li>"การจำกัดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังของแอป"</li>\n<li>"การจำกัดสิทธิ์ใดๆ"</li>\n\n"ทั้งนี้ข้อมูลแอปจะไม่หายไป"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"การดำเนินการนี้จะรีเซ็ตค่ากำหนดทั้งหมดสำหรับ\n\n"<li>"แอปที่ปิดใช้"</li>\n<li>"การแจ้งเตือนแอปที่ปิดใช้"</li>\n<li>"แอปพลิเคชันเริ่มต้นสำหรับการทำงานต่างๆ"</li>\n<li>"ข้อจำกัดอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังสำหรับแอป"</li>\n<li>"ข้อจำกัดสิทธิ์ใดๆ"</li>\n<li>"การตั้งค่าการใช้งานแบตเตอรี่"</li>\n\n"ข้อมูลแอปทั้งหมดของคุณจะยังคงอยู่เหมือนเดิม"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"รีเซ็ตแอป"</string>
<string name="manage_space_text" msgid="9013414693633572277">"จัดการพื้นที่"</string>
<string name="filter" msgid="9039576690686251462">"ตัวกรอง"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"รีเซ็ตการตั้งค่า"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"รีเซ็ตการตั้งค่าขนาดที่แสดงและข้อความแล้ว"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"รีเซ็ตขนาดการแสดงผลและข้อความหรือไม่"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"ค่ากำหนดของขนาดการแสดงผลและข้อความของคุณจะเปลี่ยนกลับไปเป็นการตั้งค่าเดิมของโทรศัพท์"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"ค่ากำหนดของขนาดการแสดงผลและข้อความของคุณจะเปลี่ยนกลับไปเป็นการตั้งค่าเดิมของโทรศัพท์"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"ค่ากำหนดของขนาดการแสดงผลและข้อความจะเปลี่ยนกลับไปเป็นการตั้งค่าเดิมของแท็บเล็ต"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"รีเซ็ต"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"เสาร์อาทิตย์นี้มีแผนจะทำอะไรมั้ย"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ไปทะเล อยากไปด้วยมั้ย"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"ไม่มีการใช้งานตั้งแต่ชาร์จเต็มครั้งล่าสุด"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"ไม่มีการใช้งานในช่วง 24 ชม. ที่ผ่านมา"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"ผู้ใช้รายอื่นๆ"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"ค่าประมาณแบตเตอรี่ที่เหลืออิงตามการใช้งานอุปกรณ์ของคุณ"</string>
<string name="estimated_time_left" msgid="948717045180211777">"เวลาที่เหลือโดยประมาณ"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"จนกว่าจะชาร์จเต็ม"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"คำที่นิยมและการโต้ตอบเต็มรูปแบบ"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"เขียนตามคำบอกแบบง่ายๆ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"บริการป้อนข้อมูลด้วยเสียงนี้สามารถคอยตรวจสอบเสียงอยู่ตลอดเวลาและควบคุมแอปพลิเคชันที่สามารถใช้เสียงในนามของคุณได้ บริการนี้มาจากแอปพลิเคชัน <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> เปิดใช้การทำงานของบริการนี้ไหม"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"การตั้งค่าการจดจำในอุปกรณ์"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"การจดจำในอุปกรณ์"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"การจดจำคำพูดในอุปกรณ์"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"เครื่องมือที่ต้องการ"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"การตั้งค่าเครื่องมือ"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"ความเร็วและระดับเสียงสูงต่ำของเสียงพูด"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"ลบ"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"ระบบจะลบแอปและข้อมูลทั้งหมดในเซสชันนี้"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"นำออก"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"ผู้ใช้ชั่วคราว (คุณ)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"ผู้ใช้"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"ผู้ใช้รายอื่นๆ"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"ลบกิจกรรมของผู้ใช้ชั่วคราว"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"ลบแอปและข้อมูลทั้งหมดของผู้ใช้ชั่วคราวเมื่อออกจากโหมดผู้ใช้ชั่วคราว"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"ลบกิจกรรมของผู้ใช้ชั่วคราวไหม"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"ระบบจะลบแอปและข้อมูลจากเซสชันผู้ใช้ชั่วคราวนี้ตอนนี้เลย และต่อไปนี้จะลบกิจกรรมทั้งหมดของผู้ใช้ชั่วคราวทุกครั้งที่คุณออกจากโหมดผู้ใช้ชั่วคราว"</string>
<string name="user_enable_calling" msgid="264875360626905535">"เปิดการโทร"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"เปิดการโทรและ SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"ลบผู้ใช้"</string>
@@ -4007,11 +4021,11 @@
<string name="notification_switch_label" msgid="8029371325967501557">"การแจ้งเตือนทั้งหมดของ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"การแจ้งเตือนทั้งหมดของ <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"การแจ้งเตือนแบบปรับอัตโนมัติ"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
<item quantity="other">การแจ้งเตือนประมาณ <xliff:g id="NUMBER_1">%,d</xliff:g> ครั้งต่อวัน</item>
<item quantity="one">การแจ้งเตือนประมาณ <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งต่อวัน</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
<item quantity="other">การแจ้งเตือนประมาณ <xliff:g id="NUMBER_1">%,d</xliff:g> ครั้งต่อสัปดาห์</item>
<item quantity="one">การแจ้งเตือนประมาณ <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งต่อสัปดาห์</item>
</plurals>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"ไม่ต้องทำอะไร"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"สั่น"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"ปิดเสียง"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"หากต้องการเปิดใช้งาน ก่อนอื่นให้เปลี่ยน \"กดปุ่มเปิด/ปิดค้างไว้\" เป็นเมนูเปิด/ปิด"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"หากต้องการเปิดใช้ ก่อนอื่นให้เปลี่ยน \"กดปุ่มเปิด/ปิดค้างไว้\" เป็นเมนูเปิด/ปิด"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"รายละเอียดเครือข่าย"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"แอปในโทรศัพท์จะเห็นชื่อของอุปกรณ์ และคนอื่นก็อาจเห็นเช่นกันหากคุณเชื่อมต่อกับอุปกรณ์บลูทูธหรือเครือข่าย Wi-Fi หรือตั้งค่าฮอตสปอต Wi-Fi"</string>
<string name="devices_title" msgid="649715719278562515">"อุปกรณ์"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"ระบบควบคุมอุปกรณ์"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"บัตรและบัตรผ่าน"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"บัตรและบัตรผ่าน"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"กดปุ่มเปิด/ปิดค้างไว้"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"กดค้างเพื่อเปิดใช้ Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"กดค้างเพื่อแสดงเมนูเปิด/ปิด"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"การกดค้างปิดใช้อยู่"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"กดปุ่มเปิด/ปิดค้างไว้"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"กดปุ่มเปิด/ปิดค้างไว้เพื่อเข้าถึง"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"เมนูเปิด/ปิด"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ผู้ช่วยดิจิทัล"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"เข้าถึงผู้ช่วยดิจิทัล"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"เข้าถึงเมนูเปิด/ปิด"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"หากต้องการใช้ ให้ตั้งค่าการล็อกหน้าจอก่อน"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"กดค้างไว้เพื่อเปิดใช้งาน Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"เรียกให้ Assistant ทำงานโดยกดปุ่มเปิด/ปิดค้างไว้"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"เมนูเปิด/ปิดและกรณีฉุกเฉิน\nกดปุ่มเปิด/ปิดและปุ่มเพิ่มระดับเสียงพร้อมกัน"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"ป้องกันการส่งเสียง\nมีทางลัดให้ใช้ในเมนูระดับเสียง"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"เมนูเปิด/ปิด\nกดปุ่มเปิด/ปิดและปุ่มเพิ่มระดับเสียงพร้อมกัน"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"ป้องกันการส่งเสียง\nกดปุ่มปรับระดับเสียงเพื่อใช้ทางลัด"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"ระยะเวลาการกดค้าง"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"ปรับความไวโดยเลือกระยะเวลาการกดปุ่มเปิด/ปิดค้างไว้"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"ไม่นาน"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 2afc885..1962d57 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Kapag ginamit niya ang Pixel Imprint, gagamitin ang mga larawan para i-update ang modelo ng kanyang fingerprint. Hindi kailanman sino-store ang mga larawang ginamit para gawin ang modelo ng fingerprint ng iyong anak, pero secure na naka-store ang modelo ng fingerprint sa telepono at hindi ito kailanman lalabas sa telepono. Sa telepono secure na nangyayari ang lahat ng pagpoproseso."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Puwede mong i-delete ang mga larawan at modelo ng iyong fingerprint, o i-off ang Pag-unlock Gamit ang Fingerprint anumang oras sa Mga Setting. Naka-store sa telepono ang mga larawan at modelo ng fingerprint hanggang sa i-delete mo ang mga ito."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Magagawa mo at ng iyong anak na i-delete ang mga larawan at modelo ng kanyang fingerprint, o i-off ang Pag-unlock Gamit ang Fingerprint anumang oras sa Mga Setting. Naka-store ang mga larawan at modelo ng fingerprint sa telepono hanggang sa i-delete ang mga ito."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Puwedeng ma-unlock ang iyong telepono nang hindi sinasadya, gaya kung may magtapat nito sa daliri mo."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Puwedeng ma-unlock ang iyong telepono nang hindi sinasadya, gaya kung may magtapat nito sa daliri mo."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Puwedeng ma-unlock ang iyong tablet nang hindi sinasadya, gaya kung may magdikit nito sa daliri mo."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Puwedeng ma-unlock ang iyong device nang hindi sinasadya, gaya kung may magdikit nito sa daliri mo."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Puwedeng ma-unlock ang telepono ng iyong anak nang hindi niya sinasadya, gaya ng kapag may taong naglapat nito sa kanyang daliri."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Para sa pinakamahuhusay na resulta, gumamit ng screen protector na certified ng Made for Google. Posibleng hindi gumana ang iyong fingerprint gamit ang iba pang screen protector."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Para sa pinakamahuhusay na resulta, gumamit ng screen protector na certified ng Made for Google. Posibleng hindi gumana ang fingerprint ng iyong anak gamit ang iba pang screen protector."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Larawan kung saan ipinapakita ang lokasyon ng device at fingerprint sensor"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Pangalan"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Subukan ulit"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"I-delete"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Pindutin ang sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Ilagay ang iyong daliri sa sensor at iangat ito pagkatapos mong makaramdam ng pag-vibrate"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Tapos na"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Naku, hindi iyan ang sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Pindutin ang sensor sa likod ng iyong telepono. Gamitin ang hintuturo mo."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Hindi nakumpleto ang pag-enroll"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Naabot na ang limitasyon sa oras ng pag-enroll ng fingerprint. Subukan ulit."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Nag-time out ang pag-set up ng fingerprint"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Subukan na ulit o i-set up ang fingerprint mo sa ibang pagkakataon sa Mga Setting"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Hindi gumana ang pagpapatala ng fingerprint. Subukang muli o gumamit ng ibang daliri."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Magdagdag ng isa pa"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Susunod"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"I-customize ang iyong telepono"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Sumubok ng iba\'t ibang istilo, wallpaper, at higit pa"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Screen saver"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Gumamit ng screen saver"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Habang nagcha-charge o naka-dock"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Alinman"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Habang nagcha-charge"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Habang naka-dock"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Hindi kailanman"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Naka-off"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Upang makontrol kung ano ang mangyayari kapag naka-dock o naka-sleep ang telepono, i-on ang screen saver."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Kailan magsisimula"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Kasalukuyang screen saver"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Mga Setting"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Awtomatikong pagliwanag"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Angatin upang paganahin"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ambient na display"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Magtakda ng PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Magtakda ng PIN sa trabaho"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Magtakda ng pattern"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Para sa karagdagang seguridad, magtakda ng pattern para sa pag-unlock ng device"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Magtakda ng pattern sa trabaho"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Para magamit ang fingerprint, i-set ang pw"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Para magamit ang fingerprint, i-set ang pattern"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Emergency app"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"I-reset ang kagustuhan sa app"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"I-reset ang gusto sa app?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Ire-reset nito ang lahat ng kagustuhan para sa:\n\n"<li>"Mga naka-disable na app"</li>\n<li>"Mga naka-disable na notification ng app"</li>\n<li>"Mga default na application para sa mga pagkilos"</li>\n<li>"Mga paghihigpit sa data ng background para sa mga app"</li>\n<li>"Anumang paghihigpit sa pahintulot"</li>\n\n"Hindi ka mawawalan ng anumang data ng app."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Ire-reset nito ang lahat ng kagustuhan para sa:\n\n"<li>"Mga naka-disable na app"</li>\n<li>"Mga naka-disable na notification ng app"</li>\n<li>"Mga default na application para sa mga pagkilos"</li>\n<li>"Mga paghihigpit sa data sa background para sa mga app"</li>\n<li>"Anumang paghihigpit sa pahintulot"</li>\n<li>"Mga setting ng paggamit ng baterya"</li>\n\n"Hindi mawawala sa iyo ang anumang data ng app."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"I-reset ang apps"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Pamahalaan ang espasyo"</string>
<string name="filter" msgid="9039576690686251462">"I-filter"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"I-reset ang mga setting"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Na-reset ang laki ng display at mga setting ng text"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"I-reset ang laki ng display at text?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Mare-reset sa mga orihinal na setting ng telepono ang laki ng iyong display at mga kagustuhan sa text."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Mare-reset sa mga orihinal na setting ng telepono ang laki ng iyong display at mga kagustuhan sa text."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Mare-reset sa mga orihinal na setting ng tablet ang laki ng iyong display at mga kagustuhan sa text."</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"I-reset"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Mayroon ka bang anumang plano sa weekend?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Pupunta sa beach. Gusto mo bang sumama?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Walang paggamit mula noong huling na-full charge"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Walang paggamit sa nakalipas na 24 na oras"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Iba pang user"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Nakabatay ang pagtatantya ng natitirang baterya sa paggamit ng iyong device"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Tinatayang natitirang oras"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Hanggang mapuno ang baterya"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Ganap na hotword at pakikipag-ugnay"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Simpleng speech to text"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Magagawa ng serbisyo ng input na boses na ito na magsagawa ng palaging naka-on na pagsubaybay sa boses at kontrolin ang mga application na ine-enable ng boses para sa iyo. Mula ito sa application na <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Ie-enable ba ang paggamit ng serbisyong ito?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Mga setting ng on-device na pagkilala"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"On-device na pagkilala"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"On-device na pagkilala sa speech"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Gustong engine"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Mga setting ng engine"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Rate at pitch ng pananalita"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"I-delete"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Ide-delete ang lahat ng app at data sa session na ito."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Alisin"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Bisita (Ikaw)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Mga User"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Iba pang user"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"I-delete ang aktibidad ng bisita"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"I-delete ang lahat ng app at data ng bisita kapag umaalis sa guest mode"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"I-delete ang aktibidad ng bisita?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Made-delete na ngayon ang mga app at data mula sa session na ito ng bisita, at made-delete ang lahat ng aktibidad ng bisita sa hinaharap sa tuwing aalis ka ng guest mode"</string>
<string name="user_enable_calling" msgid="264875360626905535">"I-on ang mga pagtawag sa telepono"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"I-on ang mga pagtawag sa telepono at SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"I-delete ang user"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Lahat ng notification ng \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Lahat ng notification ng <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Mga Adaptive na Notification"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> notification bawat araw</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> na notification bawat araw</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Humigit-kumulang <xliff:g id="NUMBER_1">%,d</xliff:g> notification kada araw</item>
+ <item quantity="other">Humigit-kumulang <xliff:g id="NUMBER_1">%,d</xliff:g> na notification kada araw</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> notification bawat linggo</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> na notification bawat linggo</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Humigit-kumulang <xliff:g id="NUMBER_1">%,d</xliff:g> notification kada linggo</item>
+ <item quantity="other">Humigit-kumulang <xliff:g id="NUMBER_1">%,d</xliff:g> na notification kada linggo</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Huwag Kailanman"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Mga notification sa device at app"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Walang gawin"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"I-vibrate"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"I-mute"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Para i-enable, palitan muna ang \"Pindutin nang matagal ang power button\" sa power menu."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Para i-enable, palitan muna ang \"Pindutin nang matagal ang power button\" sa power menu."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Mga detalye ng network"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Nakikita ng mga app sa iyong telepono ang pangalan ng device mo. Puwede rin itong makita ng ibang tao kapag ikaw ay kumonekta sa mga Bluetooth device, kumonekta sa Wi-Fi network, o nag-set up ng Wi-Fi hotspot."</string>
<string name="devices_title" msgid="649715719278562515">"Mga Device"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"mga kontrol ng device"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Mga card at pass"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"mga card at pass"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Pindutin nang matagal ang power button"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Pindutin nang matagal para sa Assistant"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Pindutin nang matagal para sa power menu"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Naka-disable ang pagpindot nang matagal"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Pindutin nang matagal ang power button"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Pindutin nang matagal ang power button para i-access"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Power menu"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Digital na assistant"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"I-access ang digital na assistant"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"I-access ang power menu"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Para magamit, magtakda muna ng lock ng screen"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Pindutin nang Matagal para sa Assistant"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"I-trigger ang Assistant sa pamamagitan ng pagpindot nang matagal sa power button"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Menu ng Power at Emergency:\nPindutin nang magkasabay ang Power at Pataas na volume."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Pigilan ang pag-ring:\nNasa menu ng volume ang shortcut."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Power menu:\nMagkasabay na pindutin ang power button at button na pataas na volume"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Pigilan ang pag-ring:\nPumindot ng button ng volume para sa shortcut"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Tagal ng pagpindot"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Isaayos ang pagkasensitibo sa pamamagitan ng pagpili kung gaano katagal pipindutin ang power button"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Mabilis"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 43c0f6c..26403ef 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Çocuğunuz Pixel Imprint\'i kullandığında resimler, parmak izi modelini güncellemek için kullanılır. Çocuğunuzun parmak izi modelini oluşturmak için kullanılan resimler hiçbir zaman saklanmaz ancak parmak izi modeli, telefonda güvenli bir şekilde saklanıp hiçbir zaman telefondan dışarı çıkmaz. Tüm işlemler, güvenli bir şekilde telefonda gerçekleşir."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"İstediğiniz zaman parmak izi resimlerinizi ve modelinizi silebilir veya Ayarlar\'da Parmak İzi Kilidi\'ni kapatabilirsiniz. Siz silene kadar, parmak izi resimleri ve modelleri telefonda saklanır."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Siz ve çocuğunuz, istediğiniz zaman Ayarlar\'dan Parmak İzi Kilidi\'ni devre dışı bırakabilir veya çocuğunuzun parmak izi resimlerini ve modelini silebilirsiniz. Parmak izi resimleri ve modelleri, silinene kadar telefonda saklanır."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefonunuzun kilidi, istemediğiniz zamanlarda da açılabilir. Örneğin, telefonunuz başka birisi tarafından parmağınıza tutulduğunda kilidi açılabilir."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefonunuzun kilidi, istemediğiniz zamanlarda da açılabilir. Örneğin, telefonunuz başka birisi tarafından parmağınıza tutulduğunda kilidi açılabilir."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Tabletinizin kilidi, istemediğiniz zamanlarda da açılabilir. Örneğin, tabletiniz başka birisi tarafından parmağınıza tutulduğunda kilidi açılabilir."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Cihazınızın kilidi, istemediğiniz zamanlarda da açılabilir. Örneğin, cihazınız başka birisi tarafından parmağınıza tutulduğunda kilidi açılabilir."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Çocuğunuz istemeden de telefonunun kilidi açılabilir. Örneğin, telefonu başka birisi tarafından parmağına tutulduğunda kilidi açılabilir."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"En iyi sonuçlar için Made for Google sertifikalı bir ekran koruyucu kullanın. Parmak iziniz diğer ekran koruyucularla çalışmayabilir."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"En iyi sonuçlar için Made for Google sertifikalı bir ekran koruyucu kullanın. Çocuğunuzun parmak izi diğer ekran koruyucularla çalışmayabilir."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Cihaz ve parmak izi sensörünün yerini gösteren çizim"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Ad"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"Tamam"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Tekrar dene"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Sil"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Sensöre dokunun"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Parmağınızı sensörün üzerine koyun ve bir titreşim hissettiğinizde kaldırın"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Bitti"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Yanlış oldu, bu sensör değil"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"İşaret parmağınızla telefonunun arkasındaki sensöre dokunun."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Kayıt işlemi tamamlanmadı"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Parmak izi kayıt işlemi için süre sınırı aşıldı. Tekrar deneyin."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Parmak izi kurulumu zaman aşımına uğradı"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Şimdi tekrar deneyin veya parmak izini daha sonra Ayarlar\'da kurun"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Parmak izi kaydı çalışmadı. Tekrar deneyin veya farklı bir parmak kullanın."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Başka ekle"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"İleri"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Telefonunuzu özelleştirme"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Farklı stiller, duvar kağıtları ve daha fazlasını deneyin"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Ekran koruyucu"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ekran koruyucu"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Ekran koruyucu kullan"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Şarj olurken veya yuvadayken"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Her iki durumda da"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Şarj olurken"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Yuvadayken"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Hiçbir zaman"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Kapalı"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Telefon yuvaya yerleştirildiğinde ve/veya uyku durumundayken ne olacağını kontrol etmek için ekran koruyucuyu etkinleştirin."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Başlama zamanı"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Geçerli ekran koruyucu"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Ayarlar"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Otomatik parlaklık"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Kaldırarak uyandır"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Ortam ekranı"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN ayarlayın"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"İş PIN\'i ayarlayın"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Desen oluşturun"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Cihazın kilidini açmak için bir desen belirleyip daha fazla güvenlik sağlayın."</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"İş deseni oluşturun"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Parmak izi için şifre ayarlayın"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Parmak izi için desen ayarlayın"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Acil durum uygulaması"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Uygulama tercihlerini sıfırla"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Uygulama tercihleri sıfırlansın mı?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Bu işlem, şunlarla ilgili tüm tercihleri sıfırlayacaktır:\n\n"<li>"Devre dışı bırakılan uygulamalar"</li>\n<li>"Devre dışı bırakılan uygulama bildirimleri"</li>\n<li>"İşlemler için varsayılan uygulamalar"</li>\n<li>"Uygulamalar için arka plan verileri kısıtlamaları"</li>\n<li>"Tüm izin kısıtlamaları"</li>\n\n"Uygulama verileriniz kaybolmayacak."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Bu işlem, şunlarla ilgili tüm tercihleri sıfırlayacaktır:\n\n"<li>"Devre dışı bırakılan uygulamalar"</li>\n<li>"Devre dışı bırakılan uygulama bildirimleri"</li>\n<li>"İşlemler için varsayılan uygulamalar"</li>\n<li>"Uygulamalar için arka plan verileri kısıtlamaları"</li>\n<li>"Tüm izin kısıtlamaları"</li>\n<li>"Pil kullanımı ayarları"</li>\n\n"Uygulama verileriniz kaybolmayacak."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Uygulamaları sıfırla"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Alanı yönet"</string>
<string name="filter" msgid="9039576690686251462">"Filtre"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Ayarları sıfırla"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Ekran boyutu ve metin ayarları sıfırlandı"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Görüntü boyutu ve metin tercihleriniz sıfırlansın mı?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Görüntü boyutu ve metin tercihleriniz telefonun orijinal ayarlarına sıfırlanacak."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Görüntü boyutu ve metin tercihleriniz telefonun orijinal ayarlarına sıfırlanacak."</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Görüntü boyutu ve metin tercihleriniz tabletin orijinal ayarlarına sıfırlanacak."</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Sıfırla"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Hafta sonuna planın var mı?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Sahile gideceğim. Gelmek ister misin?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Son kez tamamen şarj olduktan sonra kullanılmadı"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Son 24 saatte kullanılmadı"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Diğer kullanıcılar"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Kalan pil gücü tahmini, cihazınızın kullanımına göre yapılır"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Kalan tahmini süre"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"sonra tam olarak şarj olacak"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Tam özel kelime ve etkileşim"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Basit konuşma-metin"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Bu ses girişi hizmeti, her zaman açık olacak şekilde ses izleme işlemi gerçekleştirebilecek ve ses kullanan uygulamaları sizin adınıza kontrol edebilecektir. Bu hizmet <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> uygulamasına aittir. Hizmetin kullanımı etkinleştirilsin mi?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Cihaz üzerinde tanıma ayarları"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Cihaz üzerinde tanıma"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Cihaz üzerinde konuşma tanıma"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Tercih edilen motor"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Motor ayarları"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Konuşma hızı ve ses tonu"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Sil"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Bu oturumdaki tüm uygulamalar ve veriler silinecek."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Kaldır"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Misafir (Siz)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Kullanıcılar"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Diğer kullanıcılar"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Misafir etkinliğini silme"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Misafir modundan çıkarken tüm misafir uygulamalarını ve verilerini silin"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Misafir etkinliği silinsin mi?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Bu misafir oturumundaki uygulamalar ve veriler şimdi silinecektir. Bundan sonraki tüm misafir etkinlikleri ise misafir modundan her çıktığınızda silinir."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Telefon aramalarını aç"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefon aramalarını ve mesajları aç"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Kullanıcıyı sil"</string>
@@ -4007,11 +4021,11 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Tüm \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" bildirimleri"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Tüm <xliff:g id="APP_NAME">%1$s</xliff:g> bildirimleri"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Uyarlanabilir Bildirimler"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
<item quantity="other">Günde yaklaşık <xliff:g id="NUMBER_1">%,d</xliff:g> bildirim</item>
<item quantity="one">Günde yaklaşık <xliff:g id="NUMBER_0">%d</xliff:g> bildirim</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
<item quantity="other">Haftada yaklaşık <xliff:g id="NUMBER_1">%,d</xliff:g> bildirim</item>
<item quantity="one">Haftada yaklaşık <xliff:g id="NUMBER_0">%d</xliff:g> bildirim</item>
</plurals>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Hiçbir şey yapma"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Titreşim"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Sesi kapat"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Etkinleştirmek için önce \"Güç düğmesini basılı tutun\" işlemini güç menüsünden değiştirin."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Etkinleştirmek için önce \"Güç düğmesini basılı tutun\" işlemini güç menüsünden değiştirin."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Ağ ayrıntıları"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Telefonunuzdaki uygulamalar, cihazınızın adını görebilecek. Cihazınızın adı ayrıca Blueetoth cihazlara bağlandığınızda, kablosuz ağa bağlandığınızda veya kablosuz hotspot oluşturduğunuzda diğer kişiler tarafından görülecektir."</string>
<string name="devices_title" msgid="649715719278562515">"Cihazlar"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"cihaz denetimleri"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kartlar ve pasolar"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kartlar ve pasolar"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Güç düğmesini basılı tut"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Asistan için basılı tutun"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Güç menüsü için basılı tutun"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Basılı tutma işlevi devre dışı bırakıldı"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Güç düğmesini basılı tutun"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Erişmek için güç düğmesini basılı tutun."</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Güç menüsü"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Dijital asistan"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Dijital asistana erişim"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Güç menüsüne erişim"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Kullanmak için önce bir ekran kilidi ayarlayın"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Asistan için uzun basın"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Asistan\'ı güç düğmesine uzun basarak açın"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Güç ve Acil Durum Menüsü:\nGüç ve sesi artırma tuşlarına aynı anda basın."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Zili çaldırmayı engelle:\nKısayol, ses düzeyi menüsünde mevcut."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Güç menüsü:\nGüç ve sesi artırma düğmelerine aynı anda basın."</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Zilin çalmasını engelleme:\nKısayolu kullanmak için ses düğmelerinden birine basın."</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Basılı tutma süresi"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Güç düğmesini ne kadar basılı tutacağınızı belirleyerek hassasiyeti ayarlayın"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Kısa"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index e2fbe09..ca18eba 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -472,7 +472,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Коли дитина користується Pixel Imprint, отримані зображення використовуються для оновлення моделі відбитка пальця. Ці зображення ніколи не залишаються на телефоні, але сама модель надійно зберігається та нікуди не передається. Усі процедури обробки безпечно відбуваються на телефоні."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Ви будь-коли можете видалити зображення й модель свого відбитка пальця або вимкнути цю функцію розблокування в налаштуваннях. Зображення й модель відбитка пальця зберігаються на телефоні, поки ви їх не видалите."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Ви та дитина будь-коли можете видалити зображення й модель відбитка пальця або вимкнути цю функцію в налаштуваннях. Зображення й моделі відбитків пальців зберігаються на телефоні, доки ви їх не видалите."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Ваш телефон можна розблокувати навіть тоді, коли ви цього не плануєте. Наприклад, якщо хтось піднесе його до вашого пальця."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Ваш телефон можна розблокувати навіть тоді, коли ви цього не плануєте. Наприклад, якщо хтось піднесе його до вашого пальця."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Ваш планшет можна розблокувати навіть без вашої волі (наприклад, якщо хтось піднесе його до вашого пальця)."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Ваш пристрій можна розблокувати навіть без вашої волі (наприклад, якщо хтось піднесе його до вашого пальця)."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Телефон дитини можна розблокувати випадково, наприклад якщо хтось прикладе пристрій до її пальця."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Рекомендуємо використовувати захисну плівку чи скло, що мають позначку \"Створено для Google\". Якщо вони не матимуть такої позначки, відбиток пальця може не розпізнаватися."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Рекомендуємо використовувати захисну плівку чи скло, що мають позначку \"Створено для Google\". Якщо вони не матимуть такої позначки, відбиток пальця дитини може не розпізнаватися."</string>
@@ -522,6 +524,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Розташування сканера відбитків пальців на пристрої"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Назва"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ОК"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Повторити спробу"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Видалити"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Торкніться сканера"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Покладіть палець на датчик і заберіть його, коли відчуєте вібрацію"</string>
@@ -599,8 +602,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Готово"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Це не датчик"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Торкніться сканера на задній панелі телефона. Прикладіть вказівний палець."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Відбиток не зареєстровано"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Час для реєстрації відбитка пальця минув. Повторіть спробу."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Час очікування для відбитка пальця минув"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Повторіть спробу зараз або налаштуйте відбиток пальця пізніше в налаштуваннях"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Відбиток не зареєстровано. Повторіть спробу або прикладіть інший палець."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Додати ще"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Далі"</string>
@@ -1488,17 +1491,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Налаштувати телефон"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Спробуйте інші стилі, фонові малюнки тощо"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Заставка"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"заставка"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Використовувати заставку"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Під час заряджання чи в док-станції"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Завжди"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Під час заряджання"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Коли в док-станції"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Ніколи"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Вимк."</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Щоб контролювати поведінку телефона, коли він у док-станції та/або в режимі сну, увімкніть заставку."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Коли почати"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Поточна заставка"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Налаштування"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Автоматична яскравість"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Підняти, щоб активувати"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Активація екрана"</string>
@@ -1990,6 +1991,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Створіть PIN-код"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Створіть PIN-код для робочого профілю"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Створіть ключ"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Для додаткового захисту встановіть ключ, щоб розблоковувати пристрій"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Створіть ключ для робочого профілю"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Щоб користуватися відбитком пальця, налаштуйте пароль"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Щоб користуватися відбитком пальця, налаштуйте ключ"</string>
@@ -2147,7 +2149,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Додаток для екстрених викликів"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Скинути налаштування додатків"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Скинути налаштування додатків?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Буде скинуто всі налаштування для:\n\n"<li>"вимкнених додатків"</li>\n<li>"вимкнених сповіщень із додатків"</li>\n<li>"додатків за умовчанням"</li>\n<li>"обмежень щодо передавання даних у фоновому режимі"</li>\n<li>"усіх обмежень щодо дозволів"</li>\n\n"Дані додатків видалено не буде."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Буде скинуто всі налаштування для:\n\n"<li>"вимкнених додатків;"</li>\n<li>"вимкнених сповіщень із додатків;"</li>\n<li>"додатків за умовчанням;"</li>\n<li>"обмежень щодо передавання даних у фоновому режимі для додатків;"</li>\n<li>"усіх обмежень щодо дозволів;"</li>\n<li>"використання акумулятора."</li>\n\n"Дані додатків видалено не буде."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Скинути"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Кер. простором"</string>
<string name="filter" msgid="9039576690686251462">"Фільтрув."</string>
@@ -2402,7 +2404,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Скинути налаштування"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Налаштування масштабу елементів і оформлення тексту скинуто"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Скинути налаштування масштабу й тексту?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Параметри масштабу й тексту буде скинуто до початкових налаштувань телефона"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Параметри масштабу й тексту буде скинуто до початкових налаштувань телефона"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Параметри масштабу й тексту буде скинуто до початкових налаштувань планшета"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Скинути"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Маєте плани на вихідні?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Їдемо на пляж. Хочете з нами?"</string>
@@ -3010,6 +3013,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Відсутнє споживання з часу останнього повного заряджання"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Відсутнє споживання за останні 24 години"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Інші користувачі"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Залишок заряду акумулятора визначається на основі використання пристрою"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Залишилося приблизно"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"До повного заряду"</string>
@@ -3099,6 +3103,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Підтримка команд швидкого запуску та взаємодії"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Просте перетворення мовлення на текст"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ця служба голосового вводу зможе постійно відстежувати голос і контролювати додатки, у яких увімкнено голосовий ввід, від вашого імені. Вона походить із додатка <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Увімкнути цю службу?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Налаштування розпізнавання на пристрої"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Розпізнавання на пристрої"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Розпізнавання мовлення на пристрої"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Система за умовчанням"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Налаштування системи"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Темп і тон мовлення"</string>
@@ -3499,6 +3506,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Видалити"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Усі додатки й дані з цього сеансу буде видалено."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Вийти"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Гість (ви)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Користувачі"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Інші користувачі"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Видаляти дії в режимі гостя"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Видалити всі додатки й дані гостя під час виходу з режиму гостя"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Видалити дії в режимі гостя?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Додатки й дані з цього сеансу в режимі гостя буде видалено зараз, а всі майбутні дії гостя видалятимуться під час кожного виходу з цього режиму"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Увімкнути телефонні дзвінки"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Увімкнути телефонні дзвінки й SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Видалити користувача"</string>
@@ -4095,17 +4109,17 @@
<string name="notification_switch_label" msgid="8029371325967501557">"<xliff:g id="APP_NAME">%1$s</xliff:g>: усі сповіщення"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Усі сповіщення з додатка <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Адаптивні сповіщення"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на день</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на день</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> сповіщень на день</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на день</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Близько <xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на день</item>
+ <item quantity="few">Близько <xliff:g id="NUMBER_1">%,d</xliff:g> сповіщень на день</item>
+ <item quantity="many">Близько <xliff:g id="NUMBER_1">%,d</xliff:g> сповіщень на день</item>
+ <item quantity="other">Близько <xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на день</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на тиждень</item>
- <item quantity="few">~<xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на тиждень</item>
- <item quantity="many">~<xliff:g id="NUMBER_1">%,d</xliff:g> сповіщень на тиждень</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на тиждень</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Близько <xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на тиждень</item>
+ <item quantity="few">Близько <xliff:g id="NUMBER_1">%,d</xliff:g> сповіщень на тиждень</item>
+ <item quantity="many">Близько <xliff:g id="NUMBER_1">%,d</xliff:g> сповіщень на тиждень</item>
+ <item quantity="other">Близько <xliff:g id="NUMBER_1">%,d</xliff:g> сповіщення на тиждень</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Ніколи"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Сповіщення додатків і пристроїв"</string>
@@ -5423,7 +5437,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Нічого не робити"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Вібрація"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Вимкнути звук"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Щоб увімкнути, спершу вкажіть, щоб дія \"Утримувати кнопку живлення\" відкривала меню кнопки живлення."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Щоб увімкнути цю функцію, спершу змініть налаштування \"Утримувати кнопку живлення\" так, щоб при цьому відкривалось меню кнопки живлення."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Дані мережі"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Назва пристрою відображається в додатках на телефоні. Її також можуть бачити інші люди, коли ви підключаєтеся до пристроїв Bluetooth або налаштовуєте точку доступу Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Пристрої"</string>
@@ -5716,15 +5730,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"керування пристроями"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Картки та квитки"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"картки та квитки"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Утримувати кнопку живлення"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Утримуйте кнопку живлення, щоб активувати Асистента"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Утримуйте кнопку живлення, щоб відкрити відповідне меню"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Функція втримання кнопки живлення вимкнена"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Утримувати кнопку живлення"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Утримувати кнопку живлення, щоб відкрити"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"меню кнопки живлення"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"цифровий помічник"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Відкрити цифровий помічник"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Відкрити меню кнопки живлення"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Щоб користуватися, налаштуйте блокування екрана"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Утримувати, щоб активувати Асистента"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Асистент активується, коли ви утримуєте кнопку живлення"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Меню кнопки живлення й екстрених викликів:\nНатисніть одночасно кнопки живлення й збільшення гучності."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Вимкнути звук дзвінка:\nШвидкий запуск функції доступний у меню налаштування гучності."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Меню кнопки живлення:\nодночасно натисніть кнопки живлення та збільшення гучності"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Вимкнути звук дзвінка:\nдля швидкого запуску функції натисніть кнопку гучності"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Тривалість утримання"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Скоригуйте чутливість, указавши, скільки часу потрібно втримувати кнопку живлення"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Коротко"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index bee1f776..d7dd6d1 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"جب وہ Pixel Imprint کا استعمال کرتا ہے تو تصاویر اس کے فنگر پرنٹ ماڈل کو اپ ڈیٹ کرنے کے لیے استعمال کی جاتی ہیں۔ آپ کے بچے کے فنگر پرنٹ کا ماڈل تخلیق کرنے کے لیے استعمال کی جانے والی تصاویر کو کبھی بھی اسٹور نہیں کیا جاتا ہے لیکن فنگر پرنٹ ماڈل کو فون پر محفوظ طریقے سے اسٹور کیا جاتا ہے اور یہ کبھی بھی فون سے باہر نہیں جاتا ہے۔ فون پر سبھی کارروائیاں محفوظ طریقے سے ہوتی ہیں۔"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"آپ اپنے فنگر پرنٹ کی تصاویر اور ماڈل کو حذف کر سکتے ہیں یا ترتیبات میں کسی بھی وقت فنگر پرنٹ اَن لاک کی خصوصیت کو آف کر سکتے ہیں۔ فون پر فنگر پرنٹ کی تصاویر اور ماڈلز تب تک اسٹور ہوتے ہیں جب تک آپ انہیں حذف نہیں کرتے ہیں۔"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"آپ اور آپ کا بچہ اپنے فنگر پرنٹ کی تصاویر اور ماڈل کو حذف کر سکتے ہیں یا ترتیبات میں کسی بھی وقت فنگر پرنٹ اَن لاک کو آف کر سکتے ہیں۔ فون پر فنگر پرنٹ کی تصاویر اور ماڈلز تب تک اسٹور ہوتے ہیں جب تک انہیں حذف نہیں کیا جاتا ہے۔"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"جب آپ کا ارادہ نہ بھی ہو تب بھی آپ کا فون غیر مقفل ہو سکتا ہے مثال کے طور پر کوئی اور شخص فون کو آپ کی انگلی پر رکھ دے۔"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"جب آپ کا ارادہ نہ بھی ہو تب بھی آپ کا فون غیر مقفل ہو سکتا ہے مثال کے طور پر کوئی اور شخص فون کو آپ کی انگلی پر رکھ دے۔"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"جب آپ کا ارادہ نہ بھی ہو تب بھی آپ کا ٹیبلیٹ غیر مقفل ہو سکتا ہے مثال کے طور پر کوئی اور شخص ٹیبلیٹ کو آپ کی انگلی پر رکھ دے۔"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"جب آپ کا ارادہ نہ بھی ہو تب بھی آپ کا آلہ غیر مقفل ہو سکتا ہے مثال کے طور پر کوئی اور شخص آلے کو آپ کی انگلی پر رکھ دے۔"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"جب آپ کے بچے کا ارادہ نہ ہو تب بھی اس کا فون غیر مقفل ہو سکتا ہے جیسے کوئی اور شخص فون کو اس کی انگلی پر رکھ دے۔"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"بہترین نتائج کے لیے، ایک ایسے اسکرین پروٹیکٹر کا استعمال کریں جو Google کے لیے تیار کردہ سے سند یافتہ ہو۔ ممکن ہے کہ دوسرے اسکرین پروٹیکٹرز کے ساتھ آپ کا فنگر پرنٹ کام نہ کرے۔"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"بہترین نتائج کے لیے، ایک ایسے اسکرین پروٹیکٹر کا استعمال کریں جو Google کے لیے تیار کردہ سے سند یافتہ ہو۔ ممکن ہے کہ دوسرے اسکرین پروٹیکٹرز کے ساتھ آپ کے بچے کا فنگر پرنٹ کام نہ کرے۔"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"آلہ اور فنگر پرنٹ سینسر کے مقام کا خاکہ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"نام"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"ٹھیک ہے"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"پھر کوشش کریں"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"حذف کریں"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"سینسر کو ٹچ کریں"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"اپنی انگلی سینسر پر رکھیں اور ارتعاش محسوس ہونے کے بعد اٹھا لیں"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"ہوگیا"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"افوہ، یہ سینسر نہیں ہے"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"اپنے فون کے پشت پر سینسر کو ٹچ کریں۔ اپنی انڈیکس فنگر کا استعمال کریں۔"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"اندراج مکمل نہیں ہوا"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"فنگر پرنٹ اندراج کی وقت کی حد پوری ہو گئی۔ دوبارہ کوشش کریں۔"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"فنگر پرنٹ کے سیٹ اپ کا وقت ختم ہو گیا"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"ابھی دوبارہ کوشش کریں یا بعد میں ترتیبات میں اپنا فنگر پرنٹ سیٹ اپ کریں"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"فنگر پرنٹ اندراج نہیں ہوا۔ دوبارہ کوشش کریں یا مختلف انگلی استعمال کریں۔"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"کوئی دوسرا شامل کریں"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"آگے جائیں"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"اپنے فون کو حسب ضرورت بنائیں"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"مختلف اسٹائل، وال پیپرز، اور مزید بہت کچھ آزمائیں"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"اسکرین سیور"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"اسکرین سیور"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"اسکرین سیور کا استعمال کریں"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"ڈاک سے منسلک یا چارج ہونے کے دوران"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"دونوں صورتوں میں"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"چارج ہوتے وقت"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"ڈاک کیے ہونے پر"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"کبھی نہیں"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"آف"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"فون ڈاک کیے ہونے اور/یا سوئے ہوئے ہونے کے دوران کیا ہو اسے کنٹرول کرنے کیلئے، اسکرین سیور آن کریں۔"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"وقت آغاز"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"موجودہ اسکرین سیور"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"ترتیبات"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"خود کار چمک"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"جگانے کیلئے اٹھائیں"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"ايمبيئنٹ ڈسپلے"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN سیٹ کریں"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"دفتری پروفائل کا PIN سیٹ کریں"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"پیٹرن سیٹ کریں"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"اضافی سیکیورٹی کی خاطر، آلے کو غیر مقفل کرنے کے لیے ایک پیٹرن سیٹ کریں"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"دفتری پروفائل کا پیٹرن سیٹ کریں"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"فنگر پرنٹ کے استعمال کے لیے پاس ورڈ سیٹ کریں"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"فنگر پرنٹ کے استعمال کے لیے پیٹرن سیٹ کریں"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"ہنگامی ایپ"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"ایپ کی ترجیحات کو ری سیٹ کریں"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"ایپ کی ترجیحات کو ری سیٹ کریں؟"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"اس سے مندرجہ ذیل کیلئے تمام ترجیحات ری سیٹ ہو جائیں گی:\n\n"<li>"غیر فعال کردہ ایپس"</li>\n<li>"غیر فعال کردہ ایپس کی اطلاعات"</li>\n<li>"کارروائیوں کے لیے ڈیفالٹ ایپلیکیشنز"</li>\n<li>"ایپس کے لیے پس منظر کے ڈیٹا کی پابندیاں"</li>\n<li>"کوئی اجازتی پابندیاں"</li>\n\n"آپ کسی بھی ایپ کے ڈیٹا سے محروم نہیں ہوں گے۔"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"اس سے مندرجہ ذیل کیلئے تمام ترجیحات ری سیٹ ہو جائیں گی:\n\n"<li>"غیر فعال ایپس"</li>\n<li>"غیر فعال ایپ کی اطلاعات"</li>\n<li>"کارروائیوں کیلئے ڈیفالٹ ایپلیکیشنز"</li>\n<li>"ایپس کیلئے پس منظر کے ڈیٹا کی پابندیاں"</li>\n<li>"اجازت سے متعلق کوئی بھی پابندیاں"</li>\n<li>"بیٹری کے استعمال کی ترتیبات"</li>\n\n" آپ ایپ کے کسی بھی ڈیٹا سے محروم نہیں ہوں گے۔"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"ایپس کو ری سیٹ کریں"</string>
<string name="manage_space_text" msgid="9013414693633572277">"خالی جگہ کا نظم کریں"</string>
<string name="filter" msgid="9039576690686251462">"فلٹر"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"ترتیبات کو ری سیٹ کریں"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"ڈسپلے کا سائز اور ٹیکسٹ کی ترتیبات کو ری سیٹ کر دیا گیا ہے"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"ڈسپلے کا سائز اور ٹیکسٹ کو ری سیٹ کریں؟"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"آپ کے ڈسپلے کا سائز اور ٹیکسٹ کی ترجیحات فون کی اصل ترتیبات پر ری سیٹ ہو جائیں گی"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"آپ کے ڈسپلے کا سائز اور ٹیکسٹ کی ترجیحات فون کی اصل ترتیبات پر ری سیٹ ہو جائیں گی"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"آپ کے ڈسپلے کا سائز اور ٹیکسٹ کی ترجیحات ٹیبلیٹ کی اصل ترتیبات پر ری سیٹ ہو جائیں گی"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"ری سیٹ کریں"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"ویک اینڈ پر کوئی پلان ہے؟"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"ساحل کی طرف جانے کا پلان ہے۔ آپ بھی شامل ہونا چاہتے ہیں؟"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"پچھلے مکمل چارج کے بعد سے بیٹری کا کوئی استعمال نہیں"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"گزشتہ 24 گھنٹے میں بیٹری کا کوئی استعمال نہیں"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"دیگر صارفین"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"بچی ہوئی بیٹری کا اندازہ آپ کے آلے کے استعمال پر مبنی ہے"</string>
<string name="estimated_time_left" msgid="948717045180211777">"باقی تخمینی وقت"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"پوری طرح چارج ہونے تک"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"مکمل ہاٹ ورڈ اور تعامل"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"آسان اسپیچ ٹو ٹیکسٹ"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"یہ صوتی ان پٹ سروس ہمیشہ آن رہنے والی صوتی مانیٹرنگ کو انجام دے سکے گی اور آپ کی جانب سے آواز فعال کردہ ایپلیکیشنز کو کنٹرول کر سکے گی۔ یہ <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ایپلیکیشن سے آتی ہے۔ اس سروس کا استعمال فعال کریں؟"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"آلہ پر شناخت کی ترتیبات"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"آلہ پر شناخت"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"آلہ پر اسپیچ شناخت"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"ترجیحی انجن"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"انجن کی ترتیبات"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"اسپیچ کی شرح اور پچ"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"حذف کریں"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"اس سیشن میں موجود سبھی ایپس اور ڈیٹا کو حذف کر دیا جائے گا۔"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"ہٹائیں"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"مہمان (آپ)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"صارفین"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"دیگر صارفین"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"مہمان کی سرگرمی کو حذف کریں"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"مہمان وضع سے باہر نکلتے وقت تمام مہمان ایپس اور ڈیٹا کو حذف کریں"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"مہمان کی سرگرمی کو حذف کریں؟"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"اس مہمان سیشن سے ایپس اور ڈیٹا کو اب حذف کر دیا جائے گا، اور ہر دفعہ آپ کے مہمان وضع سے باہر نکلنے پر مہمان کی مستقبل کی تمام سرگرمی حذف کر دی جائے گی"</string>
<string name="user_enable_calling" msgid="264875360626905535">"فون کالز آن کریں"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"فون کالز اور SMS آن کریں"</string>
<string name="user_remove_user" msgid="8468203789739693845">"صارف کو حذف کریں"</string>
@@ -4007,13 +4021,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"سبھی \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" کی اطلاعات"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g> کی سبھی اطلاعات"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"تغیر پذیر اطلاعات"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> اطلاعات فی دن</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> اطلاع فی دن</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">فی دن <xliff:g id="NUMBER_1">%,d</xliff:g> اطلاعات</item>
+ <item quantity="one">فی دن <xliff:g id="NUMBER_0">%d</xliff:g> اطلاع</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> اطلاعات فی ہفتہ</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> اطلاع فی ہفتہ</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">فی ہفتہ <xliff:g id="NUMBER_1">%,d</xliff:g> اطلاعات</item>
+ <item quantity="one">فی ہفتہ <xliff:g id="NUMBER_0">%d</xliff:g> اطلاع</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"کبھی نہیں"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"آلے اور ایپ کی اطلاعات"</string>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"کچھ نہ کریں"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"وائبریٹ"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"خاموش کریں"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"فعال کرنے کے لیے، پہلے \"پاور بٹن کو چھوئیں اور دبائے رکھیں\" کو پاور مینو میں تبدیل کریں۔"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"فعال کرنے کے لیے، پہلے \"پاور بٹن کو چھوئیں اور دبائے رکھیں\" کو پاور مینو میں تبدیل کریں۔"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"نیٹ ورک کی تفصیلات"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"آپ کے آلے کا نام آپ کے فون پر موجود ایپس میں دکھائی دیتا ہے۔ آپ کے بلوٹوتھ آلات سے منسلک ہونے، Wi-Fi نیٹ ورک سے منسلک ہونے یا Wi-Fi ہاٹ اسپاٹ کو سیٹ اپ کرنے پر دوسرے لوگ بھی اسے دیکھ سکتے ہیں۔"</string>
<string name="devices_title" msgid="649715719278562515">"آلات"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"آلہ کے کنٹرولز"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"کارڈز اور پاسز"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"کارڈز اور پاسز"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"پاور بٹن کو چھوئیں اور دبائے رکھیں"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"اسسٹنٹ کے لیے چھوئیں اور دبائے رکھیں"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"پاور مینو کے لیے چھوئیں اور دبائے رکھیں"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"چھوئیں اور دبائے رکھیں غیر فعال ہے"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"پاور بٹن کو چھوئیں اور دبائے رکھیں"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"رسائی حاصل کرنے کے لیے پاور بٹن کو چھوئیں اور دبائے رکھیں"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"پاور مینو"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"ڈیجیٹل اسسٹنٹ"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"ڈیجیٹل اسسٹنٹ تک رسائی حاصل کریں"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"پاور مینو تک رسائی حاصل کریں"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"استعمال کرنے کے لیے پہلے ایک اسکرین لاک سیٹ کریں"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"اسسٹنٹ کے لیے ہولڈ کریں"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"پاور بٹن کو دبائے رکھ کر اسسٹنٹ کو متحرک کریں"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"پاور اور ایمرجنسی مینو:\nایک ہی وقت میں پاور اور والیوم بڑھانے کا بٹن دبائیں۔"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"گھنٹی بجنے کو روکیں:\nوالیوم مینو میں شارٹ کٹ دستیاب ہے۔"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"پاور مینو:\nبیک وقت پاور بٹن اور والیوم بڑھانے کے بٹن کو دبائیں"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"گھنٹی بجنے کو روکیں:\nشارٹ کٹ کے لیے والیوم بٹن کو دبائیں"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"دبانے اور ہولڈ رکھنے کا دورانیہ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"پاور بٹن کو کتنی دیر تک دبائے رکھنا ہے اس کا انتخاب کر کے حساسیت کو ایڈجسٹ کریں"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"مختصر ویڈیو"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 2bfc4c2..13317d7 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Pixel Imprint ishlatilganda barmoq izi modeli rasmlar yordamida yaratiladi. Farzandingiz barmoq izi modelini yaratishda ishlatiladigan rasmlar hech qachon saqlanmaydi, lekin barmoq izi modeli telefonda xavfsiz saqlanadi va hech qachon tashqariga yuklanmaydi. Barcha ishlar telefonda xavfsiz amalga oshiriladi."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Istalgan vaqt Sozlamalar orqali barmoq izi rasmlari va modelini oʻchirib tashlashingiz yoki barmoq izi bilan ochishni faolsizlantirishingiz mumkin. Barmoq izi rasmlari va modellari telefonda oʻchirilmaguncha saqlanadi."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Siz va farzandingiz istalgan vaqt Sozlamalar orqali barmoq izi modelini oʻchirib tashlashingiz yoki barmoq izi bilan ochishni faolsizlantirishingiz mumkin. Barmoq izi rasmlari va modellari telefonda oʻchirilmaguncha saqlanadi."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Telefonni sizning ixtiyoringizsiz kimdir uni barmogʻingizga tutgan holda qulfdan chiqarib olishi mumkin."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Telefonni sizning ixtiyoringizsiz kimdir uni barmogʻingizga tutgan holda qulfdan chiqarib olishi mumkin."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Planshetni sizning ixtiyoringizsiz kimdir uni barmogʻingizga tutgan holda qulfdan chiqarib olishi mumkin."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Qurilmani sizning ixtiyoringizsiz kimdir uni barmogʻingizga tutgan holda qulfdan chiqarib olishi mumkin."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Telefonni farzandingiz ixtiyorisiz kimdir uning barmogʻiga tutgan holda qulfdan chiqarib olishi mumkin."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Eng yaxshi natijalarga erishish uchun Made for Google sertifikatiga ega ekran himoyasidan foydalaning. Boshqa ekran himoyasida barmoq izi ishlamasligi mumkin."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Eng yaxshi natijalarga erishish uchun Made for Google sertifikatiga ega ekran himoyasidan foydalaning. Boshqa ekran himoyasida farzandingizning barmoq izi ishlamasligi mumkin."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ushbu rasmda barmoq izi skaneri qayerda joylashgani ko‘rsatilgan"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Nomi"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Qayta urinish"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"O‘chirish"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Sensorga tegining"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Barmoqni skanerga tekkizib, tebranishni his qilguncha bosib turing"</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Tayyor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Obbo, bu sensor emas."</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Telefonning orqasida joylashgan sensorga tegining. Ko‘rsatkich barmog‘ingizdan foydalaning."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Barmoq izi qayd qilinmadi"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Barmoq izini kiritish vaqti tugab qoldi. Qayta urinib ko‘ring."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Barmoq izini sozlash vaqti tugadi"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Hozir qaytadan urining yoki keyinroq Sozlamalar orqali barmoq izini sozlashingiz mumkin"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Barmoq izini kiritish amalga oshmadi. Qayta urinib ko‘ring yoki boshqa barmoqdan foydalaning."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Yana qo‘shish"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Keyingisi"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Telefoningizni moslashtiring"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Boshqa uslub va fon rasmlaridan foydalaning."</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Ekran lavhasi"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"ekran lavhasi"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Ekran lavhasidan foydalanish"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Quvvat yoki dok-stansiya"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Har doim"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Quvvat olayotganda"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Dok-stansiyaga ulanganda"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Hech qachon"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Yoqilmagan"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Telefon dok-stansiyaga ulanganda yoki uyqu rejimiga o‘tganida uning ekranida nima ko‘rinishini sozlash uchun ekran lavhasini yoqing."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Qachon boshlansin"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Joriy ekran lavhasi"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Sozlamalar"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Avtomatik yorqinlik"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Tik holatda faollashtirish"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Sezgir ekran"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"PIN kodni sozlang"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Ish profili uchun PIN kod tanlang"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Grafik kalitni sozlang"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Qoʻshimcha xavfsizlik oshirishni istasangiz, qurilmani ochish uchun grafik kalit oʻrnating"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Ishchi profil grafik kalitini sozlang"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Barmoq izidan foydalanish uchun parol o‘rnating"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Avval grafik kalit yarating"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Favqulodda bildirishnomalar ilovasi"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Standart sozlamalarni tiklash"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Standart sozlamalar tiklansinmi?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Quyidagi sozlamalar asliga qaytariladi:\n\n "<li>"Faolsizlantirilgan ilovalar"</li>\n" "<li>"Faolsizlantirilgan ilovalarning bildirishnomalari"</li>\n" "<li>"Muayyan amallar uchun birlamchi ilovalar"</li>\n" "<li>"Fonda internetdan foydalanishga nisbatan cheklovlar"</li>\n" "<li>"Ruxsatlar uchun barcha cheklovlar"</li>\n\n"Ilovalarga tegishli axborotlar saqlanib qoladi."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Quyidagi sozlamalar asliga qaytariladi:\n\n "<li>"Faolsizlantirilgan ilovalar"</li>\n" "<li>"Faolsizlantirilgan ilovalarning bildirishnomalari"</li>\n" "<li>"Muayyan amallar uchun birlamchi ilovalar"</li>\n" "<li>"Fonda internetdan foydalanishga nisbatan cheklovlar"</li>\n" "<li>"Ruxsatlar uchun barcha cheklovlar"</li>\n<li>"Batareya sarfi sozlamalari"</li>\n\n"Ilovalarga tegishli axborotlar saqlanib qoladi."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"OK"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Xotiradagi bo‘sh joy boshqaruvi"</string>
<string name="filter" msgid="9039576690686251462">"Saralash"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Sozlamalarni tiklash"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Ekran hajmi va matn sozlamalari tiklandi."</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Ekran hajmi va matn sozlamalari tiklansinmi?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Ekran hajmi va matn parametrlari telefondagi asl sozlamalarga qaytariladi"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Ekran hajmi va matn parametrlari telefondagi asl sozlamalarga qaytariladi"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Ekran hajmi va matn parametrlari planshetdagi asl sozlamalarga qaytariladi"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Tiklash"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Dam olish kunlari rejalar bormi?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Sohilga boramiz. Birga borasizmi?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Toʻliq quvvat olgandan keyin ishlatilmagan"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"24 soat ichida orqa fon rejimi ishlatilmagan"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Boshqa foydalanuvchilar"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Batareyaning qolgan vaqti qurilmadan qanday foydalanishingiz asosida taxminiy hisoblangan"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Taxminiy qolgan vaqt"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Quvvati to‘lishigacha qolgan vaqt"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Takomillashgan rejim: ovozli buyruqlar yordamida boshqarish"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Oddiy rejim: nutqni aniqlash"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Ushbu ovoz bilan yozish xizmati sizning nomingizdan ovozli buyruqlarni muntazam kuzatishi va ovozli buyruqlarni ishlatiladigan ilovalarni nazorat qilishi mumkin. Bu amallar <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ilovasi orqali bajariladi. Mazkur xizmatdan foydalanmoqchimisiz?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Qurilmada tanish sozlamalari"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Qurilmada tanish"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Qurilmada nutqni aniqlash"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Asosiy vosita"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Sintezator sozlamalari"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Nutq tezligi va ohang"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"O‘chirib tashlash"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Ushbu seansdagi barcha ilovalar va ma’lumotlar o‘chirib tashlanadi."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Olib tashlash"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Mehmon (Siz)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Foydalanuvchilar"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Boshqa foydalanuvchilar"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Mehmon faoliyatini tozalash"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Mehmon rejimidan chiqishda barcha mehmon ilovalari va maʼlumotlarini oʻchirish"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Mehmon faoliyati tozalansinmi?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Joriy mehmon seansidagi ilova va maʼlumotlar hozir tozalanadi va har safar mehmon rejimidan chiqish vaqtida barcha keyingi mehmon faolliklari tozalanadi"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Telefon chaqiruvlari"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Telefon chaqiruvlari va SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Foydalanuvchini olib tashlash"</string>
@@ -4009,13 +4023,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Barcha <xliff:g id="APP_NAME">%1$s</xliff:g> bildirishnomalari"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Barcha <xliff:g id="APP_NAME">%1$s</xliff:g> bildirishnomalari"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Moslashuvchan bildirishnomalar"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ta bildirishnoma (kuniga)</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> ta bildirishnoma (kuniga)</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Har kuni taxminan <xliff:g id="NUMBER_1">%,d</xliff:g> ta bildirishnoma</item>
+ <item quantity="one">Har kuni taxminan <xliff:g id="NUMBER_0">%d</xliff:g> ta bildirishnoma</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> ta bildirishnoma (haftasiga)</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> ta bildirishnoma (haftasiga)</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Har hafta taxminan <xliff:g id="NUMBER_1">%,d</xliff:g> ta bildirishnoma</item>
+ <item quantity="one">Har hafta taxminan <xliff:g id="NUMBER_0">%d</xliff:g> ta bildirishnoma</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Hech qachon"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Qurilma va ilova bildirishnomalari"</string>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Hech narsa qilinmasin"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Tebranish"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Sukut"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Yoqish uchun quvvat menyusida “Quvvat tugmasini bosib turing” sozlamasini oʻzgartiring."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Yoqish uchun quvvat menyusida “Quvvat tugmasini bosib turing” sozlamasini oʻzgartiring."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Tarmoq tafsilotlari"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Telefoningizdagi barcha ilovalarga qurilma nomi koʻrinadi. Qurilmalarga Bluetooth yoki Wi-Fi tarmoq orqali ulanganingizda, Wi-Fi hotspot sozlaganingizda boshqa foydalanuvchilarni ularni koʻrishi mumkin."</string>
<string name="devices_title" msgid="649715719278562515">"Qurilmalar"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"qurilmalarni boshqarish"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Kartalar va talonlar"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"kartalar va talonlar"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Quvvat tugmasini bosib turish"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Bosib tursa, Assistent ishga tushadi"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Bosib turgandan keyin Quvvat tugmasi menyusini chiqadi"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Bosib turish faolsizlantirilgan"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Quvvat tugmasini bosib turing"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Ochish uchun quvvat tugmasini bosib turing"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Quvvat menyusi"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Raqamli assistent"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Raqamli assistentni ochish"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Quvvat menyusini ochish"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Avval ekran qulfini sozlang"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Bosib turganda Assistentni ochish"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Assistentni ochish uchun quvvat tugmasini bosib turing"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Quvvat va favqulodda chaqiruvlar tugmasi menyusi:\nBir vaqtda quvvat va tovushni balandlatish tugmalarini bosib turing."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Chaqiruv ovozini oʻchirish:\nTovush menyusida tezkor ishga tushirish funksiyasi mavjud."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Quvva menyusi:\nQuvvat va tovushni balandlatish tugmalarini birga bosing"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Jiringlamasin:\nYorliq uchun tovush tugmasini bosing"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Bosib turish davomiyligi"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Quvvat tugmasi qanchalik uzoq bosib turilishini tanlash orqali sezuvchanlikni sozlang"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Qisqa"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index b32679b..29571a0 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Khi con bạn dùng Pixel Imprint, các hình ảnh sẽ được dùng để cập nhật mẫu vân tay của con. Các hình ảnh dùng để tạo mẫu vân tay không bao giờ được lưu trữ. Tuy nhiên, mẫu vân tay sẽ được lưu trữ an toàn trên điện thoại và chỉ lưu trên điện thoại của con bạn mà thôi. Toàn bộ quá trình xử lý sẽ diễn ra một cách an toàn trên điện thoại."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Bạn có thể xóa các hình ảnh và mẫu vân tay của mình hoặc tắt tính năng Mở khóa bằng vân tay bất cứ lúc nào trong phần Cài đặt. Các hình ảnh và mẫu vân tay được lưu trữ trên điện thoại cho đến khi bạn xóa đi."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Bạn và con bạn có thể xóa hình ảnh và mẫu vân tay của con hoặc tắt tính năng Mở khóa bằng vân tay bất cứ lúc nào trong phần Cài đặt. Các hình ảnh và mẫu vân tay sẽ được lưu trữ trên điện thoại này cho đến khi bạn hoặc con bạn xóa đi."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Điện thoại của bạn có thể mở khóa ngay cả khi bạn không định làm vậy, chẳng hạn như khi có người cầm điện thoại đưa lên ngón tay bạn."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Điện thoại của bạn có thể mở khóa ngay cả khi bạn không định làm vậy, chẳng hạn như khi có người cầm điện thoại đưa lên ngón tay bạn."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Máy tính bảng của bạn có thể mở khóa ngay cả khi bạn không định làm vậy, chẳng hạn như khi có người cầm điện thoại đưa lên ngón tay bạn."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Thiết bị của bạn có thể mở khóa ngay cả khi bạn không định làm vậy, chẳng hạn như khi có người cầm điện thoại đưa lên ngón tay bạn."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Điện thoại của con bạn có thể mở khóa ngay cả khi con không định làm vậy, chẳng hạn như khi có người cầm điện thoại đưa lên ngón tay của con."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Để đạt kết quả tốt nhất, hãy sử dụng miếng bảo vệ màn hình có chứng nhận Made for Google. Với các miếng bảo vệ màn hình khác, thiết bị có thể không nhận dạng được dấu vân tay của bạn."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Để đạt kết quả tốt nhất, hãy sử dụng miếng bảo vệ màn hình có chứng nhận Made for Google. Với các miếng bảo vệ màn hình khác, thiết bị có thể không nhận dạng được dấu vân tay của con bạn."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Hình minh họa với vị trí cảm biến vân tay và thiết bị"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Tên"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"OK"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Thử lại"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Xóa"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Chạm vào cảm biến"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Đặt ngón tay lên cảm biến và nhấc lên sau khi cảm thấy rung"</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Xong"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Rất tiếc, đó không phải là cảm biến"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Chạm vào cảm biến ở mặt sau điện thoại. Dùng ngón tay trỏ."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Chưa đăng ký được"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Thời gian đăng ký vân tay đã hết hạn. Hãy thử lại."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Hết thời gian thiết lập vân tay"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Hãy thử lại ngay bây giờ hoặc thiết lập vân tay của bạn sau trong Cài đặt"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Đăng ký dấu vân tay không hoạt động. Hãy thử lại hoặc sử dụng ngón tay khác."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Thêm vân tay khác"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Tiếp theo"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Tùy chỉnh điện thoại"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Thử nhiều kiểu, hình nền và các tùy chọn khác"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Trình bảo vệ màn hình"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"trình bảo vệ màn hình"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Sử dụng trình bảo vệ màn hình"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Khi sạc hoặc gắn vào đế sạc"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Khi gắn đế và sạc"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Trong khi sạc"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Khi gắn vào đế sạc"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Không bao giờ"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Tắt"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Để kiểm soát những gì diễn ra khi điện thoại được gắn đế và/hoặc ở chế độ ngủ, hãy bật trình bảo vệ màn hình."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Thời điểm khởi động"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Trình bảo vệ màn hình hiện tại"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Cài đặt"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Độ sáng tự động"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Nhấc lên để đánh thức"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Màn hình sáng"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Đặt mã PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Đặt mã PIN cho hồ sơ công việc"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Đặt hình mở khóa"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Để tăng cường bảo mật, hãy đặt hình mở khóa để mở khóa thiết bị"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Đặt hình mở khóa cho hồ sơ công việc"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Đặt mật khẩu để dùng vân tay"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Đặt hình mở khóa để dùng vân tay"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Ứng dụng khẩn cấp"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Đặt lại các lựa chọn ưu tiên về ứng dụng"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Đặt lại các lựa chọn ưu tiên về ứng dụng?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Thao tác này sẽ đặt lại tất cả các lựa chọn ưu tiên cho:\n\n"<li>"Ứng dụng bị tắt"</li>\n<li>"Thông báo ứng dụng bị tắt"</li>\n<li>"Ứng dụng mặc định cho các thao tác"</li>\n<li>"Giới hạn dữ liệu nền cho ứng dụng"</li>\n<li>"Bất kỳ giới hạn về quyền nào"</li>\n\n"Bạn sẽ không mất bất kỳ dữ liệu ứng dụng nào."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Thao tác này sẽ đặt lại tất cả các lựa chọn ưu tiên cho:\n\n"<li>"Ứng dụng bị tắt"</li>\n<li>"Thông báo ứng dụng bị tắt"</li>\n<li>"Ứng dụng mặc định cho các thao tác"</li>\n<li>"Giới hạn dữ liệu nền cho ứng dụng"</li>\n<li>"Mọi giới hạn về quyền"</li>\n<li>"Chế độ cài đặt mức sử dụng pin"</li>\n\n"Bạn sẽ không mất bất kỳ dữ liệu ứng dụng nào."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Đặt lại ứng dụng"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Quản lý dung lượng"</string>
<string name="filter" msgid="9039576690686251462">"Bộ lọc"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Đặt lại chế độ cài đặt"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Cài đặt kích thước hiển thị và văn bản đã được đặt lại"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Đặt lại văn bản và kích thước hiển thị?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Các lựa chọn ưu tiên của bạn về văn bản và kích thước hiển thị sẽ đặt lại về chế độ cài đặt ban đầu của điện thoại"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Các lựa chọn ưu tiên của bạn về văn bản và kích thước hiển thị sẽ đặt lại về chế độ cài đặt ban đầu của điện thoại"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Các lựa chọn ưu tiên của bạn về văn bản và kích thước hiển thị sẽ thiết lập máy tính bảng trở lại chế độ cài đặt ban đầu"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Đặt lại"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Cuối tuần này có kế hoạch gì chưa?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Tớ đi biển, cậu có muốn đi cùng không?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Không sử dụng pin kể từ lần sạc đầy gần đây nhất"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Không sử dụng pin trong 24 giờ qua"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Người dùng khác"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Thời lượng pin còn lại ước tính là dựa trên mức sử dụng thiết bị"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Thời gian còn lại ước tính"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Cho tới khi được sạc đầy"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"Tương tác và từ nóng đầy đủ"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Lời nói thành văn bản đơn giản"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Dịch vụ nhập bằng giọng nói này có thể thực hiện theo dõi bằng giọng nói luôn bật và kiểm soát các ứng dụng hỗ trợ giọng nói thay mặt cho bạn. Dịch vụ này đến từ <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Cho phép sử dụng dịch vụ này?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Cài đặt nhận dạng trên thiết bị"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Nhận dạng trên thiết bị"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Nhận dạng giọng nói trên thiết bị"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Công cụ ưu tiên"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Cài đặt công cụ"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Tốc độ lời nói và cao độ"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Xóa"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Tất cả ứng dụng và dữ liệu trong phiên này sẽ bị xóa."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Xóa"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Khách (Bạn)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Người dùng"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Người dùng khác"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Xoá hoạt động ở chế độ khách"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Xoá mọi ứng dụng và dữ liệu ở chế độ khách khi thoát khỏi chế độ khách"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Xoá hoạt động ở chế độ khách?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Các ứng dụng và dữ liệu trong phiên khách này sẽ bị xoá ngay bây giờ, và tất cả hoạt động sau này ở chế độ khách sẽ bị xoá mỗi khi bạn thoát khỏi chế độ khách"</string>
<string name="user_enable_calling" msgid="264875360626905535">"Bật cuộc gọi điện thoại"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Bật cuộc gọi điện thoại và SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Xóa người dùng"</string>
@@ -4009,13 +4023,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Tất cả các thông báo của ứng dụng \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Tất cả thông báo của <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Thông báo thích ứng"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> thông báo mỗi ngày</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> thông báo mỗi ngày</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">Khoảng <xliff:g id="NUMBER_1">%,d</xliff:g> thông báo mỗi ngày</item>
+ <item quantity="one">Khoảng <xliff:g id="NUMBER_0">%d</xliff:g> thông báo mỗi ngày</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> thông báo mỗi tuần</item>
- <item quantity="one">~<xliff:g id="NUMBER_0">%d</xliff:g> thông báo mỗi tuần</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">Khoảng <xliff:g id="NUMBER_1">%,d</xliff:g> thông báo mỗi tuần</item>
+ <item quantity="one">Khoảng <xliff:g id="NUMBER_0">%d</xliff:g> thông báo mỗi tuần</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Không bao giờ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Thông báo của thiết bị và ứng dụng"</string>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Không làm gì"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Rung"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Tắt tiếng"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Để bật, trước tiên, hãy thay đổi tùy chọn \"Nhấn và giữ nút nguồn\" thành trình đơn nguồn."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Để bật, trước tiên, hãy thay đổi tuỳ chọn \"Nhấn và giữ nút nguồn\" thành trình đơn nguồn."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Chi tiết mạng"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Tên thiết bị của bạn sẽ hiển thị với các ứng dụng trên điện thoại. Những người khác cũng có thể thấy tên thiết bị này khi bạn kết nối với thiết bị Bluetooth, mạng Wi-Fi hoặc thiết lập một điểm phát sóng Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Thiết bị"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"tùy chọn điều khiển thiết bị"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Thẻ và vé"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"thẻ và vé"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Nhấn và giữ nút nguồn"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Nhấn và giữ để bật Trợ lý"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Nhấn và giữ để mở trình đơn nguồn"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Nhấn và giữ để tắt"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Nhấn và giữ nút nguồn"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Nhấn và giữ nút nguồn để truy cập"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Trình đơn nguồn"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Trợ lý kỹ thuật số"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Truy cập trợ lý kỹ thuật số"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Truy cập trình đơn nguồn"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Để sử dụng, trước tiên, hãy đặt phương thức khóa màn hình"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Giữ để mở Trợ lý"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Giữ nút nguồn để kích hoạt Trợ lý"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Trình đơn nguồn và Trình đơn khẩn cấp:\nNhấn đồng thời Nút nguồn và Nút tăng âm lượng."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Ngăn đổ chuông:\nPhím tắt có sẵn trong trình đơn âm lượng."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Trình đơn nguồn:\nNhấn đồng thời nút nguồn và nút tăng âm lượng"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Ngăn đổ chuông:\n Nhấn nút âm lượng để truy cập lối tắt"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Khoảng thời gian nhấn và giữ"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Điều chỉnh độ nhạy bằng cách chọn khoảng thời gian nhấn và giữ nút nguồn"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Ngắn"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 288cf96..da402c6 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"在您的孩子使用 Pixel Imprint 时,系统会使用图像来更新其指纹模型。系统绝不会存储孩子用来创建指纹模型的图像,只会将指纹模型安全地存储在手机上,并且绝不会外泄。整个处理过程都是在手机上安全进行。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"您可以随时在“设置”部分删除您的指纹图片和模型或关闭指纹解锁功能。指纹图片和模型会存储在手机上,直到您将其删除为止。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"您和您的孩子可以随时在“设置”部分删除其指纹图片和模型或关闭指纹解锁功能。指纹图片和模型会存储在手机上,直到被删除为止。"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"您的手机有可能会意外解锁,例如有人让手机触碰到您的手指时。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"您的手机有可能会意外解锁,例如有人让手机触碰到您的手指时。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"您的平板电脑有可能会意外解锁,例如有人让平板电脑触碰到您的手指时。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"您的设备有可能会意外解锁,例如有人让设备触碰到您的手指时。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"您孩子的手机有可能会意外解锁,例如有人让您孩子的手机触碰到您孩子的手指时。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"为获得最佳效果,请使用获得 Made For Google 认证的屏幕保护膜。如果使用其他屏幕保护膜,系统可能无法识别您的指纹。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"为获得最佳效果,请使用获得 Made For Google 认证的屏幕保护膜。如果使用其他屏幕保护膜,系统可能无法识别您孩子的指纹。"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"关于设备和指纹传感器位置的图示说明"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"名称"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"确定"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"重试"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"删除"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"触摸传感器"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"将您的手指放在指纹传感器上,感觉到振动后移开手指"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"完成"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"糟糕,这不是传感器"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"请用您的食指触摸位于手机背面的传感器。"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"未完成注册"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"指纹注册操作超时,请重试。"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"指纹设置已超时"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"您可以立即重试,或之后在“设置”部分进行指纹设置"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"无法注册指纹。请重试或使用其他手指。"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"再添加一个"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"下一步"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"自定义您的手机"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"尝试不同的样式、壁纸等"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"屏保"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"屏保"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"使用屏保"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"充电或插入基座时"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"以上任一情况"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"充电时"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"插入基座时"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"一律不"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"已关闭"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"要控制手机在插入基座时和/或休眠状态下的行为,请开启屏保功能。"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"启用时机"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"当前的屏保"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"设置"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"自动调整亮度"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"拿起设备时唤醒"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"主动显示"</string>
@@ -1946,6 +1947,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"设置 PIN 码"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"设置工作资料 PIN 码"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"设置图案"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"为了提高安全性,请为该设备设置解锁图案"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"设置工作资料图案"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"要使用指纹,请设置密码"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"要使用指纹,请设置解锁图案"</string>
@@ -2099,7 +2101,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"紧急警报应用"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"重置应用偏好设置"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"要重置应用偏好设置吗?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"此操作将会重置以下所有偏好设置:\n\n"<li>"已停用的应用"</li>\n<li>"已停用的应用通知"</li>\n<li>"执行操作的默认应用"</li>\n<li>"应用的后台流量限制"</li>\n<li>"任何权限限制"</li>\n\n"您将不会丢失任何应用数据。"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"此操作将会重置以下所有偏好设置:\n\n"<li>"已停用的应用"</li>\n<li>"已停用的应用通知"</li>\n<li>"执行操作的默认应用"</li>\n<li>"应用的后台流量限制"</li>\n<li>"任何权限限制"</li>\n<li>"电池用量设置"</li>\n\n"您将不会丢失任何应用数据。"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"重置应用"</string>
<string name="manage_space_text" msgid="9013414693633572277">"管理空间"</string>
<string name="filter" msgid="9039576690686251462">"过滤"</string>
@@ -2354,7 +2356,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"重置设置"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"已重置显示大小和文字设置"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"是否重置显示大小和文字?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"您的显示大小和文字偏好设置将重置为手机的原始设置"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"您的显示大小和文字偏好设置将重置为手机的原始设置"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"您的显示大小和文字偏好设置将重置为平板电脑的原始设置"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"重置"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"周末有安排了吗?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"打算去海滩游玩。要一起来吗?"</string>
@@ -2934,6 +2937,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"自电池上次充满电后未使用过"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"过去 24 小时内未使用过"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"其他用户"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"系统会根据设备使用情况估算电池的剩余续航时间"</string>
<string name="estimated_time_left" msgid="948717045180211777">"预计剩余时间"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"剩余充电时间"</string>
@@ -3023,6 +3027,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"全语音启动指令和互动"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"简单的语音转文字"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"此语音输入服务能够始终进行语音监测,并能替您控制所有支持语音功能的应用。该服务由“<xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>”提供。要启用此服务吗?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"设备端识别服务设置"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"设备端识别"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"设备端语音识别"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"首选引擎"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"引擎设置"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"语速和音调"</string>
@@ -3415,6 +3422,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"删除"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"此会话中的所有应用和数据都将被删除。"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"移除"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"访客(您)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"用户"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"其他用户"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"删除访客活动记录"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"退出访客模式时删除所有访客应用和数据"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"要删除访客活动记录吗?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"此访客会话中的应用和数据将会立即删除;日后您每次退出访客模式时,系统都会删除访客活动记录"</string>
<string name="user_enable_calling" msgid="264875360626905535">"开启通话功能"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"开启通话和短信功能"</string>
<string name="user_remove_user" msgid="8468203789739693845">"删除用户"</string>
@@ -4007,11 +4021,11 @@
<string name="notification_switch_label" msgid="8029371325967501557">"所有“<xliff:g id="APP_NAME">%1$s</xliff:g>”通知"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"所有<xliff:g id="APP_NAME">%1$s</xliff:g>通知"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"自适应通知功能"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
<item quantity="other">每天大约 <xliff:g id="NUMBER_1">%,d</xliff:g> 条通知</item>
<item quantity="one">每天大约 <xliff:g id="NUMBER_0">%d</xliff:g> 条通知</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
<item quantity="other">每周大约 <xliff:g id="NUMBER_1">%,d</xliff:g> 条通知</item>
<item quantity="one">每周大约 <xliff:g id="NUMBER_0">%d</xliff:g> 条通知</item>
</plurals>
@@ -5255,7 +5269,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"不发出任何铃声"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"振动"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"静音"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"如需启用,请先从“按住电源按钮”改为电源菜单。"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"如需启用,请先从“按住电源按钮”改为电源菜单。"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"网络详情"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"您的设备名称会显示在手机上的应用中。此外,当您连接到蓝牙设备、连接到 WLAN 网络或设置 WLAN 热点时,其他人可能也会看到您的设备名称。"</string>
<string name="devices_title" msgid="649715719278562515">"设备"</string>
@@ -5542,15 +5556,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"设备控制器"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"银行卡和卡券"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"银行卡和卡券"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"按住电源按钮"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"按住电源按钮将启动 Google 助理"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"按住电源按钮将调出电源菜单"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"通过按住电源按钮启动 Google 助理的功能已停用"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"按住电源按钮"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"按住电源按钮即可访问"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"电源菜单"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"数字助理"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"访问数字助理"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"访问电源菜单"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"需先设置屏幕锁定方式才能使用"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"长按电源按钮启动 Google 助理"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"长按电源按钮即可启动 Google 助理"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"“电源和急救信息”菜单:\n同时按电源按钮和音量调高按钮。"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"阻止响铃:\n音量菜单中提供了快捷方式。"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"电源菜单:\n同时按下电源按钮和音量调高按钮"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"阻止响铃:\n按下音量按钮即可显示快捷键"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"按住电源按钮的持续时间"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"通过选择按住电源按钮的持续时间来调节灵敏度"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"短"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 4f032ad..f2bf163 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"使用 Pixel Imprint 時,系統會使用圖片來更新其指紋模型。系統不會儲存子女用來建立指紋模型的圖片,只會將指紋模型安全地存放在手機上,但絕不會傳送到手機以外的地方。整個處理過程都會安全地在手機上進行。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"您隨時可以前往「設定」刪除指紋圖像和模型,或停用指紋解鎖功能。指紋圖像和模型會儲存在手機上,直到您刪除為止。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"您和子女可隨時前往「設定」刪除指紋圖片和模型或停用「指紋解鎖」功能。指紋圖片和模型會儲存在手機上,直至其刪除為止。"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"您的手機有可能會意外解鎖,例如有人讓您的手指觸碰到手機。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"您的手機有可能會意外解鎖,例如有人讓您的手指觸碰到手機。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"您的平板電腦有可能會意外解鎖,例如有人讓您的手指觸碰到平板電腦。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"您的裝置有可能會意外解鎖,例如有人讓您的手指觸碰到裝置。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"您子女的手機有可能會意外解鎖,例如有人讓其手指觸碰到手機。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"為獲得最佳效果,請使用已通過 Made for Google 認證的螢幕保護貼。如果使用其他螢幕保護貼,系統可能無法辨識您的指紋。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"為獲得最佳效果,請使用已通過 Made for Google 認證的螢幕保護貼。如果使用其他螢幕保護貼,系統可能無法辨識子女的指紋。"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"裝置和指紋感應器位置圖示"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"名稱"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"確定"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"再試一次"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"刪除"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"輕觸感應器"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"請將手指放在感應器上,並在感到震動時移開"</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"完成"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"糟糕,這不是感應器"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"請使用食指輕觸位於手機背面的感應器。"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"尚未完成註冊"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"註冊指紋過程逾時,請重新嘗試。"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"指紋設定逾時"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"您可以立即重試,亦可以稍後再前往「設定」設定指紋"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"無法註冊指紋,請重試或使用另一隻手指。"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"新增其他"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"下一步"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"自訂您的手機"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"嘗試其他樣式和桌布等"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"螢幕保護程式"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"螢幕保護程式"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"使用螢幕保護程式"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"充電或放上插座時"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"任何一個狀態"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"充電時"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"放上插座時"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"永不"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"關閉"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"如要控制手機在插座上和/或休眠時的操作,請開啟螢幕保護程式。"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"啟用時間"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"目前的螢幕保護程式"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"設定"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"自動調整亮度"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"拿起即可喚醒"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"微光螢幕"</string>
@@ -1949,6 +1950,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"設定 PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"設定工作設定檔 PIN"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"設定解鎖圖案"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"為提升安全性,建議您設定解鎖裝置的圖案"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"設定工作設定檔解鎖圖案"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"如要使用指紋,請設定密碼"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"如要使用指紋,請設定上鎖圖案"</string>
@@ -2102,7 +2104,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"緊急應用程式"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"重設應用程式偏好設定"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"重設應用程式偏好設定?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"此操作會重設以下所有偏好設定:\n\n"<li>"已停用的應用程式"</li>\n<li>"已停用的應用程式通知"</li>\n<li>"執行操作的預設應用程式"</li>\n<li>"應用程式的背景數據限制"</li>\n<li>"任何權限限制"</li>\n\n"您不會失去任何應用程式資料。"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"此操作會重設以下所有偏好設定:\n\n"<li>"已停用的應用程式"</li>\n<li>"已停用的應用程式通知"</li>\n<li>"執行操作的預設應用程式"</li>\n<li>"應用程式的背景資料限制"</li>\n<li>"任何權限限制"</li>\n<li>"電池用量設定"</li>\n\n"您不會失去任何應用程式資料。"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"重設應用程式"</string>
<string name="manage_space_text" msgid="9013414693633572277">"管理空間"</string>
<string name="filter" msgid="9039576690686251462">"篩選"</string>
@@ -2357,7 +2359,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"重設設定"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"已重設顯示大小和文字設定"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"要重設顯示大小和文字嗎?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"顯示大小和文字偏好設定將重設為手機原始設定"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"顯示大小和文字偏好設定將重設為手機原始設定"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"顯示大小和文字偏好設定將重設為平板電腦原始設定"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"重設"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"你禮拜六日會做咩?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"會去沙灘。一齊去?"</string>
@@ -2937,6 +2940,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"上次充滿電後未使用電池"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"過去 24 小時未使用電池"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"其他使用者"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"根據裝置的使用情況估計剩餘電量"</string>
<string name="estimated_time_left" msgid="948717045180211777">"估計剩餘時間"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"剩餘充電時間"</string>
@@ -3026,6 +3030,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"完全啟動字詞與互動"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"簡易語音轉文字"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"這項語音輸入服務由 <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> 提供,可隨時監控語言輸入,並代您控制具備語音操控功能的應用程式。您要啟用這項服務嗎?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"裝置上識別設定"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"裝置上識別"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"裝置上語音識別"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"首選引擎"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"引擎設定"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"語音速率和音調"</string>
@@ -3418,6 +3425,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"刪除"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"這個工作階段中的所有應用程式和資料都會被刪除。"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"移除"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"訪客 (您)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"使用者"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"其他使用者"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"刪除訪客活動"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"結束訪客模式時刪除所有訪客應用程式和資料"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"要刪除訪客活動嗎?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"系統現在會刪除此訪客工作階段中的應用程式和資料;日後每次結束訪客模式時,系統都會刪除所有未來的訪客活動"</string>
<string name="user_enable_calling" msgid="264875360626905535">"開啟通話功能"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"開啟通話和短訊功能"</string>
<string name="user_remove_user" msgid="8468203789739693845">"刪除使用者"</string>
@@ -4010,13 +4024,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"所有「<xliff:g id="APP_NAME">%1$s</xliff:g>」通知"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"所有「<xliff:g id="APP_NAME">%1$s</xliff:g>」通知"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"自動調節通知"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">~每天 <xliff:g id="NUMBER_1">%,d</xliff:g> 個通知</item>
- <item quantity="one">~每天 <xliff:g id="NUMBER_0">%d</xliff:g> 個通知</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">每日約 <xliff:g id="NUMBER_1">%,d</xliff:g> 個通知</item>
+ <item quantity="one">每日約 <xliff:g id="NUMBER_0">%d</xliff:g> 個通知</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">~每星期 <xliff:g id="NUMBER_1">%,d</xliff:g> 個通知</item>
- <item quantity="one">~每星期 <xliff:g id="NUMBER_0">%d</xliff:g> 個通知</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">每星期約 <xliff:g id="NUMBER_1">%,d</xliff:g> 個通知</item>
+ <item quantity="one">每星期約 <xliff:g id="NUMBER_0">%d</xliff:g> 個通知</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"永不"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"裝置和應用程式通知"</string>
@@ -5258,7 +5272,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"不執行任何操作"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"震動"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"靜音"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"如要啟用,請先將「按住開關按鈕」變更為電源選單。"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"如要啟用,請先將「按住開關按鈕」變更為電源選單。"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"網絡詳細資料"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"您在手機上的應用程式可以取得您的裝置名稱。當您連接藍牙裝置或 Wi-Fi 網絡,或設定 Wi-Fi 熱點時,其他人亦可能會看到您的裝置名稱。"</string>
<string name="devices_title" msgid="649715719278562515">"裝置"</string>
@@ -5545,15 +5559,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"裝置控制"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"付款卡和票卡"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"付款卡和票卡"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"按住開關按鈕"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"按住以啟用「Google 助理」"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"按住以使用電源選單"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"已停用按住功能"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"按住開關按鈕"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"按住開關按鈕即可存取"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"電源選單"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"數碼助理"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"存取數碼助理"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"存取電源選單"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"需要先設定上鎖畫面才能使用"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"按住即可啟動「Google 助理」"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"按住開關按鈕即可啟動「Google 助理」"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"電源和緊急選單:\n同時按下「電源」和「調高音量」。"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"暫停響鈴:\n音量選單提供快速鍵。"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"電源選單:\n同時按下開關按鈕和調高音量按鈕"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"暫停響鈴:\n按下音量按鈕即可顯示捷徑"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"按住開關按鈕的時間長度"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"選擇按住開關按鈕的時間長度即可調整靈敏度"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"短"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 9b38437..c830058 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"孩子使用 Pixel Imprint 時產生的圖像會做為系統更新指紋模型的依據。系統不會儲存建立指紋模型時使用的圖像,但會將指紋模型安全存放在手機上,而且絕對不會外洩。整個處理過程都是在手機上進行,安全有保障。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"你隨時可以前往「設定」刪除指紋圖像和模型,或是停用指紋解鎖功能。指紋圖像和模型會儲存在手機上,直到你刪除為止。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"你和孩子隨時可以前往「設定」刪除指紋圖像和模型,或停用指紋解鎖功能。指紋圖像和模型會儲存在手機上,直到你或孩子刪除為止。"</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"你的手機有可能會意外解鎖,例如有人讓你的手指觸碰到手機。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"你的手機有可能會意外解鎖,例如有人讓你的手指觸碰到手機。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"您的平板電腦有可能會意外解鎖,例如有人讓您的手指觸碰到平板電腦。"</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"您的裝置有可能會意外解鎖,例如有人讓您的手指觸碰到裝置。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"孩子的手機有可能會意外解鎖,例如有人讓他們的手指觸碰到手機。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"為獲得最佳效果,請使用 Made For Google 認證的螢幕保護貼。如果使用其他螢幕保護貼,系統可能無法辨識你的指紋。"</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"為獲得最佳效果,請使用 Made For Google 認證的螢幕保護貼。如果使用其他螢幕保護貼,系統可能無法辨識孩子的指紋。"</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"裝置指紋感應器位置插圖"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"名稱"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"確定"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"重試"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"刪除"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"輕觸感應器"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"將你的手指放在感應器上,感到震動即可移開"</string>
@@ -593,8 +596,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"完成"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"糟糕,這不是感應器"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"使用食指輕觸手機背面的感應器。"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"未完成註冊"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"指紋註冊操作逾時,請再試一次。"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"指紋設定已逾時"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"您可以立即重試,也可以稍後再前往「設定」進行指紋設定"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"無法註冊指紋。請再試一次或使用不同的手指。"</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"新增另一個"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"下一步"</string>
@@ -1450,17 +1453,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"自訂你的手機"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"試試不同的樣式、桌布和其他項目"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"螢幕保護程式"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"螢幕保護程式"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"使用螢幕保護程式"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"充電或安置於座架上時"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"以上任一情況"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"充電時"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"安置於座架上時"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"永遠不要"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"關閉"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"如要控制手機安置於座架上和/或休眠時的設定,請開啟螢幕保護程式。"</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"啟用時機"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"目前的螢幕保護程式"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"設定"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"自動調整亮度"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"舉起即可喚醒"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"微光螢幕"</string>
@@ -1948,6 +1949,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"設定 PIN 碼"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"設定工作資料夾 PIN 碼"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"設定解鎖圖案"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"為提升安全性,建議你設定裝置的解鎖圖案"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"設定工作資料夾解鎖圖案"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"如要使用指紋,請設定密碼"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"如要使用指紋,請設定解鎖圖案"</string>
@@ -2101,7 +2103,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"緊急應用程式"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"重設應用程式偏好設定"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"重設應用程式偏好設定?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"這麼做會重設下列項目的所有偏好設定:\n\n"<li>"已停用的應用程式"</li>\n<li>"已停用的應用程式通知"</li>\n<li>"執行動作的預設應用程式"</li>\n<li>"應用程式背景資料限制"</li>\n<li>"任何權限限制"</li>\n\n"你不會遺失任何應用程式資料。"</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"這麼做會重設下列項目的所有偏好設定:\n\n"<li>"已停用的應用程式"</li>\n<li>"已停用的應用程式通知"</li>\n<li>"執行動作的預設應用程式"</li>\n<li>"應用程式背景資料限制"</li>\n<li>"任何權限限制"</li>\n<li>"電池用量設定"</li>\n\n"你不會遺失任何應用程式資料。"</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"重設應用程式"</string>
<string name="manage_space_text" msgid="9013414693633572277">"管理空間"</string>
<string name="filter" msgid="9039576690686251462">"篩選"</string>
@@ -2356,7 +2358,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"重設設定"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"已重設顯示大小和文字設定"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"要重設顯示大小和文字嗎?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"顯示大小和文字偏好設定將重設為手機原始設定"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"顯示大小和文字偏好設定將重設為手機原始設定"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"您的顯示大小和文字偏好設定將重設回平板電腦原始設定"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"重設"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"週末有什麼計畫嗎?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"我要去海邊玩,要一起去嗎?"</string>
@@ -2936,6 +2939,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"從上次充飽電後未曾使用"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"過去 24 小時未曾使用"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"其他使用者"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"系統會依據裝置的使用情形估算剩餘電量"</string>
<string name="estimated_time_left" msgid="948717045180211777">"預估剩餘時間"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"充飽所需時間"</string>
@@ -3025,6 +3029,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"全語音啟動字詞與互動服務"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"簡易語音轉文字"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"這項語音輸入服務由 <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> 應用程式提供,可隨時監控語音輸入,而且會替你管理所有支援語音功能的應用程式。要啟用這項服務嗎?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"裝置端辨識設定"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"裝置端辨識"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"裝置端語音辨識"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"偏好的引擎"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"引擎設定"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"語音速率和音調"</string>
@@ -3417,6 +3424,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"刪除"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"這個工作階段中的所有應用程式和資料都會遭到刪除。"</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"移除"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"訪客 (你)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"使用者"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"其他使用者"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"刪除訪客活動"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"離開訪客模式時刪除所有訪客應用程式和資料"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"要刪除訪客活動嗎?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"系統將立即刪除這個訪客工作階段中的應用程式和資料,日後只要你離開訪客模式,系統都會將該次訪客活動全部刪除"</string>
<string name="user_enable_calling" msgid="264875360626905535">"開啟通話功能"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"開啟通話和簡訊功能"</string>
<string name="user_remove_user" msgid="8468203789739693845">"刪除使用者"</string>
@@ -4009,13 +4023,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」的所有通知"</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」的所有通知"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"自動調整通知"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="other">每天大約 <xliff:g id="NUMBER_1">%,d</xliff:g> 則通知</item>
- <item quantity="one">每天大約 <xliff:g id="NUMBER_0">%d</xliff:g> 則通知</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="other">每天約 <xliff:g id="NUMBER_1">%,d</xliff:g> 則通知</item>
+ <item quantity="one">每天約 <xliff:g id="NUMBER_0">%d</xliff:g> 則通知</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="other">每週大約 <xliff:g id="NUMBER_1">%,d</xliff:g> 則通知</item>
- <item quantity="one">每週大約 <xliff:g id="NUMBER_0">%d</xliff:g> 則通知</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="other">每週約 <xliff:g id="NUMBER_1">%,d</xliff:g> 則通知</item>
+ <item quantity="one">每週約 <xliff:g id="NUMBER_0">%d</xliff:g> 則通知</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"永遠不要"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"裝置和應用程式通知"</string>
@@ -5257,7 +5271,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"不執行任何動作"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"震動"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"靜音"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"如要啟用,請先將設定從「按住電源鍵」變更為電源按鈕選單。"</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"如要啟用,請先將設定從「按住電源鍵」變更為電源按鈕選單。"</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"網路詳細資料"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"你在手機上的應用程式會取得手機的裝置名稱。此外,當你連上藍牙裝置、Wi-Fi 網路或者設定 Wi-Fi 無線基地台時,其他人可能也會看到這個裝置名稱。"</string>
<string name="devices_title" msgid="649715719278562515">"裝置"</string>
@@ -5544,15 +5558,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"裝置控制"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"卡片和票證"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"卡片和票證"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"按住電源鍵"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"按住即可使用 Google 助理"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"按住即可使用電源按鈕選單"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"無法以按住電源鍵的方式停用 Google 助理"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"按住電源鍵"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"按住電源鍵即可存取"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"電源按鈕選單"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"數位助理"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"存取數位助理"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"存取電源按鈕選單"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"必須先設定螢幕鎖定才能使用"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"長按即可啟動 Google 助理"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"按住電源按鈕一段時間即可啟動 Google 助理"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"電源按鈕和緊急功能選單:\n同時按下電源鍵和調高音量鍵。"</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"暫停響鈴:\n音量按鈕選單裡有這項功能的捷徑。"</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"電源按鈕選單:\n同時按下電源鍵和調高音量按鈕"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"暫停響鈴:\n按下音量按鈕即可顯示捷徑"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"按住電源鍵的時間長度"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"選擇按住電源鍵的時間長度即可調整靈敏度"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"短"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 68b10ea..27bc4f1 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -464,7 +464,9 @@
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_3" msgid="5908959250804145997">"Uma usebenzisa i-Pixel Imprint, izithombe zisetshenziselwa ukubuyekeza imodeli yayo yesigxivizo seminwe. Izithombe ezisetshenziselwe ukudala imodeli yesigxivizo seminwe yengane yakho azilokothi zigcinwe, kodwa imodeli yesigxivizo seminwe igcinwa ngokuphephile kwifoni futhi ayilokothi ishiye ifoni. Konke ukucubungula kwenzeka ngokuphepha kwifoni."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_4" msgid="3948305045484131665">"Ungasula izithombe zezigxivizo zeminwe nemodeli, noma uvale Ukuvula Izigxivizo zeminwe noma nini Kumasethingi. Izithombe zezigxivizo zeminwe namamodeli kugcinwa kwifoni kuze kube yilapho uzisula."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4" msgid="4983770600405797515">"Wena nengane yakho ningasula izithombe zeminwe yayo nemodeli, noma uvale Ukuvula ngesigxivizo somunwe noma kunini Kumasethingi. Izithombe namamodeli esigxivizo seminwe agcinwa efonini aze asulwe."</string>
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" msgid="2018885671994058605">"Ifoni yakho ingavulwa lapho ungahlosile, njengalapho uma othile eyibambela ngasomunweni wakho."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default" msgid="2018885671994058605">"Ifoni yakho ingavulwa lapho ungahlosile, njengalapho uma othile eyibambela ngasomunweni wakho."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet" msgid="7390208617531513381">"Ithebulethi yakho ingavulwa lapho ungahlosile, njengalapho uma othile eyibambela ngasomunweni wakho."</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device" msgid="1662571028234764290">"Idivayisi yakho ingavulwa lapho ungahlosile, njengalapho uma othile eyibambela ngasomunweni wakho."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5" msgid="8356551505082794682">"Ifoni yengane yakho ingavulwa lapho ingahlosile, njengokuthi uma umuntu eyibamba ayibeke emunweni wayo."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_6" msgid="5314031490467481499">"Ukuze uthole imiphumela engcono, sebenzisa isivikeli sesikrini Esenzelwe I-Google esigunyaziwe. Kwezinye izivikeli zesikrini, isigxivizo sakho somunwe singase singasebenzi."</string>
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_6" msgid="3563942520716110478">"Ukuze uthole imiphumela engcono, sebenzisa isivikeli sesikrini Esenzelwe I-Google esigunyaziwe. Kwezinye izivikeli zesikrini, isigxivizo somunwe wengane yakho ungase ungasebenzi."</string>
@@ -514,6 +516,7 @@
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="3065850549419750523">"Ukuvezwa ngedivayisi ngendawo yenzwa yezigxivizo zeminwe"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="7298812463228440333">"Igama"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="4074335979239208021">"KULUNGILE"</string>
+ <string name="security_settings_fingerprint_enroll_dialog_try_again" msgid="8117874972945407006">"Zama futhi"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="6027141901007342389">"Susa"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="7391368057800077604">"Thinta inzwa"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="5010227772754175346">"Beka umunwe wakho kunzwa uphinde uphakamise ngemuva kokuthi uzwe ukudlidliza"</string>
@@ -591,8 +594,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="9198775984215057337">"Kwenziwe"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="5742429501012827526">"Hhayi bo, akuyona inzwa leyo"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7172969336386036998">"Thinta inzwa emuva kwefoni yakho. Sebenzisa umunwe wakho wokukhomba."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="132085362209418770">"Ukubhaliswa akuzange kuqedwe"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="5479647886550695766">"Isikhathi sokubhaliswa kwezigxivizo zeminwe sifinyelelwe. Zama futhi."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="8582267776559099046">"Ukusethwa kwesigxivizo somunwe kuphelelwe yisikhathi"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="467965101751652156">"Zama futhi manje noma usethe isigxivizo somunwe wakho ngokuhamba kwesikhathi Kumasethingi"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="6068935528640241271">"Ukubhaliswa kwezigxivizo zeminwe akuzange kusebenze. Zama futhi noma sebenzisa umunwe ohlukile."</string>
<string name="fingerprint_enroll_button_add" msgid="6652490687672815760">"Engeza enye"</string>
<string name="fingerprint_enroll_button_next" msgid="1034110123277869532">"Okulandelayo"</string>
@@ -1448,17 +1451,15 @@
<string name="style_suggestion_title" msgid="1213747484782364775">"Enza ngendlela oyifisayo ifoni yakho"</string>
<string name="style_suggestion_summary" msgid="4271131877800968159">"Zama izitayela ezihlukile, izithombe zangemuva, nokuningi"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Isigcini sihenqo"</string>
+ <string name="keywords_screensaver" msgid="7249337959432229172">"isigcini sesikrini"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Sebenzisa isilondolozi sesikrini"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Ngenkathi ishaja noma idokhiwe"</string>
- <string name="screensaver_settings_summary_either_short" msgid="2126139984738506920">"Noma"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Ngenkathi ishaja"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Ngenkathi idokhiwe"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Akusoze"</string>
<string name="screensaver_settings_summary_off" msgid="8720357504939106923">"Valiwe"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1166343194760238835">"Ukuze ulawule ukuthi kwenzakale ini uma ifoni idokhiwe kanye/noma ilele, vula isilondolozi sikrini."</string>
<string name="screensaver_settings_when_to_dream" msgid="8145025742428940520">"Iqala nini"</string>
<string name="screensaver_settings_current" msgid="390472865895976891">"Isithombe-skrini samanje"</string>
- <string name="screensaver_settings_button" msgid="6159236558934930238">"Izilungiselelo"</string>
<string name="automatic_brightness" msgid="4599827881929079513">"Ukukhanya okuzenzakalelayo"</string>
<string name="lift_to_wake_title" msgid="8994218158737714046">"Ilifti yokuvuka"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Isibonisi esi-Ambient"</string>
@@ -1947,6 +1948,7 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Setha Iphinikhodi"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Setha Iphinikhodi yomsebenzi"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Setha iphethini"</string>
+ <string name="lockpassword_choose_your_pattern_description" msgid="6808109256008481046">"Ngokuphepha okungeziwe, setha iphethini ukuze uvule idivayisi"</string>
<string name="lockpassword_choose_your_profile_pattern_header" msgid="3101811498330756641">"Setha iphethini yomsebenzi"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="3167261267229254090">"Ukuze usebenzise izigxivizo zeminwe, setha iphasiwedi"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="4707788269512303400">"Ukuze usebenzise izigxivizo zeminwe, setha iphethini"</string>
@@ -2100,7 +2102,7 @@
<string name="default_emergency_app" msgid="1929974800666613803">"Uhlelo lokusebenza lwesimo esiphuthumayo"</string>
<string name="reset_app_preferences" msgid="8861758340732716573">"Setha kabusha izintandokazi zezinhlelo zokusebenza"</string>
<string name="reset_app_preferences_title" msgid="8935136792316050759">"Setha kabusha izintandokazi zohlelo lokusebenza?"</string>
- <string name="reset_app_preferences_desc" msgid="6509978724602405805">"Lokhu kuzosetha kabusha konke okuncamelayo kwe-:\n\n"<li>"Izinhlelo zokusebenza ezikhutshaziwe"</li>\n<li>"Izaziso zezinhlelo zokusebenza ezikhutshaziwe"</li>\n<li>"Izinhlelo zokusebenza ezizenzakalelayo zezenzo"</li>\n<li>"Imikhawulo yedatha yangemuva yezinhlelo zokusebenza"</li>\n<li>"Noma yimiphi imikhawulo yemvume"</li>\n\n"Ngeke uze ulahlekelwe noma iyiphi idatha yohlelo lokusebenza."</string>
+ <string name="reset_app_preferences_desc" msgid="8550782670650158299">"Lokhu kuzosetha kabusha konke okuncanyelwayo kwe-:\n\n"<li>"Ama-app akhutshaziwe"</li>\n<li>"Izaziso zez-app ezikhutshaziwe"</li>\n<li>"Ama-app okuzenzakalelayo wezenzo"</li>\n<li>"Imikhawulo yedatha yangemuva yama-app"</li>\n<li>"Noma yimiphi imikhawulo yemvume"</li>\n<li>"Isethingi yokusetshenziswa kwebhethri"</li>\n\n"Ngeke uze ulahlekelwe yinoma iyiphi idatha ye-app."</string>
<string name="reset_app_preferences_button" msgid="2591318711372850058">"Setha kabusha izinhlelo zokusebenza"</string>
<string name="manage_space_text" msgid="9013414693633572277">"Lawula isikhala"</string>
<string name="filter" msgid="9039576690686251462">"Hlunga"</string>
@@ -2355,7 +2357,8 @@
<string name="accessibility_text_reading_reset_button_title" msgid="5960753279788187669">"Setha kabusha amasethingi"</string>
<string name="accessibility_text_reading_reset_message" msgid="824644303661026712">"Usayizi wesibonisi namasethingi ombhalo asethwe kabusha"</string>
<string name="accessibility_text_reading_confirm_dialog_title" msgid="2865331351355690389">"Setha kabusha usayizi wokubonisa nombhalo?"</string>
- <string name="accessibility_text_reading_confirm_dialog_message" msgid="517090197003540264">"Okuncanyelwayo kwakho kosayizi wokubonisa nombhalo kuzosethwa kabusha kube amasethingi angokoqobo wefoni yakho"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="517090197003540264">"Okuncanyelwayo kwakho kosayizi wokubonisa nombhalo kuzosethwa kabusha kube amasethingi angokoqobo wefoni yakho"</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="1291629915534156671">"Usayizi wakho wokubonisa nokuncamelayo kombhalo kuzosethwa kabusha kumasethingi ethebulethi oqobo"</string>
<string name="accessibility_text_reading_confirm_dialog_reset_button" msgid="8215800137850243736">"Setha kabusha"</string>
<string name="accessibility_text_reading_conversation_message_1" msgid="7883952203831957831">"Unezinhlelo zempelasonto?"</string>
<string name="accessibility_text_reading_conversation_message_2" msgid="8112160435318635856">"Ngiya olwandle. Ufuna ukuhamba nami?"</string>
@@ -2935,6 +2938,7 @@
<string name="battery_not_usage" msgid="1472275761547230196">"Akusetshenziswanga kusuka ekushajweni kokugcina okugcwele"</string>
<string name="battery_not_usage_24hr" msgid="8397519536160741248">"Akusetshenziswanga emahoreni angama-24 adlule"</string>
<string name="battery_usage_without_time" msgid="1346894834339420538"></string>
+ <string name="battery_usage_other_users" msgid="9002643295562500693">"Abanye abasebenzisi"</string>
<string name="advanced_battery_graph_subtext" msgid="6816737986172678550">"Ukulinganiselwa kwebhethri okusele kususelwa ekusetshenzisweni kwedivayisi yakho"</string>
<string name="estimated_time_left" msgid="948717045180211777">"Isikhathi esilinganiselwe esisele"</string>
<string name="estimated_charging_time_left" msgid="2287135413363961246">"Kuze kushaje ngokuphelele"</string>
@@ -3024,6 +3028,9 @@
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"I-hotword ephelele nokusebenzisana"</string>
<string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"Inkulumo elula eya embhalweni"</string>
<string name="voice_interaction_security_warning" msgid="7962884055885987671">"Le sevisi yokufaka yezwi izokwazi ukwenza ukwengamela okuhlala kuvuliwe kwezwi nokulawula izinhlelo zokusebenza ezinikwe amandla ukulawula izwi engxenyeni yakho. Ivela kuhlelo lokusebenza le <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Nika amandla ukusetshenziswa kwale sevisi?"</string>
+ <string name="on_device_recognition_settings" msgid="6503160369314598069">"Amasethingi okubonwa kudivayisi"</string>
+ <string name="on_device_recognition_settings_title" msgid="7137599722039096545">"Ukubonwa kudivayisi"</string>
+ <string name="on_device_recognition_settings_summary" msgid="3292736423223499348">"Ukubonwa kwengxoxo kudivayisi"</string>
<string name="tts_engine_preference_title" msgid="7808775764174571132">"Injini encanyelwayo"</string>
<string name="tts_engine_settings_title" msgid="1298093555056321577">"Izilungiselelo zenjini"</string>
<string name="tts_sliders_title" msgid="6901146958648426181">"Ukulinganisela kwenkulumo nokuzwakala"</string>
@@ -3416,6 +3423,13 @@
<string name="user_delete_button" msgid="3833498650182594653">"Susa"</string>
<string name="user_exit_guest_confirm_message" msgid="8995296853928816554">"Zonke izinhlelo zokusebenza nedatha kulesi sikhathi zizosuswa."</string>
<string name="user_exit_guest_dialog_remove" msgid="7067727314172605181">"Susa"</string>
+ <string name="guest_category_title" msgid="5562663588315329152">"Isihambeli (Wena)"</string>
+ <string name="user_category_title" msgid="4368580529662699083">"Abasebenzisi"</string>
+ <string name="other_user_category_title" msgid="7089976887307643217">"Abanye abasebenzisi"</string>
+ <string name="remove_guest_on_exit" msgid="8202972371459611066">"Sula umsebenzi wesihambeli"</string>
+ <string name="remove_guest_on_exit_summary" msgid="3969962695703280353">"Sula wonke ama-app wesihambeli nedatha lapho uphuma kwimodi yesivakashi"</string>
+ <string name="remove_guest_on_exit_dialog_title" msgid="2310442892536079416">"Sula umsebenzi wesihambeli?"</string>
+ <string name="remove_guest_on_exit_dialog_message" msgid="8112409834021851883">"Ama-app nedatha okusuka kulesi sikhathi sesihambeli kuzosulwa manje, wonke umsebenzi wesihambeli wesikhathi esizayo uzosulwa njalo lapho uphuma kwimodi yesivakashi."</string>
<string name="user_enable_calling" msgid="264875360626905535">"Vula amakholi wamafoni"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"Vula amakholi wefoni ne-SMS"</string>
<string name="user_remove_user" msgid="8468203789739693845">"Susa umsebenzisi"</string>
@@ -4008,13 +4022,13 @@
<string name="notification_switch_label" msgid="8029371325967501557">"Zonke izaziso ze-\"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
<string name="notification_app_switch_label" msgid="4422902423925084193">"Zonke izaziso ze-<xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="default_notification_assistant" msgid="243718059890346442">"Izaziso eziguqukayo"</string>
- <plurals name="notifications_sent_daily" formatted="false" msgid="1479283620504341566">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> izaziso ngosuku</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> izaziso ngosuku</item>
+ <plurals name="notifications_sent_daily" formatted="false" msgid="1319135950258375284">
+ <item quantity="one">Cishe izaziso ezingu-<xliff:g id="NUMBER_1">%,d</xliff:g> ngosuku</item>
+ <item quantity="other">Cishe izaziso ezingu-<xliff:g id="NUMBER_1">%,d</xliff:g> ngosuku</item>
</plurals>
- <plurals name="notifications_sent_weekly" formatted="false" msgid="4913443431857170519">
- <item quantity="one">~<xliff:g id="NUMBER_1">%,d</xliff:g> izaziso zanjalo ngeviki</item>
- <item quantity="other">~<xliff:g id="NUMBER_1">%,d</xliff:g> izaziso zanjalo ngeviki</item>
+ <plurals name="notifications_sent_weekly" formatted="false" msgid="7604454969366376305">
+ <item quantity="one">Cishe izaziso ezingu-<xliff:g id="NUMBER_1">%,d</xliff:g> ngeviki</item>
+ <item quantity="other">Cishe izaziso ezingu-<xliff:g id="NUMBER_1">%,d</xliff:g> ngeviki</item>
</plurals>
<string name="notifications_sent_never" msgid="9081278709126812062">"Soze"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Idivayisi nezaziso ze-app"</string>
@@ -5256,7 +5270,7 @@
<string name="prevent_ringing_option_none" msgid="7776676007180834163">"Ungenzi lutho"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="3435299885425754304">"Dlidlizela"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3939350522269337013">"Thulisa"</string>
- <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="3193459102328015340">"Ukuze unike amandla, shintsha okuthi \"Cindezela futhi ubambe inkinobho yamandla\" kube imenyu yamandla."</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary" msgid="8070356204398144241">"Ukuze unike amandla, qala ngokushintsha okuthi \"Cindezela futhi ubambe inkinobho yamandla\" kube yimenyu yamandla."</string>
<string name="pref_title_network_details" msgid="7329759534269363308">"Imininingwane yenethiwekhi"</string>
<string name="about_phone_device_name_warning" msgid="1938930553285875166">"Igama ledivayisi yakho libonakala kwizinhlelo zokusebenza kufoni yakho. Lingase futhi libonwe abanye abantu lapho uxhuma kumadivayisi we-Bluetooth, uxhuma kunethiwekhi ye-Wi-Fi noma usetha i-hotspot ye-Wi-Fi."</string>
<string name="devices_title" msgid="649715719278562515">"Amadivayisi"</string>
@@ -5543,15 +5557,15 @@
<string name="quick_controls_lower" msgid="6675573610027367819">"izilawuli zensiza"</string>
<string name="cards_passes_sentence" msgid="1866311782387946944">"Amakhadi nokudlula"</string>
<string name="cards_passes_lower" msgid="2429722007109957877">"amakhadi nokudlula"</string>
- <string name="power_menu_setting_name" msgid="7291642927216934159">"Cindezela futhi ubambe inkinobho yamandla"</string>
- <string name="power_menu_summary_long_press_for_assist_enabled" msgid="5322150755041458952">"Cindezela futhi ubambele Umsizi"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu" msgid="5165714995895517816">"Cindezela futhi ubambele imenyu yamandla"</string>
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action" msgid="2831598484771657432">"Ukucindezela futhi ubambe kukhutshaziwe"</string>
+ <string name="power_menu_setting_name" msgid="2394440932633137229">"Cindezela futhi ubambe inkinobho yamandla"</string>
+ <string name="power_menu_long_press_category_title" msgid="1051146091093775002">"Cindezela futhi ubambe inkinobho yamandla ukuze ufinyelele"</string>
+ <string name="power_menu_long_press_for_power_menu_title" msgid="477584639843663599">"Imenyu yamandla"</string>
+ <string name="power_menu_long_press_for_assistant_title" msgid="6557738348262616455">"Umsizi odijithali"</string>
+ <string name="power_menu_summary_long_press_for_assistant" msgid="32706459458422952">"Finyelela umsizi odijithali"</string>
+ <string name="power_menu_summary_long_press_for_power_menu" msgid="7617247135239683710">"Finyelela imenyu yamandla"</string>
<string name="lockscreen_privacy_not_secure" msgid="3251276389681975912">"Ukuze usebenzise, qala ngokusetha ukukhiya kwesikrini"</string>
- <string name="power_menu_long_press_for_assist" msgid="2016813721240777737">"Bambela Umsizi"</string>
- <string name="power_menu_long_press_for_assist_summary" msgid="8251928804984560312">"Cupha Umsizi ngokubamba inkinobho yamandla"</string>
- <string name="power_menu_power_volume_up_hint" msgid="1733051433583045623">"Imenyu Yamandla Nesimo Esiphuthumayo:\nCindezela Amandla Nevolumu Phezulu ngesikhathi esifanayo."</string>
- <string name="power_menu_power_prevent_ringing_hint" msgid="5786494894009727654">"Nqabela ukukhalisa:\nIsifushaniso sitholakala kwimenyu yevulumu."</string>
+ <string name="power_menu_power_volume_up_hint" msgid="5619917593676125759">"Imenyu yamandla:\nCindezela inkinobho yamandla kanye nenkinobho yokunyusa ivolumu ngesikhathi esifanayo"</string>
+ <string name="power_menu_power_prevent_ringing_hint" msgid="1169955014711158873">"Vimba ukukhalisa:\nCindezela inkinobho yevolumu ukuze uthole isinqamuleli"</string>
<string name="power_menu_long_press_for_assist_sensitivity_title" msgid="1626808509158422185">"Isikhathi sokucindezela futhi ubambe"</string>
<string name="power_menu_long_press_for_assist_sensitivity_summary" msgid="7550610071666801935">"Lungisa ukuzwela ngokukhetha ukuthi uyicindezela futhi ubambe isikhathi esingakanani inkinobho yamandla"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Okufushane"</string>
diff --git a/res/values/bools.xml b/res/values/bools.xml
new file mode 100644
index 0000000..25c3e0d
--- /dev/null
+++ b/res/values/bools.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2022, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<resources>
+ <!-- Referenced outside of Settings to confirm bug fixed - bug involved multiple
+ pending intents with difference only in intent extras, which doesn't work. -->
+ <bool name="config_isSafetyCenterLockScreenPendingIntentFixed">true</bool>
+</resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index 2f70315..4180154 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -622,6 +622,12 @@
<!-- Whether to put the apps with system UID into system component bucket or not -->
<bool name="config_battery_combine_system_components">false</bool>
+ <!-- The extra value for battery tip -->
+ <integer name="config_battery_extra_tip_value">12</integer>
+
+ <!-- Whether to enable the advanced vpn feature. The default is not to. -->
+ <bool name="config_advanced_vpn_enabled">false</bool>
+
<!-- An array of uid name for which packages exempt from Wi-Fi permission check. -->
<string-array name="config_exempt_wifi_permission_uid_name" translatable="false">
<item>@string/config_settingsintelligence_package_name</item>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index c9557c1..c035320 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -141,6 +141,7 @@
<dimen name="avatar_margin_top">56dp</dimen>
<dimen name="avatar_margin_end">24dp</dimen>
<dimen name="multiple_users_avatar_size">20dp</dimen>
+ <dimen name="multiple_users_user_icon_size">40dp</dimen>
<!-- Homepage -->
<dimen name="homepage_title_margin_bottom">8dp</dimen>
@@ -493,8 +494,18 @@
<dimen name="sims_select_margin_bottom">24dp</dimen>
<dimen name="sims_select_margin_top">8dp</dimen>
+ <!-- Biometrics UDFPS enroll default dimensions-->
+ <dimen name="enroll_padding_start">0dp</dimen>
+ <dimen name="enroll_padding_end">0dp</dimen>
+ <dimen name="enroll_margin_end">0dp</dimen>
+ <dimen name="rotation_90_enroll_padding_start">0dp</dimen>
+ <dimen name="rotation_90_enroll_padding_end">0dp</dimen>
+ <dimen name="rotation_90_enroll_margin_end">0dp</dimen>
+
<!-- QR code picture size -->
<dimen name="qrcode_preview_margin">40dp</dimen>
<dimen name="qrcode_preview_radius">30dp</dimen>
<dimen name="qrcode_icon_size">27dp</dimen>
+ <!-- Margin for SD card setup completion Image -->
+ <dimen name="setup_completion_margin_top">88dp</dimen>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9cdbad7..083064f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -184,6 +184,11 @@
<!-- Keywords for bluetooth pairing item [CHAR LIMIT=30] -->
<string name="keywords_add_bt_device">bluetooth</string>
+
+ <!-- Button to help user to pair right ear of the hearing aid device. It will show when only one of the hearing aid device set is connected. [CHAR LIMIT=20] -->
+ <string name="bluetooth_pair_right_ear_button">Pair right ear</string>
+ <!-- Button to help user to pair left ear of the hearing aid device. It will show when only one of the hearing aid device set is connected. [CHAR LIMIT=20] -->
+ <string name="bluetooth_pair_left_ear_button">Pair left ear</string>
<!-- Connected devices settings. Title of the dialog to hint user to pair other ear of the hearing aid device. Shows when only one of the hearing aid device set is connected. [CHAR LIMIT=25] -->
<string name="bluetooth_pair_other_ear_dialog_title">Pair your other ear</string>
<!-- Connected devices settings. Message of the dialog to hint user to pair right ear of the hearing aid device. Shows when only left side of hearing aid device set is connected. [CHAR LIMIT=NONE] -->
@@ -1034,7 +1039,11 @@
<!-- Introduction description message shown in fingerprint enrollment introduction screen in setup wizard when asking for parental consent. [CHAR LIMIT=NONE] -->
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_4">You and your child can delete their fingerprint images and model, or turn off Fingerprint Unlock at any time in Settings. Fingerprint images and models are stored on the phone until they\u2019re deleted.</string>
<!-- Introduction description message shown in fingerprint enrollment introduction screen in setup wizard. [CHAR LIMIT=NONE] -->
- <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5">Your phone can be unlocked when you don\u2019t intend to, like if someone holds it up to your finger.</string>
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="default">Your phone can be unlocked when you don\u2019t intend to, like if someone holds it up to your finger.</string>
+ <!-- Introduction description message shown in fingerprint enrollment introduction screen in setup wizard. [CHAR LIMIT=NONE] -->
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="tablet">Your tablet can be unlocked when you don\u2019t intend to, like if someone holds it up to your finger.</string>
+ <!-- Introduction description message shown in fingerprint enrollment introduction screen in setup wizard. [CHAR LIMIT=NONE] -->
+ <string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_5" product="device">Your device can be unlocked when you don\u2019t intend to, like if someone holds it up to your finger.</string>
<!-- Introduction description message shown in fingerprint enrollment introduction screen in setup wizard when asking for parental consent. [CHAR LIMIT=NONE] -->
<string name="security_settings_fingerprint_v2_enroll_introduction_footer_message_consent_5">Your child\u2019s phone can be unlocked when they don\u2019t intend to, like if someone holds it up to their finger.</string>
<!-- Introduction description message shown in fingerprint enrollment introduction screen in setup wizard. [CHAR LIMIT=NONE] -->
@@ -1138,6 +1147,8 @@
<string name="security_settings_fingerprint_enroll_dialog_name_label">Name</string>
<!-- Button text shown in fingerprint dialog that allows the user to rename a fingerprint template [CHAR LIMIT=22] -->
<string name="security_settings_fingerprint_enroll_dialog_ok">OK</string>
+ <!-- Button text shown in fingerprint dialog that allows the user to try and enroll again[CHAR LIMIT=22] -->
+ <string name="security_settings_fingerprint_enroll_dialog_try_again">Try again</string>
<!-- Button text shown in fingerprint dialog that allows the user to delete the fingerprint template [CHAR LIMIT=22] -->
<string name="security_settings_fingerprint_enroll_dialog_delete">Delete</string>
<!-- Title shown in fingerprint enrollment dialog to begin enrollment [CHAR LIMIT=29]-->
@@ -1294,9 +1305,9 @@
<!-- Dialog message for dialog which shows when user touches the icon on the screen, instead of the sensor at the back [CHAR LIMIT=NONE] -->
<string name="security_settings_fingerprint_enroll_touch_dialog_message">Touch the sensor on the back of your phone. Use your index finger.</string>
<!-- Dialog message for dialog which shows when finger cannot be enrolled. [CHAR LIMIT=45] -->
- <string name="security_settings_fingerprint_enroll_error_dialog_title">Enrollment was not completed</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title">Fingerprint setup timed out</string>
<!-- Dialog message for dialog which shows when finger cannot be enrolled due to being idle too long. -->
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message">Fingerprint enrollment time limit reached. Try again.</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message">Try again now or set up your fingerprint later in Settings</string>
<!-- Dialog message for dialog which shows when finger cannot be enrolled due to an internal error or fingerprint can't be read. -->
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message">Fingerprint enrollment didn\'t work. Try again or use a different finger.</string>
<!-- Button text shown at the end of enrollment that allows the user to add another fingerprint -->
@@ -3228,30 +3239,26 @@
<string name="style_suggestion_title">Customize your phone</string>
<!-- Styles and Wallpapers summary [CHAR_LIMIT=70] -->
<string name="style_suggestion_summary">Try different styles, wallpapers, and more</string>
- <!-- Display settings screen, trigger for screen saver options -->
+ <!-- Display settings screen, trigger for screen saver options [CHAR LIMIT=30] -->
<string name="screensaver_settings_title">Screen saver</string>
+ <!-- List of synonyms used in the settings search bar to find the “Screen saver”. [CHAR LIMIT=NONE] -->
+ <string name="keywords_screensaver">screensaver</string>
<!-- The title for the toggle which disables/enables screen savers [CHAR_LIMIT=30] -->
<string name="screensaver_settings_toggle_title">Use screen saver</string>
- <!-- Display settings screen, summary fragment for screen saver options, activated when docked or asleep and charging -->
+ <!-- Display settings screen, summary fragment for screen saver options, activated when docked or asleep and charging [CHAR LIMIT=35] -->
<string name="screensaver_settings_summary_either_long">While charging or docked</string>
- <!-- Dream settings screen, dialog option, activated when docked or asleep and charging -->
- <string name="screensaver_settings_summary_either_short">Either</string>
- <!-- Display settings screen, summary fragment for screen saver options, activated when asleep and charging -->
+ <!-- Display settings screen, summary fragment for screen saver options, activated when asleep and charging [CHAR LIMIT=35] -->
<string name="screensaver_settings_summary_sleep">While charging</string>
- <!-- Display settings screen, summary fragment for screen saver options, activated when docked -->
+ <!-- Display settings screen, summary fragment for screen saver options, activated when docked [CHAR LIMIT=35] -->
<string name="screensaver_settings_summary_dock">While docked</string>
- <!-- Display settings screen, summary fragment for screen saver options, activated never -->
+ <!-- Display settings screen, summary fragment for screen saver options, activated never [CHAR LIMIT=35] -->
<string name="screensaver_settings_summary_never">Never</string>
- <!-- Display settings screen, summary for screen saver options, screen saver is turned off -->
+ <!-- Display settings screen, summary for screen saver options, screen saver is turned off [CHAR LIMIT=20] -->
<string name="screensaver_settings_summary_off">Off</string>
- <!-- Dream settings screen, caption for when dreams are disabled -->
- <string name="screensaver_settings_disabled_prompt">To control what happens when the phone is docked and/or sleeping, turn screen saver on.</string>
- <!-- Dream settings screen, action label, when to dream -->
+ <!-- Dream settings screen, action label, when to dream [CHAR LIMIT=20] -->
<string name="screensaver_settings_when_to_dream">When to start</string>
- <!-- Dream settings screen, action label, current selected screen saver -->
+ <!-- Dream settings screen, action label, current selected screen saver [CHAR LIMIT=35] -->
<string name="screensaver_settings_current">Current screen saver</string>
- <!-- Dream settings screen, button label for settings for a specific screensaver -->
- <string name="screensaver_settings_button">Settings</string>
<!-- Sound & display settings screen, setting option name to change whether the screen adjusts automatically based on lighting conditions -->
<string name="automatic_brightness">Automatic brightness</string>
<!-- [CHAR LIMIT=40] Display settings screen, setting option name to change whether the device wakes up when a lift gesture is detected. -->
@@ -3596,12 +3603,14 @@
<string name="storage_menu_mount">Mount</string>
<!-- Storage setting. Menu option for unmounting a storage device [CHAR LIMIT=30]-->
<string name="storage_menu_unmount">Eject</string>
- <!-- Storage setting. Menu option for erasing and formatting a storage device [CHAR LIMIT=30]-->
- <string name="storage_menu_format">Format</string>
+ <!-- Storage setting. Menu option for erasing and formatting a storage device [CHAR LIMIT=50]-->
+ <string name="storage_menu_format">Format SD card for portable storage</string>
+ <!-- Storage setting. Button option for erasing and formatting a storage device [CHAR LIMIT=30]-->
+ <string name="storage_menu_format_button">Format card</string>
<!-- Storage setting. Menu option for erasing and formatting a storage device [CHAR LIMIT=30]-->
<string name="storage_menu_format_public">Format as portable</string>
- <!-- Storage setting. Menu option for erasing and formatting a storage device [CHAR LIMIT=30]-->
- <string name="storage_menu_format_private">Format as internal</string>
+ <!-- Storage setting. Menu option for erasing and formatting a storage device [CHAR LIMIT=20]-->
+ <string name="storage_menu_format_option">Format</string>
<!-- Storage setting. Menu option for migrating data to a storage device [CHAR LIMIT=30]-->
<string name="storage_menu_migrate">Migrate data</string>
<!-- Storage setting. Menu option for forgetting a storage device [CHAR LIMIT=30]-->
@@ -3674,8 +3683,10 @@
\n\nTo use this <xliff:g id="name" example="SD card">^1</xliff:g>, you have to set it up first.</string>
<!-- Body of dialog informing user about consequences of formatting an internal storage device [CHAR LIMIT=NONE]-->
- <string name="storage_internal_format_details">After formatting, you can use this <xliff:g id="name" example="SD card">^1</xliff:g> in other devices.
-\n\nAll data on this <xliff:g id="name" example="SD card">^1</xliff:g> will be erased. Consider backing up first.
+ <string name="storage_internal_format_details">You can format this SD card to store photos, videos, music,
+ and more and access them on other devices.
+ \n\n<b>All data on this SD card will be erased.</b>
+ \n\n<b>Before formatting</b>
\n\n<b>Back up photos & other media</b>
\nMove your media files to alternative storage on this device, or transfer them to a computer using a USB cable.
\n\n<b>Back up apps</b>
@@ -3699,16 +3710,19 @@
<!-- Body of dialog informing user about the storage used by the Android System [CHAR LIMIT=NONE]-->
<string name="storage_detail_dialog_system">System includes files used to run Android version <xliff:g id="version" example="8.0">%s</xliff:g></string>
- <!-- Title of wizard step prompting user to setup a storage device [CHAR LIMIT=32] -->
+ <!-- Message to notify guest users as to why they can't set up the storage device [CHAR LIMIT=50]-->
+ <string name="storage_wizard_guest">Guest mode users cannot format SD cards</string>
+
+ <!-- Title of wizard step prompting user to setup a storage device [CHAR LIMIT=32] -->
<string name="storage_wizard_init_title">Set up your <xliff:g id="name" example="SD card">^1</xliff:g></string>
<!-- Title of wizard choice to use storage device as external storage [CHAR LIMIT=64] -->
- <string name="storage_wizard_init_external_title">Use as portable storage</string>
+ <string name="storage_wizard_init_external_title">Format SD card for portable storage</string>
<!-- Summary of wizard choice to use storage device as external storage [CHAR LIMIT=NONE] -->
- <string name="storage_wizard_init_external_summary">For moving photos and other media between devices.</string>
+ <string name="storage_wizard_init_external_summary">Save photos, videos, music, and more and access them from other devices</string>
<!-- Title of wizard choice to use storage device as internal storage [CHAR LIMIT=64] -->
- <string name="storage_wizard_init_internal_title">Use as internal storage</string>
+ <string name="storage_wizard_init_internal_title">Format SD card for internal storage</string>
<!-- Summary of wizard choice to use storage device as internal storage [CHAR LIMIT=NONE] -->
- <string name="storage_wizard_init_internal_summary">For storing anything on this device only, including apps and photos. Requires formatting that prevents it from working with other devices.</string>
+ <string name="storage_wizard_init_internal_summary">Save apps \u0026 media to use on this phone only</string>
<!-- Title of wizard step prompting user to format a storage device [CHAR LIMIT=32] -->
<string name="storage_wizard_format_confirm_title">Format as internal storage</string>
@@ -3763,13 +3777,11 @@
</string>
<!-- Title of a full-screen message. This string lets the user know that their storage device is ready to use. They can tap a button at the bottom of the screen to complete the setup process. The placeholder is for the specific device (e.g. SD card, USB drive, etc.). [CHAR LIMIT=32] -->
- <string name="storage_wizard_ready_title">Your <xliff:g id="name" example="SD card">^1</xliff:g> is ready to use</string>
+ <string name="storage_wizard_ready_title"><xliff:g id="name" example="SD card">^1</xliff:g> formatted</string>
<!-- Body of wizard step indicating that external storage is ready [CHAR LIMIT=NONE] -->
- <string name="storage_wizard_ready_external_body">Your <xliff:g id="name" example="SD card">^1</xliff:g> is all set to use with photos and other media.</string>
+ <string name="storage_wizard_ready_external_body">You can start using your <xliff:g id="name" example="SD card">^1</xliff:g></string>
<!-- Body of wizard step indicating that internal storage is ready [CHAR LIMIT=NONE] -->
- <string name="storage_wizard_ready_internal_body">Your new <xliff:g id="name" example="SD card">^1</xliff:g> is working.
-\n\nTo move photos, files, and app data to this device, go to Settings > Storage.
- </string>
+ <string name="storage_wizard_ready_internal_body">You can start using your <xliff:g id="name" example="SD card">^1</xliff:g></string>
<!-- Title of wizard step prompting user to move an app [CHAR LIMIT=32] -->
<string name="storage_wizard_move_confirm_title">Move <xliff:g id="app" example="Calculator">^1</xliff:g></string>
@@ -3799,26 +3811,26 @@
<!-- This is the title of a full-screen message. After this question, the user will get to choose how they want to use the storage device that they have in their phone. The placeholder is for the specific device (e.g. SD card, USB drive, etc.). [CHAR LIMIT=32] -->
<string name="storage_wizard_init_v2_title">How will you use this <xliff:g id="name" example="SD card">^1</xliff:g>?</string>
- <!-- Title of a line item. Below this title, a user can tap a button to select this option if they want to use their SD card as extra device storage. [CHAR LIMIT=32] -->
- <string name="storage_wizard_init_v2_internal_title" product="tablet">Use for extra tablet storage</string>
- <!-- Subtext for a line item. Below this subtext, a user can tap a button to select this option if they want to use their SD card as extra device storage. [CHAR LIMIT=64] -->
- <string name="storage_wizard_init_v2_internal_summary" product="tablet">For apps, files, and media on this tablet only</string>
+ <!-- Title of a line item. Below this title, a user can tap a button to select this option if they want to use their SD card as extra device storage. [CHAR LIMIT=50] -->
+ <string name="storage_wizard_init_v2_internal_title" product="tablet">Format SD card for internal storage</string>
+ <!-- Subtext for a line item. Below this subtext, a user can tap a button to select this option if they want to use their SD card as extra device storage. [CHAR LIMIT=NONE] -->
+ <string name="storage_wizard_init_v2_internal_summary" product="tablet">Store apps \u0026 media to use on this tablet only. <a href="https://support.google.com/android/answer/12153449">Learn more about setting up an SD card</a></string>
<!-- Button text. A user can tap this button if they want to use their SD card as extra device storage. [CHAR LIMIT=32] -->
- <string name="storage_wizard_init_v2_internal_action" product="tablet">Tablet storage</string>
- <!-- Title of a line item. Below this title, a user can tap a button to select this option if they want to use their SD card as extra device storage. [CHAR LIMIT=32] -->
- <string name="storage_wizard_init_v2_internal_title" product="default">Use for extra phone storage</string>
- <!-- Subtext for a line item. Below this subtext, a user can tap a button to select this option if they want to use their SD card as extra device storage. [CHAR LIMIT=64] -->
- <string name="storage_wizard_init_v2_internal_summary" product="default">For apps, files, and media on this phone only</string>
+ <string name="storage_wizard_init_v2_internal_action" product="tablet">Format</string>
+ <!-- Title of a line item. Below this title, a user can tap a button to select this option if they want to use their SD card as extra device storage. [CHAR LIMIT=50] -->
+ <string name="storage_wizard_init_v2_internal_title" product="default">Format SD card for internal storage</string>
+ <!-- Subtext for a line item. Below this subtext, a user can tap a button to select this option if they want to use their SD card as extra device storage. [CHAR LIMIT=NONE] -->
+ <string name="storage_wizard_init_v2_internal_summary" product="default">Store apps \u0026 media to use on this phone only. <a href="https://support.google.com/android/answer/12153449">Learn more about setting up an SD card</a></string>
<!-- Button text. A user can tap this button if they want to use their SD card as extra device storage. [CHAR LIMIT=32] -->
- <string name="storage_wizard_init_v2_internal_action" product="default">Phone storage</string>
+ <string name="storage_wizard_init_v2_internal_action" product="default">Format</string>
<!-- This text separates two options in a full-screen message. It's used to indicate a user can choose one option or the other. [CHAR LIMIT=16] -->
<string name="storage_wizard_init_v2_or">Or</string>
- <!-- Title of a line item. Below this title, a user can tap a button to select this option if they want to use their SD card as portable device storage. [CHAR LIMIT=32] -->
- <string name="storage_wizard_init_v2_external_title">Use for portable storage</string>
- <!-- Subtext for a line item. Below this subtext, a user can tap a button to select this option if they want to use their SD card as portable device storage. [CHAR LIMIT=64] -->
- <string name="storage_wizard_init_v2_external_summary">For transferring files and media between devices</string>
+ <!-- Title of a line item. Below this title, a user can tap a button to select this option if they want to use their SD card as portable device storage. [CHAR LIMIT=50] -->
+ <string name="storage_wizard_init_v2_external_title">Format SD card for portable storage</string>
+ <!-- Subtext for a line item. Below this subtext, a user can tap a button to select this option if they want to use their SD card as portable device storage. [CHAR LIMIT=NONE] -->
+ <string name="storage_wizard_init_v2_external_summary">Store photos, videos, music, and more and access them from other devices. <a href="https://support.google.com/android/answer/12153449">Learn more about setting up an SD card</a></string>
<!-- Button text. A user can tap this button if they want to use their SD card as portable device storage. [CHAR LIMIT=32] -->
- <string name="storage_wizard_init_v2_external_action">Portable storage</string>
+ <string name="storage_wizard_init_v2_external_action">Format</string>
<!-- Button text. A user can tap this button if they want to delay setting up their SD card until a later time. [CHAR LIMIT=32] -->
<string name="storage_wizard_init_v2_later">Set up later</string>
@@ -3827,6 +3839,9 @@
<!-- Body of a dialog. This text is confirming that the user wants to use their SD card as extra phone storage, but the formatting process will erase existing content on the card. The first placeholder is for the name of the device (e.g. a brand name of the SD card or USB drive). The second and third placeholders are for the general references (e.g. SD card, USB drive). [CHAR LIMIT=NONE] -->
<string name="storage_wizard_format_confirm_v2_body">This <xliff:g id="name" example="SanDisk SD card">^1</xliff:g> needs to be formatted to store apps, files, and media.
\n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
+ <!-- Body of a dialog. This text is confirming that the user wants to use their SD card as portable storage, but the formatting process will erase existing content on the card. The first placeholder is for the name of the device (e.g. a brand name of the SD card or USB drive). The second and third placeholders are for the general references (e.g. SD card, USB drive). [CHAR LIMIT=NONE] -->
+ <string name="storage_wizard_format_confirm_v2_body_external">This <xliff:g id="name" example="SanDisk SD card">^1</xliff:g> needs to be formatted to store photos, videos, music, and more.
+ \n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
<!-- Button text. If a user taps this button, their SD card or USB device will be formatted and used as extra phone storage. The placeholder is for the specific device (e.g. SD card, USB drive, etc.). [CHAR LIMIT=16] -->
<string name="storage_wizard_format_confirm_v2_action">Format <xliff:g id="name" example="SD card">^1</xliff:g></string>
@@ -3870,12 +3885,11 @@
<string name="storage_wizard_slow_v2_continue">Continue</string>
<!-- Title of a full-screen message. This text lets the user know how to manage the storage device moving forward. The placeholder is for the name of the device (e.g. brand name of the SD card). [CHAR LIMIT=NONE] -->
- <string name="storage_wizard_ready_v2_external_body">You can move content to <xliff:g id="name" example="SanDisk SD card">^1</xliff:g></string>
+ <string name="storage_wizard_ready_v2_external_body">You can start using your <xliff:g id="name" example="SD card">^1</xliff:g></string>
<!-- Title of a full-screen message. This text lets the user know that their content was moved to their storage device and how to manage the storage device moving forward. The placeholder is for the name of the device (e.g. brand name of the SD card). [CHAR LIMIT=NONE] -->
- <string name="storage_wizard_ready_v2_internal_body">To move content to <xliff:g id="name" example="SanDisk SD card">^1</xliff:g>, go to <b>Settings > Storage</b></string>
+ <string name="storage_wizard_ready_v2_internal_body">You can start using your <xliff:g id="name" example="SD card">^1</xliff:g></string>
<!-- Title of a full-screen message. This text lets the user know that their content was moved to their storage device and how to manage the storage device moving forward. The placeholder is for the name of the device (e.g. brand name of the SD card). [CHAR LIMIT=NONE] -->
- <string name="storage_wizard_ready_v2_internal_moved_body">Your content was moved to <xliff:g id="name" example="SanDisk SD card">^1</xliff:g>.
-\n\nTo manage this <xliff:g id="name" example="SD card">^2</xliff:g>, go to <b>Settings > Storage</b>.</string>
+ <string name="storage_wizard_ready_v2_internal_moved_body">You can start using your <xliff:g id="name" example="SD card">^1</xliff:g></string>
<!-- Phone info screen, section titles: -->
<string name="battery_status_title">Battery status</string>
@@ -4407,6 +4421,8 @@
<string name="lockpassword_choose_your_profile_pin_header">Set a work PIN</string>
<!-- Header on first screen of choose device pattern flow [CHAR LIMIT=40] -->
<string name="lockpassword_choose_your_pattern_header">Set a pattern</string>
+ <!-- Description on first screen of choose device pattern flow [CHAR LIMIT=NONE] -->
+ <string name="lockpassword_choose_your_pattern_description">For added security, set a pattern to unlock the device</string>
<!-- Header on first screen of choose work profile pattern flow [CHAR LIMIT=40] -->
<string name="lockpassword_choose_your_profile_pattern_header">Set a work pattern</string>
@@ -4773,7 +4789,7 @@
<!-- [CHAR LIMIT=NONE] Manage applications screen, menu item. Title of dialog to confirm resetting user's app preferences. -->
<string name="reset_app_preferences_title">Reset app preferences?</string>
<!-- [CHAR LIMIT=NONE] Manage applications screen, menu item. Body of dialog to confirm resetting user's app preferences. -->
- <string name="reset_app_preferences_desc">This will reset all preferences for:\n\n<li>Disabled apps</li>\n<li>Disabled app notifications</li>\n<li>Default applications for actions</li>\n<li>Background data restrictions for apps</li>\n<li>Any permission restrictions</li>\n\nYou will not lose any app data.</string>
+ <string name="reset_app_preferences_desc">This will reset all preferences for:\n\n<li>Disabled apps</li>\n<li>Disabled app notifications</li>\n<li>Default applications for actions</li>\n<li>Background data restrictions for apps</li>\n<li>Any permission restrictions</li>\n<li>Battery usage settings</li>\n\nYou will not lose any app data.</string>
<!-- [CHAR LIMIT=25] Manage applications screen, menu item. Confirmation button of dialog to confirm resetting user's app preferences. -->
<string name="reset_app_preferences_button">Reset apps</string>
<!-- Manage applications screen, individual app screen, button label when the user wants to manage the space taken up by an app. -->
@@ -5348,7 +5364,9 @@
<!-- Title for the confirm dialog of reset settings. [CHAR LIMIT=NONE] -->
<string name="accessibility_text_reading_confirm_dialog_title">Reset display size and text?</string>
<!-- Message for the confirm dialog of reset settings. [CHAR LIMIT=NONE] -->
- <string name="accessibility_text_reading_confirm_dialog_message">Your display size and text preferences will reset to the phone\u2019s original settings</string>
+ <string name="accessibility_text_reading_confirm_dialog_message" product="default">Your display size and text preferences will reset to the phone\u2019s original settings</string>
+ <!-- Message for the confirm dialog of reset settings. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_text_reading_confirm_dialog_message" product="tablet">Your display size and text preferences will reset to the tablet\u2019s original settings</string>
<!-- Title for the reset button of the confirm dialog of reset settings. [CHAR LIMIT=25] -->
<string name="accessibility_text_reading_confirm_dialog_reset_button">Reset</string>
<!-- Conversation message for the messaging app preview screen. [CHAR LIMIT=NONE] -->
@@ -6267,9 +6285,11 @@
<!-- Summary for the battery high usage tip, which presents apps with highest usage [CHAR LIMIT=NONE] -->
<string name="battery_tip_high_usage_summary">See apps with highest usage</string>
<!-- Title for the battery limited temporarily tip [CHAR LIMIT=NONE] -->
- <string name="battery_tip_limited_temporarily_title">Charging temporarily limited</string>
+ <string name="battery_tip_limited_temporarily_title">Charging is paused</string>
<!-- Summary for the battery limited temporarily tip [CHAR LIMIT=NONE] -->
- <string name="battery_tip_limited_temporarily_summary">To preserve your battery. Learn more.</string>
+ <string name="battery_tip_limited_temporarily_summary">Protecting battery to extend battery lifespan\nTap to learn more</string>
+ <!-- Summary for the battery limited temporarily extra tip [CHAR LIMIT=NONE] -->
+ <string name="battery_tip_limited_temporarily_extra_summary"><xliff:g id="percent" example="10%">%1$s</xliff:g></string>
<!-- Text of battery limited temporarily tip resume charge button. [CHAR LIMIT=NONE] -->
<string name="battery_tip_limited_temporarily_dialog_resume_charge">Resume charging</string>
<!-- Message of battery limited temporarily tip. [CHAR LIMIT=NONE] -->
@@ -6326,6 +6346,8 @@
<string name="battery_tip_unrestrict_app_dialog_ok">Remove</string>
<!-- CANCEL button for dialog to remove restriction for app [CHAR LIMIT=NONE] -->
<string name="battery_tip_unrestrict_app_dialog_cancel">Cancel</string>
+ <!-- Charge to full button for battery defender tips [CHAR LIMIT=NONE] -->
+ <string name="battery_tip_charge_to_full_button">Charge to full</string>
<!-- Message for battery tip dialog to show the battery summary -->
<string name="battery_tip_dialog_summary_message" product="default">Your apps are using a normal amount of battery. If apps use too much battery, your phone will suggest actions you can take.\n\nYou can always turn on Battery Saver if you\u2019re running low on battery.</string>
@@ -6642,6 +6664,8 @@
<string name="battery_not_usage_24hr">No usage for past 24 hr</string>
<!-- Description for no usage time but have battery usage [CHAR LIMIT=120] -->
<string name="battery_usage_without_time"></string>
+ <!-- Description for other users aggregated battery usage data [CHAR LIMIT=120] -->
+ <string name="battery_usage_other_users">Other users</string>
<!-- Graph subtext displayed to user when enhanced battery estimate is being used [CHAR LIMIT=120] -->
<string name="advanced_battery_graph_subtext">Battery left estimate is based on your device usage</string>
@@ -6736,10 +6760,16 @@
<!-- [CHAR_LIMIT=NONE] Battery percentage: Description for preference -->
<string name="battery_percentage_description">Show battery percentage in status bar</string>
+ <!-- [CHAR_LIMIT=NONE] Battery usage main screen chart graph hint since last full charge -->
+ <string name="battery_usage_chart_graph_hint_last_full_charge">Battery level since last full charge</string>
<!-- [CHAR_LIMIT=NONE] Battery usage main screen chart graph hint -->
<string name="battery_usage_chart_graph_hint">Battery level for past 24 hr</string>
+ <!-- [CHAR_LIMIT=NONE] Battery app usage section header since last full charge -->
+ <string name="battery_app_usage">App usage since last full charge</string>
<!-- [CHAR_LIMIT=NONE] Battery app usage section header for past 24 hour -->
<string name="battery_app_usage_for_past_24">App usage for past 24 hr</string>
+ <!-- [CHAR_LIMIT=NONE] Battery system usage section header since last full charge -->
+ <string name="battery_system_usage">System usage since last full charge</string>
<!-- [CHAR_LIMIT=NONE] Battery system usage section header for past 24 hour -->
<string name="battery_system_usage_for_past_24">System usage for past 24 hr</string>
<!-- [CHAR_LIMIT=NONE] Battery system usage section header -->
@@ -6872,6 +6902,14 @@
behalf. It comes from the <xliff:g id="voice_input_service_app_name">%s</xliff:g>
application. Enable the use of this service?</string>
+ <!-- On-device recognition settings --><skip />
+ <!-- [CHAR_LIMIT=NONE] Name of the settings item to open the on-device recognition settings. -->
+ <string name="on_device_recognition_settings">On-device recognition settings</string>
+ <!-- [CHAR_LIMIT=NONE] Title of the on-device recognition settings -->
+ <string name="on_device_recognition_settings_title">On-device recognition</string>
+ <!-- [CHAR_LIMIT=NONE] Summary of the on-device recognition settings -->
+ <string name="on_device_recognition_settings_summary">On-device speech recognition</string>
+
<!-- [CHAR LIMIT=50] The text for the settings section that is used to set a preferred text to speech engine -->
<string name="tts_engine_preference_title">Preferred engine</string>
<!-- [CHAR LIMIT=50] The text for a settings screen of the currently set text to speech engine -->
@@ -7747,6 +7785,22 @@
<string name="user_exit_guest_confirm_message">All apps and data in this session will be deleted.</string>
<!-- Label for button in confirmation dialog when exiting guest session [CHAR LIMIT=35] -->
<string name="user_exit_guest_dialog_remove">Remove</string>
+ <!-- Title for guest category in guest mode [CHAR LIMIT=35] -->
+ <string name="guest_category_title">Guest (You)</string>
+ <!-- Title for users preference [CHAR LIMIT=35] -->
+ <string name="user_category_title">Users</string>
+ <!-- Title for users preference when in guest mode [CHAR LIMIT=35] -->
+ <string name="other_user_category_title">Other users</string>
+ <!-- Title of preference to remove guest on exit option[CHAR LIMIT=35] -->
+ <string name="remove_guest_on_exit">Delete guest activity</string>
+ <!-- Summary of preference to remove guest on exit option[CHAR LIMIT=NONE] -->
+ <string name="remove_guest_on_exit_summary">Delete all guest apps and data
+ when exiting guest mode</string>
+ <!-- Title of dialog shown when remove_guest_on_exit toggle is ON [CHAR LIMIT=35] -->
+ <string name="remove_guest_on_exit_dialog_title">Delete guest activity?</string>
+ <!-- Message of dialog shown when remove_guest_on_exit toggle is ON [CHAR LIMIT=NONE] -->
+ <string name="remove_guest_on_exit_dialog_message">Apps and data from this guest session will be
+ deleted now, and all future guest activity will be deleted each time you exit guest mode</string>
<!-- Title of preference to enable calling[CHAR LIMIT=40] -->
<string name="user_enable_calling">Turn on phone calls</string>
@@ -8173,6 +8227,10 @@
<string name="wizard_back">Back</string>
<!-- Wizard next button label [CHAR LIMIT=25] -->
<string name="wizard_next">Next</string>
+ <!-- Wizard next button label for portable [CHAR LIMIT=25] -->
+ <string name="wizard_back_portable">Switch to portable</string>
+ <!-- Wizard next button label for adoptable [CHAR LIMIT=25] -->
+ <string name="wizard_back_adoptable">Format another way</string>
<!-- Wizard finish button label [CHAR LIMIT=25] -->
<string name="wizard_finish">Finish</string>
@@ -9443,12 +9501,12 @@
<!-- app summary of notification app list screen [CHAR LIMIT=100] -->
<plurals name="notifications_sent_daily">
- <item quantity="one">~<xliff:g id="number">%d</xliff:g> notification per day</item>
- <item quantity="other">~<xliff:g id="number">%,d</xliff:g> notifications per day</item>
+ <item quantity="one">About <xliff:g id="number">%d</xliff:g> notification per day</item>
+ <item quantity="other">About <xliff:g id="number">%,d</xliff:g> notifications per day</item>
</plurals>
<plurals name="notifications_sent_weekly">
- <item quantity="one">~<xliff:g id="number">%d</xliff:g> notification per week</item>
- <item quantity="other">~<xliff:g id="number">%,d</xliff:g> notifications per week</item>
+ <item quantity="one">About <xliff:g id="number">%d</xliff:g> notification per week</item>
+ <item quantity="other">About <xliff:g id="number">%,d</xliff:g> notifications per week</item>
</plurals>
<!-- app summary of notification app list screen [CHAR LIMIT=100] -->
<string name="notifications_sent_never">Never</string>
@@ -12711,7 +12769,7 @@
<!-- Summary for prevent ringing setting -->
<string name="prevent_ringing_option_mute_summary">Mute</string>
<!-- Summary for prevent ringing setting when the option itself is unavailable. [CHAR LIMIT=NONE] -->
- <string name="prevent_ringing_option_unavailable_lpp_summary">To enable, first change \"Press and hold power button\" to the power menu.</string>
+ <string name="prevent_ringing_option_unavailable_lpp_summary">To enable, first change \"Press & hold power button\" to the power menu.</string>
<!-- Title for detail page of wifi network [CHAR LIMIT=30] -->
<string name="pref_title_network_details">Network details</string>
@@ -13470,29 +13528,28 @@
<!-- Cards and passes name lower case [CHAR LIMIT=40] -->
<string name="cards_passes_lower">cards & passes</string>
- <!-- Power menu setting name [CHAR LIMIT=NONE] -->
- <string name="power_menu_setting_name">Press and hold power button</string>
+ <!-- Power menu setting name [CHAR LIMIT=60] -->
+ <string name="power_menu_setting_name">Press & hold power button</string>
- <!-- Power menu setting summary to describe press and hold power button for Assistant is enabled. [CHAR LIMIT=NONE] -->
- <string name="power_menu_summary_long_press_for_assist_enabled">Press and hold for the Assistant</string>
- <!-- Power menu setting summary to describe press and hold power button for Assistant is disabled and power menu will appear. [CHAR LIMIT=NONE] -->
- <string name="power_menu_summary_long_press_for_assist_disabled_with_power_menu">Press and hold for the power menu</string>
- <!-- Power menu setting summary to describe press and hold power button for Assistant is disabled and nothing will happen. [CHAR LIMIT=NONE] -->
- <string name="power_menu_summary_long_press_for_assist_disabled_no_action">Press and hold disabled</string>
+ <!-- Power menu setting section title for selecting the press and hold power button behavior. [CHAR LIMIT=60] -->
+ <string name="power_menu_long_press_category_title">Press & hold power button to access</string>
+ <!-- Power menu setting option to make press and hold power button to open Power Menu. [CHAR LIMIT=60] -->
+ <string name="power_menu_long_press_for_power_menu_title">Power menu</string>
+ <!-- Power menu setting option to make press and hold power button to open Assistant. [CHAR LIMIT=60] -->
+ <string name="power_menu_long_press_for_assistant_title">Digital assistant</string>
+
+ <!-- Power menu setting summary to describe press and hold power button will open Assistant. [CHAR LIMIT=NONE] -->
+ <string name="power_menu_summary_long_press_for_assistant">Access digital assistant</string>
+ <!-- Power menu setting summary to describe press and hold power button will open Power Menu. [CHAR LIMIT=NONE] -->
+ <string name="power_menu_summary_long_press_for_power_menu">Access power menu</string>
<!-- Power menu setting privacy no secure screen lock set [CHAR_LIMIT=NONE] -->
<string name="lockscreen_privacy_not_secure">To use, first set a screen lock</string>
- <!-- Power menu setting use long press power to invoke assistant. [CHAR LIMIT=NONE] -->
- <string name="power_menu_long_press_for_assist">Hold for Assistant</string>
-
- <!-- Power menu setting use log press power to invoke assistant summary. [CHAR LIMIT=NONE] -->
- <string name="power_menu_long_press_for_assist_summary">Trigger the Assistant by holding the power button</string>
-
- <!-- Power menu explanation to press power and volume up to show power and emergency menu. [CHAR LIMIT=NONE] -->
- <string name="power_menu_power_volume_up_hint">Power & Emergency Menu:\nPress Power and Volume up at the same time.</string>
+ <!-- Power menu explanation to press power and volume up to show power menu. [CHAR LIMIT=NONE] -->
+ <string name="power_menu_power_volume_up_hint">Power menu:\nPress the power button and the volume up button at the same time</string>
<!-- Power menu explanation where to find prevent ringing option. [CHAR LIMIT=NONE] -->
- <string name="power_menu_power_prevent_ringing_hint">Prevent ringing:\nShortcut available in the volume menu.</string>
+ <string name="power_menu_power_prevent_ringing_hint">Prevent ringing:\nPress a volume button for the shortcut</string>
<!-- Power menu title of the seekbar setting controlling duration of how long the power button must be held to invoke assistant. [CHAR LIMIT=NONE]-->
<string name="power_menu_long_press_for_assist_sensitivity_title">Press & hold duration</string>
@@ -13577,6 +13634,10 @@
<string name="media_controls_resume_title">Pin media player</string>
<!-- Description of toggle to enable or disable the media resumption feature in quick settings [CHAR LIMIT=NONE]-->
<string name="media_controls_resume_description">To quickly resume playback, media player stays open in Quick Settings</string>
+ <!-- Title of toggle to enable or disable the media resumption on lockscreen [CHAR LIMIT=NONE]-->
+ <string name="media_controls_lockscreen_title">Show media on lock screen</string>
+ <!-- Description of toggle to enable or disable the media resumption on lockscreen [CHAR LIMIT=NONE]-->
+ <string name="media_controls_lockscreen_description">To quickly resume playback, media player stays open on lock screen</string>
<!-- Title of toggle to enable or disable media recommendations in quick settings [CHAR LIMIT=NONE] -->
<string name="media_controls_recommendations_title">Show media recommendations</string>
<!-- Description of toggle to enable or disable media recommendations based on user's activity [CHAR LIMIT=NONE] -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index f147ce9..8dee082 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -969,4 +969,19 @@
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textDirection">locale</item>
</style>
+
+ <style name="CardPreferencePrimaryButton" parent="@style/ActionPrimaryButton">
+ <item name="android:fontFamily">google-sans-medium</item>
+ <item name="android:textSize">14sp</item>
+ <item name="android:textAllCaps">false</item>
+ <item name="android:singleLine">true</item>
+ </style>
+
+ <style name="CardPreferenceBorderlessButton"
+ parent="@style/Widget.AppCompat.Button.Borderless.Colored">
+ <item name="android:fontFamily">google-sans-medium</item>
+ <item name="android:textSize">14sp</item>
+ <item name="android:textAllCaps">false</item>
+ <item name="android:singleLine">true</item>
+ </style>
</resources>
diff --git a/res/xml/bluetooth_device_details_fragment.xml b/res/xml/bluetooth_device_details_fragment.xml
index f330b19..efb2bf7 100644
--- a/res/xml/bluetooth_device_details_fragment.xml
+++ b/res/xml/bluetooth_device_details_fragment.xml
@@ -42,6 +42,12 @@
settings:searchable="false"
settings:controller="com.android.settings.bluetooth.LeAudioBluetoothDetailsHeaderController"/>
+ <com.android.settingslib.widget.ButtonPreference
+ android:key="hearing_aid_pair_other_button"
+ android:gravity="center" />
+ <com.android.settings.applications.SpacePreference
+ android:layout_height="8dp" />
+
<com.android.settingslib.widget.ActionButtonsPreference
android:key="action_buttons"
settings:allowDividerBelow="true"/>
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index 2336c15..1b5e6c0 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -145,7 +145,8 @@
<Preference
android:key="screensaver"
android:title="@string/screensaver_settings_title"
- android:fragment="com.android.settings.dream.DreamSettings"/>
+ android:fragment="com.android.settings.dream.DreamSettings"
+ settings:keywords="@string/keywords_screensaver"/>
<SwitchPreference
android:key="camera_gesture"
diff --git a/res/xml/dream_fragment_overview.xml b/res/xml/dream_fragment_overview.xml
index 9a401a3..db8f4fd 100644
--- a/res/xml/dream_fragment_overview.xml
+++ b/res/xml/dream_fragment_overview.xml
@@ -17,7 +17,9 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/screensaver_settings_title">
+ android:key="screensaver_settings_screen"
+ android:title="@string/screensaver_settings_title"
+ settings:keywords="@string/keywords_screensaver">
<com.android.settingslib.widget.MainSwitchPreference
android:key="dream_main_settings_switch"
@@ -25,6 +27,11 @@
settings:controller="com.android.settings.dream.DreamMainSwitchPreferenceController"
settings:searchable="false"/>
+ <Preference
+ android:key="when_to_start"
+ android:title="@string/screensaver_settings_when_to_dream"
+ android:fragment="com.android.settings.dream.WhenToDreamPicker"/>
+
<PreferenceCategory
android:title="@string/dream_picker_category">
<com.android.settingslib.widget.LayoutPreference
@@ -34,17 +41,13 @@
settings:controller="com.android.settings.dream.DreamPickerController"/>
</PreferenceCategory>
- <PreferenceCategory
- android:title="@string/dream_more_settings_category">
- <SwitchPreference
- android:key="dream_complications_toggle"
- android:title="@string/dream_complications_toggle_title"
- android:summary="@string/dream_complications_toggle_summary"
- settings:controller="com.android.settings.dream.DreamComplicationPreferenceController"/>
- <Preference
- android:key="when_to_start"
- android:title="@string/screensaver_settings_when_to_dream"
- android:fragment="com.android.settings.dream.WhenToDreamPicker"/>
- </PreferenceCategory>
+ <SwitchPreference
+ android:key="dream_complications_toggle"
+ android:title="@string/dream_complications_toggle_title"
+ android:summary="@string/dream_complications_toggle_summary"
+ settings:controller="com.android.settings.dream.DreamComplicationPreferenceController"/>
+
+ <com.android.settings.applications.SpacePreference
+ android:layout_height="16dp" />
</PreferenceScreen>
diff --git a/res/xml/language_and_input.xml b/res/xml/language_and_input.xml
index 770a862..64b5003 100644
--- a/res/xml/language_and_input.xml
+++ b/res/xml/language_and_input.xml
@@ -64,6 +64,13 @@
android:fragment="com.android.settings.language.DefaultVoiceInputPicker" />
<Preference
+ android:key="on_device_recognition_settings"
+ android:title="@string/on_device_recognition_settings_title"
+ android:summary="@string/on_device_recognition_settings_summary"
+ settings:controller=
+ "com.android.settings.language.OnDeviceRecognitionPreferenceController" />
+
+ <Preference
android:key="tts_settings_summary"
android:title="@string/tts_settings_title"
android:fragment="com.android.settings.tts.TextToSpeechSettings"
diff --git a/res/xml/media_controls_settings.xml b/res/xml/media_controls_settings.xml
index 0318097..822639a 100644
--- a/res/xml/media_controls_settings.xml
+++ b/res/xml/media_controls_settings.xml
@@ -28,6 +28,12 @@
app:controller="com.android.settings.sound.MediaControlsPreferenceController" />
<SwitchPreference
+ android:key="media_controls_lockscreen"
+ android:title="@string/media_controls_lockscreen_title"
+ android:summary="@string/media_controls_lockscreen_description"
+ app:controller="com.android.settings.sound.MediaControlsLockScreenPreferenceController" />
+
+ <SwitchPreference
android:key="media_controls_recommendations"
android:title="@string/media_controls_recommendations_title"
android:summary="@string/media_controls_recommendations_description"
diff --git a/res/xml/power_menu_settings.xml b/res/xml/power_menu_settings.xml
index e5e2daa..48cc40c 100644
--- a/res/xml/power_menu_settings.xml
+++ b/res/xml/power_menu_settings.xml
@@ -23,19 +23,28 @@
android:key="gesture_power_menu_video"
settings:searchable="false"
settings:lottie_imageAssetsFolder="power_menu"
- settings:lottie_rawRes="@raw/lottie_power_menu"/>
+ settings:lottie_rawRes="@raw/lottie_long_press_power_for_power_menu"
+ settings:controller="com.android.settings.gestures.LongPressPowerIllustrationPreferenceController"/>
- <SwitchPreference
- android:key="gesture_power_menu_long_press_for_assist"
- android:title="@string/power_menu_long_press_for_assist"
- android:summary="@string/power_menu_long_press_for_assist_summary"
- settings:controller="com.android.settings.gestures.LongPressPowerButtonPreferenceController"
- />
+ <PreferenceCategory
+ android:key="gesture_power_menu_long_press_category"
+ android:title="@string/power_menu_long_press_category_title">
+ <com.android.settingslib.widget.SelectorWithWidgetPreference
+ android:key="gesture_power_menu_long_press_for_power_menu"
+ android:title="@string/power_menu_long_press_for_power_menu_title"
+ settings:controller="com.android.settings.gestures.LongPressPowerForPowerMenuPreferenceController"/>
+
+ <com.android.settingslib.widget.SelectorWithWidgetPreference
+ android:key="gesture_power_menu_long_press_for_assistant"
+ android:title="@string/power_menu_long_press_for_assistant_title"
+ settings:controller="com.android.settings.gestures.LongPressPowerForAssistantPreferenceController"/>
+ </PreferenceCategory>
<com.android.settings.widget.LabeledSeekBarPreference
android:key="gesture_power_menu_long_press_for_assist_sensitivity"
android:title="@string/power_menu_long_press_for_assist_sensitivity_title"
android:summary="@string/power_menu_long_press_for_assist_sensitivity_summary"
+ settings:allowDividerAbove="true"
settings:textStart="@string/power_menu_long_press_for_assist_sensitivity_low_label"
settings:textEnd="@string/power_menu_long_press_for_assist_sensitivity_high_label"
settings:controller="com.android.settings.gestures.LongPressPowerSensitivityPreferenceController"
@@ -45,5 +54,6 @@
android:key="power_menu_power_volume_up_hint"
android:title="@string/power_menu_power_volume_up_hint"
android:selectable="false"
- settings:searchable="false"/>
+ settings:searchable="false"
+ settings:controller="com.android.settings.gestures.LongPressPowerFooterPreferenceController"/>
</PreferenceScreen>
diff --git a/res/xml/power_usage_advanced.xml b/res/xml/power_usage_advanced.xml
index 7a9c44b..e9274ce 100644
--- a/res/xml/power_usage_advanced.xml
+++ b/res/xml/power_usage_advanced.xml
@@ -21,7 +21,7 @@
android:title="@string/advanced_battery_title"
settings:keywords="@string/keywords_battery_usage">
- <com.android.settings.fuelgauge.BatteryHistoryPreference
+ <com.android.settings.fuelgauge.batteryusage.BatteryHistoryPreference
android:key="battery_graph"/>
<PreferenceCategory
diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index 58327c0..9e86bf5 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -39,7 +39,7 @@
settings:controller="com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController" />
<Preference
- android:fragment="com.android.settings.fuelgauge.PowerUsageAdvanced"
+ android:fragment="com.android.settings.fuelgauge.batteryusage.PowerUsageAdvanced"
android:key="battery_usage_summary"
android:title="@string/advanced_battery_preference_title"
settings:keywords="@string/keywords_battery_usage" />
diff --git a/res/xml/privacy_advanced_settings.xml b/res/xml/privacy_advanced_settings.xml
index 9f465d4..b028008 100644
--- a/res/xml/privacy_advanced_settings.xml
+++ b/res/xml/privacy_advanced_settings.xml
@@ -51,6 +51,14 @@
android:summary="@string/summary_placeholder"
settings:searchable="false"/>
+ <!-- Show media on lock screen -->
+ <SwitchPreference
+ android:key="privacy_media_controls_lockscreen"
+ android:title="@string/media_controls_lockscreen_title"
+ android:summary="@string/media_controls_lockscreen_description"
+ settings:controller=
+ "com.android.settings.sound.MediaControlsLockScreenPreferenceController" />
+
<!-- Privacy Service -->
<PreferenceCategory
android:key="privacy_services"
diff --git a/res/xml/privacy_controls_settings.xml b/res/xml/privacy_controls_settings.xml
index a477dc2..cc88e0c 100644
--- a/res/xml/privacy_controls_settings.xml
+++ b/res/xml/privacy_controls_settings.xml
@@ -34,12 +34,6 @@
android:summary="@string/mic_toggle_description"
settings:controller="com.android.settings.privacy.MicToggleController"/>
- <!-- Location toggle -->
- <com.android.settingslib.RestrictedSwitchPreference
- android:key="privacy_location_toggle"
- android:title="@string/location_toggle_title"
- android:summary="@string/perm_toggle_description"/>
-
<!-- Clipboard access notifications -->
<SwitchPreference
android:key="show_clip_access_notification"
diff --git a/res/xml/privacy_dashboard_settings.xml b/res/xml/privacy_dashboard_settings.xml
index 0a7cab5..f8f916e 100644
--- a/res/xml/privacy_dashboard_settings.xml
+++ b/res/xml/privacy_dashboard_settings.xml
@@ -89,6 +89,14 @@
android:summary="@string/summary_placeholder"
settings:searchable="false"/>
+ <!-- Show media on lock screen -->
+ <SwitchPreference
+ android:key="privacy_media_controls_lockscreen"
+ android:title="@string/media_controls_lockscreen_title"
+ android:summary="@string/media_controls_lockscreen_description"
+ settings:controller=
+ "com.android.settings.sound.MediaControlsLockScreenPreferenceController" />
+
<!-- Privacy Service -->
<PreferenceCategory
android:key="privacy_services"
diff --git a/res/xml/top_level_settings.xml b/res/xml/top_level_settings.xml
index c9e6017..5fbc735 100644
--- a/res/xml/top_level_settings.xml
+++ b/res/xml/top_level_settings.xml
@@ -59,7 +59,7 @@
settings:highlightableMenuKey="@string/menu_key_notifications"/>
<com.android.settings.widget.HomepagePreference
- android:fragment="com.android.settings.fuelgauge.PowerUsageSummary"
+ android:fragment="com.android.settings.fuelgauge.batteryusage.PowerUsageSummary"
android:icon="@drawable/ic_settings_battery_white"
android:key="top_level_battery"
android:order="-110"
diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml
index ab54989..5cbfe43 100644
--- a/res/xml/user_settings.xml
+++ b/res/xml/user_settings.xml
@@ -26,27 +26,58 @@
settings:controller="com.android.settings.users.MultiUserTopIntroPreferenceController"/>
<PreferenceCategory
- android:key="user_list"
- android:title="@string/user_list_title"
- android:order="10"
- settings:searchable="false">
- </PreferenceCategory>
+ android:key="guest_category"
+ android:title="@string/guest_category_title"
+ android:order="2"
+ settings:searchable="false"/>
- <com.android.settingslib.RestrictedPreference
- android:key="guest_add"
- android:title="@string/guest_new_guest"
- android:order="15"/>
+ <Preference
+ android:key="guest_exit"
+ android:title="@string/guest_exit_button"
+ android:icon="@drawable/ic_guest_exit"
+ android:order="3"/>
+
+ <Preference
+ android:key="guest_reset"
+ android:title="@string/guest_reset_button"
+ android:icon="@drawable/ic_guest_reset"
+ android:order="4"/>
+
+ <PreferenceCategory
+ android:key="user_list"
+ android:title="@string/user_category_title"
+ android:order="10"
+ settings:searchable="false"/>
<com.android.settingslib.RestrictedPreference
android:key="user_add"
android:title="@string/user_add_user_or_profile_menu"
+ android:icon="@drawable/ic_add_40dp"
android:order="20"/>
<com.android.settingslib.RestrictedPreference
android:key="supervised_user_add"
android:title="@*android:string/supervised_user_creation_label"
+ android:icon="@drawable/ic_add_40dp"
android:order="25"/>
+ <PreferenceCategory
+ android:key="guest_user_category"
+ android:title="@*android:string/guest_name"
+ android:order="50"/>
+
+ <com.android.settingslib.RestrictedPreference
+ android:key="guest_add"
+ android:title="@string/guest_new_guest"
+ android:icon="@drawable/ic_add_40dp"
+ android:order="55"/>
+
+ <com.android.settingslib.RestrictedSwitchPreference
+ android:key="remove_guest_on_exit"
+ android:title="@string/remove_guest_on_exit"
+ android:summary="@string/remove_guest_on_exit_summary"
+ android:order="60"/>
+
<com.android.settingslib.RestrictedSwitchPreference
android:key="user_settings_add_users_when_locked"
android:title="@string/user_add_on_lockscreen_menu"
diff --git a/res/xml/vpn_settings2.xml b/res/xml/vpn_settings2.xml
index 08075a6..0d374c7 100644
--- a/res/xml/vpn_settings2.xml
+++ b/res/xml/vpn_settings2.xml
@@ -16,4 +16,9 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/vpn_title">
+ <PreferenceCategory
+ android:key="advanced_vpn_group"/>
+
+ <PreferenceCategory
+ android:key="vpn_group"/>
</PreferenceScreen>
diff --git a/src/com/android/settings/ChangeIds.java b/src/com/android/settings/ChangeIds.java
new file mode 100644
index 0000000..1f77201
--- /dev/null
+++ b/src/com/android/settings/ChangeIds.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.compat.annotation.ChangeId;
+import android.compat.annotation.LoggingOnly;
+
+/**
+ * All the {@link ChangeId} used for Settings App.
+ */
+public class ChangeIds {
+ /**
+ * Intents with action {@code android.settings.MANAGE_APP_OVERLAY_PERMISSION}
+ * and data URI scheme {@code package} don't go to the app-specific screen for managing the
+ * permission anymore. Instead, they redirect to this screen for managing all the apps that have
+ * requested such permission.
+ */
+ @ChangeId
+ @LoggingOnly
+ public static final long CHANGE_RESTRICT_SAW_INTENT = 135920175L;
+}
diff --git a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java
index 0af8aa1..f9a1113 100644
--- a/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizard.java
@@ -49,8 +49,6 @@
if (mTopIntroPreference != null) {
mTopIntroPreference.setVisible(false);
}
-
- mToggleServiceSwitchPreference.applyPartnerCustomizationPaddingStyle();
}
@Override
diff --git a/src/com/android/settings/accounts/AccountDashboardFragment.java b/src/com/android/settings/accounts/AccountDashboardFragment.java
index a2b6182..5456f0a 100644
--- a/src/com/android/settings/accounts/AccountDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountDashboardFragment.java
@@ -26,7 +26,6 @@
import android.os.UserManager;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.autofill.PasswordsPreferenceController;
import com.android.settings.applications.defaultapps.DefaultAutofillPreferenceController;
import com.android.settings.applications.defaultapps.DefaultWorkAutofillPreferenceController;
@@ -96,7 +95,7 @@
}
private static void buildAccountPreferenceControllers(
- Context context, SettingsPreferenceFragment parent, String[] authorities,
+ Context context, DashboardFragment parent, String[] authorities,
List<AbstractPreferenceController> controllers) {
final AccountPreferenceController accountPrefController =
new AccountPreferenceController(context, parent, authorities,
diff --git a/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java b/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java
index 9ad1206..4661c64 100644
--- a/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountPersonalDashboardFragment.java
@@ -24,7 +24,6 @@
import android.content.Context;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.autofill.PasswordsPreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
@@ -78,7 +77,7 @@
}
private static void buildAccountPreferenceControllers(
- Context context, SettingsPreferenceFragment parent, String[] authorities,
+ Context context, DashboardFragment parent, String[] authorities,
List<AbstractPreferenceController> controllers) {
final AccountPreferenceController accountPrefController =
new AccountPreferenceController(context, parent, authorities,
diff --git a/src/com/android/settings/accounts/AccountPreferenceController.java b/src/com/android/settings/accounts/AccountPreferenceController.java
index 1458988..8c717f0 100644
--- a/src/com/android/settings/accounts/AccountPreferenceController.java
+++ b/src/com/android/settings/accounts/AccountPreferenceController.java
@@ -58,10 +58,10 @@
import com.android.settings.AccessiblePreferenceCategory;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.RestrictedPreference;
@@ -101,7 +101,7 @@
private Preference mProfileNotAvailablePreference;
private String[] mAuthorities;
private int mAuthoritiesCount = 0;
- private SettingsPreferenceFragment mFragment;
+ private DashboardFragment mFragment;
private int mAccountProfileOrder = ORDER_ACCOUNT_PROFILES;
private AccountRestrictionHelper mHelper;
private MetricsFeatureProvider mMetricsFeatureProvider;
@@ -145,13 +145,13 @@
public ArrayMap<String, AccountTypePreference> accountPreferences = new ArrayMap<>();
}
- public AccountPreferenceController(Context context, SettingsPreferenceFragment parent,
+ public AccountPreferenceController(Context context, DashboardFragment parent,
String[] authorities, @ProfileSelectFragment.ProfileType int type) {
this(context, parent, authorities, new AccountRestrictionHelper(context), type);
}
@VisibleForTesting
- AccountPreferenceController(Context context, SettingsPreferenceFragment parent,
+ AccountPreferenceController(Context context, DashboardFragment parent,
String[] authorities, AccountRestrictionHelper helper,
@ProfileSelectFragment.ProfileType int type) {
super(context);
@@ -314,6 +314,9 @@
for (int i = 0; i < profilesCount; i++) {
updateAccountTypes(mProfiles.valueAt(i));
}
+
+ // Refresh for the auto-sync preferences
+ mFragment.forceUpdatePreferences();
}
private void updateProfileUi(final UserInfo userInfo) {
@@ -409,7 +412,6 @@
return preference;
}
-
private Preference newManagedProfileSettings() {
Preference preference = new Preference(mFragment.getPreferenceManager().getContext());
preference.setKey(PREF_KEY_WORK_PROFILE_SETTING);
diff --git a/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java b/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java
index 1fdd3f6..f64e041 100644
--- a/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java
+++ b/src/com/android/settings/accounts/AccountWorkProfileDashboardFragment.java
@@ -24,7 +24,6 @@
import android.content.Context;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.autofill.PasswordsPreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
@@ -78,7 +77,7 @@
}
private static void buildAccountPreferenceControllers(
- Context context, SettingsPreferenceFragment parent, String[] authorities,
+ Context context, DashboardFragment parent, String[] authorities,
List<AbstractPreferenceController> controllers) {
final AccountPreferenceController accountPrefController =
new AccountPreferenceController(context, parent, authorities,
diff --git a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
index d69c2c8..732163b 100644
--- a/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppBatteryPreferenceController.java
@@ -38,12 +38,12 @@
import com.android.settings.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
-import com.android.settings.fuelgauge.BatteryChartPreferenceController;
-import com.android.settings.fuelgauge.BatteryDiffEntry;
-import com.android.settings.fuelgauge.BatteryEntry;
-import com.android.settings.fuelgauge.BatteryUsageStatsLoader;
import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
+import com.android.settings.fuelgauge.batteryusage.BatteryChartPreferenceController;
+import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry;
+import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
+import com.android.settings.fuelgauge.batteryusage.BatteryUsageStatsLoader;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -179,7 +179,7 @@
return null;
}
final BatteryDiffEntry entry =
- BatteryChartPreferenceController.getBatteryLast24HrUsageData(
+ BatteryChartPreferenceController.getAppBatteryUsageData(
mContext, mPackageName, mUserId);
Log.d(TAG, "loadBatteryDiffEntries():\n" + entry);
return entry;
@@ -200,10 +200,10 @@
mBatteryPercent = Utils.formatPercentage(
mBatteryDiffEntry.getPercentOfTotal(), /* round */ true);
mPreference.setSummary(mContext.getString(
- R.string.battery_summary_24hr, mBatteryPercent));
+ R.string.battery_summary, mBatteryPercent));
} else {
mPreference.setSummary(
- mContext.getString(R.string.no_battery_summary_24hr));
+ mContext.getString(R.string.no_battery_summary));
}
}
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index ead9840..30d4a71 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -18,6 +18,7 @@
import static androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE;
+import static com.android.settings.ChangeIds.CHANGE_RESTRICT_SAW_INTENT;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_ALL;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_BLOCKED;
import static com.android.settings.applications.manageapplications.AppFilterRegistry.FILTER_APPS_DISABLED;
@@ -37,8 +38,6 @@
import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
import android.app.usage.IUsageStatsManager;
-import android.compat.annotation.ChangeId;
-import android.compat.annotation.LoggingOnly;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
@@ -127,6 +126,8 @@
import com.android.settings.widget.LoadingViewController;
import com.android.settings.wifi.AppStateChangeWifiStateBridge;
import com.android.settings.wifi.ChangeWifiStateDetails;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.applications.AppIconCacheManager;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
@@ -190,16 +191,6 @@
public static final int STORAGE_TYPE_DEFAULT = 0; // Show all apps that are not categorized.
public static final int STORAGE_TYPE_LEGACY = 1; // Show apps even if they can be categorized.
- /**
- * Intents with action {@code android.settings.MANAGE_APP_OVERLAY_PERMISSION}
- * and data URI scheme {@code package} don't go to the app-specific screen for managing the
- * permission anymore. Instead, they redirect to this screen for managing all the apps that have
- * requested such permission.
- */
- @ChangeId
- @LoggingOnly
- private static final long CHANGE_RESTRICT_SAW_INTENT = 135920175L;
-
// sort order
@VisibleForTesting
int mSortOrder = R.id.sort_order_alpha;
@@ -787,7 +778,18 @@
mShowSystem = !mShowSystem;
mApplications.rebuild();
} else if (i == R.id.reset_app_preferences) {
- mResetAppsHelper.buildResetDialog();
+ final boolean appsControlDisallowedBySystem =
+ RestrictedLockUtilsInternal.hasBaseUserRestriction(getActivity(),
+ UserManager.DISALLOW_APPS_CONTROL, UserHandle.myUserId());
+ final RestrictedLockUtils.EnforcedAdmin appsControlDisallowedAdmin =
+ RestrictedLockUtilsInternal.checkIfRestrictionEnforced(getActivity(),
+ UserManager.DISALLOW_APPS_CONTROL, UserHandle.myUserId());
+ if (appsControlDisallowedAdmin != null && !appsControlDisallowedBySystem) {
+ RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
+ getActivity(), appsControlDisallowedAdmin);
+ } else {
+ mResetAppsHelper.buildResetDialog();
+ }
return true;
} else if (i == R.id.advanced) {
if (mListType == LIST_TYPE_NOTIFICATION) {
diff --git a/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java b/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
index 9cb5a3f..708f8b7 100644
--- a/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
+++ b/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
@@ -38,6 +38,7 @@
import androidx.appcompat.app.AlertDialog;
import com.android.settings.R;
+import com.android.settings.fuelgauge.BatteryOptimizeUtils;
import java.util.Arrays;
import java.util.List;
@@ -152,6 +153,7 @@
} catch (RemoteException e) {
}
mAom.resetAllModes();
+ BatteryOptimizeUtils.resetAppOptimizationMode(mContext, mIPm, mAom);
final int[] restrictedUids = mNpm.getUidsWithPolicy(
POLICY_REJECT_METERED_BACKGROUND);
final int currentUserId = ActivityManager.getCurrentUser();
diff --git a/src/com/android/settings/applications/specialaccess/notificationaccess/BridgedAppsLinkPreferenceController.java b/src/com/android/settings/applications/specialaccess/notificationaccess/BridgedAppsLinkPreferenceController.java
index 1c787ba..6a641b3 100644
--- a/src/com/android/settings/applications/specialaccess/notificationaccess/BridgedAppsLinkPreferenceController.java
+++ b/src/com/android/settings/applications/specialaccess/notificationaccess/BridgedAppsLinkPreferenceController.java
@@ -18,10 +18,11 @@
import android.os.Build;
import android.service.notification.NotificationListenerFilter;
+import androidx.preference.Preference;
+
import com.android.settings.core.BasePreferenceController;
import com.android.settings.notification.NotificationBackend;
-
public class BridgedAppsLinkPreferenceController extends BasePreferenceController {
private ComponentName mCn;
@@ -61,7 +62,6 @@
if (mTargetSdk > Build.VERSION_CODES.S) {
return AVAILABLE;
}
-
mNlf = mNm.getListenerFilter(mCn, mUserId);
if (!mNlf.areAllTypesAllowed() || !mNlf.getDisallowedPackages().isEmpty()) {
return AVAILABLE;
@@ -69,4 +69,10 @@
}
return DISABLED_DEPENDENT_SETTING;
}
+
+ @Override
+ public void updateState(Preference pref) {
+ pref.setEnabled(getAvailabilityStatus() == AVAILABLE);
+ super.updateState(pref);
+ }
}
diff --git a/src/com/android/settings/applications/specialaccess/notificationaccess/NotificationAccessDetails.java b/src/com/android/settings/applications/specialaccess/notificationaccess/NotificationAccessDetails.java
index da25f17..e6feebb 100644
--- a/src/com/android/settings/applications/specialaccess/notificationaccess/NotificationAccessDetails.java
+++ b/src/com/android/settings/applications/specialaccess/notificationaccess/NotificationAccessDetails.java
@@ -233,11 +233,7 @@
apc.updateState(screen.findPreference(apc.getPreferenceKey()));
getPreferenceControllers().forEach(controllers -> {
controllers.forEach(controller -> {
- if (controller instanceof TypeFilterPreferenceController) {
- TypeFilterPreferenceController tfpc =
- (TypeFilterPreferenceController) controller;
- tfpc.updateState(screen.findPreference(tfpc.getPreferenceKey()));
- }
+ controller.updateState(screen.findPreference(controller.getPreferenceKey()));
});
});
}
@@ -249,11 +245,7 @@
apc.updateState(screen.findPreference(apc.getPreferenceKey()));
getPreferenceControllers().forEach(controllers -> {
controllers.forEach(controller -> {
- if (controller instanceof TypeFilterPreferenceController) {
- TypeFilterPreferenceController tfpc =
- (TypeFilterPreferenceController) controller;
- tfpc.updateState(screen.findPreference(tfpc.getPreferenceKey()));
- }
+ controller.updateState(screen.findPreference(controller.getPreferenceKey()));
});
});
}
diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
index e682934..6b830c9 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollActivity.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
@@ -93,6 +93,10 @@
public static final String EXTRA_PARENTAL_CONSENT_STATUS = "consent_status";
private static final String SAVED_STATE_CONFIRMING_CREDENTIALS = "confirming_credentials";
+ private static final String SAVED_STATE_FINGERPRINT_ONLY_ENROLLING =
+ "fingerprint_only_enrolling";
+ private static final String SAVED_STATE_PASS_THROUGH_EXTRAS_FROM_CHOSEN_LOCK_IN_SUW =
+ "pass_through_extras_from_chosen_lock_in_suw";
private static final String SAVED_STATE_ENROLL_ACTION_LOGGED = "enroll_action_logged";
private static final String SAVED_STATE_PARENTAL_OPTIONS = "enroll_preferences";
private static final String SAVED_STATE_GK_PW_HANDLE = "gk_pw_handle";
@@ -101,6 +105,8 @@
private int mUserId = UserHandle.myUserId();
private boolean mConfirmingCredentials;
+ private boolean mFingerprintOnlyEnrolling;
+ private Bundle mPassThroughExtrasFromChosenLockInSuw = null;
private boolean mIsEnrollActionLogged;
private boolean mHasFeatureFace = false;
private boolean mHasFeatureFingerprint = false;
@@ -129,6 +135,10 @@
if (savedInstanceState != null) {
mConfirmingCredentials = savedInstanceState.getBoolean(
SAVED_STATE_CONFIRMING_CREDENTIALS, false);
+ mFingerprintOnlyEnrolling = savedInstanceState.getBoolean(
+ SAVED_STATE_FINGERPRINT_ONLY_ENROLLING, false);
+ mPassThroughExtrasFromChosenLockInSuw = savedInstanceState.getBundle(
+ SAVED_STATE_PASS_THROUGH_EXTRAS_FROM_CHOSEN_LOCK_IN_SUW);
mIsEnrollActionLogged = savedInstanceState.getBoolean(
SAVED_STATE_ENROLL_ACTION_LOGGED, false);
mParentalOptions = savedInstanceState.getBundle(SAVED_STATE_PARENTAL_OPTIONS);
@@ -302,7 +312,11 @@
setOrConfirmCredentialsNow();
}
} else if (canUseFingerprint) {
- launchFingerprintOnlyEnroll();
+ if (mGkPwHandle != null) {
+ launchFingerprintOnlyEnroll();
+ } else {
+ setOrConfirmCredentialsNow();
+ }
} else if (canUseFace) {
launchFaceOnlyEnroll();
} else { // no modalities available
@@ -320,6 +334,9 @@
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(SAVED_STATE_CONFIRMING_CREDENTIALS, mConfirmingCredentials);
+ outState.putBoolean(SAVED_STATE_FINGERPRINT_ONLY_ENROLLING, mFingerprintOnlyEnrolling);
+ outState.putBundle(SAVED_STATE_PASS_THROUGH_EXTRAS_FROM_CHOSEN_LOCK_IN_SUW,
+ mPassThroughExtrasFromChosenLockInSuw);
outState.putBoolean(SAVED_STATE_ENROLL_ACTION_LOGGED, mIsEnrollActionLogged);
if (mParentalOptions != null) {
outState.putBundle(SAVED_STATE_PARENTAL_OPTIONS, mParentalOptions);
@@ -333,6 +350,12 @@
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
+ if (isSuccessfulChooseCredential(requestCode, resultCode)
+ && data != null && data.getExtras() != null && data.getExtras().size() > 0
+ && WizardManagerHelper.isAnySetupWizard(getIntent())) {
+ mPassThroughExtrasFromChosenLockInSuw = data.getExtras();
+ }
+
Log.d(TAG,
"onActivityResult(requestCode=" + requestCode + ", resultCode=" + resultCode + ")");
// single enrollment is handled entirely by the launched activity
@@ -406,7 +429,7 @@
}
} else {
Log.d(TAG, "Unknown or cancelled parental consent");
- setResult(RESULT_CANCELED);
+ setResult(RESULT_CANCELED, newResultIntent());
finish();
}
break;
@@ -432,18 +455,22 @@
mConfirmingCredentials = false;
final boolean isOk =
isSuccessfulConfirmOrChooseCredential(requestCode, resultCode);
- // single modality enrollment requests confirmation directly
+ // single face enrollment requests confirmation directly
// via BiometricEnrollBase#onCreate and should never get here
if (isOk && mHasFeatureFace && mHasFeatureFingerprint) {
updateGatekeeperPasswordHandle(data);
launchFaceAndFingerprintEnroll();
+ } else if (isOk && mHasFeatureFingerprint) {
+ updateGatekeeperPasswordHandle(data);
+ launchFingerprintOnlyEnroll();
} else {
Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
- setResult(resultCode);
+ setResult(resultCode, newResultIntent());
finish();
}
break;
case REQUEST_SINGLE_ENROLL:
+ mFingerprintOnlyEnrolling = false;
finishOrLaunchHandToParent(resultCode);
break;
default:
@@ -466,25 +493,37 @@
finish();
}
} else {
- setResult(resultCode);
+ setResult(resultCode, newResultIntent());
finish();
}
}
+ @NonNull
private Intent newResultIntent() {
final Intent intent = new Intent();
- final Bundle consentStatus = mParentalOptions.deepCopy();
- intent.putExtra(EXTRA_PARENTAL_CONSENT_STATUS, consentStatus);
- Log.v(TAG, "Result consent status: " + consentStatus);
+ if (mParentalOptionsRequired && mParentalOptions != null) {
+ final Bundle consentStatus = mParentalOptions.deepCopy();
+ intent.putExtra(EXTRA_PARENTAL_CONSENT_STATUS, consentStatus);
+ Log.v(TAG, "Result consent status: " + consentStatus);
+ }
+ if (mPassThroughExtrasFromChosenLockInSuw != null) {
+ intent.putExtras(mPassThroughExtrasFromChosenLockInSuw);
+ }
return intent;
}
private static boolean isSuccessfulConfirmOrChooseCredential(int requestCode, int resultCode) {
- final boolean okChoose = requestCode == REQUEST_CHOOSE_LOCK
+ return isSuccessfulChooseCredential(requestCode, resultCode)
+ || isSuccessfulConfirmCredential(requestCode, resultCode);
+ }
+
+ private static boolean isSuccessfulChooseCredential(int requestCode, int resultCode) {
+ return requestCode == REQUEST_CHOOSE_LOCK
&& resultCode == ChooseLockPattern.RESULT_FINISHED;
- final boolean okConfirm = requestCode == REQUEST_CONFIRM_LOCK
- && resultCode == RESULT_OK;
- return okChoose || okConfirm;
+ }
+
+ private static boolean isSuccessfulConfirmCredential(int requestCode, int resultCode) {
+ return requestCode == REQUEST_CONFIRM_LOCK && resultCode == RESULT_OK;
}
@Override
@@ -572,15 +611,18 @@
}
private void launchFingerprintOnlyEnroll() {
- final Intent intent;
- // ChooseLockGeneric can request to start fingerprint enroll bypassing the intro screen.
- if (getIntent().getBooleanExtra(EXTRA_SKIP_INTRO, false)
- && this instanceof InternalActivity) {
- intent = BiometricUtils.getFingerprintFindSensorIntent(this, getIntent());
- } else {
- intent = BiometricUtils.getFingerprintIntroIntent(this, getIntent());
+ if (!mFingerprintOnlyEnrolling) {
+ mFingerprintOnlyEnrolling = true;
+ final Intent intent;
+ // ChooseLockGeneric can request to start fingerprint enroll bypassing the intro screen.
+ if (getIntent().getBooleanExtra(EXTRA_SKIP_INTRO, false)
+ && this instanceof InternalActivity) {
+ intent = BiometricUtils.getFingerprintFindSensorIntent(this, getIntent());
+ } else {
+ intent = BiometricUtils.getFingerprintIntroIntent(this, getIntent());
+ }
+ launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL);
}
- launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL);
}
private void launchFaceOnlyEnroll() {
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index 98210b3..5f9a74f 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -47,6 +47,7 @@
import android.view.accessibility.AccessibilityManager;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
+import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
@@ -64,10 +65,12 @@
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupcompat.util.WizardManagerHelper;
+import com.google.android.setupdesign.GlifLayout;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.List;
+import java.util.Locale;
/**
* Activity which handles the actual enrolling for fingerprint.
@@ -76,6 +79,7 @@
private static final String TAG = "FingerprintEnrollEnrolling";
static final String TAG_SIDECAR = "sidecar";
+ static final String KEY_STATE_CANCELED = "is_canceled";
private static final int PROGRESS_BAR_MAX = 10000;
@@ -115,6 +119,7 @@
private FingerprintManager mFingerprintManager;
private boolean mCanAssumeUdfps;
+ private boolean mCanAssumeSidefps;
@Nullable private ProgressBar mProgressBar;
private ObjectAnimator mProgressAnim;
private TextView mDescriptionText;
@@ -129,6 +134,7 @@
private boolean mRestoring;
private Vibrator mVibrator;
private boolean mIsSetupWizard;
+ private boolean mIsCanceled;
private AccessibilityManager mAccessibilityManager;
private boolean mIsAccessibilityEnabled;
private LottieAnimationView mIllustrationLottie;
@@ -153,21 +159,49 @@
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ if (savedInstanceState != null) {
+ restoreSavedState(savedInstanceState);
+ }
mFingerprintManager = getSystemService(FingerprintManager.class);
final List<FingerprintSensorPropertiesInternal> props =
mFingerprintManager.getSensorPropertiesInternal();
- mCanAssumeUdfps = props.size() == 1 && props.get(0).isAnyUdfpsType();
+ mCanAssumeUdfps = props != null && props.size() == 1 && props.get(0).isAnyUdfpsType();
+ mCanAssumeSidefps = props != null && props.size() == 1 && props.get(0).isAnySidefpsType();
mAccessibilityManager = getSystemService(AccessibilityManager.class);
mIsAccessibilityEnabled = mAccessibilityManager.isEnabled();
+ final boolean isLayoutRtl = (TextUtils.getLayoutDirectionFromLocale(
+ Locale.getDefault()) == View.LAYOUT_DIRECTION_RTL);
listenOrientationEvent();
if (mCanAssumeUdfps) {
- if (BiometricUtils.isReverseLandscape(getApplicationContext())) {
- setContentView(R.layout.udfps_enroll_enrolling_land);
- } else {
- setContentView(R.layout.udfps_enroll_enrolling);
+ switch(getApplicationContext().getDisplay().getRotation()) {
+ case Surface.ROTATION_90:
+ final GlifLayout layout = (GlifLayout) getLayoutInflater().inflate(
+ R.layout.udfps_enroll_enrolling, null, false);
+ final LinearLayout layoutContainer = layout.findViewById(
+ R.id.layout_container);
+ final LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
+ LinearLayout.LayoutParams.MATCH_PARENT,
+ LinearLayout.LayoutParams.MATCH_PARENT);
+
+ lp.setMarginEnd((int) getResources().getDimension(
+ R.dimen.rotation_90_enroll_margin_end));
+ layoutContainer.setPaddingRelative((int) getResources().getDimension(
+ R.dimen.rotation_90_enroll_padding_start), 0, isLayoutRtl
+ ? 0 : (int) getResources().getDimension(
+ R.dimen.rotation_90_enroll_padding_end), 0);
+ layoutContainer.setLayoutParams(lp);
+ setContentView(layout, lp);
+ break;
+
+ case Surface.ROTATION_0:
+ case Surface.ROTATION_180:
+ case Surface.ROTATION_270:
+ default:
+ setContentView(R.layout.udfps_enroll_enrolling);
+ break;
}
setDescriptionText(R.string.security_settings_udfps_enroll_start_message);
} else {
@@ -238,7 +272,6 @@
return true;
});
}
- mRestoring = savedInstanceState != null;
}
@Override
@@ -253,12 +286,23 @@
if (mCanAssumeUdfps) {
// Continue enrollment if restoring (e.g. configuration changed). Otherwise, wait
// for the entry animation to complete before starting.
- return mRestoring;
+ return mRestoring && !mIsCanceled;
}
return true;
}
@Override
+ protected void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putBoolean(KEY_STATE_CANCELED, mIsCanceled);
+ }
+
+ private void restoreSavedState(Bundle savedInstanceState) {
+ mRestoring = true;
+ mIsCanceled = savedInstanceState.getBoolean(KEY_STATE_CANCELED, false);
+ }
+
+ @Override
protected void onStart() {
super.onStart();
updateProgress(false /* animate */);
@@ -498,7 +542,10 @@
@Override
public void onEnrollmentError(int errMsgId, CharSequence errString) {
FingerprintErrorDialog.showErrorDialog(this, errMsgId);
+ mIsCanceled = true;
+ cancelEnrollment();
stopIconAnimation();
+ stopListenOrientationEvent();
if (!mCanAssumeUdfps) {
mErrorText.removeCallbacks(mTouchAgainRunnable);
}
@@ -508,7 +555,6 @@
public void onEnrollmentProgressChange(int steps, int remaining) {
updateProgress(true /* animate */);
updateTitleAndDescription();
- clearError();
animateFlash();
if (!mCanAssumeUdfps) {
mErrorText.removeCallbacks(mTouchAgainRunnable);
@@ -537,6 +583,11 @@
int progress = getProgress(
mSidecar.getEnrollmentSteps(), mSidecar.getEnrollmentRemaining());
+ // Only clear the error when progress has been made.
+ // TODO (b/234772728) Add tests.
+ if (mProgressBar != null && mProgressBar.getProgress() < progress) {
+ clearError();
+ }
if (animate) {
animateProgress(progress);
} else {
@@ -563,7 +614,7 @@
}
private void showError(CharSequence error) {
- if (mCanAssumeUdfps) {
+ if (mCanAssumeUdfps || mCanAssumeSidefps) {
setHeaderText(error);
// Show nothing for subtitle when getting an error message.
setDescriptionText("");
@@ -635,13 +686,17 @@
new Animator.AnimatorListener() {
@Override
- public void onAnimationStart(Animator animation) { }
+ public void onAnimationStart(Animator animation) {
+ startIconAnimation();
+ }
@Override
public void onAnimationRepeat(Animator animation) { }
@Override
public void onAnimationEnd(Animator animation) {
+ stopIconAnimation();
+
if (mProgressBar.getProgress() >= PROGRESS_BAR_MAX) {
mProgressBar.postDelayed(mDelayedFinishRunnable, getFinishDelay());
}
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
index b9e9dcc..71d0c8e 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroduction.java
@@ -61,6 +61,7 @@
@Nullable private FooterButton mSecondaryFooterButton;
private DevicePolicyManager mDevicePolicyManager;
+ private boolean mCanAssumeUdfps;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -72,6 +73,10 @@
}
super.onCreate(savedInstanceState);
+ final FingerprintManager fingerprintManager = getSystemService(FingerprintManager.class);
+ final List<FingerprintSensorPropertiesInternal> props =
+ fingerprintManager.getSensorPropertiesInternal();
+ mCanAssumeUdfps = props != null && props.size() == 1 && props.get(0).isAnyUdfpsType();
mDevicePolicyManager = getSystemService(DevicePolicyManager.class);
@@ -79,11 +84,13 @@
final ImageView iconDeviceLocked = findViewById(R.id.icon_device_locked);
final ImageView iconTrashCan = findViewById(R.id.icon_trash_can);
final ImageView iconInfo = findViewById(R.id.icon_info);
+ final ImageView iconShield = findViewById(R.id.icon_shield);
final ImageView iconLink = findViewById(R.id.icon_link);
iconFingerprint.getDrawable().setColorFilter(getIconColorFilter());
iconDeviceLocked.getDrawable().setColorFilter(getIconColorFilter());
iconTrashCan.getDrawable().setColorFilter(getIconColorFilter());
iconInfo.getDrawable().setColorFilter(getIconColorFilter());
+ iconShield.getDrawable().setColorFilter(getIconColorFilter());
iconLink.getDrawable().setColorFilter(getIconColorFilter());
final TextView footerMessage2 = findViewById(R.id.footer_message_2);
@@ -97,6 +104,14 @@
footerMessage5.setText(getFooterMessage5());
footerMessage6.setText(getFooterMessage6());
+ if (mCanAssumeUdfps) {
+ footerMessage6.setVisibility(View.VISIBLE);
+ iconShield.setVisibility(View.VISIBLE);
+ } else {
+ footerMessage6.setVisibility(View.GONE);
+ iconShield.setVisibility(View.GONE);
+ }
+
final TextView footerTitle1 = findViewById(R.id.footer_title_1);
final TextView footerTitle2 = findViewById(R.id.footer_title_2);
footerTitle1.setText(getFooterTitle1());
@@ -226,6 +241,8 @@
final boolean isSetupWizard = WizardManagerHelper.isAnySetupWizard(getIntent());
final boolean isDeferredSetupWizard =
WizardManagerHelper.isDeferredSetupWizard(getIntent());
+ final boolean isPortalSetupWizard =
+ WizardManagerHelper.isPortalSetupWizard(getIntent());
if (mFingerprintManager != null) {
final List<FingerprintSensorPropertiesInternal> props =
mFingerprintManager.getSensorPropertiesInternal();
@@ -237,7 +254,7 @@
getApplicationContext()
.getResources()
.getInteger(R.integer.suw_max_fingerprints_enrollable);
- if (isSetupWizard && !isDeferredSetupWizard) {
+ if (isSetupWizard && !isDeferredSetupWizard && !isPortalSetupWizard) {
if (numEnrolledFingerprints >= maxFingerprintsEnrollableIfSUW) {
return R.string.fingerprint_intro_error_max;
} else {
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
index a238119..9f9efdc 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
@@ -16,20 +16,84 @@
package com.android.settings.biometrics.fingerprint;
+import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_FINISHED;
+import static com.android.settings.biometrics.BiometricEnrollBase.RESULT_TIMEOUT;
+import static com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.KEY_STATE_CANCELED;
+
+import android.app.Activity;
+import android.app.Dialog;
import android.app.settings.SettingsEnums;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.hardware.biometrics.BiometricConstants;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentManager;
import com.android.settings.R;
import com.android.settings.biometrics.BiometricEnrollBase;
-import com.android.settings.biometrics.BiometricErrorDialog;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-/**
- * Fingerprint error dialog, will be shown when an error occurs during fingerprint enrollment.
- */
-public class FingerprintErrorDialog extends BiometricErrorDialog {
+/** Fingerprint error dialog, will be shown when an error occurs during fingerprint enrollment. */
+public class FingerprintErrorDialog extends InstrumentedDialogFragment {
+
+ public static final String KEY_ERROR_MSG = "error_msg";
+ public static final String KEY_ERROR_ID = "error_id";
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ CharSequence errorString = getArguments().getCharSequence(KEY_ERROR_MSG);
+ final int errMsgId = getArguments().getInt(KEY_ERROR_ID);
+ boolean wasTimeout = errMsgId == BiometricConstants.BIOMETRIC_ERROR_TIMEOUT;
+
+ builder.setTitle(R.string.security_settings_fingerprint_enroll_error_dialog_title)
+ .setMessage(errorString)
+ .setCancelable(false)
+ .setPositiveButton(
+ R.string.security_settings_fingerprint_enroll_dialog_ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ Activity activity = getActivity();
+ activity.setResult(RESULT_FINISHED);
+ activity.finish();
+ }
+ });
+ if (wasTimeout) {
+ builder.setPositiveButton(
+ R.string.security_settings_fingerprint_enroll_dialog_try_again,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ Activity activity = getActivity();
+ Intent intent = activity.getIntent();
+ intent.putExtra(KEY_STATE_CANCELED, false);
+ activity.startActivity(intent);
+ activity.finish();
+ }
+ })
+ .setNegativeButton(
+ R.string.security_settings_fingerprint_enroll_dialog_ok,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ Activity activity = getActivity();
+ activity.setResult(RESULT_TIMEOUT);
+ activity.finish();
+ }
+ });
+ }
+ AlertDialog dialog = builder.create();
+ dialog.setCanceledOnTouchOutside(false);
+ return dialog;
+ }
+
public static void showErrorDialog(BiometricEnrollBase host, int errMsgId) {
if (host.isFinishing()) {
return;
@@ -48,8 +112,8 @@
private static int getErrorMessage(int errMsgId) {
switch (errMsgId) {
case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:
- // This message happens when the underlying crypto layer decides to revoke the
- // enrollment auth token.
+ // This message happens when the underlying crypto layer decides to revoke
+ // the enrollment auth token.
return R.string.security_settings_fingerprint_enroll_error_timeout_dialog_message;
case FingerprintManager.FINGERPRINT_ERROR_BAD_CALIBRATION:
return R.string.security_settings_fingerprint_bad_calibration;
@@ -69,16 +133,6 @@
}
@Override
- public int getTitleResId() {
- return R.string.security_settings_fingerprint_enroll_error_dialog_title;
- }
-
- @Override
- public int getOkButtonTextResId() {
- return R.string.security_settings_fingerprint_enroll_dialog_ok;
- }
-
- @Override
public int getMetricsCategory() {
return SettingsEnums.DIALOG_FINGERPINT_ERROR;
}
diff --git a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
index af25ecd..b313961 100644
--- a/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroduction.java
@@ -16,21 +16,16 @@
package com.android.settings.biometrics.fingerprint;
-import android.app.Activity;
import android.app.KeyguardManager;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.hardware.fingerprint.FingerprintManager;
-import android.os.Bundle;
-import android.os.UserHandle;
import android.view.View;
-import com.android.internal.widget.LockPatternUtils;
import com.android.settings.SetupWizardUtils;
import com.android.settings.Utils;
import com.android.settings.biometrics.BiometricUtils;
import com.android.settings.password.ChooseLockSettingsHelper;
-import com.android.settings.password.SetupChooseLockGeneric;
import com.android.settings.password.SetupSkipDialog;
public class SetupFingerprintEnrollIntroduction extends FingerprintEnrollIntroduction {
@@ -40,24 +35,6 @@
private static final String EXTRA_FINGERPRINT_ENROLLED_COUNT = "fingerprint_enrolled_count";
private static final String KEY_LOCK_SCREEN_PRESENT = "wasLockScreenPresent";
- private boolean mAlreadyHadLockScreenSetup = false;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (savedInstanceState == null) {
- mAlreadyHadLockScreenSetup = isKeyguardSecure();
- } else {
- mAlreadyHadLockScreenSetup = savedInstanceState.getBoolean(
- KEY_LOCK_SCREEN_PRESENT, false);
- }
- }
-
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putBoolean(KEY_LOCK_SCREEN_PRESENT, mAlreadyHadLockScreenSetup);
- }
@Override
protected Intent getEnrollingIntent() {
@@ -85,12 +62,6 @@
}
}
if (requestCode == BIOMETRIC_FIND_SENSOR_REQUEST && isKeyguardSecure()) {
- // if lock was already present, do not return intent data since it must have been
- // reported in previous attempts
- if (!mAlreadyHadLockScreenSetup) {
- data = getMetricIntent(data);
- }
-
// Report fingerprint count if user adding a new fingerprint
if (resultCode == RESULT_FINISHED) {
data = setFingerprintCount(data);
@@ -127,18 +98,6 @@
super.onActivityResult(requestCode, resultCode, data);
}
- private Intent getMetricIntent(Intent data) {
- if (data == null) {
- data = new Intent();
- }
- LockPatternUtils lockPatternUtils = new LockPatternUtils(this);
- data.putExtra(SetupChooseLockGeneric.
- SetupChooseLockGenericFragment.EXTRA_PASSWORD_QUALITY,
- lockPatternUtils.getKeyguardStoredPasswordQuality(UserHandle.myUserId()));
-
- return data;
- }
-
private Intent setFingerprintCount(Intent data) {
if (data == null) {
data = new Intent();
@@ -161,8 +120,7 @@
if (!BiometricUtils.tryStartingNextBiometricEnroll(
this, ENROLL_NEXT_BIOMETRIC_REQUEST, "cancel")) {
resultCode = RESULT_SKIP;
- data = mAlreadyHadLockScreenSetup ? null : getMetricIntent(null);
- setResult(resultCode, data);
+ setResult(resultCode);
finish();
return;
}
@@ -176,18 +134,6 @@
// User has explicitly canceled enroll. Don't restart it automatically.
}
- /**
- * Propagate lock screen metrics if the user goes back from the fingerprint setup screen
- * after having added lock screen to his device.
- */
- @Override
- public void onBackPressed() {
- if (!mAlreadyHadLockScreenSetup && isKeyguardSecure()) {
- setResult(Activity.RESULT_CANCELED, getMetricIntent(null));
- }
- super.onBackPressed();
- }
-
private boolean isKeyguardSecure() {
return getSystemService(KeyguardManager.class).isKeyguardSecure();
}
diff --git a/src/com/android/settings/bluetooth/BluetoothBroadcastDialog.java b/src/com/android/settings/bluetooth/BluetoothBroadcastDialog.java
index b2636a6..dd06b67 100644
--- a/src/com/android/settings/bluetooth/BluetoothBroadcastDialog.java
+++ b/src/com/android/settings/bluetooth/BluetoothBroadcastDialog.java
@@ -41,15 +41,18 @@
* nearby broadcast sources.
*/
public class BluetoothBroadcastDialog extends InstrumentedDialogFragment {
+
public static final String KEY_APP_LABEL = "app_label";
public static final String KEY_DEVICE_ADDRESS =
BluetoothFindBroadcastsFragment.KEY_DEVICE_ADDRESS;
+ public static final String KEY_MEDIA_STREAMING = "media_streaming";
private static final String TAG = "BTBroadcastsDialog";
private static final CharSequence UNKNOWN_APP_LABEL = "unknown";
private Context mContext;
private CharSequence mCurrentAppLabel = UNKNOWN_APP_LABEL;
private String mDeviceAddress;
+ private boolean mIsMediaStreaming;
private LocalBluetoothManager mLocalBluetoothManager;
private AlertDialog mAlertDialog;
@@ -59,6 +62,7 @@
mContext = getActivity();
mCurrentAppLabel = getActivity().getIntent().getCharSequenceExtra(KEY_APP_LABEL);
mDeviceAddress = getActivity().getIntent().getStringExtra(KEY_DEVICE_ADDRESS);
+ mIsMediaStreaming = getActivity().getIntent().getBooleanExtra(KEY_MEDIA_STREAMING, false);
mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
setShowsDialog(true);
}
@@ -75,16 +79,21 @@
mContext.getString(R.string.bluetooth_broadcast_dialog_broadcast_message));
Button broadcastBtn = layout.findViewById(com.android.settingslib.R.id.positive_btn);
- if (TextUtils.isEmpty(mCurrentAppLabel)) {
- broadcastBtn.setText(mContext.getString(R.string.bluetooth_broadcast_dialog_title));
- } else {
- broadcastBtn.setText(mContext.getString(
+ if (isBroadcastSupported() && mIsMediaStreaming) {
+ broadcastBtn.setVisibility(View.VISIBLE);
+ if (TextUtils.isEmpty(mCurrentAppLabel)) {
+ broadcastBtn.setText(mContext.getString(R.string.bluetooth_broadcast_dialog_title));
+ } else {
+ broadcastBtn.setText(mContext.getString(
R.string.bluetooth_broadcast_dialog_broadcast_app,
String.valueOf(mCurrentAppLabel)));
+ }
+ broadcastBtn.setOnClickListener((view) -> {
+ launchMediaOutputBroadcastDialog();
+ });
+ } else {
+ broadcastBtn.setVisibility(View.GONE);
}
- broadcastBtn.setOnClickListener((view) -> {
- launchMediaOutputBroadcastDialog();
- });
Button findBroadcastBtn = layout.findViewById(com.android.settingslib.R.id.negative_btn);
findBroadcastBtn.setText(mContext.getString(R.string.bluetooth_find_broadcast));
@@ -169,4 +178,10 @@
.setPackage(MediaOutputConstants.SETTINGS_PACKAGE_NAME)
.setAction(MediaOutputConstants.ACTION_CLOSE_PANEL));
}
+
+ boolean isBroadcastSupported() {
+ LocalBluetoothLeBroadcast broadcast =
+ mLocalBluetoothManager.getProfileManager().getLeAudioBroadcastProfile();
+ return broadcast != null;
+ }
}
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsPairOtherController.java b/src/com/android/settings/bluetooth/BluetoothDetailsPairOtherController.java
new file mode 100644
index 0000000..d14a9b1
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsPairOtherController.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.bluetooth;
+
+import android.content.Context;
+
+import androidx.preference.PreferenceFragmentCompat;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.SubSettingLauncher;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.HearingAidProfile;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.widget.ButtonPreference;
+
+/**
+ * This class handles button preference logic to display for hearing aid device.
+ */
+public class BluetoothDetailsPairOtherController extends BluetoothDetailsController {
+ private static final String KEY_PAIR_OTHER = "hearing_aid_pair_other_button";
+
+ private ButtonPreference mPreference;
+
+ public BluetoothDetailsPairOtherController(Context context,
+ PreferenceFragmentCompat fragment,
+ CachedBluetoothDevice device,
+ Lifecycle lifecycle) {
+ super(context, fragment, device, lifecycle);
+ lifecycle.addObserver(this);
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return getButtonPreferenceVisibility(mCachedDevice);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return KEY_PAIR_OTHER;
+ }
+
+ @Override
+ protected void init(PreferenceScreen screen) {
+ final int side = mCachedDevice.getDeviceSide();
+ final int stringRes = (side == HearingAidProfile.DeviceSide.SIDE_LEFT)
+ ? R.string.bluetooth_pair_right_ear_button
+ : R.string.bluetooth_pair_left_ear_button;
+
+ mPreference = screen.findPreference(getPreferenceKey());
+ mPreference.setTitle(stringRes);
+ mPreference.setOnClickListener(v -> launchPairingDetail());
+ }
+
+ @Override
+ protected void refresh() {
+ mPreference.setVisible(getButtonPreferenceVisibility(mCachedDevice));
+ }
+
+ private boolean getButtonPreferenceVisibility(CachedBluetoothDevice cachedDevice) {
+ return isBinauralMode(cachedDevice) && isOnlyOneSideConnected(cachedDevice);
+ }
+
+ private void launchPairingDetail() {
+ new SubSettingLauncher(mContext)
+ .setDestination(BluetoothPairingDetail.class.getName())
+ .setSourceMetricsCategory(
+ ((BluetoothDeviceDetailsFragment) mFragment).getMetricsCategory())
+ .launch();
+ }
+
+ private boolean isBinauralMode(CachedBluetoothDevice cachedDevice) {
+ return cachedDevice.getDeviceMode() == HearingAidProfile.DeviceMode.MODE_BINAURAL;
+ }
+
+ private boolean isOnlyOneSideConnected(CachedBluetoothDevice cachedDevice) {
+ if (!cachedDevice.isConnectedHearingAidDevice()) {
+ return false;
+ }
+
+ final CachedBluetoothDevice subDevice = cachedDevice.getSubDevice();
+ if (subDevice != null && subDevice.isConnectedHearingAidDevice()) {
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
index c118a43..999e34d 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
@@ -251,6 +251,8 @@
lifecycle));
controllers.add(new BluetoothDetailsRelatedToolsController(context, this, mCachedDevice,
lifecycle));
+ controllers.add(new BluetoothDetailsPairOtherController(context, this, mCachedDevice,
+ lifecycle));
}
return controllers;
}
diff --git a/src/com/android/settings/bluetooth/QrCodeScanModeActivity.java b/src/com/android/settings/bluetooth/QrCodeScanModeActivity.java
index 5c5b61f..690c07e 100644
--- a/src/com/android/settings/bluetooth/QrCodeScanModeActivity.java
+++ b/src/com/android/settings/bluetooth/QrCodeScanModeActivity.java
@@ -30,7 +30,15 @@
import com.android.settingslib.bluetooth.BluetoothBroadcastUtils;
import com.android.settingslib.bluetooth.BluetoothUtils;
-//TODO (b/232365943): Add test case for tthe QrCode UI.
+/**
+ * Finding a broadcast through QR code.
+ *
+ * To use intent action {@link BluetoothBroadcastUtils#ACTION_BLUETOOTH_LE_AUDIO_QR_CODE_SCANNER},
+ * specify the bluetooth device sink of the broadcast to be provisioned in
+ * {@link BluetoothBroadcastUtils#EXTRA_BLUETOOTH_DEVICE_SINK} and check the operation for all
+ * coordinated set members throughout one session or not by
+ * {@link BluetoothBroadcastUtils#EXTRA_BLUETOOTH_SINK_IS_GROUP}.
+ */
public class QrCodeScanModeActivity extends QrCodeScanModeBaseActivity {
private static final boolean DEBUG = BluetoothUtils.D;
private static final String TAG = "QrCodeScanModeActivity";
diff --git a/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java b/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java
index dcf89ca..0253aa6 100644
--- a/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java
+++ b/src/com/android/settings/bluetooth/QrCodeScanModeFragment.java
@@ -36,16 +36,15 @@
import android.view.accessibility.AccessibilityEvent;
import android.widget.TextView;
+import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
+
import com.android.settings.core.InstrumentedFragment;
import com.android.settingslib.R;
import com.android.settingslib.bluetooth.BluetoothBroadcastUtils;
import com.android.settingslib.bluetooth.BluetoothUtils;
-import com.android.settingslib.core.lifecycle.ObservableFragment;
import com.android.settingslib.qrcode.QrCamera;
-import androidx.annotation.NonNull;
-import androidx.annotation.StringRes;
-
public class QrCodeScanModeFragment extends InstrumentedFragment implements
TextureView.SurfaceTextureListener,
QrCamera.ScannerCallback {
@@ -232,8 +231,7 @@
}
private void updateSummary() {
- mSummary.setText(getString(R.string.bt_le_audio_scan_qr_code_scanner,
- null /* broadcast_name*/));;
+ mSummary.setText(getString(R.string.bt_le_audio_scan_qr_code_scanner));
}
@Override
diff --git a/src/com/android/settings/core/SettingsBaseActivity.java b/src/com/android/settings/core/SettingsBaseActivity.java
index 9c24a23..5f15093 100644
--- a/src/com/android/settings/core/SettingsBaseActivity.java
+++ b/src/com/android/settings/core/SettingsBaseActivity.java
@@ -23,6 +23,7 @@
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
+import android.graphics.text.LineBreakConfig;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
@@ -109,6 +110,12 @@
if (mCollapsingToolbarLayout != null) {
mCollapsingToolbarLayout.setLineSpacingMultiplier(TOOLBAR_LINE_SPACING_MULTIPLIER);
mCollapsingToolbarLayout.setHyphenationFrequency(HYPHENATION_FREQUENCY_NORMAL_FAST);
+ mCollapsingToolbarLayout.setStaticLayoutBuilderConfigurer(builder ->
+ builder.setLineBreakConfig(
+ new LineBreakConfig.Builder()
+ .setLineBreakWordStyle(
+ LineBreakConfig.LINE_BREAK_WORD_STYLE_PHRASE)
+ .build()));
}
disableCollapsingToolbarLayoutScrollingBehavior();
} else {
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 11ceeaf..dc746ce 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -99,9 +99,9 @@
import com.android.settings.dream.DreamSettings;
import com.android.settings.enterprise.EnterprisePrivacySettings;
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
-import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.fuelgauge.batterysaver.BatterySaverScheduleSettings;
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
+import com.android.settings.fuelgauge.batteryusage.PowerUsageSummary;
import com.android.settings.gestures.AssistGestureSettings;
import com.android.settings.gestures.ButtonNavigationSettingsFragment;
import com.android.settings.gestures.DoubleTapPowerSettings;
diff --git a/src/com/android/settings/dashboard/DashboardFragment.java b/src/com/android/settings/dashboard/DashboardFragment.java
index fb0a09d..9d1ed7c 100644
--- a/src/com/android/settings/dashboard/DashboardFragment.java
+++ b/src/com/android/settings/dashboard/DashboardFragment.java
@@ -415,6 +415,30 @@
updatePreferenceVisibility(mPreferenceControllers);
}
+ /**
+ * Force update all the preferences in this fragment.
+ */
+ public void forceUpdatePreferences() {
+ final PreferenceScreen screen = getPreferenceScreen();
+ if (screen == null || mPreferenceControllers == null) {
+ return;
+ }
+ for (List<AbstractPreferenceController> controllerList : mPreferenceControllers.values()) {
+ for (AbstractPreferenceController controller : controllerList) {
+ final String key = controller.getPreferenceKey();
+ final Preference preference = findPreference(key);
+ if (preference == null) {
+ continue;
+ }
+ final boolean available = controller.isAvailable();
+ if (available) {
+ controller.updateState(preference);
+ }
+ preference.setVisible(available);
+ }
+ }
+ }
+
@VisibleForTesting
void updatePreferenceVisibility(
Map<Class, List<AbstractPreferenceController>> preferenceControllers) {
diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
index eb04f3c..c2b5198 100644
--- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
+++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -31,9 +31,9 @@
import com.android.settings.display.NightDisplaySettings;
import com.android.settings.emergency.EmergencyDashboardFragment;
import com.android.settings.enterprise.EnterprisePrivacySettings;
-import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.fuelgauge.SmartBatterySettings;
import com.android.settings.fuelgauge.batterysaver.BatterySaverSettings;
+import com.android.settings.fuelgauge.batteryusage.PowerUsageSummary;
import com.android.settings.gestures.GestureSettings;
import com.android.settings.homepage.TopLevelSettings;
import com.android.settings.language.LanguageAndInputSettings;
diff --git a/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java b/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java
index 4426bde..98629b4 100644
--- a/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java
+++ b/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java
@@ -16,14 +16,22 @@
package com.android.settings.datetime;
-import android.content.Context;
-import android.provider.Settings;
+import static android.app.time.Capabilities.CAPABILITY_NOT_ALLOWED;
+import static android.app.time.Capabilities.CAPABILITY_NOT_APPLICABLE;
+import static android.app.time.Capabilities.CAPABILITY_NOT_SUPPORTED;
+import static android.app.time.Capabilities.CAPABILITY_POSSESSED;
+import android.app.time.TimeManager;
+import android.app.time.TimeZoneCapabilities;
+import android.app.time.TimeZoneCapabilitiesAndConfig;
+import android.app.time.TimeZoneConfiguration;
+import android.content.Context;
+
+import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.SwitchPreference;
import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
public class AutoTimeZonePreferenceController extends AbstractPreferenceController
@@ -33,17 +41,37 @@
private final boolean mIsFromSUW;
private final UpdateTimeAndDateCallback mCallback;
+ private final TimeManager mTimeManager;
public AutoTimeZonePreferenceController(Context context, UpdateTimeAndDateCallback callback,
boolean isFromSUW) {
super(context);
+ mTimeManager = context.getSystemService(TimeManager.class);
mCallback = callback;
mIsFromSUW = isFromSUW;
}
@Override
public boolean isAvailable() {
- return !(Utils.isWifiOnly(mContext) || mIsFromSUW);
+ if (mIsFromSUW) {
+ return false;
+ }
+
+ TimeZoneCapabilities timeZoneCapabilities =
+ getTimeZoneCapabilitiesAndConfig().getCapabilities();
+ int capability = timeZoneCapabilities.getConfigureAutoDetectionEnabledCapability();
+
+ // The preference only has two states: present and not present. The preference is never
+ // present but disabled.
+ if (capability == CAPABILITY_NOT_SUPPORTED
+ || capability == CAPABILITY_NOT_ALLOWED
+ || capability == CAPABILITY_NOT_APPLICABLE) {
+ return false;
+ } else if (capability == CAPABILITY_POSSESSED) {
+ return true;
+ } else {
+ throw new IllegalStateException("Unknown capability=" + capability);
+ }
}
@Override
@@ -62,14 +90,22 @@
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean autoZoneEnabled = (Boolean) newValue;
- Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTO_TIME_ZONE,
- autoZoneEnabled ? 1 : 0);
+ TimeZoneConfiguration configuration = new TimeZoneConfiguration.Builder()
+ .setAutoDetectionEnabled(autoZoneEnabled)
+ .build();
+ boolean result = mTimeManager.updateTimeZoneConfiguration(configuration);
+
mCallback.updateTimeAndDateDisplay(mContext);
- return true;
+ return result;
}
- public boolean isEnabled() {
- return isAvailable() && Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.AUTO_TIME_ZONE, 0) > 0;
+ @VisibleForTesting
+ boolean isEnabled() {
+ TimeZoneConfiguration config = getTimeZoneCapabilitiesAndConfig().getConfiguration();
+ return config.isAutoDetectionEnabled();
+ }
+
+ private TimeZoneCapabilitiesAndConfig getTimeZoneCapabilitiesAndConfig() {
+ return mTimeManager.getTimeZoneCapabilitiesAndConfig();
}
}
diff --git a/src/com/android/settings/datetime/DateTimeSettings.java b/src/com/android/settings/datetime/DateTimeSettings.java
index d74847f..169455a 100644
--- a/src/com/android/settings/datetime/DateTimeSettings.java
+++ b/src/com/android/settings/datetime/DateTimeSettings.java
@@ -85,8 +85,7 @@
controllers.add(new TimeFormatPreferenceController(
activity, this /* UpdateTimeAndDateCallback */, isFromSUW));
- controllers.add(new TimeZonePreferenceController(
- activity, autoTimeZonePreferenceController));
+ controllers.add(new TimeZonePreferenceController(activity));
controllers.add(new TimePreferenceController(
activity, this /* UpdateTimeAndDateCallback */, autoTimePreferenceController));
controllers.add(new DatePreferenceController(
diff --git a/src/com/android/settings/datetime/TimeZonePreferenceController.java b/src/com/android/settings/datetime/TimeZonePreferenceController.java
index a19f055..a26c7bf 100644
--- a/src/com/android/settings/datetime/TimeZonePreferenceController.java
+++ b/src/com/android/settings/datetime/TimeZonePreferenceController.java
@@ -16,6 +16,10 @@
package com.android.settings.datetime;
+import static android.app.time.Capabilities.CAPABILITY_POSSESSED;
+
+import android.app.time.TimeManager;
+import android.app.time.TimeZoneCapabilities;
import android.content.Context;
import androidx.annotation.VisibleForTesting;
@@ -33,12 +37,11 @@
private static final String KEY_TIMEZONE = "timezone";
- private final AutoTimeZonePreferenceController mAutoTimeZonePreferenceController;
+ private final TimeManager mTimeManager;
- public TimeZonePreferenceController(Context context,
- AutoTimeZonePreferenceController autoTimeZonePreferenceController) {
+ public TimeZonePreferenceController(Context context) {
super(context);
- mAutoTimeZonePreferenceController = autoTimeZonePreferenceController;
+ mTimeManager = context.getSystemService(TimeManager.class);
}
@Override
@@ -47,8 +50,9 @@
return;
}
preference.setSummary(getTimeZoneOffsetAndName());
- if( !((RestrictedPreference) preference).isDisabledByAdmin()) {
- preference.setEnabled(!mAutoTimeZonePreferenceController.isEnabled());
+ if (!((RestrictedPreference) preference).isDisabledByAdmin()) {
+ boolean enableManualTimeZoneSelection = shouldEnableManualTimeZoneSelection();
+ preference.setEnabled(enableManualTimeZoneSelection);
}
}
@@ -68,4 +72,12 @@
return ZoneGetter.getTimeZoneOffsetAndName(mContext,
now.getTimeZone(), now.getTime());
}
+
+ private boolean shouldEnableManualTimeZoneSelection() {
+ TimeZoneCapabilities timeZoneCapabilities =
+ mTimeManager.getTimeZoneCapabilitiesAndConfig().getCapabilities();
+ int suggestManualTimeZoneCapability =
+ timeZoneCapabilities.getSuggestManualTimeZoneCapability();
+ return suggestManualTimeZoneCapability == CAPABILITY_POSSESSED;
+ }
}
diff --git a/src/com/android/settings/development/NotificationChannelWarningsPreferenceController.java b/src/com/android/settings/development/NotificationChannelWarningsPreferenceController.java
index 775b708..22b3f83 100644
--- a/src/com/android/settings/development/NotificationChannelWarningsPreferenceController.java
+++ b/src/com/android/settings/development/NotificationChannelWarningsPreferenceController.java
@@ -38,10 +38,6 @@
final static int SETTING_VALUE_ON = 1;
@VisibleForTesting
final static int SETTING_VALUE_OFF = 0;
- @VisibleForTesting
- final static int DEBUGGING_ENABLED = 1;
- @VisibleForTesting
- final static int DEBUGGING_DISABLED = 0;
public NotificationChannelWarningsPreferenceController(Context context) {
super(context);
@@ -64,9 +60,8 @@
@Override
public void updateState(Preference preference) {
- final int defaultWarningEnabled = isDebuggable() ? DEBUGGING_ENABLED : DEBUGGING_DISABLED;
final int mode = Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS, defaultWarningEnabled);
+ Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS, 0);
((SwitchPreference) mPreference).setChecked(mode != SETTING_VALUE_OFF);
}
diff --git a/src/com/android/settings/development/StayAwakePreferenceController.java b/src/com/android/settings/development/StayAwakePreferenceController.java
index 25a92b2..9ed0ef8 100644
--- a/src/com/android/settings/development/StayAwakePreferenceController.java
+++ b/src/com/android/settings/development/StayAwakePreferenceController.java
@@ -50,7 +50,7 @@
@VisibleForTesting
static final int SETTING_VALUE_ON =
BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB
- | BatteryManager.BATTERY_PLUGGED_WIRELESS;
+ | BatteryManager.BATTERY_PLUGGED_WIRELESS | BatteryManager.BATTERY_PLUGGED_DOCK;
@VisibleForTesting
SettingsObserver mSettingsObserver;
diff --git a/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
index 62bcffb..c9cc2b7 100644
--- a/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/AbstractBluetoothDialogPreferenceController.java
@@ -40,7 +40,11 @@
private static final String TAG = "AbstractBtDlgCtr";
- protected static final int[] CODEC_TYPES = {BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
+ private static final int SOURCE_CODEC_TYPE_OPUS = 6; // TODO(b/240635097): remove in U
+
+ protected static final int[] CODEC_TYPES = {SOURCE_CODEC_TYPE_OPUS,
+ BluetoothCodecConfig.SOURCE_CODEC_TYPE_LC3,
+ BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC,
BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD,
BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX,
BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC,
diff --git a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java
index 6a733f3..929a6d0 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreference.java
@@ -61,6 +61,8 @@
mRadioButtonIds.add(R.id.bluetooth_audio_codec_aptx);
mRadioButtonIds.add(R.id.bluetooth_audio_codec_aptx_hd);
mRadioButtonIds.add(R.id.bluetooth_audio_codec_ldac);
+ mRadioButtonIds.add(R.id.bluetooth_audio_codec_lc3);
+ mRadioButtonIds.add(R.id.bluetooth_audio_codec_opus);
String[] stringArray = context.getResources().getStringArray(
R.array.bluetooth_a2dp_codec_titles);
for (int i = 0; i < stringArray.length; i++) {
diff --git a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
index a65a1ba..87d5ff0 100644
--- a/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
+++ b/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceController.java
@@ -40,6 +40,8 @@
private static final String KEY = "bluetooth_audio_codec_settings";
private static final String TAG = "BtCodecCtr";
+ private static final int SOURCE_CODEC_TYPE_OPUS = 6; // TODO remove in U
+
private final Callback mCallback;
public BluetoothCodecDialogPreferenceController(Context context, Lifecycle lifecycle,
@@ -118,6 +120,14 @@
codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
break;
+ case 6:
+ codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LC3;
+ codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
+ break;
+ case 7:
+ codecTypeValue = SOURCE_CODEC_TYPE_OPUS; // TODO update in U
+ codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
+ break;
default:
break;
}
@@ -180,6 +190,9 @@
case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
index = 5;
break;
+ case SOURCE_CODEC_TYPE_OPUS: // TODO update in U
+ index = 7;
+ break;
default:
Log.e(TAG, "Unsupported config:" + config);
break;
diff --git a/src/com/android/settings/development/qstile/DevelopmentTiles.java b/src/com/android/settings/development/qstile/DevelopmentTiles.java
index 0483aea..343ed24 100644
--- a/src/com/android/settings/development/qstile/DevelopmentTiles.java
+++ b/src/com/android/settings/development/qstile/DevelopmentTiles.java
@@ -476,4 +476,77 @@
Settings.System.SHOW_TOUCHES, isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
}
}
+
+ /**
+ * Tile to enable desktop mode
+ */
+ public static class DesktopMode extends DevelopmentTiles {
+
+ private static final int SETTING_VALUE_ON = 1;
+ private static final int SETTING_VALUE_OFF = 0;
+ private Context mContext;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ mContext = getApplicationContext();
+ }
+
+ @Override
+ protected boolean isEnabled() {
+ return Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.DESKTOP_MODE, SETTING_VALUE_OFF) == SETTING_VALUE_ON;
+ }
+
+ private boolean isDesktopModeFlagEnabled() {
+ return SystemProperties.getBoolean("persist.wm.debug.desktop_mode", false);
+ }
+
+ private boolean isFreeformFlagEnabled() {
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, SETTING_VALUE_OFF)
+ == SETTING_VALUE_ON;
+ }
+
+ private boolean isCaptionOnShellEnabled() {
+ return SystemProperties.getBoolean("persist.wm.debug.caption_on_shell", false);
+ }
+
+ @Override
+ protected void setIsEnabled(boolean isEnabled) {
+ if (isEnabled) {
+ // Check that all required features are enabled
+ if (!isDesktopModeFlagEnabled()) {
+ closeShade();
+ showMessage(
+ "Enable 'Desktop Windowing Proto 1' from the Flag Flipper app");
+ return;
+ }
+ if (!isCaptionOnShellEnabled()) {
+ closeShade();
+ showMessage("Enable 'Captions in Shell' from the Flag Flipper app");
+ return;
+ }
+ if (!isFreeformFlagEnabled()) {
+ closeShade();
+ showMessage(
+ "Enable freeform windows from developer settings");
+ return;
+ }
+ }
+
+ Settings.System.putInt(mContext.getContentResolver(),
+ Settings.System.DESKTOP_MODE,
+ isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
+ closeShade();
+ }
+
+ private void closeShade() {
+ sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+ }
+
+ private void showMessage(String message) {
+ Toast.makeText(mContext, message, Toast.LENGTH_LONG).show();
+ }
+ }
}
diff --git a/src/com/android/settings/deviceinfo/PublicVolumeSettings.java b/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
index f7dd85a..d43b254 100644
--- a/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PublicVolumeSettings.java
@@ -19,6 +19,7 @@
import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
+import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.UserManager;
@@ -57,15 +58,34 @@
private String mVolumeId;
private VolumeInfo mVolume;
+ private final View.OnClickListener mUnmountListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ new UnmountTask(getActivity(), mVolume).execute();
+ }
+ };
private DiskInfo mDisk;
-
private UsageProgressBarPreference mSummary;
-
private Preference mMount;
private Preference mFormatPublic;
- private Preference mFormatPrivate;
private Button mUnmount;
+ private final StorageEventListener mStorageListener = new StorageEventListener() {
+ @Override
+ public void onVolumeStateChanged(VolumeInfo vol, int oldState, int newState) {
+ if (Objects.equals(mVolume.getId(), vol.getId())) {
+ mVolume = vol;
+ update();
+ }
+ }
+ @Override
+ public void onVolumeRecordChanged(VolumeRecord rec) {
+ if (Objects.equals(mVolume.getFsUuid(), rec.getFsUuid())) {
+ mVolume = mStorageManager.findVolumeById(mVolumeId);
+ update();
+ }
+ }
+ };
private boolean mIsPermittedToAdopt;
private boolean isVolumeValid() {
@@ -120,10 +140,7 @@
mUnmount = new Button(getActivity());
mUnmount.setText(R.string.storage_menu_unmount);
mUnmount.setOnClickListener(mUnmountListener);
- mFormatPublic = buildAction(R.string.storage_menu_format);
- if (mIsPermittedToAdopt) {
- mFormatPrivate = buildAction(R.string.storage_menu_format_private);
- }
+ mFormatPublic = buildAction(R.string.storage_menu_format_option);
}
@Override
@@ -176,9 +193,6 @@
mUnmount.setVisibility(View.GONE);
}
addPreference(mFormatPublic);
- if (mDisk.isAdoptable() && mIsPermittedToAdopt) {
- addPreference(mFormatPrivate);
- }
}
private void addPreference(Preference pref) {
@@ -215,39 +229,14 @@
@Override
public boolean onPreferenceTreeClick(Preference pref) {
+ final Intent intent = new Intent(getActivity(), StorageWizardInit.class);
+ intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId());
if (pref == mMount) {
new MountTask(getActivity(), mVolume).execute();
} else if (pref == mFormatPublic) {
- StorageWizardFormatConfirm.showPublic(getActivity(), mDisk.getId());
- } else if (pref == mFormatPrivate) {
- StorageWizardFormatConfirm.showPrivate(getActivity(), mDisk.getId());
+ startActivity(intent);
}
return super.onPreferenceTreeClick(pref);
}
-
- private final View.OnClickListener mUnmountListener = new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- new UnmountTask(getActivity(), mVolume).execute();
- }
- };
-
- private final StorageEventListener mStorageListener = new StorageEventListener() {
- @Override
- public void onVolumeStateChanged(VolumeInfo vol, int oldState, int newState) {
- if (Objects.equals(mVolume.getId(), vol.getId())) {
- mVolume = vol;
- update();
- }
- }
-
- @Override
- public void onVolumeRecordChanged(VolumeRecord rec) {
- if (Objects.equals(mVolume.getFsUuid(), rec.getFsUuid())) {
- mVolume = mStorageManager.findVolumeById(mVolumeId);
- update();
- }
- }
- };
-}
+}
\ No newline at end of file
diff --git a/src/com/android/settings/deviceinfo/StorageWizardBase.java b/src/com/android/settings/deviceinfo/StorageWizardBase.java
index b1b956e..801baec 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardBase.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardBase.java
@@ -41,17 +41,19 @@
import androidx.fragment.app.FragmentActivity;
import com.android.settings.R;
-import com.android.settingslib.Utils;
+import com.android.settings.SetupWizardUtils;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupdesign.GlifLayout;
+import com.google.android.setupdesign.util.ThemeHelper;
import java.text.NumberFormat;
import java.util.List;
import java.util.Objects;
public abstract class StorageWizardBase extends FragmentActivity {
+
private static final String TAG = "StorageWizardBase";
protected static final String EXTRA_FORMAT_FORGET_UUID = "format_forget_uuid";
@@ -70,6 +72,8 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
+ setTheme(SetupWizardUtils.getTheme(this, getIntent()));
+ ThemeHelper.trySetDynamicColor(this);
super.onCreate(savedInstanceState);
mStorage = getSystemService(StorageManager.class);
@@ -97,20 +101,20 @@
mFooterBarMixin = getGlifLayout().getMixin(FooterBarMixin.class);
mFooterBarMixin.setSecondaryButton(
- new FooterButton.Builder(this)
- .setText(R.string.wizard_back)
- .setListener(this::onNavigateBack)
- .setButtonType(FooterButton.ButtonType.OTHER)
- .setTheme(R.style.SudGlifButton_Secondary)
- .build()
+ new FooterButton.Builder(this)
+ .setText(R.string.wizard_back)
+ .setListener(this::onNavigateBack)
+ .setButtonType(FooterButton.ButtonType.OTHER)
+ .setTheme(R.style.SudGlifButton_Secondary)
+ .build()
);
mFooterBarMixin.setPrimaryButton(
- new FooterButton.Builder(this)
- .setText(R.string.wizard_next)
- .setListener(this::onNavigateNext)
- .setButtonType(FooterButton.ButtonType.NEXT)
- .setTheme(R.style.SudGlifButton_Primary)
- .build()
+ new FooterButton.Builder(this)
+ .setText(R.string.wizard_next)
+ .setListener(this::onNavigateNext)
+ .setButtonType(FooterButton.ButtonType.NEXT)
+ .setTheme(R.style.SudGlifButton_Primary)
+ .build()
);
mBack = mFooterBarMixin.getSecondaryButton();
mNext = mFooterBarMixin.getPrimaryButton();
@@ -149,7 +153,7 @@
protected void setCurrentProgress(int progress) {
getProgressBar().setProgress(progress);
((TextView) requireViewById(R.id.storage_wizard_progress_summary)).setText(
- NumberFormat.getPercentInstance().format((double) progress / 100));
+ NumberFormat.getPercentInstance().format((double) progress / 100));
}
protected void setHeaderText(int resId, CharSequence... args) {
@@ -167,14 +171,14 @@
protected void setAuxChecklist() {
final FrameLayout aux = requireViewById(R.id.storage_wizard_aux);
aux.addView(LayoutInflater.from(aux.getContext())
- .inflate(R.layout.storage_wizard_checklist, aux, false));
+ .inflate(R.layout.storage_wizard_checklist, aux, false));
aux.setVisibility(View.VISIBLE);
// Customize string based on disk
((TextView) aux.requireViewById(R.id.storage_wizard_migrate_v2_checklist_media))
- .setText(TextUtils.expandTemplate(
- getText(R.string.storage_wizard_migrate_v2_checklist_media),
- getDiskShortDescription()));
+ .setText(TextUtils.expandTemplate(
+ getText(R.string.storage_wizard_migrate_v2_checklist_media),
+ getDiskShortDescription()));
}
protected void setBackButtonText(int resId, CharSequence... args) {
@@ -198,7 +202,6 @@
protected void setIcon(int resId) {
final GlifLayout layout = getGlifLayout();
final Drawable icon = getDrawable(resId).mutate();
- icon.setTintList(Utils.getColorAccent(layout.getContext()));
layout.setIcon(icon);
}
@@ -250,14 +253,14 @@
final List<VolumeInfo> vols = mStorage.getVolumes();
for (VolumeInfo vol : vols) {
if (Objects.equals(mDisk.getId(), vol.getDiskId()) && (vol.getType() == type)
- && (vol.getState() == VolumeInfo.STATE_MOUNTED)) {
+ && (vol.getState() == VolumeInfo.STATE_MOUNTED)) {
return vol;
}
}
if (--attempts > 0) {
Log.w(TAG, "Missing mounted volume of type " + type + " hosted by disk "
- + mDisk.getId() + "; trying again");
+ + mDisk.getId() + "; trying again");
SystemClock.sleep(250);
} else {
return null;
@@ -265,7 +268,8 @@
}
}
- protected @NonNull CharSequence getDiskDescription() {
+ protected @NonNull
+ CharSequence getDiskDescription() {
if (mDisk != null) {
return mDisk.getDescription();
} else if (mVolume != null) {
@@ -275,7 +279,8 @@
}
}
- protected @NonNull CharSequence getDiskShortDescription() {
+ protected @NonNull
+ CharSequence getDiskShortDescription() {
if (mDisk != null) {
return mDisk.getShortDescription();
} else if (mVolume != null) {
@@ -294,4 +299,4 @@
}
}
};
-}
+}
\ No newline at end of file
diff --git a/src/com/android/settings/deviceinfo/StorageWizardFormatConfirm.java b/src/com/android/settings/deviceinfo/StorageWizardFormatConfirm.java
index 9c18a0d..e2d8c7e 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatConfirm.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatConfirm.java
@@ -84,15 +84,23 @@
builder.setTitle(TextUtils.expandTemplate(
getText(R.string.storage_wizard_format_confirm_v2_title),
disk.getShortDescription()));
- builder.setMessage(TextUtils.expandTemplate(
- getText(R.string.storage_wizard_format_confirm_v2_body),
+ if (formatPrivate) {
+ builder.setMessage(TextUtils.expandTemplate(
+ getText(R.string.storage_wizard_format_confirm_v2_body),
+ disk.getDescription(),
+ disk.getShortDescription(),
+ disk.getShortDescription()));
+ } else {
+ builder.setMessage(TextUtils.expandTemplate(
+ getText(R.string.storage_wizard_format_confirm_v2_body_external),
disk.getDescription(),
disk.getShortDescription(),
disk.getShortDescription()));
+ }
builder.setNegativeButton(android.R.string.cancel, null);
builder.setPositiveButton(
- TextUtils.expandTemplate(getText(R.string.storage_wizard_format_confirm_v2_action),
+ TextUtils.expandTemplate(getText(R.string.storage_menu_format_option),
disk.getShortDescription()),
(dialog, which) -> {
final Intent intent = new Intent(context, StorageWizardFormatProgress.class);
@@ -104,4 +112,4 @@
return builder.create();
}
-}
+}
\ No newline at end of file
diff --git a/src/com/android/settings/deviceinfo/StorageWizardInit.java b/src/com/android/settings/deviceinfo/StorageWizardInit.java
index 426395c..3a0f7e6 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardInit.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardInit.java
@@ -18,21 +18,27 @@
import android.app.ActivityManager;
import android.app.settings.SettingsEnums;
-import android.content.Intent;
import android.os.Bundle;
import android.os.UserManager;
-import android.os.storage.DiskInfo;
-import android.os.storage.VolumeInfo;
+import android.text.Html;
+import android.text.Spannable;
+import android.text.method.LinkMovementMethod;
+import android.text.style.TypefaceSpan;
+import android.text.style.URLSpan;
import android.view.View;
-import android.widget.Button;
+import android.widget.TextView;
+import android.widget.Toast;
+import android.widget.ViewFlipper;
import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;
public class StorageWizardInit extends StorageWizardBase {
- private Button mInternal;
private boolean mIsPermittedToAdopt;
+ private boolean mPortable;
+
+ private ViewFlipper mFlipper;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -41,63 +47,119 @@
finish();
return;
}
- setContentView(R.layout.storage_wizard_init);
mIsPermittedToAdopt = UserManager.get(this).isAdminUser()
- && !ActivityManager.isUserAMonkey();
+ && !ActivityManager.isUserAMonkey();
- setHeaderText(R.string.storage_wizard_init_v2_title, getDiskShortDescription());
+ if (!mIsPermittedToAdopt) {
+ //Notify guest users as to why formatting is disallowed
+ Toast.makeText(getApplicationContext(),
+ R.string.storage_wizard_guest, Toast.LENGTH_LONG).show();
+ finish();
+ return;
+ }
- mInternal = requireViewById(R.id.storage_wizard_init_internal);
+ setContentView(R.layout.storage_wizard_init);
+ setupHyperlink();
+ mPortable = true;
- setBackButtonText(R.string.storage_wizard_init_v2_later);
- setNextButtonVisibility(View.INVISIBLE);
+ mFlipper = (ViewFlipper) findViewById(R.id.viewFlipper);
+ mFlipper.setDisplayedChild(0);
+ setHeaderText(R.string.storage_wizard_init_v2_external_title,
+ getDiskShortDescription());
+
+ setNextButtonText(R.string.storage_wizard_init_v2_external_action);
+ setBackButtonText(R.string.wizard_back_adoptable);
+ setNextButtonVisibility(View.VISIBLE);
if (!mDisk.isAdoptable()) {
- // If not adoptable, we only have one choice
- mInternal.setEnabled(false);
- onNavigateExternal(null);
- } else if (!mIsPermittedToAdopt) {
- // TODO: Show a message about why this is disabled for guest and
- // that only an admin user can adopt an sd card.
- mInternal.setEnabled(false);
+ setBackButtonVisibility(View.GONE);
}
}
@Override
- public void onNavigateBack(View view) {
- finish();
+ public void onBackPressed() {
+ if (mPortable) {
+ super.onBackPressed();
+ } else {
+ mFlipper.showPrevious();
+ setBackButtonText(R.string.wizard_back_adoptable);
+ setHeaderText(R.string.storage_wizard_init_v2_external_title,
+ getDiskShortDescription());
+ setNextButtonText(R.string.storage_wizard_init_v2_external_action);
+ mPortable = true;
+ }
+ }
+
+ @Override
+ public void onNavigateBack(View v) {
+ if (mPortable == false) {
+ return;
+ }
+ if (!mIsPermittedToAdopt) {
+ // TODO: Show a message about why this is disabled for guest and
+ // that only an admin user can adopt an sd card.
+
+ v.setEnabled(false);
+ } else {
+ mFlipper.showNext();
+ setHeaderText(R.string.storage_wizard_init_v2_internal_title,
+ getDiskShortDescription());
+ setNextButtonText(R.string.storage_wizard_init_v2_internal_action);
+ setBackButtonVisibility(View.INVISIBLE);
+ mPortable = false;
+ }
+ }
+
+ @Override
+ public void onNavigateNext(View v) {
+ if (mPortable) {
+ onNavigateExternal(v);
+ } else {
+ onNavigateInternal(v);
+ }
}
public void onNavigateExternal(View view) {
if (view != null) {
// User made an explicit choice for external
FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this,
- SettingsEnums.ACTION_STORAGE_INIT_EXTERNAL);
+ SettingsEnums.ACTION_STORAGE_INIT_EXTERNAL);
}
-
- if (mVolume != null && mVolume.getType() == VolumeInfo.TYPE_PUBLIC
- && mVolume.getState() != VolumeInfo.STATE_UNMOUNTABLE) {
- // Remember that user made decision
- mStorage.setVolumeInited(mVolume.getFsUuid(), true);
-
- final Intent intent = new Intent(this, StorageWizardReady.class);
- intent.putExtra(DiskInfo.EXTRA_DISK_ID, mDisk.getId());
- startActivity(intent);
- finish();
-
- } else {
- // Gotta format to get there
- StorageWizardFormatConfirm.showPublic(this, mDisk.getId());
- }
+ StorageWizardFormatConfirm.showPublic(this, mDisk.getId());
}
public void onNavigateInternal(View view) {
if (view != null) {
// User made an explicit choice for internal
FeatureFactory.getFactory(this).getMetricsFeatureProvider().action(this,
- SettingsEnums.ACTION_STORAGE_INIT_INTERNAL);
+ SettingsEnums.ACTION_STORAGE_INIT_INTERNAL);
}
-
StorageWizardFormatConfirm.showPrivate(this, mDisk.getId());
}
+
+ private void setupHyperlink() {
+ TextView external_storage_textview = findViewById(R.id.storage_wizard_init_external_text);
+ TextView internal_storage_textview = findViewById(R.id.storage_wizard_init_internal_text);
+ String external_storage_text = getResources().getString(R.string.
+ storage_wizard_init_v2_external_summary);
+ String internal_storage_text = getResources().getString(R.string.
+ storage_wizard_init_v2_internal_summary);
+
+ Spannable external_storage_spannable = styleFont(external_storage_text);
+ Spannable internal_storage_spannable = styleFont(internal_storage_text);
+ external_storage_textview.setText(external_storage_spannable);
+ internal_storage_textview.setText(internal_storage_spannable);
+
+ external_storage_textview.setMovementMethod(LinkMovementMethod.getInstance());
+ internal_storage_textview.setMovementMethod(LinkMovementMethod.getInstance());
+ }
+
+ private Spannable styleFont(String text) {
+ Spannable s = (Spannable) Html.fromHtml(text);
+ for (URLSpan span : s.getSpans(0, s.length(), URLSpan.class)) {
+ TypefaceSpan typefaceSpan = new TypefaceSpan("sans-serif-medium");
+ s.setSpan(typefaceSpan, s.getSpanStart(span), s.getSpanEnd(span), 0);
+ }
+ return s;
+ }
}
diff --git a/src/com/android/settings/deviceinfo/StorageWizardReady.java b/src/com/android/settings/deviceinfo/StorageWizardReady.java
index 813bcc6..8de9472 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardReady.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardReady.java
@@ -19,6 +19,7 @@
import android.os.Bundle;
import android.os.storage.VolumeInfo;
import android.view.View;
+import android.widget.ImageView;
import com.android.settings.R;
@@ -48,7 +49,9 @@
setBodyText(R.string.storage_wizard_ready_v2_external_body,
getDiskDescription());
}
-
+ ImageView img = (ImageView) findViewById(R.id.storage_wizard_body_image);
+ img.setImageResource(R.drawable.ic_storage_wizard_ready);
+ setIcon(R.drawable.ic_test_tick);
setNextButtonText(R.string.done);
setBackButtonVisibility(View.INVISIBLE);
}
diff --git a/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java b/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java
index 4b87e42..289db52 100644
--- a/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java
+++ b/src/com/android/settings/deviceinfo/VolumeOptionMenuController.java
@@ -30,6 +30,7 @@
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.widget.Toast;
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
@@ -55,7 +56,9 @@
OnPrepareOptionsMenu, OnOptionsItemSelected {
private static final String TAG = "VolumeOptionMenuController";
-
+ private final Context mContext;
+ private final Fragment mFragment;
+ private final PackageManager mPackageManager;
@VisibleForTesting
MenuItem mRename;
@VisibleForTesting
@@ -74,18 +77,12 @@
MenuItem mFree;
@VisibleForTesting
MenuItem mForget;
-
- private final Context mContext;
- private final Fragment mFragment;
- private final PackageManager mPackageManager;
- private final StorageManager mStorageManager;
private StorageEntry mStorageEntry;
public VolumeOptionMenuController(Context context, Fragment parent, StorageEntry storageEntry) {
mContext = context;
mFragment = parent;
mPackageManager = context.getPackageManager();
- mStorageManager = context.getSystemService(StorageManager.class);
mStorageEntry = storageEntry;
}
@@ -162,12 +159,7 @@
if (mStorageEntry.isPublic()) {
mRename.setVisible(true);
mUnmount.setVisible(true);
- mFormat.setVisible(true);
- final DiskInfo diskInfo = mStorageManager.findDiskById(mStorageEntry.getDiskId());
- mFormatAsInternal.setVisible(diskInfo != null
- && diskInfo.isAdoptable()
- && UserManager.get(mContext).isAdminUser()
- && !ActivityManager.isUserAMonkey());
+ mFormatAsInternal.setVisible(true);
return;
}
}
@@ -225,6 +217,16 @@
}
if (menuId == R.id.storage_format_as_portable) {
if (mStorageEntry.isPrivate()) {
+ boolean mIsPermittedToAdopt = UserManager.get(mContext).isAdminUser()
+ && !ActivityManager.isUserAMonkey();
+
+ if(!mIsPermittedToAdopt){
+ //Notify guest users as to why formatting is disallowed
+ Toast.makeText(mFragment.getActivity(),
+ R.string.storage_wizard_guest,Toast.LENGTH_LONG).show();
+ (mFragment.getActivity()).finish();
+ return false;
+ }
final Bundle args = new Bundle();
args.putString(VolumeInfo.EXTRA_VOLUME_ID, mStorageEntry.getId());
new SubSettingLauncher(mContext)
@@ -239,8 +241,9 @@
}
if (menuId == R.id.storage_format_as_internal) {
if (mStorageEntry.isPublic()) {
- StorageWizardFormatConfirm.showPrivate(mFragment.getActivity(),
- mStorageEntry.getDiskId());
+ final Intent intent = new Intent(mFragment.getActivity(), StorageWizardInit.class);
+ intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mStorageEntry.getId());
+ mContext.startActivity(intent);
return true;
}
return false;
@@ -269,4 +272,4 @@
updateOptionsMenu();
}
-}
+}
\ No newline at end of file
diff --git a/src/com/android/settings/display/ScreenSaverPreferenceController.java b/src/com/android/settings/display/ScreenSaverPreferenceController.java
index c1b0b4e..676a567 100644
--- a/src/com/android/settings/display/ScreenSaverPreferenceController.java
+++ b/src/com/android/settings/display/ScreenSaverPreferenceController.java
@@ -14,6 +14,7 @@
package com.android.settings.display;
import android.content.Context;
+import android.os.UserManager;
import androidx.preference.Preference;
@@ -32,8 +33,11 @@
@Override
public boolean isAvailable() {
- return mContext.getResources().getBoolean(
+ final boolean dreamsSupported = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_dreamsSupported);
+ final boolean dreamsOnlyEnabledForSystemUser = mContext.getResources().getBoolean(
+ com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser);
+ return dreamsSupported && (!dreamsOnlyEnabledForSystemUser || isSystemUser());
}
@Override
@@ -45,4 +49,9 @@
public void updateState(Preference preference) {
preference.setSummary(DreamSettings.getSummaryTextWithDreamName(mContext));
}
+
+ private boolean isSystemUser() {
+ final UserManager userManager = mContext.getSystemService(UserManager.class);
+ return userManager.isSystemUser();
+ }
}
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index 48825c8..db98a4c 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -45,6 +45,9 @@
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry;
+import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
+import com.android.settings.fuelgauge.batteryusage.BatteryHistEntry;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.HelpUtils;
import com.android.settingslib.applications.AppUtils;
@@ -536,16 +539,13 @@
return null;
}
if (totalTimeMs == 0) {
- final int batteryWithoutUsageTime = consumedPower > 0
- ? R.string.battery_usage_without_time : R.string.battery_not_usage_24hr;
- usageTimeSummary = getText(isChartGraphEnabled
- ? batteryWithoutUsageTime : R.string.battery_not_usage);
+ usageTimeSummary = getText(
+ isChartGraphEnabled && consumedPower > 0 ? R.string.battery_usage_without_time
+ : R.string.battery_not_usage);
} else if (slotTime == null) {
- // Shows summary text with past 24 hr or full charge if slot time is null.
- usageTimeSummary = isChartGraphEnabled
- ? getAppPast24HrActiveSummary(foregroundTimeMs, backgroundTimeMs, totalTimeMs)
- : getAppFullChargeActiveSummary(
- foregroundTimeMs, backgroundTimeMs, totalTimeMs);
+ // Shows summary text with last full charge if slot time is null.
+ usageTimeSummary = getAppFullChargeActiveSummary(
+ foregroundTimeMs, backgroundTimeMs, totalTimeMs);
} else {
// Shows summary text with slot time.
usageTimeSummary = getAppActiveSummaryWithSlotTime(
diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
index f5e21dd..9860240 100644
--- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
+++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
@@ -24,16 +24,13 @@
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
-import android.content.pm.PackageManager;
-import android.content.pm.ParceledListSlice;
-import android.content.pm.UserInfo;
import android.os.Build;
import android.os.IDeviceIdleController;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
-import android.os.UserManager;
+import android.util.ArraySet;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
@@ -53,22 +50,13 @@
private static final String DEVICE_IDLE_SERVICE = "deviceidle";
private static final boolean DEBUG = Build.TYPE.equals("userdebug");
- // Only the owner can see all apps.
- private static final int RETRIEVE_FLAG_ADMIN =
- PackageManager.MATCH_ANY_USER |
- PackageManager.MATCH_DISABLED_COMPONENTS |
- PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
- private static final int RETRIEVE_FLAG =
- PackageManager.MATCH_DISABLED_COMPONENTS |
- PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
-
static final String DELIMITER = ",";
static final String DELIMITER_MODE = ":";
static final String KEY_FULL_POWER_LIST = "full_power_list";
static final String KEY_OPTIMIZATION_LIST = "optimization_mode_list";
@VisibleForTesting
- List<ApplicationInfo> mTestApplicationInfoList = null;
+ ArraySet<ApplicationInfo> mTestApplicationInfoList = null;
@VisibleForTesting
PowerAllowlistBackend mPowerAllowlistBackend;
@@ -146,7 +134,7 @@
@VisibleForTesting
void backupOptimizationMode(BackupDataOutput data, List<String> allowlistedApps) {
final long timestamp = System.currentTimeMillis();
- final List<ApplicationInfo> applications = getInstalledApplications();
+ final ArraySet<ApplicationInfo> applications = getInstalledApplications();
if (applications == null || applications.isEmpty()) {
Log.w(TAG, "no data found in the getInstalledApplications()");
return;
@@ -269,36 +257,11 @@
|| powerAllowlistBackend.isDefaultActiveApp(packageName);
}
- private List<ApplicationInfo> getInstalledApplications() {
+ private ArraySet<ApplicationInfo> getInstalledApplications() {
if (mTestApplicationInfoList != null) {
return mTestApplicationInfoList;
}
- final List<ApplicationInfo> applications = new ArrayList<>();
- final UserManager um = mContext.getSystemService(UserManager.class);
- for (UserInfo userInfo : um.getProfiles(UserHandle.myUserId())) {
- try {
- @SuppressWarnings("unchecked")
- final ParceledListSlice<ApplicationInfo> infoList =
- getIPackageManager().getInstalledApplications(
- userInfo.isAdmin() ? RETRIEVE_FLAG_ADMIN : RETRIEVE_FLAG,
- userInfo.id);
- if (infoList != null) {
- applications.addAll(infoList.getList());
- }
- } catch (Exception e) {
- Log.e(TAG, "getInstalledApplications() is failed", e);
- return null;
- }
- }
- // Removes the application which is disabled by the system.
- for (int index = applications.size() - 1; index >= 0; index--) {
- final ApplicationInfo info = applications.get(index);
- if (info.enabledSetting != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
- && !info.enabled) {
- applications.remove(index);
- }
- }
- return applications;
+ return BatteryOptimizeUtils.getInstalledApplications(mContext, getIPackageManager());
}
private void debugLog(String debugContent) {
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
deleted file mode 100644
index 02248c9..0000000
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ /dev/null
@@ -1,726 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package com.android.settings.fuelgauge;
-
-import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.drawable.Drawable;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.text.TextUtils;
-import android.text.format.DateFormat;
-import android.text.format.DateUtils;
-import android.util.Log;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceGroup;
-import androidx.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.core.InstrumentedPreferenceFragment;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-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.core.lifecycle.events.OnResume;
-import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
-import com.android.settingslib.utils.StringUtil;
-import com.android.settingslib.widget.FooterPreference;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/** Controls the update for chart graph and the list items. */
-public class BatteryChartPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnDestroy,
- OnSaveInstanceState, BatteryChartView.OnSelectListener, OnResume,
- ExpandDividerPreference.OnExpandListener {
- private static final String TAG = "BatteryChartPreferenceController";
- private static final String KEY_FOOTER_PREF = "battery_graph_footer";
- private static final String PACKAGE_NAME_NONE = "none";
-
- /** Desired battery history size for timestamp slots. */
- public static final int DESIRED_HISTORY_SIZE = 25;
- private static final int CHART_LEVEL_ARRAY_SIZE = 13;
- private static final int CHART_KEY_ARRAY_SIZE = DESIRED_HISTORY_SIZE;
- private static final long VALID_USAGE_TIME_DURATION = DateUtils.HOUR_IN_MILLIS * 2;
- private static final long VALID_DIFF_DURATION = DateUtils.MINUTE_IN_MILLIS * 3;
-
- // Keys for bundle instance to restore configurations.
- private static final String KEY_EXPAND_SYSTEM_INFO = "expand_system_info";
- private static final String KEY_CURRENT_TIME_SLOT = "current_time_slot";
-
- private static int sUiMode = Configuration.UI_MODE_NIGHT_UNDEFINED;
-
- @VisibleForTesting
- Map<Integer, List<BatteryDiffEntry>> mBatteryIndexedMap;
-
- @VisibleForTesting Context mPrefContext;
- @VisibleForTesting BatteryUtils mBatteryUtils;
- @VisibleForTesting PreferenceGroup mAppListPrefGroup;
- @VisibleForTesting BatteryChartView mBatteryChartView;
- @VisibleForTesting ExpandDividerPreference mExpandDividerPreference;
-
- @VisibleForTesting boolean mIsExpanded = false;
- @VisibleForTesting int[] mBatteryHistoryLevels;
- @VisibleForTesting long[] mBatteryHistoryKeys;
- @VisibleForTesting int mTrapezoidIndex = BatteryChartView.SELECTED_INDEX_INVALID;
-
- private boolean mIs24HourFormat = false;
- private boolean mIsFooterPrefAdded = false;
- private PreferenceScreen mPreferenceScreen;
- private FooterPreference mFooterPreference;
-
- private final String mPreferenceKey;
- private final SettingsActivity mActivity;
- private final InstrumentedPreferenceFragment mFragment;
- private final CharSequence[] mNotAllowShowEntryPackages;
- private final CharSequence[] mNotAllowShowSummaryPackages;
- private final MetricsFeatureProvider mMetricsFeatureProvider;
- private final Handler mHandler = new Handler(Looper.getMainLooper());
-
- // Preference cache to avoid create new instance each time.
- @VisibleForTesting
- final Map<String, Preference> mPreferenceCache = new HashMap<>();
- @VisibleForTesting
- final List<BatteryDiffEntry> mSystemEntries = new ArrayList<>();
-
- public BatteryChartPreferenceController(
- Context context, String preferenceKey,
- Lifecycle lifecycle, SettingsActivity activity,
- InstrumentedPreferenceFragment fragment) {
- super(context);
- mActivity = activity;
- mFragment = fragment;
- mPreferenceKey = preferenceKey;
- mIs24HourFormat = DateFormat.is24HourFormat(context);
- mMetricsFeatureProvider =
- FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
- mNotAllowShowEntryPackages =
- FeatureFactory.getFactory(context)
- .getPowerUsageFeatureProvider(context)
- .getHideApplicationEntries(context);
- mNotAllowShowSummaryPackages =
- FeatureFactory.getFactory(context)
- .getPowerUsageFeatureProvider(context)
- .getHideApplicationSummary(context);
- if (lifecycle != null) {
- lifecycle.addObserver(this);
- }
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- if (savedInstanceState == null) {
- return;
- }
- mTrapezoidIndex =
- savedInstanceState.getInt(KEY_CURRENT_TIME_SLOT, mTrapezoidIndex);
- mIsExpanded =
- savedInstanceState.getBoolean(KEY_EXPAND_SYSTEM_INFO, mIsExpanded);
- Log.d(TAG, String.format("onCreate() slotIndex=%d isExpanded=%b",
- mTrapezoidIndex, mIsExpanded));
- }
-
- @Override
- public void onResume() {
- final int currentUiMode =
- mContext.getResources().getConfiguration().uiMode
- & Configuration.UI_MODE_NIGHT_MASK;
- if (sUiMode != currentUiMode) {
- sUiMode = currentUiMode;
- BatteryDiffEntry.clearCache();
- Log.d(TAG, "clear icon and label cache since uiMode is changed");
- }
- mIs24HourFormat = DateFormat.is24HourFormat(mContext);
- mMetricsFeatureProvider.action(mPrefContext, SettingsEnums.OPEN_BATTERY_USAGE);
- }
-
- @Override
- public void onSaveInstanceState(Bundle savedInstance) {
- if (savedInstance == null) {
- return;
- }
- savedInstance.putInt(KEY_CURRENT_TIME_SLOT, mTrapezoidIndex);
- savedInstance.putBoolean(KEY_EXPAND_SYSTEM_INFO, mIsExpanded);
- Log.d(TAG, String.format("onSaveInstanceState() slotIndex=%d isExpanded=%b",
- mTrapezoidIndex, mIsExpanded));
- }
-
- @Override
- public void onDestroy() {
- if (mActivity.isChangingConfigurations()) {
- BatteryDiffEntry.clearCache();
- }
- mHandler.removeCallbacksAndMessages(/*token=*/ null);
- mPreferenceCache.clear();
- if (mAppListPrefGroup != null) {
- mAppListPrefGroup.removeAll();
- }
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- mPreferenceScreen = screen;
- mPrefContext = screen.getContext();
- mAppListPrefGroup = screen.findPreference(mPreferenceKey);
- mAppListPrefGroup.setOrderingAsAdded(false);
- mAppListPrefGroup.setTitle(
- mPrefContext.getString(R.string.battery_app_usage_for_past_24));
- mFooterPreference = screen.findPreference(KEY_FOOTER_PREF);
- // Removes footer first until usage data is loaded to avoid flashing.
- if (mFooterPreference != null) {
- screen.removePreference(mFooterPreference);
- }
- }
-
- @Override
- public boolean isAvailable() {
- return true;
- }
-
- @Override
- public String getPreferenceKey() {
- return mPreferenceKey;
- }
-
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- if (!(preference instanceof PowerGaugePreference)) {
- return false;
- }
- final PowerGaugePreference powerPref = (PowerGaugePreference) preference;
- final BatteryDiffEntry diffEntry = powerPref.getBatteryDiffEntry();
- final BatteryHistEntry histEntry = diffEntry.mBatteryHistEntry;
- final String packageName = histEntry.mPackageName;
- final boolean isAppEntry = histEntry.isAppEntry();
- mMetricsFeatureProvider.action(
- /* attribution */ SettingsEnums.OPEN_BATTERY_USAGE,
- /* action */ isAppEntry
- ? SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM
- : SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
- /* pageId */ SettingsEnums.OPEN_BATTERY_USAGE,
- TextUtils.isEmpty(packageName) ? PACKAGE_NAME_NONE : packageName,
- (int) Math.round(diffEntry.getPercentOfTotal()));
- Log.d(TAG, String.format("handleClick() label=%s key=%s package=%s",
- diffEntry.getAppLabel(), histEntry.getKey(), histEntry.mPackageName));
- AdvancedPowerUsageDetail.startBatteryDetailPage(
- mActivity, mFragment, diffEntry, powerPref.getPercent(),
- isValidToShowSummary(packageName), getSlotInformation());
- return true;
- }
-
- @Override
- public void onSelect(int trapezoidIndex) {
- Log.d(TAG, "onChartSelect:" + trapezoidIndex);
- refreshUi(trapezoidIndex, /*isForce=*/ false);
- mMetricsFeatureProvider.action(
- mPrefContext,
- trapezoidIndex == BatteryChartView.SELECTED_INDEX_ALL
- ? SettingsEnums.ACTION_BATTERY_USAGE_SHOW_ALL
- : SettingsEnums.ACTION_BATTERY_USAGE_TIME_SLOT);
- }
-
- @Override
- public void onExpand(boolean isExpanded) {
- mIsExpanded = isExpanded;
- mMetricsFeatureProvider.action(
- mPrefContext,
- SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
- isExpanded);
- refreshExpandUi();
- }
-
- void setBatteryHistoryMap(
- final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
- // Resets all battery history data relative variables.
- if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
- mBatteryIndexedMap = null;
- mBatteryHistoryKeys = null;
- mBatteryHistoryLevels = null;
- addFooterPreferenceIfNeeded(false);
- return;
- }
- mBatteryHistoryKeys = getBatteryHistoryKeys(batteryHistoryMap);
- mBatteryHistoryLevels = new int[CHART_LEVEL_ARRAY_SIZE];
- for (int index = 0; index < CHART_LEVEL_ARRAY_SIZE; index++) {
- final long timestamp = mBatteryHistoryKeys[index * 2];
- final Map<String, BatteryHistEntry> entryMap = batteryHistoryMap.get(timestamp);
- if (entryMap == null || entryMap.isEmpty()) {
- Log.e(TAG, "abnormal entry list in the timestamp:"
- + ConvertUtils.utcToLocalTime(mPrefContext, timestamp));
- continue;
- }
- // Averages the battery level in each time slot to avoid corner conditions.
- float batteryLevelCounter = 0;
- for (BatteryHistEntry entry : entryMap.values()) {
- batteryLevelCounter += entry.mBatteryLevel;
- }
- mBatteryHistoryLevels[index] =
- Math.round(batteryLevelCounter / entryMap.size());
- }
- forceRefreshUi();
- Log.d(TAG, String.format(
- "setBatteryHistoryMap() size=%d key=%s\nlevels=%s",
- batteryHistoryMap.size(),
- ConvertUtils.utcToLocalTime(mPrefContext,
- mBatteryHistoryKeys[mBatteryHistoryKeys.length - 1]),
- Arrays.toString(mBatteryHistoryLevels)));
-
- // Loads item icon and label in the background.
- new LoadAllItemsInfoTask(batteryHistoryMap).execute();
- }
-
- void setBatteryChartView(final BatteryChartView batteryChartView) {
- if (mBatteryChartView != batteryChartView) {
- mHandler.post(() -> setBatteryChartViewInner(batteryChartView));
- }
- }
-
- private void setBatteryChartViewInner(final BatteryChartView batteryChartView) {
- mBatteryChartView = batteryChartView;
- mBatteryChartView.setOnSelectListener(this);
- forceRefreshUi();
- }
-
- private void forceRefreshUi() {
- final int refreshIndex =
- mTrapezoidIndex == BatteryChartView.SELECTED_INDEX_INVALID
- ? BatteryChartView.SELECTED_INDEX_ALL
- : mTrapezoidIndex;
- if (mBatteryChartView != null) {
- mBatteryChartView.setLevels(mBatteryHistoryLevels);
- mBatteryChartView.setSelectedIndex(refreshIndex);
- setTimestampLabel();
- }
- refreshUi(refreshIndex, /*isForce=*/ true);
- }
-
- @VisibleForTesting
- boolean refreshUi(int trapezoidIndex, boolean isForce) {
- // Invalid refresh condition.
- if (mBatteryIndexedMap == null
- || mBatteryChartView == null
- || (mTrapezoidIndex == trapezoidIndex && !isForce)) {
- return false;
- }
- Log.d(TAG, String.format("refreshUi: index=%d size=%d isForce:%b",
- trapezoidIndex, mBatteryIndexedMap.size(), isForce));
-
- mTrapezoidIndex = trapezoidIndex;
- mHandler.post(() -> {
- final long start = System.currentTimeMillis();
- removeAndCacheAllPrefs();
- addAllPreferences();
- refreshCategoryTitle();
- Log.d(TAG, String.format("refreshUi is finished in %d/ms",
- (System.currentTimeMillis() - start)));
- });
- return true;
- }
-
- private void addAllPreferences() {
- final List<BatteryDiffEntry> entries =
- mBatteryIndexedMap.get(Integer.valueOf(mTrapezoidIndex));
- addFooterPreferenceIfNeeded(entries != null && !entries.isEmpty());
- if (entries == null) {
- Log.w(TAG, "cannot find BatteryDiffEntry for:" + mTrapezoidIndex);
- return;
- }
- // Separates data into two groups and sort them individually.
- final List<BatteryDiffEntry> appEntries = new ArrayList<>();
- mSystemEntries.clear();
- entries.forEach(entry -> {
- final String packageName = entry.getPackageName();
- if (!isValidToShowEntry(packageName)) {
- Log.w(TAG, "ignore showing item:" + packageName);
- return;
- }
- if (entry.isSystemEntry()) {
- mSystemEntries.add(entry);
- } else {
- appEntries.add(entry);
- }
- // Validates the usage time if users click a specific slot.
- if (mTrapezoidIndex >= 0) {
- validateUsageTime(entry);
- }
- });
- Collections.sort(appEntries, BatteryDiffEntry.COMPARATOR);
- Collections.sort(mSystemEntries, BatteryDiffEntry.COMPARATOR);
- Log.d(TAG, String.format("addAllPreferences() app=%d system=%d",
- appEntries.size(), mSystemEntries.size()));
-
- // Adds app entries to the list if it is not empty.
- if (!appEntries.isEmpty()) {
- addPreferenceToScreen(appEntries);
- }
- // Adds the expabable divider if we have system entries data.
- if (!mSystemEntries.isEmpty()) {
- if (mExpandDividerPreference == null) {
- mExpandDividerPreference = new ExpandDividerPreference(mPrefContext);
- mExpandDividerPreference.setOnExpandListener(this);
- mExpandDividerPreference.setIsExpanded(mIsExpanded);
- }
- mExpandDividerPreference.setOrder(
- mAppListPrefGroup.getPreferenceCount());
- mAppListPrefGroup.addPreference(mExpandDividerPreference);
- }
- refreshExpandUi();
- }
-
- @VisibleForTesting
- void addPreferenceToScreen(List<BatteryDiffEntry> entries) {
- if (mAppListPrefGroup == null || entries.isEmpty()) {
- return;
- }
- int prefIndex = mAppListPrefGroup.getPreferenceCount();
- for (BatteryDiffEntry entry : entries) {
- boolean isAdded = false;
- final String appLabel = entry.getAppLabel();
- final Drawable appIcon = entry.getAppIcon();
- if (TextUtils.isEmpty(appLabel) || appIcon == null) {
- Log.w(TAG, "cannot find app resource for:" + entry.getPackageName());
- continue;
- }
- final String prefKey = entry.mBatteryHistEntry.getKey();
- PowerGaugePreference pref = mAppListPrefGroup.findPreference(prefKey);
- if (pref != null) {
- isAdded = true;
- Log.w(TAG, "preference should be removed for:" + entry.getPackageName());
- } else {
- pref = (PowerGaugePreference) mPreferenceCache.get(prefKey);
- }
- // Creates new innstance if cached preference is not found.
- if (pref == null) {
- pref = new PowerGaugePreference(mPrefContext);
- pref.setKey(prefKey);
- mPreferenceCache.put(prefKey, pref);
- }
- pref.setIcon(appIcon);
- pref.setTitle(appLabel);
- pref.setOrder(prefIndex);
- pref.setPercent(entry.getPercentOfTotal());
- pref.setSingleLineTitle(true);
- // Sets the BatteryDiffEntry to preference for launching detailed page.
- pref.setBatteryDiffEntry(entry);
- pref.setEnabled(entry.validForRestriction());
- setPreferenceSummary(pref, entry);
- if (!isAdded) {
- mAppListPrefGroup.addPreference(pref);
- }
- prefIndex++;
- }
- }
-
- private void removeAndCacheAllPrefs() {
- if (mAppListPrefGroup == null
- || mAppListPrefGroup.getPreferenceCount() == 0) {
- return;
- }
- final int prefsCount = mAppListPrefGroup.getPreferenceCount();
- for (int index = 0; index < prefsCount; index++) {
- final Preference pref = mAppListPrefGroup.getPreference(index);
- if (TextUtils.isEmpty(pref.getKey())) {
- continue;
- }
- mPreferenceCache.put(pref.getKey(), pref);
- }
- mAppListPrefGroup.removeAll();
- }
-
- private void refreshExpandUi() {
- if (mIsExpanded) {
- addPreferenceToScreen(mSystemEntries);
- } else {
- // Removes and recycles all system entries to hide all of them.
- for (BatteryDiffEntry entry : mSystemEntries) {
- final String prefKey = entry.mBatteryHistEntry.getKey();
- final Preference pref = mAppListPrefGroup.findPreference(prefKey);
- if (pref != null) {
- mAppListPrefGroup.removePreference(pref);
- mPreferenceCache.put(pref.getKey(), pref);
- }
- }
- }
- }
-
- @VisibleForTesting
- void refreshCategoryTitle() {
- final String slotInformation = getSlotInformation();
- Log.d(TAG, String.format("refreshCategoryTitle:%s", slotInformation));
- if (mAppListPrefGroup != null) {
- mAppListPrefGroup.setTitle(
- getSlotInformation(/*isApp=*/ true, slotInformation));
- }
- if (mExpandDividerPreference != null) {
- mExpandDividerPreference.setTitle(
- getSlotInformation(/*isApp=*/ false, slotInformation));
- }
- }
-
- private String getSlotInformation(boolean isApp, String slotInformation) {
- // Null means we show all information without a specific time slot.
- if (slotInformation == null) {
- return isApp
- ? mPrefContext.getString(R.string.battery_app_usage_for_past_24)
- : mPrefContext.getString(R.string.battery_system_usage_for_past_24);
- } else {
- return isApp
- ? mPrefContext.getString(R.string.battery_app_usage_for, slotInformation)
- : mPrefContext.getString(R.string.battery_system_usage_for ,slotInformation);
- }
- }
-
- private String getSlotInformation() {
- if (mTrapezoidIndex < 0) {
- return null;
- }
- final String fromHour = ConvertUtils.utcToLocalTimeHour(mPrefContext,
- mBatteryHistoryKeys[mTrapezoidIndex * 2], mIs24HourFormat);
- final String toHour = ConvertUtils.utcToLocalTimeHour(mPrefContext,
- mBatteryHistoryKeys[(mTrapezoidIndex + 1) * 2], mIs24HourFormat);
- return mIs24HourFormat
- ? String.format("%s–%s", fromHour, toHour)
- : String.format("%s – %s", fromHour, toHour);
- }
-
- @VisibleForTesting
- void setPreferenceSummary(
- PowerGaugePreference preference, BatteryDiffEntry entry) {
- final long foregroundUsageTimeInMs = entry.mForegroundUsageTimeInMs;
- final long backgroundUsageTimeInMs = entry.mBackgroundUsageTimeInMs;
- final long totalUsageTimeInMs = foregroundUsageTimeInMs + backgroundUsageTimeInMs;
- // Checks whether the package is allowed to show summary or not.
- if (!isValidToShowSummary(entry.getPackageName())) {
- preference.setSummary(null);
- return;
- }
- String usageTimeSummary = null;
- // Not shows summary for some system components without usage time.
- if (totalUsageTimeInMs == 0) {
- preference.setSummary(null);
- // Shows background summary only if we don't have foreground usage time.
- } else if (foregroundUsageTimeInMs == 0 && backgroundUsageTimeInMs != 0) {
- usageTimeSummary = buildUsageTimeInfo(backgroundUsageTimeInMs, true);
- // Shows total usage summary only if total usage time is small.
- } else if (totalUsageTimeInMs < DateUtils.MINUTE_IN_MILLIS) {
- usageTimeSummary = buildUsageTimeInfo(totalUsageTimeInMs, false);
- } else {
- usageTimeSummary = buildUsageTimeInfo(totalUsageTimeInMs, false);
- // Shows background usage time if it is larger than a minute.
- if (backgroundUsageTimeInMs > 0) {
- usageTimeSummary +=
- "\n" + buildUsageTimeInfo(backgroundUsageTimeInMs, true);
- }
- }
- preference.setSummary(usageTimeSummary);
- }
-
- private String buildUsageTimeInfo(long usageTimeInMs, boolean isBackground) {
- if (usageTimeInMs < DateUtils.MINUTE_IN_MILLIS) {
- return mPrefContext.getString(
- isBackground
- ? R.string.battery_usage_background_less_than_one_minute
- : R.string.battery_usage_total_less_than_one_minute);
- }
- final CharSequence timeSequence =
- StringUtil.formatElapsedTime(mPrefContext, usageTimeInMs,
- /*withSeconds=*/ false, /*collapseTimeUnit=*/ false);
- final int resourceId =
- isBackground
- ? R.string.battery_usage_for_background_time
- : R.string.battery_usage_for_total_time;
- return mPrefContext.getString(resourceId, timeSequence);
- }
-
- @VisibleForTesting
- boolean isValidToShowSummary(String packageName) {
- return !contains(packageName, mNotAllowShowSummaryPackages);
- }
-
- @VisibleForTesting
- boolean isValidToShowEntry(String packageName) {
- return !contains(packageName, mNotAllowShowEntryPackages);
- }
-
- @VisibleForTesting
- void setTimestampLabel() {
- if (mBatteryChartView == null || mBatteryHistoryKeys == null) {
- return;
- }
- final long latestTimestamp =
- mBatteryHistoryKeys[mBatteryHistoryKeys.length - 1];
- mBatteryChartView.setLatestTimestamp(latestTimestamp);
- }
-
- private void addFooterPreferenceIfNeeded(boolean containAppItems) {
- if (mIsFooterPrefAdded || mFooterPreference == null) {
- return;
- }
- mIsFooterPrefAdded = true;
- mFooterPreference.setTitle(mPrefContext.getString(
- containAppItems
- ? R.string.battery_usage_screen_footer
- : R.string.battery_usage_screen_footer_empty));
- mHandler.post(() -> mPreferenceScreen.addPreference(mFooterPreference));
- }
-
- private static boolean contains(String target, CharSequence[] packageNames) {
- if (target != null && packageNames != null) {
- for (CharSequence packageName : packageNames) {
- if (TextUtils.equals(target, packageName)) {
- return true;
- }
- }
- }
- return false;
- }
-
- @VisibleForTesting
- static boolean validateUsageTime(BatteryDiffEntry entry) {
- final long foregroundUsageTimeInMs = entry.mForegroundUsageTimeInMs;
- final long backgroundUsageTimeInMs = entry.mBackgroundUsageTimeInMs;
- final long totalUsageTimeInMs = foregroundUsageTimeInMs + backgroundUsageTimeInMs;
- if (foregroundUsageTimeInMs > VALID_USAGE_TIME_DURATION
- || backgroundUsageTimeInMs > VALID_USAGE_TIME_DURATION
- || totalUsageTimeInMs > VALID_USAGE_TIME_DURATION) {
- Log.e(TAG, "validateUsageTime() fail for\n" + entry);
- return false;
- }
- return true;
- }
-
- /** Used for {@link AppBatteryPreferenceController}. */
- public static List<BatteryDiffEntry> getBatteryLast24HrUsageData(Context context) {
- final long start = System.currentTimeMillis();
- final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
- FeatureFactory.getFactory(context)
- .getPowerUsageFeatureProvider(context)
- .getBatteryHistory(context);
- if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
- return null;
- }
- Log.d(TAG, String.format("getBatteryLast24HrData() size=%d time=&d/ms",
- batteryHistoryMap.size(), (System.currentTimeMillis() - start)));
- final Map<Integer, List<BatteryDiffEntry>> batteryIndexedMap =
- ConvertUtils.getIndexedUsageMap(
- context,
- /*timeSlotSize=*/ CHART_LEVEL_ARRAY_SIZE - 1,
- getBatteryHistoryKeys(batteryHistoryMap),
- batteryHistoryMap,
- /*purgeLowPercentageAndFakeData=*/ true);
- return batteryIndexedMap.get(BatteryChartView.SELECTED_INDEX_ALL);
- }
-
- /** Used for {@link AppBatteryPreferenceController}. */
- public static BatteryDiffEntry getBatteryLast24HrUsageData(
- Context context, String packageName, int userId) {
- if (packageName == null) {
- return null;
- }
- final List<BatteryDiffEntry> entries = getBatteryLast24HrUsageData(context);
- if (entries == null) {
- return null;
- }
- for (BatteryDiffEntry entry : entries) {
- final BatteryHistEntry batteryHistEntry = entry.mBatteryHistEntry;
- if (batteryHistEntry != null
- && batteryHistEntry.mConsumerType == ConvertUtils.CONSUMER_TYPE_UID_BATTERY
- && batteryHistEntry.mUserId == userId
- && packageName.equals(entry.getPackageName())) {
- return entry;
- }
- }
- return null;
- }
-
- private static long[] getBatteryHistoryKeys(
- final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
- final List<Long> batteryHistoryKeyList =
- new ArrayList<>(batteryHistoryMap.keySet());
- Collections.sort(batteryHistoryKeyList);
- final long[] batteryHistoryKeys = new long[CHART_KEY_ARRAY_SIZE];
- for (int index = 0; index < CHART_KEY_ARRAY_SIZE; index++) {
- batteryHistoryKeys[index] = batteryHistoryKeyList.get(index);
- }
- return batteryHistoryKeys;
- }
-
- // Loads all items icon and label in the background.
- private final class LoadAllItemsInfoTask
- extends AsyncTask<Void, Void, Map<Integer, List<BatteryDiffEntry>>> {
-
- private long[] mBatteryHistoryKeysCache;
- private Map<Long, Map<String, BatteryHistEntry>> mBatteryHistoryMap;
-
- private LoadAllItemsInfoTask(
- Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
- this.mBatteryHistoryMap = batteryHistoryMap;
- this.mBatteryHistoryKeysCache = mBatteryHistoryKeys;
- }
-
- @Override
- protected Map<Integer, List<BatteryDiffEntry>> doInBackground(Void... voids) {
- if (mPrefContext == null || mBatteryHistoryKeysCache == null) {
- return null;
- }
- final long startTime = System.currentTimeMillis();
- final Map<Integer, List<BatteryDiffEntry>> indexedUsageMap =
- ConvertUtils.getIndexedUsageMap(
- mPrefContext, /*timeSlotSize=*/ CHART_LEVEL_ARRAY_SIZE - 1,
- mBatteryHistoryKeysCache, mBatteryHistoryMap,
- /*purgeLowPercentageAndFakeData=*/ true);
- // Pre-loads each BatteryDiffEntry relative icon and label for all slots.
- for (List<BatteryDiffEntry> entries : indexedUsageMap.values()) {
- entries.forEach(entry -> entry.loadLabelAndIcon());
- }
- Log.d(TAG, String.format("execute LoadAllItemsInfoTask in %d/ms",
- (System.currentTimeMillis() - startTime)));
- return indexedUsageMap;
- }
-
- @Override
- protected void onPostExecute(
- Map<Integer, List<BatteryDiffEntry>> indexedUsageMap) {
- mBatteryHistoryMap = null;
- mBatteryHistoryKeysCache = null;
- if (indexedUsageMap == null) {
- return;
- }
- // Posts results back to main thread to refresh UI.
- mHandler.post(() -> {
- mBatteryIndexedMap = indexedUsageMap;
- forceRefreshUi();
- });
- }
- }
-}
diff --git a/src/com/android/settings/fuelgauge/BatteryChartView.java b/src/com/android/settings/fuelgauge/BatteryChartView.java
deleted file mode 100644
index ff61fce..0000000
--- a/src/com/android/settings/fuelgauge/BatteryChartView.java
+++ /dev/null
@@ -1,624 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
- */
-package com.android.settings.fuelgauge;
-
-import static java.lang.Math.round;
-
-import static com.android.settings.Utils.formatPercentage;
-
-import android.accessibilityservice.AccessibilityServiceInfo;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.CornerPathEffect;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.Rect;
-import android.os.Handler;
-import android.text.format.DateFormat;
-import android.text.format.DateUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.HapticFeedbackConstants;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.accessibility.AccessibilityManager;
-import android.widget.TextView;
-
-import androidx.appcompat.widget.AppCompatImageView;
-import androidx.annotation.VisibleForTesting;
-
-import com.android.settings.R;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settingslib.Utils;
-
-import java.time.Clock;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-
-/** A widget component to draw chart graph. */
-public class BatteryChartView extends AppCompatImageView implements View.OnClickListener,
- AccessibilityManager.AccessibilityStateChangeListener {
- private static final String TAG = "BatteryChartView";
- private static final List<String> ACCESSIBILITY_SERVICE_NAMES =
- Arrays.asList("SwitchAccessService", "TalkBackService", "JustSpeakService");
-
- private static final int DEFAULT_TRAPEZOID_COUNT = 12;
- private static final int DEFAULT_TIMESTAMP_COUNT = 4;
- private static final int TIMESTAMP_GAPS_COUNT = DEFAULT_TIMESTAMP_COUNT - 1;
- private static final int DIVIDER_COLOR = Color.parseColor("#CDCCC5");
- private static final long UPDATE_STATE_DELAYED_TIME = 500L;
-
- /** Selects all trapezoid shapes. */
- public static final int SELECTED_INDEX_ALL = -1;
- public static final int SELECTED_INDEX_INVALID = -2;
-
- /** A callback listener for selected group index is updated. */
- public interface OnSelectListener {
- void onSelect(int trapezoidIndex);
- }
-
- private int mDividerWidth;
- private int mDividerHeight;
- private int mTrapezoidCount;
- private float mTrapezoidVOffset;
- private float mTrapezoidHOffset;
- private boolean mIsSlotsClickabled;
- private String[] mPercentages = getPercentages();
-
- @VisibleForTesting int mHoveredIndex = SELECTED_INDEX_INVALID;
- @VisibleForTesting int mSelectedIndex = SELECTED_INDEX_INVALID;
- @VisibleForTesting String[] mTimestamps;
-
- // Colors for drawing the trapezoid shape and dividers.
- private int mTrapezoidColor;
- private int mTrapezoidSolidColor;
- private int mTrapezoidHoverColor;
- // For drawing the percentage information.
- private int mTextPadding;
- private final Rect mIndent = new Rect();
- private final Rect[] mPercentageBounds =
- new Rect[] {new Rect(), new Rect(), new Rect()};
- // For drawing the timestamp information.
- private final Rect[] mTimestampsBounds =
- new Rect[] {new Rect(), new Rect(), new Rect(), new Rect()};
-
- @VisibleForTesting
- Handler mHandler = new Handler();
- @VisibleForTesting
- final Runnable mUpdateClickableStateRun = () -> updateClickableState();
-
- private int[] mLevels;
- private Paint mTextPaint;
- private Paint mDividerPaint;
- private Paint mTrapezoidPaint;
-
- @VisibleForTesting
- Paint mTrapezoidCurvePaint = null;
- private TrapezoidSlot[] mTrapezoidSlots;
- // Records the location to calculate selected index.
- private float mTouchUpEventX = Float.MIN_VALUE;
- private BatteryChartView.OnSelectListener mOnSelectListener;
-
- public BatteryChartView(Context context) {
- super(context, null);
- }
-
- public BatteryChartView(Context context, AttributeSet attrs) {
- super(context, attrs);
- initializeColors(context);
- // Registers the click event listener.
- setOnClickListener(this);
- setSelectedIndex(SELECTED_INDEX_ALL);
- setTrapezoidCount(DEFAULT_TRAPEZOID_COUNT);
- setClickable(false);
- setLatestTimestamp(0);
- }
-
- /** Sets the total trapezoid count for drawing. */
- public void setTrapezoidCount(int trapezoidCount) {
- Log.i(TAG, "trapezoidCount:" + trapezoidCount);
- mTrapezoidCount = trapezoidCount;
- mTrapezoidSlots = new TrapezoidSlot[trapezoidCount];
- // Allocates the trapezoid slot array.
- for (int index = 0; index < trapezoidCount; index++) {
- mTrapezoidSlots[index] = new TrapezoidSlot();
- }
- invalidate();
- }
-
- /** Sets all levels value to draw the trapezoid shape */
- public void setLevels(int[] levels) {
- Log.d(TAG, "setLevels() " + (levels == null ? "null" : levels.length));
- if (levels == null) {
- mLevels = null;
- return;
- }
- // We should provide trapezoid count + 1 data to draw all trapezoids.
- mLevels = levels.length == mTrapezoidCount + 1 ? levels : null;
- setClickable(false);
- invalidate();
- if (mLevels == null) {
- return;
- }
- // Sets the chart is clickable if there is at least one valid item in it.
- for (int index = 0; index < mLevels.length - 1; index++) {
- if (mLevels[index] != 0 && mLevels[index + 1] != 0) {
- setClickable(true);
- break;
- }
- }
- }
-
- /** Sets the selected group index to draw highlight effect. */
- public void setSelectedIndex(int index) {
- if (mSelectedIndex != index) {
- mSelectedIndex = index;
- invalidate();
- // Callbacks to the listener if we have.
- if (mOnSelectListener != null) {
- mOnSelectListener.onSelect(mSelectedIndex);
- }
- }
- }
-
- /** Sets the callback to monitor the selected group index. */
- public void setOnSelectListener(BatteryChartView.OnSelectListener listener) {
- mOnSelectListener = listener;
- }
-
- /** Sets the companion {@link TextView} for percentage information. */
- public void setCompanionTextView(TextView textView) {
- if (textView != null) {
- // Pre-draws the view first to load style atttributions into paint.
- textView.draw(new Canvas());
- mTextPaint = textView.getPaint();
- } else {
- mTextPaint = null;
- }
- setVisibility(View.VISIBLE);
- requestLayout();
- }
-
- /** Sets the latest timestamp for drawing into x-axis information. */
- public void setLatestTimestamp(long latestTimestamp) {
- if (latestTimestamp == 0) {
- latestTimestamp = Clock.systemUTC().millis();
- }
- if (mTimestamps == null) {
- mTimestamps = new String[DEFAULT_TIMESTAMP_COUNT];
- }
- final long timeSlotOffset =
- DateUtils.HOUR_IN_MILLIS * (/*total 24 hours*/ 24 / TIMESTAMP_GAPS_COUNT);
- final boolean is24HourFormat = DateFormat.is24HourFormat(getContext());
- for (int index = 0; index < DEFAULT_TIMESTAMP_COUNT; index++) {
- mTimestamps[index] =
- ConvertUtils.utcToLocalTimeHour(
- getContext(),
- latestTimestamp - (TIMESTAMP_GAPS_COUNT - index) * timeSlotOffset,
- is24HourFormat);
- }
- requestLayout();
- }
-
- @Override
- public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- // Measures text bounds and updates indent configuration.
- if (mTextPaint != null) {
- for (int index = 0; index < mPercentages.length; index++) {
- mTextPaint.getTextBounds(
- mPercentages[index], 0, mPercentages[index].length(),
- mPercentageBounds[index]);
- }
- // Updates the indent configurations.
- mIndent.top = mPercentageBounds[0].height();
- mIndent.right = mPercentageBounds[0].width() + mTextPadding;
-
- if (mTimestamps != null) {
- int maxHeight = 0;
- for (int index = 0; index < DEFAULT_TIMESTAMP_COUNT; index++) {
- mTextPaint.getTextBounds(
- mTimestamps[index], 0, mTimestamps[index].length(),
- mTimestampsBounds[index]);
- maxHeight = Math.max(maxHeight, mTimestampsBounds[index].height());
- }
- mIndent.bottom = maxHeight + round(mTextPadding * 1.5f);
- }
- Log.d(TAG, "setIndent:" + mPercentageBounds[0]);
- } else {
- mIndent.set(0, 0, 0, 0);
- }
- }
-
- @Override
- public void draw(Canvas canvas) {
- super.draw(canvas);
- drawHorizontalDividers(canvas);
- drawVerticalDividers(canvas);
- drawTrapezoids(canvas);
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- // Caches the location to calculate selected trapezoid index.
- final int action = event.getAction();
- switch (action) {
- case MotionEvent.ACTION_UP:
- mTouchUpEventX = event.getX();
- break;
- case MotionEvent.ACTION_CANCEL:
- mTouchUpEventX = Float.MIN_VALUE; // reset
- break;
- }
- return super.onTouchEvent(event);
- }
-
- @Override
- public boolean onHoverEvent(MotionEvent event) {
- final int action = event.getAction();
- switch (action) {
- case MotionEvent.ACTION_HOVER_ENTER:
- case MotionEvent.ACTION_HOVER_MOVE:
- final int trapezoidIndex = getTrapezoidIndex(event.getX());
- if (mHoveredIndex != trapezoidIndex) {
- mHoveredIndex = trapezoidIndex;
- invalidate();
- }
- break;
- }
- return super.onHoverEvent(event);
- }
-
- @Override
- public void onHoverChanged(boolean hovered) {
- super.onHoverChanged(hovered);
- if (!hovered) {
- mHoveredIndex = SELECTED_INDEX_INVALID; // reset
- invalidate();
- }
- }
-
- @Override
- public void onClick(View view) {
- if (mTouchUpEventX == Float.MIN_VALUE) {
- Log.w(TAG, "invalid motion event for onClick() callback");
- return;
- }
- final int trapezoidIndex = getTrapezoidIndex(mTouchUpEventX);
- // Ignores the click event if the level is zero.
- if (trapezoidIndex == SELECTED_INDEX_INVALID
- || !isValidToDraw(trapezoidIndex)) {
- return;
- }
- // Selects all if users click the same trapezoid item two times.
- if (trapezoidIndex == mSelectedIndex) {
- setSelectedIndex(SELECTED_INDEX_ALL);
- } else {
- setSelectedIndex(trapezoidIndex);
- }
- view.performHapticFeedback(HapticFeedbackConstants.CONTEXT_CLICK);
- }
-
- @Override
- public void onAttachedToWindow() {
- super.onAttachedToWindow();
- updateClickableState();
- mContext.getSystemService(AccessibilityManager.class)
- .addAccessibilityStateChangeListener(/*listener=*/ this);
- }
-
- @Override
- public void onDetachedFromWindow() {
- super.onDetachedFromWindow();
- mContext.getSystemService(AccessibilityManager.class)
- .removeAccessibilityStateChangeListener(/*listener=*/ this);
- mHandler.removeCallbacks(mUpdateClickableStateRun);
- }
-
- @Override
- public void onAccessibilityStateChanged(boolean enabled) {
- Log.d(TAG, "onAccessibilityStateChanged:" + enabled);
- mHandler.removeCallbacks(mUpdateClickableStateRun);
- // We should delay it a while since accessibility manager will spend
- // some times to bind with new enabled accessibility services.
- mHandler.postDelayed(
- mUpdateClickableStateRun, UPDATE_STATE_DELAYED_TIME);
- }
-
- private void updateClickableState() {
- final Context context = mContext;
- mIsSlotsClickabled =
- FeatureFactory.getFactory(context)
- .getPowerUsageFeatureProvider(context)
- .isChartGraphSlotsEnabled(context)
- && !isAccessibilityEnabled(context);
- Log.d(TAG, "isChartGraphSlotsEnabled:" + mIsSlotsClickabled);
- setClickable(isClickable());
- // Initializes the trapezoid curve paint for non-clickable case.
- if (!mIsSlotsClickabled && mTrapezoidCurvePaint == null) {
- mTrapezoidCurvePaint = new Paint();
- mTrapezoidCurvePaint.setAntiAlias(true);
- mTrapezoidCurvePaint.setColor(mTrapezoidSolidColor);
- mTrapezoidCurvePaint.setStyle(Paint.Style.STROKE);
- mTrapezoidCurvePaint.setStrokeWidth(mDividerWidth * 2);
- } else if (mIsSlotsClickabled) {
- mTrapezoidCurvePaint = null;
- // Sets levels again to force update the click state.
- setLevels(mLevels);
- }
- invalidate();
- }
-
- @Override
- public void setClickable(boolean clickable) {
- super.setClickable(mIsSlotsClickabled && clickable);
- }
-
- @VisibleForTesting
- void setClickableForce(boolean clickable) {
- super.setClickable(clickable);
- }
-
- private void initializeColors(Context context) {
- setBackgroundColor(Color.TRANSPARENT);
- mTrapezoidSolidColor = Utils.getColorAccentDefaultColor(context);
- mTrapezoidColor = Utils.getDisabled(context, mTrapezoidSolidColor);
- mTrapezoidHoverColor = Utils.getColorAttrDefaultColor(context,
- com.android.internal.R.attr.colorAccentSecondaryVariant);
- // Initializes the divider line paint.
- final Resources resources = getContext().getResources();
- mDividerWidth = resources.getDimensionPixelSize(R.dimen.chartview_divider_width);
- mDividerHeight = resources.getDimensionPixelSize(R.dimen.chartview_divider_height);
- mDividerPaint = new Paint();
- mDividerPaint.setAntiAlias(true);
- mDividerPaint.setColor(DIVIDER_COLOR);
- mDividerPaint.setStyle(Paint.Style.STROKE);
- mDividerPaint.setStrokeWidth(mDividerWidth);
- Log.i(TAG, "mDividerWidth:" + mDividerWidth);
- Log.i(TAG, "mDividerHeight:" + mDividerHeight);
- // Initializes the trapezoid paint.
- mTrapezoidHOffset = resources.getDimension(R.dimen.chartview_trapezoid_margin_start);
- mTrapezoidVOffset = resources.getDimension(R.dimen.chartview_trapezoid_margin_bottom);
- mTrapezoidPaint = new Paint();
- mTrapezoidPaint.setAntiAlias(true);
- mTrapezoidPaint.setColor(mTrapezoidSolidColor);
- mTrapezoidPaint.setStyle(Paint.Style.FILL);
- mTrapezoidPaint.setPathEffect(
- new CornerPathEffect(
- resources.getDimensionPixelSize(R.dimen.chartview_trapezoid_radius)));
- // Initializes for drawing text information.
- mTextPadding = resources.getDimensionPixelSize(R.dimen.chartview_text_padding);
- }
-
- private void drawHorizontalDividers(Canvas canvas) {
- final int width = getWidth() - mIndent.right;
- final int height = getHeight() - mIndent.top - mIndent.bottom;
- // Draws the top divider line for 100% curve.
- float offsetY = mIndent.top + mDividerWidth * .5f;
- canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
- drawPercentage(canvas, /*index=*/ 0, offsetY);
-
- // Draws the center divider line for 50% curve.
- final float availableSpace =
- height - mDividerWidth * 2 - mTrapezoidVOffset - mDividerHeight;
- offsetY = mIndent.top + mDividerWidth + availableSpace * .5f;
- canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
- drawPercentage(canvas, /*index=*/ 1, offsetY);
-
- // Draws the bottom divider line for 0% curve.
- offsetY = mIndent.top + (height - mDividerHeight - mDividerWidth * .5f);
- canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
- drawPercentage(canvas, /*index=*/ 2, offsetY);
- }
-
- private void drawPercentage(Canvas canvas, int index, float offsetY) {
- if (mTextPaint != null) {
- canvas.drawText(
- mPercentages[index],
- getWidth() - mPercentageBounds[index].width() - mPercentageBounds[index].left,
- offsetY + mPercentageBounds[index].height() *.5f,
- mTextPaint);
- }
- }
-
- private void drawVerticalDividers(Canvas canvas) {
- final int width = getWidth() - mIndent.right;
- final int dividerCount = mTrapezoidCount + 1;
- final float dividerSpace = dividerCount * mDividerWidth;
- final float unitWidth = (width - dividerSpace) / (float) mTrapezoidCount;
- final float bottomY = getHeight() - mIndent.bottom;
- final float startY = bottomY - mDividerHeight;
- final float trapezoidSlotOffset = mTrapezoidHOffset + mDividerWidth * .5f;
- // Draws each vertical dividers.
- float startX = mDividerWidth * .5f;
- for (int index = 0; index < dividerCount; index++) {
- canvas.drawLine(startX, startY, startX, bottomY, mDividerPaint);
- final float nextX = startX + mDividerWidth + unitWidth;
- // Updates the trapezoid slots for drawing.
- if (index < mTrapezoidSlots.length) {
- mTrapezoidSlots[index].mLeft = round(startX + trapezoidSlotOffset);
- mTrapezoidSlots[index].mRight = round(nextX - trapezoidSlotOffset);
- }
- startX = nextX;
- }
- // Draws the timestamp slot information.
- if (mTimestamps != null) {
- final float[] xOffsets = new float[DEFAULT_TIMESTAMP_COUNT];
- final float baselineX = mDividerWidth * .5f;
- final float offsetX = mDividerWidth + unitWidth;
- final int slotBarOffset = (/*total 12 bars*/ 12) / TIMESTAMP_GAPS_COUNT;
- for (int index = 0; index < DEFAULT_TIMESTAMP_COUNT; index++) {
- xOffsets[index] = baselineX + index * offsetX * slotBarOffset;
- }
- drawTimestamp(canvas, xOffsets);
- }
- }
-
- private void drawTimestamp(Canvas canvas, float[] xOffsets) {
- // Draws the 1st timestamp info.
- canvas.drawText(
- mTimestamps[0],
- xOffsets[0] - mTimestampsBounds[0].left,
- getTimestampY(0), mTextPaint);
- final int latestIndex = DEFAULT_TIMESTAMP_COUNT - 1;
- // Draws the last timestamp info.
- canvas.drawText(
- mTimestamps[latestIndex],
- xOffsets[latestIndex] - mTimestampsBounds[latestIndex].width()
- - mTimestampsBounds[latestIndex].left,
- getTimestampY(latestIndex), mTextPaint);
- // Draws the rest of timestamp info since it is located in the center.
- for (int index = 1; index <= DEFAULT_TIMESTAMP_COUNT - 2; index++) {
- canvas.drawText(
- mTimestamps[index],
- xOffsets[index] -
- (mTimestampsBounds[index].width() - mTimestampsBounds[index].left) * .5f,
- getTimestampY(index), mTextPaint);
-
- }
- }
-
- private int getTimestampY(int index) {
- return getHeight() - mTimestampsBounds[index].height()
- + (mTimestampsBounds[index].height() + mTimestampsBounds[index].top)
- + round(mTextPadding * 1.5f);
- }
-
- private void drawTrapezoids(Canvas canvas) {
- // Ignores invalid trapezoid data.
- if (mLevels == null) {
- return;
- }
- final float trapezoidBottom =
- getHeight() - mIndent.bottom - mDividerHeight - mDividerWidth
- - mTrapezoidVOffset;
- final float availableSpace = trapezoidBottom - mDividerWidth * .5f - mIndent.top;
- final float unitHeight = availableSpace / 100f;
- // Draws all trapezoid shapes into the canvas.
- final Path trapezoidPath = new Path();
- Path trapezoidCurvePath = null;
- for (int index = 0; index < mTrapezoidCount; index++) {
- // Not draws the trapezoid for corner or not initialization cases.
- if (!isValidToDraw(index)) {
- if (mTrapezoidCurvePaint != null && trapezoidCurvePath != null) {
- canvas.drawPath(trapezoidCurvePath, mTrapezoidCurvePaint);
- trapezoidCurvePath = null;
- }
- continue;
- }
- // Configures the trapezoid paint color.
- final int trapezoidColor =
- !mIsSlotsClickabled
- ? mTrapezoidColor
- : mSelectedIndex == index || mSelectedIndex == SELECTED_INDEX_ALL
- ? mTrapezoidSolidColor : mTrapezoidColor;
- final boolean isHoverState =
- mIsSlotsClickabled && mHoveredIndex == index && isValidToDraw(mHoveredIndex);
- mTrapezoidPaint.setColor(isHoverState ? mTrapezoidHoverColor : trapezoidColor);
-
- final float leftTop = round(trapezoidBottom - mLevels[index] * unitHeight);
- final float rightTop = round(trapezoidBottom - mLevels[index + 1] * unitHeight);
- trapezoidPath.reset();
- trapezoidPath.moveTo(mTrapezoidSlots[index].mLeft, trapezoidBottom);
- trapezoidPath.lineTo(mTrapezoidSlots[index].mLeft, leftTop);
- trapezoidPath.lineTo(mTrapezoidSlots[index].mRight, rightTop);
- trapezoidPath.lineTo(mTrapezoidSlots[index].mRight, trapezoidBottom);
- // A tricky way to make the trapezoid shape drawing the rounded corner.
- trapezoidPath.lineTo(mTrapezoidSlots[index].mLeft, trapezoidBottom);
- trapezoidPath.lineTo(mTrapezoidSlots[index].mLeft, leftTop);
- // Draws the trapezoid shape into canvas.
- canvas.drawPath(trapezoidPath, mTrapezoidPaint);
-
- // Generates path for non-clickable trapezoid curve.
- if (mTrapezoidCurvePaint != null) {
- if (trapezoidCurvePath == null) {
- trapezoidCurvePath= new Path();
- trapezoidCurvePath.moveTo(mTrapezoidSlots[index].mLeft, leftTop);
- } else {
- trapezoidCurvePath.lineTo(mTrapezoidSlots[index].mLeft, leftTop);
- }
- trapezoidCurvePath.lineTo(mTrapezoidSlots[index].mRight, rightTop);
- }
- }
- // Draws the trapezoid curve for non-clickable case.
- if (mTrapezoidCurvePaint != null && trapezoidCurvePath != null) {
- canvas.drawPath(trapezoidCurvePath, mTrapezoidCurvePaint);
- trapezoidCurvePath = null;
- }
- }
-
- // Searches the corresponding trapezoid index from x location.
- private int getTrapezoidIndex(float x) {
- for (int index = 0; index < mTrapezoidSlots.length; index++) {
- final TrapezoidSlot slot = mTrapezoidSlots[index];
- if (x >= slot.mLeft - mTrapezoidHOffset
- && x <= slot.mRight + mTrapezoidHOffset) {
- return index;
- }
- }
- return SELECTED_INDEX_INVALID;
- }
-
- private boolean isValidToDraw(int trapezoidIndex) {
- return mLevels != null
- && trapezoidIndex >= 0
- && trapezoidIndex < mLevels.length - 1
- && mLevels[trapezoidIndex] != 0
- && mLevels[trapezoidIndex + 1] != 0;
- }
-
- private static String[] getPercentages() {
- return new String[] {
- formatPercentage(/*percentage=*/ 100, /*round=*/ true),
- formatPercentage(/*percentage=*/ 50, /*round=*/ true),
- formatPercentage(/*percentage=*/ 0, /*round=*/ true)};
- }
-
- @VisibleForTesting
- static boolean isAccessibilityEnabled(Context context) {
- final AccessibilityManager accessibilityManager =
- context.getSystemService(AccessibilityManager.class);
- if (!accessibilityManager.isEnabled()) {
- return false;
- }
- final List<AccessibilityServiceInfo> serviceInfoList =
- accessibilityManager.getEnabledAccessibilityServiceList(
- AccessibilityServiceInfo.FEEDBACK_SPOKEN
- | AccessibilityServiceInfo.FEEDBACK_GENERIC);
- for (AccessibilityServiceInfo info : serviceInfoList) {
- for (String serviceName : ACCESSIBILITY_SERVICE_NAMES) {
- final String serviceId = info.getId();
- if (serviceId != null && serviceId.contains(serviceName)) {
- Log.d(TAG, "acccessibilityEnabled:" + serviceId);
- return true;
- }
- }
- }
- return false;
- }
-
- // A container class for each trapezoid left and right location.
- private static final class TrapezoidSlot {
- public float mLeft;
- public float mRight;
-
- @Override
- public String toString() {
- return String.format(Locale.US, "TrapezoidSlot[%f,%f]", mLeft, mRight);
- }
- }
-}
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
index 9306a34..dbfacc6 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
@@ -19,7 +19,15 @@
import android.annotation.IntDef;
import android.app.AppOpsManager;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
+import android.content.pm.UserInfo;
import android.os.AsyncTask;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.ArraySet;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
@@ -43,6 +51,15 @@
private final String mPackageName;
private final int mUid;
+ // If current user is admin, match apps from all users. Otherwise, only match the currect user.
+ private static final int RETRIEVE_FLAG_ADMIN =
+ PackageManager.MATCH_ANY_USER
+ | PackageManager.MATCH_DISABLED_COMPONENTS
+ | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
+ private static final int RETRIEVE_FLAG =
+ PackageManager.MATCH_DISABLED_COMPONENTS
+ | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS;
+
// Optimization modes.
static final int MODE_UNKNOWN = 0;
static final int MODE_RESTRICTED = 1;
@@ -90,28 +107,20 @@
return getAppOptimizationMode(mMode, mAllowListed);
}
+ /** Resets optimization mode for all applications. */
+ public static void resetAppOptimizationMode(
+ Context context, IPackageManager ipm, AppOpsManager aom) {
+ resetAppOptimizationMode(context, ipm, aom,
+ PowerAllowlistBackend.getInstance(context), BatteryUtils.getInstance(context));
+ }
+
/** Sets the {@link OptimizationMode} for associated app. */
public void setAppUsageState(@OptimizationMode int mode) {
if (getAppOptimizationMode(mMode, mAllowListed) == mode) {
Log.w(TAG, "set the same optimization mode for: " + mPackageName);
return;
}
-
- AsyncTask.execute(() -> {
- switch (mode) {
- case MODE_RESTRICTED:
- setAppOptimizationMode(AppOpsManager.MODE_IGNORED, /* allowListed */ false);
- break;
- case MODE_UNRESTRICTED:
- setAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ true);
- break;
- case MODE_OPTIMIZED:
- setAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
- break;
- default:
- Log.d(TAG, "set unknown app optimization mode.");
- }
- });
+ setAppUsageStateInternal(mode, mUid, mPackageName, mBatteryUtils, mPowerAllowListBackend);
}
/**
@@ -126,25 +135,111 @@
*/
public boolean isSystemOrDefaultApp() {
mPowerAllowListBackend.refreshList();
+ return isSystemOrDefaultApp(mPowerAllowListBackend, mPackageName);
+ }
- return mPowerAllowListBackend.isSysAllowlisted(mPackageName)
- || mPowerAllowListBackend.isDefaultActiveApp(mPackageName);
+ /**
+ * Gets the list of installed applications.
+ */
+ public static ArraySet<ApplicationInfo> getInstalledApplications(
+ Context context, IPackageManager ipm) {
+ final ArraySet<ApplicationInfo> applications = new ArraySet<>();
+ final UserManager um = context.getSystemService(UserManager.class);
+ for (UserInfo userInfo : um.getProfiles(UserHandle.myUserId())) {
+ try {
+ @SuppressWarnings("unchecked")
+ final ParceledListSlice<ApplicationInfo> infoList = ipm.getInstalledApplications(
+ userInfo.isAdmin() ? RETRIEVE_FLAG_ADMIN : RETRIEVE_FLAG,
+ userInfo.id);
+ if (infoList != null) {
+ applications.addAll(infoList.getList());
+ }
+ } catch (Exception e) {
+ Log.e(TAG, "getInstalledApplications() is failed", e);
+ return null;
+ }
+ }
+ // Removes the application which is disabled by the system.
+ applications.removeIf(
+ info -> info.enabledSetting != PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER
+ && !info.enabled);
+ return applications;
+ }
+
+ @VisibleForTesting
+ static void resetAppOptimizationMode(
+ Context context, IPackageManager ipm, AppOpsManager aom,
+ PowerAllowlistBackend allowlistBackend, BatteryUtils batteryUtils) {
+ final ArraySet<ApplicationInfo> applications = getInstalledApplications(context, ipm);
+ if (applications == null || applications.isEmpty()) {
+ Log.w(TAG, "no data found in the getInstalledApplications()");
+ return;
+ }
+
+ allowlistBackend.refreshList();
+ // Resets optimization mode for each application.
+ for (ApplicationInfo info : applications) {
+ final int mode = aom.checkOpNoThrow(
+ AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, info.uid, info.packageName);
+ @OptimizationMode
+ final int optimizationMode = getAppOptimizationMode(
+ mode, allowlistBackend.isAllowlisted(info.packageName));
+ // Ignores default optimized/unknown state or system/default apps.
+ if (optimizationMode == MODE_OPTIMIZED
+ || optimizationMode == MODE_UNKNOWN
+ || isSystemOrDefaultApp(allowlistBackend, info.packageName)) {
+ continue;
+ }
+
+ // Resets to the default mode: MODE_OPTIMIZED.
+ setAppUsageStateInternal(MODE_OPTIMIZED, info.uid, info.packageName, batteryUtils,
+ allowlistBackend);
+ }
}
String getPackageName() {
return mPackageName == null ? UNKNOWN_PACKAGE : mPackageName;
}
- private void setAppOptimizationMode(int appStandbyMode, boolean allowListed) {
+ private static boolean isSystemOrDefaultApp(
+ PowerAllowlistBackend powerAllowlistBackend, String packageName) {
+ return powerAllowlistBackend.isSysAllowlisted(packageName)
+ || powerAllowlistBackend.isDefaultActiveApp(packageName);
+ }
+
+ private static void setAppUsageStateInternal(
+ @OptimizationMode int mode, int uid, String packageName, BatteryUtils batteryUtils,
+ PowerAllowlistBackend powerAllowlistBackend) {
+ if (mode == MODE_UNKNOWN) {
+ Log.d(TAG, "set unknown app optimization mode.");
+ return;
+ }
+
+ // MODE_RESTRICTED = AppOpsManager.MODE_IGNORED + !allowListed
+ // MODE_UNRESTRICTED = AppOpsManager.MODE_ALLOWED + allowListed
+ // MODE_OPTIMIZED = AppOpsManager.MODE_ALLOWED + !allowListed
+ final int appOpsManagerMode =
+ mode == MODE_RESTRICTED ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED;
+ final boolean allowListed = mode == MODE_UNRESTRICTED;
+
+ AsyncTask.execute(() -> {
+ setAppOptimizationModeInternal(appOpsManagerMode, allowListed, uid, packageName,
+ batteryUtils, powerAllowlistBackend);
+ });
+ }
+
+ private static void setAppOptimizationModeInternal(
+ int appStandbyMode, boolean allowListed, int uid, String packageName,
+ BatteryUtils batteryUtils, PowerAllowlistBackend powerAllowlistBackend) {
try {
- mBatteryUtils.setForceAppStandby(mUid, mPackageName, appStandbyMode);
+ batteryUtils.setForceAppStandby(uid, packageName, appStandbyMode);
if (allowListed) {
- mPowerAllowListBackend.addApp(mPackageName);
+ powerAllowlistBackend.addApp(packageName);
} else {
- mPowerAllowListBackend.removeApp(mPackageName);
+ powerAllowlistBackend.removeApp(packageName);
}
} catch (Exception e) {
- Log.e(TAG, "set OPTIMIZED failed for " + mPackageName, e);
+ Log.e(TAG, "set OPTIMIZATION MODE failed for " + packageName, e);
}
}
@@ -154,8 +249,6 @@
mMode = mAppOpsManager
.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mPackageName);
Log.d(TAG, String.format("refresh %s state, allowlisted = %s, mode = %d",
- mPackageName,
- mAllowListed,
- mMode));
+ mPackageName, mAllowListed, mMode));
}
}
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 29c2fc9..a6c48a4 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -69,6 +69,8 @@
public static final int UID_REMOVED_APPS = -4;
/** Special UID value for data usage by tethering. */
public static final int UID_TETHERING = -5;
+ /** Special UID for aggregated other users. */
+ public static final long UID_OTHER_USERS = Long.MIN_VALUE;
@Retention(RetentionPolicy.SOURCE)
@IntDef({StatusType.SCREEN_USAGE,
@@ -190,7 +192,7 @@
* Returns true if the specified battery consumer should be excluded from
* battery consumption lists, either short or full.
*/
- boolean shouldHideUidBatteryConsumerUnconditionally(UidBatteryConsumer consumer,
+ public boolean shouldHideUidBatteryConsumerUnconditionally(UidBatteryConsumer consumer,
String[] packages) {
final int uid = consumer.getUid();
return uid == UID_TETHERING
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index ef201e4..94a93b8 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,6 +21,7 @@
import android.net.Uri;
import android.util.SparseIntArray;
+import com.android.settings.fuelgauge.batteryusage.BatteryHistEntry;
import com.android.settingslib.fuelgauge.Estimate;
import java.util.Map;
@@ -73,6 +74,7 @@
/**
* Returns an improved projection curve for future battery level.
+ *
* @param zeroTime timestamps (array keys) are shifted by this amount
*/
SparseIntArray getEnhancedBatteryPredictionCurve(Context context, long zeroTime);
@@ -84,21 +86,20 @@
/**
* Checks whether debugging should be enabled for battery estimates.
- * @return
*/
boolean isEstimateDebugEnabled();
/**
* Converts the provided string containing the remaining time into a debug string for enhanced
* estimates.
- * @param timeRemaining
+ *
* @return A string containing the estimate and a label indicating it is an enhanced estimate
*/
String getEnhancedEstimateDebugString(String timeRemaining);
/**
* Converts the provided string containing the remaining time into a debug string.
- * @param timeRemaining
+ *
* @return A string containing the estimate and a label indicating it is a normal estimate
*/
String getOldEstimateDebugString(String timeRemaining);
@@ -114,7 +115,7 @@
* to their next charging time.
*
* @param id Optional string used to identify the caller for metrics. Usually the class name of
- * the caller
+ * the caller
*/
boolean getEarlyWarningSignal(Context context, String id);
@@ -139,6 +140,11 @@
boolean isAdaptiveChargingSupported();
/**
+ * Returns {@code true} if current defender mode is extra defend
+ */
+ boolean isExtraDefend();
+
+ /**
* Gets a intent for one time bypass charge limited to resume charging.
*/
Intent getResumeChargeIntent();
@@ -149,6 +155,11 @@
Map<Long, Map<String, BatteryHistEntry>> getBatteryHistory(Context context);
/**
+ * Returns battery history data since last full charge with corresponding timestamp key.
+ */
+ Map<Long, Map<String, BatteryHistEntry>> getBatteryHistorySinceLastFullCharge(Context context);
+
+ /**
* Returns {@link Uri} to monitor battery history data is update.
*/
Uri getBatteryHistoryUri();
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index bc25381..0adfc9d 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,11 +26,13 @@
import com.android.internal.util.ArrayUtils;
import com.android.settings.R;
+import com.android.settings.fuelgauge.batteryusage.BatteryHistEntry;
import com.android.settingslib.fuelgauge.Estimate;
import java.util.Map;
import java.util.Set;
+/** Implementation of {@code PowerUsageFeatureProvider} */
public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider {
private static final String PACKAGE_CALENDAR_PROVIDER = "com.android.providers.calendar";
@@ -159,11 +161,22 @@
}
@Override
+ public boolean isExtraDefend() {
+ return false;
+ }
+
+ @Override
public Map<Long, Map<String, BatteryHistEntry>> getBatteryHistory(Context context) {
return null;
}
@Override
+ public Map<Long, Map<String, BatteryHistEntry>> getBatteryHistorySinceLastFullCharge(
+ Context context) {
+ return null;
+ }
+
+ @Override
public Uri getBatteryHistoryUri() {
return null;
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
index 4b98587..ea493a3 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipLoader.java
@@ -31,6 +31,7 @@
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.SummaryTip;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.fuelgauge.EstimateKt;
import com.android.settingslib.utils.AsyncLoaderCompat;
@@ -66,13 +67,16 @@
final BatteryTipPolicy policy = new BatteryTipPolicy(getContext());
final BatteryInfo batteryInfo = mBatteryUtils.getBatteryInfo(TAG);
final Context context = getContext();
+ final boolean extraDefend = FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context)
+ .isExtraDefend();
tips.add(new LowBatteryDetector(context, policy, batteryInfo).detect());
tips.add(new HighUsageDetector(context, policy, mBatteryUsageStats, batteryInfo).detect());
tips.add(new SmartBatteryDetector(
context, policy, batteryInfo, context.getContentResolver()).detect());
tips.add(new EarlyWarningDetector(policy, context).detect());
- tips.add(new BatteryDefenderDetector(batteryInfo).detect());
+ tips.add(new BatteryDefenderDetector(batteryInfo, extraDefend).detect());
Collections.sort(tips);
return tips;
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java
index 5befa33..367b2b1 100644
--- a/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java
+++ b/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java
@@ -24,10 +24,12 @@
* Detect whether the battery is overheated
*/
public class BatteryDefenderDetector implements BatteryTipDetector {
- private BatteryInfo mBatteryInfo;
+ private final BatteryInfo mBatteryInfo;
+ private final boolean mExtraDefend;
- public BatteryDefenderDetector(BatteryInfo batteryInfo) {
+ public BatteryDefenderDetector(BatteryInfo batteryInfo, boolean extraDefend) {
mBatteryInfo = batteryInfo;
+ mExtraDefend = extraDefend;
}
@Override
@@ -36,6 +38,6 @@
mBatteryInfo.isOverheated
? BatteryTip.StateType.NEW
: BatteryTip.StateType.INVISIBLE;
- return new BatteryDefenderTip(state);
+ return new BatteryDefenderTip(state, mExtraDefend);
}
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTip.java
index a2890ad..0a133bb 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTip.java
@@ -18,18 +18,36 @@
import android.app.settings.SettingsEnums;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.BatteryManager;
import android.os.Parcel;
+import android.util.Log;
+
+import androidx.preference.Preference;
import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.widget.CardPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import java.text.NumberFormat;
+
/**
* Tip to show current battery is overheated
*/
public class BatteryDefenderTip extends BatteryTip {
+ private static final String TAG = "BatteryDefenderTip";
+ private boolean mExtraDefend = false;
+
public BatteryDefenderTip(@StateType int state) {
+ this(state, false);
+ }
+
+ public BatteryDefenderTip(@StateType int state, boolean extraDefend) {
super(TipType.BATTERY_DEFENDER, state, true /* showDialog */);
+ mExtraDefend = extraDefend;
}
private BatteryDefenderTip(Parcel in) {
@@ -43,6 +61,14 @@
@Override
public CharSequence getSummary(Context context) {
+ if (mExtraDefend) {
+ final int extraValue = context.getResources()
+ .getInteger(R.integer.config_battery_extra_tip_value);
+ final String extraPercentage = NumberFormat.getPercentInstance()
+ .format(extraValue * 0.01f);
+ return context.getString(
+ R.string.battery_tip_limited_temporarily_extra_summary, extraPercentage);
+ }
return context.getString(R.string.battery_tip_limited_temporarily_summary);
}
@@ -62,6 +88,55 @@
mState);
}
+ @Override
+ public void updatePreference(Preference preference) {
+ super.updatePreference(preference);
+ final Context context = preference.getContext();
+
+ CardPreference cardPreference = castToCardPreferenceSafely(preference);
+ if (cardPreference == null) {
+ Log.e(TAG, "cast Preference to CardPreference failed");
+ return;
+ }
+
+ cardPreference.setPrimaryButtonText(
+ context.getString(R.string.battery_tip_charge_to_full_button));
+ cardPreference.setPrimaryButtonClickListener(
+ unused -> {
+ resumeCharging(context);
+ preference.setVisible(false);
+ });
+ cardPreference.setPrimaryButtonVisible(isPluggedIn(context));
+
+ cardPreference.setSecondaryButtonText(context.getString(R.string.see_more));
+ cardPreference.setSecondaryButtonClickListener(unused -> cardPreference.performClick());
+ cardPreference.setSecondaryButtonVisible(true);
+ }
+
+ private CardPreference castToCardPreferenceSafely(Preference preference) {
+ return preference instanceof CardPreference ? (CardPreference) preference : null;
+ }
+
+ private void resumeCharging(Context context) {
+ final Intent intent =
+ FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context)
+ .getResumeChargeIntent();
+ if (intent != null) {
+ context.sendBroadcast(intent);
+ }
+
+ Log.i(TAG, "send resume charging broadcast intent=" + intent);
+ }
+
+ private boolean isPluggedIn(Context context) {
+ final Intent batteryIntent =
+ context.registerReceiver(
+ /* receiver= */ null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+ return batteryIntent != null
+ && batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
+ }
+
public static final Creator CREATOR = new Creator() {
public BatteryTip createFromParcel(Parcel in) {
return new BatteryDefenderTip(in);
diff --git a/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTip.java b/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTip.java
index a0e470f..3c560f8 100644
--- a/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTip.java
+++ b/src/com/android/settings/fuelgauge/batterytip/tips/UnrestrictAppTip.java
@@ -21,12 +21,13 @@
import androidx.annotation.VisibleForTesting;
+import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
/**
* Tip to suggest user to remove app restriction. This is the empty tip and it is only used in
- * {@link com.android.settings.fuelgauge.AdvancedPowerUsageDetail} to create dialog.
+ * {@link AdvancedPowerUsageDetail} to create dialog.
*/
public class UnrestrictAppTip extends BatteryTip {
private AppInfo mAppInfo;
diff --git a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceController.java
similarity index 97%
rename from src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
rename to src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceController.java
index 9731ab7..f752dad 100644
--- a/src/com/android/settings/fuelgauge/BatteryAppListPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceController.java
@@ -1,5 +1,6 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
@@ -11,11 +12,9 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- *
- *
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.app.Activity;
import android.content.Context;
@@ -35,8 +34,8 @@
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.util.ArrayMap;
-import android.util.SparseArray;
import android.util.Log;
+import android.util.SparseArray;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
@@ -48,6 +47,8 @@
import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
+import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -72,6 +73,7 @@
private static final int MAX_ITEMS_TO_LIST = USE_FAKE_DATA ? 30 : 20;
private static final int MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP = 10;
private static final String MEDIASERVER_PACKAGE_NAME = "mediaserver";
+ private static final String NOT_AVAILABLE = "not_available";
@VisibleForTesting
PreferenceGroup mAppListGroup;
@@ -230,7 +232,7 @@
if (sConfig.shouldShowBatteryAttributionList(mContext)) {
final int dischargePercentage = getDischargePercentage(batteryUsageStats);
final List<BatteryEntry> usageList =
- getCoalescedUsageList(showAllApps, /*loadDataInBackground=*/ true);
+ getCoalescedUsageList(showAllApps, /*loadDataInBackground=*/ true);
final double totalPower = batteryUsageStats.getConsumedPower();
final int numSippers = usageList.size();
for (int i = 0; i < numSippers; i++) {
@@ -292,7 +294,7 @@
}
final int dischargePercentage = getDischargePercentage(batteryUsageStats);
final List<BatteryEntry> usageList =
- getCoalescedUsageList(showAllApps, /*loadDataInBackground=*/ false);
+ getCoalescedUsageList(showAllApps, /*loadDataInBackground=*/ false);
final double totalPower = batteryUsageStats.getConsumedPower();
for (int i = 0; i < usageList.size(); i++) {
final BatteryEntry entry = usageList.get(i);
@@ -458,8 +460,8 @@
private void cacheRemoveAllPrefs(PreferenceGroup group) {
mPreferenceCache = new ArrayMap<>();
- final int N = group.getPreferenceCount();
- for (int i = 0; i < N; i++) {
+ final int n = group.getPreferenceCount();
+ for (int i = 0; i < n; i++) {
Preference p = group.getPreference(i);
if (TextUtils.isEmpty(p.getKey())) {
continue;
@@ -563,7 +565,6 @@
}
private void addNotAvailableMessage() {
- final String NOT_AVAILABLE = "not_available";
Preference notAvailable = getCachedPreference(NOT_AVAILABLE);
if (notAvailable == null) {
notAvailable = new Preference(mPrefContext);
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
new file mode 100644
index 0000000..88bec0d
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
@@ -0,0 +1,689 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge.batteryusage;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.text.TextUtils;
+import android.text.format.DateFormat;
+import android.text.format.DateUtils;
+import android.util.Log;
+import android.view.View;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+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.core.lifecycle.events.OnResume;
+import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
+import com.android.settingslib.utils.StringUtil;
+import com.android.settingslib.widget.FooterPreference;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/** Controls the update for chart graph and the list items. */
+public class BatteryChartPreferenceController extends AbstractPreferenceController
+ implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnDestroy,
+ OnSaveInstanceState, OnResume, ExpandDividerPreference.OnExpandListener {
+ private static final String TAG = "BatteryChartPreferenceController";
+ private static final String KEY_FOOTER_PREF = "battery_graph_footer";
+ private static final String PACKAGE_NAME_NONE = "none";
+
+ private static final long VALID_USAGE_TIME_DURATION = DateUtils.HOUR_IN_MILLIS * 2;
+ private static final long VALID_DIFF_DURATION = DateUtils.MINUTE_IN_MILLIS * 3;
+
+ // Keys for bundle instance to restore configurations.
+ private static final String KEY_EXPAND_SYSTEM_INFO = "expand_system_info";
+ private static final String KEY_DAILY_CHART_INDEX = "daily_chart_index";
+ private static final String KEY_HOURLY_CHART_INDEX = "hourly_chart_index";
+
+ private static int sUiMode = Configuration.UI_MODE_NIGHT_UNDEFINED;
+
+ @VisibleForTesting
+ Map<Integer, Map<Integer, BatteryDiffData>> mBatteryUsageMap;
+
+ @VisibleForTesting
+ Context mPrefContext;
+ @VisibleForTesting
+ BatteryUtils mBatteryUtils;
+ @VisibleForTesting
+ PreferenceGroup mAppListPrefGroup;
+ @VisibleForTesting
+ ExpandDividerPreference mExpandDividerPreference;
+ @VisibleForTesting
+ boolean mIsExpanded = false;
+
+ @VisibleForTesting
+ BatteryChartView mDailyChartView;
+ @VisibleForTesting
+ BatteryChartView mHourlyChartView;
+
+ @VisibleForTesting
+ int mDailyChartIndex = BatteryChartViewModel.SELECTED_INDEX_ALL;
+ @VisibleForTesting
+ int mHourlyChartIndex = BatteryChartViewModel.SELECTED_INDEX_ALL;
+
+ private boolean mIs24HourFormat;
+ private boolean mIsFooterPrefAdded = false;
+ private PreferenceScreen mPreferenceScreen;
+ private FooterPreference mFooterPreference;
+ // Daily view model only saves abbreviated day of week texts (e.g. MON). This field saves the
+ // full day of week texts (e.g. Monday), which is used in category title and battery detail
+ // page.
+ private List<String> mDailyTimestampFullTexts;
+ private BatteryChartViewModel mDailyViewModel;
+ private List<BatteryChartViewModel> mHourlyViewModels;
+
+ private final String mPreferenceKey;
+ private final SettingsActivity mActivity;
+ private final InstrumentedPreferenceFragment mFragment;
+ private final CharSequence[] mNotAllowShowSummaryPackages;
+ private final MetricsFeatureProvider mMetricsFeatureProvider;
+ private final Handler mHandler = new Handler(Looper.getMainLooper());
+
+ // Preference cache to avoid create new instance each time.
+ @VisibleForTesting
+ final Map<String, Preference> mPreferenceCache = new HashMap<>();
+
+ public BatteryChartPreferenceController(
+ Context context, String preferenceKey,
+ Lifecycle lifecycle, SettingsActivity activity,
+ InstrumentedPreferenceFragment fragment) {
+ super(context);
+ mActivity = activity;
+ mFragment = fragment;
+ mPreferenceKey = preferenceKey;
+ mIs24HourFormat = DateFormat.is24HourFormat(context);
+ mMetricsFeatureProvider =
+ FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
+ mNotAllowShowSummaryPackages =
+ FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context)
+ .getHideApplicationSummary(context);
+ if (lifecycle != null) {
+ lifecycle.addObserver(this);
+ }
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ if (savedInstanceState == null) {
+ return;
+ }
+ mDailyChartIndex =
+ savedInstanceState.getInt(KEY_DAILY_CHART_INDEX, mDailyChartIndex);
+ mHourlyChartIndex =
+ savedInstanceState.getInt(KEY_HOURLY_CHART_INDEX, mHourlyChartIndex);
+ mIsExpanded =
+ savedInstanceState.getBoolean(KEY_EXPAND_SYSTEM_INFO, mIsExpanded);
+ Log.d(TAG, String.format("onCreate() dailyIndex=%d hourlyIndex=%d isExpanded=%b",
+ mDailyChartIndex, mHourlyChartIndex, mIsExpanded));
+ }
+
+ @Override
+ public void onResume() {
+ final int currentUiMode =
+ mContext.getResources().getConfiguration().uiMode
+ & Configuration.UI_MODE_NIGHT_MASK;
+ if (sUiMode != currentUiMode) {
+ sUiMode = currentUiMode;
+ BatteryDiffEntry.clearCache();
+ Log.d(TAG, "clear icon and label cache since uiMode is changed");
+ }
+ mIs24HourFormat = DateFormat.is24HourFormat(mContext);
+ mMetricsFeatureProvider.action(mPrefContext, SettingsEnums.OPEN_BATTERY_USAGE);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle savedInstance) {
+ if (savedInstance == null) {
+ return;
+ }
+ savedInstance.putInt(KEY_DAILY_CHART_INDEX, mDailyChartIndex);
+ savedInstance.putInt(KEY_HOURLY_CHART_INDEX, mHourlyChartIndex);
+ savedInstance.putBoolean(KEY_EXPAND_SYSTEM_INFO, mIsExpanded);
+ Log.d(TAG, String.format("onSaveInstanceState() dailyIndex=%d hourlyIndex=%d isExpanded=%b",
+ mDailyChartIndex, mHourlyChartIndex, mIsExpanded));
+ }
+
+ @Override
+ public void onDestroy() {
+ if (mActivity.isChangingConfigurations()) {
+ BatteryDiffEntry.clearCache();
+ }
+ mHandler.removeCallbacksAndMessages(/*token=*/ null);
+ mPreferenceCache.clear();
+ if (mAppListPrefGroup != null) {
+ mAppListPrefGroup.removeAll();
+ }
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreferenceScreen = screen;
+ mPrefContext = screen.getContext();
+ mAppListPrefGroup = screen.findPreference(mPreferenceKey);
+ mAppListPrefGroup.setOrderingAsAdded(false);
+ mAppListPrefGroup.setTitle(mPrefContext.getString(R.string.battery_app_usage));
+ mFooterPreference = screen.findPreference(KEY_FOOTER_PREF);
+ // Removes footer first until usage data is loaded to avoid flashing.
+ if (mFooterPreference != null) {
+ screen.removePreference(mFooterPreference);
+ }
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return mPreferenceKey;
+ }
+
+ @Override
+ public boolean handlePreferenceTreeClick(Preference preference) {
+ if (!(preference instanceof PowerGaugePreference)) {
+ return false;
+ }
+ final PowerGaugePreference powerPref = (PowerGaugePreference) preference;
+ final BatteryDiffEntry diffEntry = powerPref.getBatteryDiffEntry();
+ final BatteryHistEntry histEntry = diffEntry.mBatteryHistEntry;
+ final String packageName = histEntry.mPackageName;
+ final boolean isAppEntry = histEntry.isAppEntry();
+ mMetricsFeatureProvider.action(
+ /* attribution */ SettingsEnums.OPEN_BATTERY_USAGE,
+ /* action */ isAppEntry
+ ? SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM
+ : SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
+ /* pageId */ SettingsEnums.OPEN_BATTERY_USAGE,
+ TextUtils.isEmpty(packageName) ? PACKAGE_NAME_NONE : packageName,
+ (int) Math.round(diffEntry.getPercentOfTotal()));
+ Log.d(TAG, String.format("handleClick() label=%s key=%s package=%s",
+ diffEntry.getAppLabel(), histEntry.getKey(), histEntry.mPackageName));
+ AdvancedPowerUsageDetail.startBatteryDetailPage(
+ mActivity, mFragment, diffEntry, powerPref.getPercent(),
+ isValidToShowSummary(packageName), getSlotInformation());
+ return true;
+ }
+
+ @Override
+ public void onExpand(boolean isExpanded) {
+ mIsExpanded = isExpanded;
+ mMetricsFeatureProvider.action(
+ mPrefContext,
+ SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
+ isExpanded);
+ refreshExpandUi();
+ }
+
+ void setBatteryHistoryMap(
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
+ Log.d(TAG, "setBatteryHistoryMap() " + (batteryHistoryMap == null ? "null"
+ : ("size=" + batteryHistoryMap.size())));
+ final BatteryLevelData batteryLevelData =
+ DataProcessor.getBatteryLevelData(mContext, mHandler, batteryHistoryMap,
+ batteryUsageMap -> {
+ mBatteryUsageMap = batteryUsageMap;
+ refreshUi();
+ });
+ Log.d(TAG, "getBatteryLevelData: " + batteryLevelData);
+ if (batteryLevelData == null) {
+ mDailyTimestampFullTexts = null;
+ mDailyViewModel = null;
+ mHourlyViewModels = null;
+ refreshUi();
+ return;
+ }
+ mDailyTimestampFullTexts = generateTimestampDayOfWeekTexts(
+ mContext, batteryLevelData.getDailyBatteryLevels().getTimestamps(),
+ /* isAbbreviation= */ false);
+ mDailyViewModel = new BatteryChartViewModel(
+ batteryLevelData.getDailyBatteryLevels().getLevels(),
+ generateTimestampDayOfWeekTexts(
+ mContext, batteryLevelData.getDailyBatteryLevels().getTimestamps(),
+ /* isAbbreviation= */ true),
+ BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS);
+ mHourlyViewModels = new ArrayList<>();
+ for (BatteryLevelData.PeriodBatteryLevelData hourlyBatteryLevelsPerDay :
+ batteryLevelData.getHourlyBatteryLevelsPerDay()) {
+ mHourlyViewModels.add(new BatteryChartViewModel(
+ hourlyBatteryLevelsPerDay.getLevels(),
+ generateTimestampHourTexts(
+ mContext, hourlyBatteryLevelsPerDay.getTimestamps()),
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+ }
+ refreshUi();
+ }
+
+ void setBatteryChartView(@NonNull final BatteryChartView dailyChartView,
+ @NonNull final BatteryChartView hourlyChartView) {
+ if (mDailyChartView != dailyChartView || mHourlyChartView != hourlyChartView) {
+ mHandler.post(() -> setBatteryChartViewInner(dailyChartView, hourlyChartView));
+ }
+ }
+
+ private void setBatteryChartViewInner(@NonNull final BatteryChartView dailyChartView,
+ @NonNull final BatteryChartView hourlyChartView) {
+ mDailyChartView = dailyChartView;
+ mDailyChartView.setOnSelectListener(trapezoidIndex -> {
+ if (mDailyChartIndex == trapezoidIndex) {
+ return;
+ }
+ Log.d(TAG, "onDailyChartSelect:" + trapezoidIndex);
+ mDailyChartIndex = trapezoidIndex;
+ mHourlyChartIndex = BatteryChartViewModel.SELECTED_INDEX_ALL;
+ refreshUi();
+ // TODO: Change to log daily data.
+ });
+ mHourlyChartView = hourlyChartView;
+ mHourlyChartView.setOnSelectListener(trapezoidIndex -> {
+ if (mHourlyChartIndex == trapezoidIndex) {
+ return;
+ }
+ Log.d(TAG, "onHourlyChartSelect:" + trapezoidIndex);
+ mHourlyChartIndex = trapezoidIndex;
+ refreshUi();
+ mMetricsFeatureProvider.action(
+ mPrefContext,
+ trapezoidIndex == BatteryChartViewModel.SELECTED_INDEX_ALL
+ ? SettingsEnums.ACTION_BATTERY_USAGE_SHOW_ALL
+ : SettingsEnums.ACTION_BATTERY_USAGE_TIME_SLOT);
+ });
+ refreshUi();
+ }
+
+ @VisibleForTesting
+ boolean refreshUi() {
+ if (mDailyChartView == null || mHourlyChartView == null) {
+ // Chart views are not initialized.
+ return false;
+ }
+ if (mDailyViewModel == null || mHourlyViewModels == null) {
+ // Fail to get battery level data, show an empty hourly chart view.
+ mDailyChartView.setVisibility(View.GONE);
+ mHourlyChartView.setVisibility(View.VISIBLE);
+ mHourlyChartView.setViewModel(null);
+ removeAndCacheAllPrefs();
+ addFooterPreferenceIfNeeded(false);
+ return false;
+ }
+ if (mBatteryUsageMap == null) {
+ // Battery usage data is not ready, wait for data ready to refresh UI.
+ return false;
+ }
+
+ if (isBatteryLevelDataInOneDay()) {
+ // Only 1 day data, hide the daily chart view.
+ mDailyChartView.setVisibility(View.GONE);
+ mDailyChartIndex = 0;
+ } else {
+ mDailyChartView.setVisibility(View.VISIBLE);
+ mDailyViewModel.setSelectedIndex(mDailyChartIndex);
+ mDailyChartView.setViewModel(mDailyViewModel);
+ }
+
+ if (mDailyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL) {
+ // Multiple days are selected, hide the hourly chart view.
+ mHourlyChartView.setVisibility(View.GONE);
+ } else {
+ mHourlyChartView.setVisibility(View.VISIBLE);
+ final BatteryChartViewModel hourlyViewModel = mHourlyViewModels.get(mDailyChartIndex);
+ hourlyViewModel.setSelectedIndex(mHourlyChartIndex);
+ mHourlyChartView.setViewModel(hourlyViewModel);
+ }
+
+ mHandler.post(() -> {
+ final long start = System.currentTimeMillis();
+ removeAndCacheAllPrefs();
+ addAllPreferences();
+ refreshCategoryTitle();
+ Log.d(TAG, String.format("refreshUi is finished in %d/ms",
+ (System.currentTimeMillis() - start)));
+ });
+ return true;
+ }
+
+ private void addAllPreferences() {
+ final BatteryDiffData batteryDiffData =
+ mBatteryUsageMap.get(mDailyChartIndex).get(mHourlyChartIndex);
+ addFooterPreferenceIfNeeded(batteryDiffData != null
+ && (!batteryDiffData.getAppDiffEntryList().isEmpty()
+ || !batteryDiffData.getSystemDiffEntryList().isEmpty()));
+ if (batteryDiffData == null) {
+ Log.w(TAG, "cannot find BatteryDiffEntry for daily_index: " + mDailyChartIndex
+ + " hourly_index: " + mHourlyChartIndex);
+ return;
+ }
+ // Adds app entries to the list if it is not empty.
+ if (!batteryDiffData.getAppDiffEntryList().isEmpty()) {
+ addPreferenceToScreen(batteryDiffData.getAppDiffEntryList());
+ }
+ // Adds the expabable divider if we have system entries data.
+ if (!batteryDiffData.getSystemDiffEntryList().isEmpty()) {
+ if (mExpandDividerPreference == null) {
+ mExpandDividerPreference = new ExpandDividerPreference(mPrefContext);
+ mExpandDividerPreference.setOnExpandListener(this);
+ mExpandDividerPreference.setIsExpanded(mIsExpanded);
+ }
+ mExpandDividerPreference.setOrder(
+ mAppListPrefGroup.getPreferenceCount());
+ mAppListPrefGroup.addPreference(mExpandDividerPreference);
+ }
+ refreshExpandUi();
+ }
+
+ @VisibleForTesting
+ void addPreferenceToScreen(List<BatteryDiffEntry> entries) {
+ if (mAppListPrefGroup == null || entries.isEmpty()) {
+ return;
+ }
+ int prefIndex = mAppListPrefGroup.getPreferenceCount();
+ for (BatteryDiffEntry entry : entries) {
+ boolean isAdded = false;
+ final String appLabel = entry.getAppLabel();
+ final Drawable appIcon = entry.getAppIcon();
+ if (TextUtils.isEmpty(appLabel) || appIcon == null) {
+ Log.w(TAG, "cannot find app resource for:" + entry.getPackageName());
+ continue;
+ }
+ final String prefKey = entry.mBatteryHistEntry.getKey();
+ PowerGaugePreference pref = mAppListPrefGroup.findPreference(prefKey);
+ if (pref != null) {
+ isAdded = true;
+ Log.w(TAG, "preference should be removed for:" + entry.getPackageName());
+ } else {
+ pref = (PowerGaugePreference) mPreferenceCache.get(prefKey);
+ }
+ // Creates new innstance if cached preference is not found.
+ if (pref == null) {
+ pref = new PowerGaugePreference(mPrefContext);
+ pref.setKey(prefKey);
+ mPreferenceCache.put(prefKey, pref);
+ }
+ pref.setIcon(appIcon);
+ pref.setTitle(appLabel);
+ pref.setOrder(prefIndex);
+ pref.setPercent(entry.getPercentOfTotal());
+ pref.setSingleLineTitle(true);
+ // Sets the BatteryDiffEntry to preference for launching detailed page.
+ pref.setBatteryDiffEntry(entry);
+ pref.setEnabled(entry.validForRestriction());
+ setPreferenceSummary(pref, entry);
+ if (!isAdded) {
+ mAppListPrefGroup.addPreference(pref);
+ }
+ prefIndex++;
+ }
+ }
+
+ private void removeAndCacheAllPrefs() {
+ if (mAppListPrefGroup == null
+ || mAppListPrefGroup.getPreferenceCount() == 0) {
+ return;
+ }
+ final int prefsCount = mAppListPrefGroup.getPreferenceCount();
+ for (int index = 0; index < prefsCount; index++) {
+ final Preference pref = mAppListPrefGroup.getPreference(index);
+ if (TextUtils.isEmpty(pref.getKey())) {
+ continue;
+ }
+ mPreferenceCache.put(pref.getKey(), pref);
+ }
+ mAppListPrefGroup.removeAll();
+ }
+
+ private void refreshExpandUi() {
+ final List<BatteryDiffEntry> systemEntries = mBatteryUsageMap.get(mDailyChartIndex).get(
+ mHourlyChartIndex).getSystemDiffEntryList();
+ if (mIsExpanded) {
+ addPreferenceToScreen(systemEntries);
+ } else {
+ // Removes and recycles all system entries to hide all of them.
+ for (BatteryDiffEntry entry : systemEntries) {
+ final String prefKey = entry.mBatteryHistEntry.getKey();
+ final Preference pref = mAppListPrefGroup.findPreference(prefKey);
+ if (pref != null) {
+ mAppListPrefGroup.removePreference(pref);
+ mPreferenceCache.put(pref.getKey(), pref);
+ }
+ }
+ }
+ }
+
+ @VisibleForTesting
+ void refreshCategoryTitle() {
+ final String slotInformation = getSlotInformation();
+ Log.d(TAG, String.format("refreshCategoryTitle:%s", slotInformation));
+ if (mAppListPrefGroup != null) {
+ mAppListPrefGroup.setTitle(
+ getSlotInformation(/*isApp=*/ true, slotInformation));
+ }
+ if (mExpandDividerPreference != null) {
+ mExpandDividerPreference.setTitle(
+ getSlotInformation(/*isApp=*/ false, slotInformation));
+ }
+ }
+
+ private String getSlotInformation(boolean isApp, String slotInformation) {
+ // TODO: Updates the right slot information from daily and hourly chart selection.
+ // Null means we show all information without a specific time slot.
+ if (slotInformation == null) {
+ return isApp
+ ? mPrefContext.getString(R.string.battery_app_usage)
+ : mPrefContext.getString(R.string.battery_system_usage);
+ } else {
+ return isApp
+ ? mPrefContext.getString(R.string.battery_app_usage_for, slotInformation)
+ : mPrefContext.getString(R.string.battery_system_usage_for, slotInformation);
+ }
+ }
+
+ @VisibleForTesting
+ String getSlotInformation() {
+ if (mDailyTimestampFullTexts == null || mDailyViewModel == null
+ || mHourlyViewModels == null) {
+ // No data
+ return null;
+ }
+ if (isAllSelected()) {
+ return null;
+ }
+
+ final String selectedDayText = mDailyTimestampFullTexts.get(mDailyChartIndex);
+ if (mHourlyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL) {
+ return selectedDayText;
+ }
+
+ final String fromHourText = mHourlyViewModels.get(mDailyChartIndex).texts().get(
+ mHourlyChartIndex);
+ final String toHourText = mHourlyViewModels.get(mDailyChartIndex).texts().get(
+ mHourlyChartIndex + 1);
+ final String selectedHourText =
+ String.format("%s%s%s", fromHourText, mIs24HourFormat ? "-" : " - ", toHourText);
+ if (isBatteryLevelDataInOneDay()) {
+ return selectedHourText;
+ }
+
+ return String.format("%s %s", selectedDayText, selectedHourText);
+ }
+
+ @VisibleForTesting
+ void setPreferenceSummary(
+ PowerGaugePreference preference, BatteryDiffEntry entry) {
+ final long foregroundUsageTimeInMs = entry.mForegroundUsageTimeInMs;
+ final long backgroundUsageTimeInMs = entry.mBackgroundUsageTimeInMs;
+ final long totalUsageTimeInMs = foregroundUsageTimeInMs + backgroundUsageTimeInMs;
+ // Checks whether the package is allowed to show summary or not.
+ if (!isValidToShowSummary(entry.getPackageName())) {
+ preference.setSummary(null);
+ return;
+ }
+ String usageTimeSummary = null;
+ // Not shows summary for some system components without usage time.
+ if (totalUsageTimeInMs == 0) {
+ preference.setSummary(null);
+ // Shows background summary only if we don't have foreground usage time.
+ } else if (foregroundUsageTimeInMs == 0 && backgroundUsageTimeInMs != 0) {
+ usageTimeSummary = buildUsageTimeInfo(backgroundUsageTimeInMs, true);
+ // Shows total usage summary only if total usage time is small.
+ } else if (totalUsageTimeInMs < DateUtils.MINUTE_IN_MILLIS) {
+ usageTimeSummary = buildUsageTimeInfo(totalUsageTimeInMs, false);
+ } else {
+ usageTimeSummary = buildUsageTimeInfo(totalUsageTimeInMs, false);
+ // Shows background usage time if it is larger than a minute.
+ if (backgroundUsageTimeInMs > 0) {
+ usageTimeSummary +=
+ "\n" + buildUsageTimeInfo(backgroundUsageTimeInMs, true);
+ }
+ }
+ preference.setSummary(usageTimeSummary);
+ }
+
+ private String buildUsageTimeInfo(long usageTimeInMs, boolean isBackground) {
+ if (usageTimeInMs < DateUtils.MINUTE_IN_MILLIS) {
+ return mPrefContext.getString(
+ isBackground
+ ? R.string.battery_usage_background_less_than_one_minute
+ : R.string.battery_usage_total_less_than_one_minute);
+ }
+ final CharSequence timeSequence =
+ StringUtil.formatElapsedTime(mPrefContext, usageTimeInMs,
+ /*withSeconds=*/ false, /*collapseTimeUnit=*/ false);
+ final int resourceId =
+ isBackground
+ ? R.string.battery_usage_for_background_time
+ : R.string.battery_usage_for_total_time;
+ return mPrefContext.getString(resourceId, timeSequence);
+ }
+
+ @VisibleForTesting
+ boolean isValidToShowSummary(String packageName) {
+ return !DataProcessor.contains(packageName, mNotAllowShowSummaryPackages);
+ }
+
+ private void addFooterPreferenceIfNeeded(boolean containAppItems) {
+ if (mIsFooterPrefAdded || mFooterPreference == null) {
+ return;
+ }
+ mIsFooterPrefAdded = true;
+ mFooterPreference.setTitle(mPrefContext.getString(
+ containAppItems
+ ? R.string.battery_usage_screen_footer
+ : R.string.battery_usage_screen_footer_empty));
+ mHandler.post(() -> mPreferenceScreen.addPreference(mFooterPreference));
+ }
+
+ private boolean isBatteryLevelDataInOneDay() {
+ return mHourlyViewModels != null && mHourlyViewModels.size() == 1;
+ }
+
+ private boolean isAllSelected() {
+ return (isBatteryLevelDataInOneDay()
+ || mDailyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL)
+ && mHourlyChartIndex == BatteryChartViewModel.SELECTED_INDEX_ALL;
+ }
+
+ private static List<String> generateTimestampDayOfWeekTexts(@NonNull final Context context,
+ @NonNull final List<Long> timestamps, final boolean isAbbreviation) {
+ final ArrayList<String> texts = new ArrayList<>();
+ for (Long timestamp : timestamps) {
+ texts.add(ConvertUtils.utcToLocalTimeDayOfWeek(context, timestamp, isAbbreviation));
+ }
+ return texts;
+ }
+
+ private static List<String> generateTimestampHourTexts(
+ @NonNull final Context context, @NonNull final List<Long> timestamps) {
+ final boolean is24HourFormat = DateFormat.is24HourFormat(context);
+ final ArrayList<String> texts = new ArrayList<>();
+ for (Long timestamp : timestamps) {
+ texts.add(ConvertUtils.utcToLocalTimeHour(context, timestamp, is24HourFormat));
+ }
+ return texts;
+ }
+
+ /** Used for {@link AppBatteryPreferenceController}. */
+ public static List<BatteryDiffEntry> getAppBatteryUsageData(Context context) {
+ final long start = System.currentTimeMillis();
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
+ FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context)
+ .getBatteryHistorySinceLastFullCharge(context);
+ if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
+ return null;
+ }
+ Log.d(TAG, String.format("getBatterySinceLastFullChargeUsageData() size=%d time=%d/ms",
+ batteryHistoryMap.size(), (System.currentTimeMillis() - start)));
+
+ final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageData =
+ DataProcessor.getBatteryUsageData(context, batteryHistoryMap);
+ return batteryUsageData == null
+ ? null
+ : batteryUsageData
+ .get(BatteryChartViewModel.SELECTED_INDEX_ALL)
+ .get(BatteryChartViewModel.SELECTED_INDEX_ALL)
+ .getAppDiffEntryList();
+ }
+
+ /** Used for {@link AppBatteryPreferenceController}. */
+ public static BatteryDiffEntry getAppBatteryUsageData(
+ Context context, String packageName, int userId) {
+ if (packageName == null) {
+ return null;
+ }
+ final List<BatteryDiffEntry> entries = getAppBatteryUsageData(context);
+ if (entries == null) {
+ return null;
+ }
+ for (BatteryDiffEntry entry : entries) {
+ final BatteryHistEntry batteryHistEntry = entry.mBatteryHistEntry;
+ if (batteryHistEntry != null
+ && batteryHistEntry.mConsumerType == ConvertUtils.CONSUMER_TYPE_UID_BATTERY
+ && batteryHistEntry.mUserId == userId
+ && packageName.equals(entry.getPackageName())) {
+ return entry;
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
new file mode 100644
index 0000000..e668b37
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartView.java
@@ -0,0 +1,679 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.fuelgauge.batteryusage;
+
+import static com.android.settings.Utils.formatPercentage;
+
+import static java.lang.Math.round;
+import static java.util.Objects.requireNonNull;
+
+import android.accessibilityservice.AccessibilityServiceInfo;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.CornerPathEffect;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.Rect;
+import android.os.Handler;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.HapticFeedbackConstants;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.accessibility.AccessibilityManager;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.VisibleForTesting;
+import androidx.appcompat.widget.AppCompatImageView;
+
+import com.android.settings.R;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.Utils;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+/** A widget component to draw chart graph. */
+public class BatteryChartView extends AppCompatImageView implements View.OnClickListener,
+ AccessibilityManager.AccessibilityStateChangeListener {
+ private static final String TAG = "BatteryChartView";
+ private static final List<String> ACCESSIBILITY_SERVICE_NAMES =
+ Arrays.asList("SwitchAccessService", "TalkBackService", "JustSpeakService");
+
+ private static final int DIVIDER_COLOR = Color.parseColor("#CDCCC5");
+ private static final long UPDATE_STATE_DELAYED_TIME = 500L;
+
+ /** A callback listener for selected group index is updated. */
+ public interface OnSelectListener {
+ /** The callback function for selected group index is updated. */
+ void onSelect(int trapezoidIndex);
+ }
+
+ private BatteryChartViewModel mViewModel;
+
+ private int mDividerWidth;
+ private int mDividerHeight;
+ private float mTrapezoidVOffset;
+ private float mTrapezoidHOffset;
+ private boolean mIsSlotsClickabled;
+ private String[] mPercentages = getPercentages();
+
+ @VisibleForTesting
+ int mHoveredIndex = BatteryChartViewModel.SELECTED_INDEX_INVALID;
+
+ // Colors for drawing the trapezoid shape and dividers.
+ private int mTrapezoidColor;
+ private int mTrapezoidSolidColor;
+ private int mTrapezoidHoverColor;
+ // For drawing the percentage information.
+ private int mTextPadding;
+ private final Rect mIndent = new Rect();
+ private final Rect[] mPercentageBounds =
+ new Rect[]{new Rect(), new Rect(), new Rect()};
+ // For drawing the axis label information.
+ private final List<Rect> mAxisLabelsBounds = new ArrayList<>();
+
+
+ @VisibleForTesting
+ Handler mHandler = new Handler();
+ @VisibleForTesting
+ final Runnable mUpdateClickableStateRun = () -> updateClickableState();
+
+ private Paint mTextPaint;
+ private Paint mDividerPaint;
+ private Paint mTrapezoidPaint;
+
+ @VisibleForTesting
+ Paint mTrapezoidCurvePaint = null;
+ @VisibleForTesting
+ TrapezoidSlot[] mTrapezoidSlots;
+ // Records the location to calculate selected index.
+ @VisibleForTesting
+ float mTouchUpEventX = Float.MIN_VALUE;
+ private BatteryChartView.OnSelectListener mOnSelectListener;
+
+ public BatteryChartView(Context context) {
+ super(context, null);
+ }
+
+ public BatteryChartView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initializeColors(context);
+ // Registers the click event listener.
+ setOnClickListener(this);
+ setClickable(false);
+ requestLayout();
+ }
+
+ /** Sets the data model of this view. */
+ public void setViewModel(BatteryChartViewModel viewModel) {
+ if (viewModel == null) {
+ mViewModel = null;
+ invalidate();
+ return;
+ }
+
+ Log.d(TAG, String.format("setViewModel(): size: %d, selectedIndex: %d.",
+ viewModel.size(), viewModel.selectedIndex()));
+ mViewModel = viewModel;
+ initializeAxisLabelsBounds();
+ initializeTrapezoidSlots(viewModel.size() - 1);
+ setClickable(hasAnyValidTrapezoid(viewModel));
+ requestLayout();
+ }
+
+ /** Sets the callback to monitor the selected group index. */
+ public void setOnSelectListener(BatteryChartView.OnSelectListener listener) {
+ mOnSelectListener = listener;
+ }
+
+ /** Sets the companion {@link TextView} for percentage information. */
+ public void setCompanionTextView(TextView textView) {
+ if (textView != null) {
+ // Pre-draws the view first to load style atttributions into paint.
+ textView.draw(new Canvas());
+ mTextPaint = textView.getPaint();
+ } else {
+ mTextPaint = null;
+ }
+ requestLayout();
+ }
+
+ @Override
+ public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ // Measures text bounds and updates indent configuration.
+ if (mTextPaint != null) {
+ mTextPaint.setTextAlign(Paint.Align.LEFT);
+ for (int index = 0; index < mPercentages.length; index++) {
+ mTextPaint.getTextBounds(
+ mPercentages[index], 0, mPercentages[index].length(),
+ mPercentageBounds[index]);
+ }
+ // Updates the indent configurations.
+ mIndent.top = mPercentageBounds[0].height();
+ mIndent.right = mPercentageBounds[0].width() + mTextPadding;
+
+ if (mViewModel != null) {
+ int maxTop = 0;
+ for (int index = 0; index < mViewModel.size(); index++) {
+ final String text = mViewModel.texts().get(index);
+ mTextPaint.getTextBounds(text, 0, text.length(), mAxisLabelsBounds.get(index));
+ maxTop = Math.max(maxTop, -mAxisLabelsBounds.get(index).top);
+ }
+ mIndent.bottom = maxTop + round(mTextPadding * 2f);
+ }
+ Log.d(TAG, "setIndent:" + mPercentageBounds[0]);
+ } else {
+ mIndent.set(0, 0, 0, 0);
+ }
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ super.draw(canvas);
+ // Before mLevels initialized, the count of trapezoids is unknown. Only draws the
+ // horizontal percentages and dividers.
+ drawHorizontalDividers(canvas);
+ if (mViewModel == null) {
+ return;
+ }
+ drawVerticalDividers(canvas);
+ drawTrapezoids(canvas);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ // Caches the location to calculate selected trapezoid index.
+ final int action = event.getAction();
+ switch (action) {
+ case MotionEvent.ACTION_UP:
+ mTouchUpEventX = event.getX();
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ mTouchUpEventX = Float.MIN_VALUE; // reset
+ break;
+ }
+ return super.onTouchEvent(event);
+ }
+
+ @Override
+ public boolean onHoverEvent(MotionEvent event) {
+ final int action = event.getAction();
+ switch (action) {
+ case MotionEvent.ACTION_HOVER_ENTER:
+ case MotionEvent.ACTION_HOVER_MOVE:
+ final int trapezoidIndex = getTrapezoidIndex(event.getX());
+ if (mHoveredIndex != trapezoidIndex) {
+ mHoveredIndex = trapezoidIndex;
+ invalidate();
+ }
+ break;
+ }
+ return super.onHoverEvent(event);
+ }
+
+ @Override
+ public void onHoverChanged(boolean hovered) {
+ super.onHoverChanged(hovered);
+ if (!hovered) {
+ mHoveredIndex = BatteryChartViewModel.SELECTED_INDEX_INVALID; // reset
+ invalidate();
+ }
+ }
+
+ @Override
+ public void onClick(View view) {
+ if (mTouchUpEventX == Float.MIN_VALUE) {
+ Log.w(TAG, "invalid motion event for onClick() callback");
+ return;
+ }
+ final int trapezoidIndex = getTrapezoidIndex(mTouchUpEventX);
+ // Ignores the click event if the level is zero.
+ if (trapezoidIndex == BatteryChartViewModel.SELECTED_INDEX_INVALID
+ || !isValidToDraw(mViewModel, trapezoidIndex)) {
+ return;
+ }
+ if (mOnSelectListener != null) {
+ // Selects all if users click the same trapezoid item two times.
+ mOnSelectListener.onSelect(
+ trapezoidIndex == mViewModel.selectedIndex()
+ ? BatteryChartViewModel.SELECTED_INDEX_ALL : trapezoidIndex);
+ }
+ view.performHapticFeedback(HapticFeedbackConstants.CONTEXT_CLICK);
+ }
+
+ @Override
+ public void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ updateClickableState();
+ mContext.getSystemService(AccessibilityManager.class)
+ .addAccessibilityStateChangeListener(/*listener=*/ this);
+ }
+
+ @Override
+ public void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ mContext.getSystemService(AccessibilityManager.class)
+ .removeAccessibilityStateChangeListener(/*listener=*/ this);
+ mHandler.removeCallbacks(mUpdateClickableStateRun);
+ }
+
+ @Override
+ public void onAccessibilityStateChanged(boolean enabled) {
+ Log.d(TAG, "onAccessibilityStateChanged:" + enabled);
+ mHandler.removeCallbacks(mUpdateClickableStateRun);
+ // We should delay it a while since accessibility manager will spend
+ // some times to bind with new enabled accessibility services.
+ mHandler.postDelayed(
+ mUpdateClickableStateRun, UPDATE_STATE_DELAYED_TIME);
+ }
+
+ private void updateClickableState() {
+ final Context context = mContext;
+ mIsSlotsClickabled =
+ FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context)
+ .isChartGraphSlotsEnabled(context)
+ && !isAccessibilityEnabled(context);
+ Log.d(TAG, "isChartGraphSlotsEnabled:" + mIsSlotsClickabled);
+ setClickable(isClickable());
+ // Initializes the trapezoid curve paint for non-clickable case.
+ if (!mIsSlotsClickabled && mTrapezoidCurvePaint == null) {
+ mTrapezoidCurvePaint = new Paint();
+ mTrapezoidCurvePaint.setAntiAlias(true);
+ mTrapezoidCurvePaint.setColor(mTrapezoidSolidColor);
+ mTrapezoidCurvePaint.setStyle(Paint.Style.STROKE);
+ mTrapezoidCurvePaint.setStrokeWidth(mDividerWidth * 2);
+ } else if (mIsSlotsClickabled) {
+ mTrapezoidCurvePaint = null;
+ // Sets view model again to force update the click state.
+ setViewModel(mViewModel);
+ }
+ invalidate();
+ }
+
+ @Override
+ public void setClickable(boolean clickable) {
+ super.setClickable(mIsSlotsClickabled && clickable);
+ }
+
+ @VisibleForTesting
+ void setClickableForce(boolean clickable) {
+ super.setClickable(clickable);
+ }
+
+ private void initializeTrapezoidSlots(int count) {
+ mTrapezoidSlots = new TrapezoidSlot[count];
+ for (int index = 0; index < mTrapezoidSlots.length; index++) {
+ mTrapezoidSlots[index] = new TrapezoidSlot();
+ }
+ }
+
+ private void initializeColors(Context context) {
+ setBackgroundColor(Color.TRANSPARENT);
+ mTrapezoidSolidColor = Utils.getColorAccentDefaultColor(context);
+ mTrapezoidColor = Utils.getDisabled(context, mTrapezoidSolidColor);
+ mTrapezoidHoverColor = Utils.getColorAttrDefaultColor(context,
+ com.android.internal.R.attr.colorAccentSecondaryVariant);
+ // Initializes the divider line paint.
+ final Resources resources = getContext().getResources();
+ mDividerWidth = resources.getDimensionPixelSize(R.dimen.chartview_divider_width);
+ mDividerHeight = resources.getDimensionPixelSize(R.dimen.chartview_divider_height);
+ mDividerPaint = new Paint();
+ mDividerPaint.setAntiAlias(true);
+ mDividerPaint.setColor(DIVIDER_COLOR);
+ mDividerPaint.setStyle(Paint.Style.STROKE);
+ mDividerPaint.setStrokeWidth(mDividerWidth);
+ Log.i(TAG, "mDividerWidth:" + mDividerWidth);
+ Log.i(TAG, "mDividerHeight:" + mDividerHeight);
+ // Initializes the trapezoid paint.
+ mTrapezoidHOffset = resources.getDimension(R.dimen.chartview_trapezoid_margin_start);
+ mTrapezoidVOffset = resources.getDimension(R.dimen.chartview_trapezoid_margin_bottom);
+ mTrapezoidPaint = new Paint();
+ mTrapezoidPaint.setAntiAlias(true);
+ mTrapezoidPaint.setColor(mTrapezoidSolidColor);
+ mTrapezoidPaint.setStyle(Paint.Style.FILL);
+ mTrapezoidPaint.setPathEffect(
+ new CornerPathEffect(
+ resources.getDimensionPixelSize(R.dimen.chartview_trapezoid_radius)));
+ // Initializes for drawing text information.
+ mTextPadding = resources.getDimensionPixelSize(R.dimen.chartview_text_padding);
+ }
+
+ private void drawHorizontalDividers(Canvas canvas) {
+ final int width = getWidth() - mIndent.right;
+ final int height = getHeight() - mIndent.top - mIndent.bottom;
+ // Draws the top divider line for 100% curve.
+ float offsetY = mIndent.top + mDividerWidth * .5f;
+ canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
+ drawPercentage(canvas, /*index=*/ 0, offsetY);
+
+ // Draws the center divider line for 50% curve.
+ final float availableSpace =
+ height - mDividerWidth * 2 - mTrapezoidVOffset - mDividerHeight;
+ offsetY = mIndent.top + mDividerWidth + availableSpace * .5f;
+ canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
+ drawPercentage(canvas, /*index=*/ 1, offsetY);
+
+ // Draws the bottom divider line for 0% curve.
+ offsetY = mIndent.top + (height - mDividerHeight - mDividerWidth * .5f);
+ canvas.drawLine(0, offsetY, width, offsetY, mDividerPaint);
+ drawPercentage(canvas, /*index=*/ 2, offsetY);
+ }
+
+ private void drawPercentage(Canvas canvas, int index, float offsetY) {
+ if (mTextPaint != null) {
+ mTextPaint.setTextAlign(Paint.Align.RIGHT);
+ canvas.drawText(
+ mPercentages[index],
+ getWidth(),
+ offsetY + mPercentageBounds[index].height() * .5f,
+ mTextPaint);
+ }
+ }
+
+ private void drawVerticalDividers(Canvas canvas) {
+ final int width = getWidth() - mIndent.right;
+ final int dividerCount = mTrapezoidSlots.length + 1;
+ final float dividerSpace = dividerCount * mDividerWidth;
+ final float unitWidth = (width - dividerSpace) / (float) mTrapezoidSlots.length;
+ final float bottomY = getHeight() - mIndent.bottom;
+ final float startY = bottomY - mDividerHeight;
+ final float trapezoidSlotOffset = mTrapezoidHOffset + mDividerWidth * .5f;
+ // Draws each vertical dividers.
+ float startX = mDividerWidth * .5f;
+ for (int index = 0; index < dividerCount; index++) {
+ canvas.drawLine(startX, startY, startX, bottomY, mDividerPaint);
+ final float nextX = startX + mDividerWidth + unitWidth;
+ // Updates the trapezoid slots for drawing.
+ if (index < mTrapezoidSlots.length) {
+ mTrapezoidSlots[index].mLeft = round(startX + trapezoidSlotOffset);
+ mTrapezoidSlots[index].mRight = round(nextX - trapezoidSlotOffset);
+ }
+ startX = nextX;
+ }
+ // Draws the axis label slot information.
+ if (mViewModel != null) {
+ final float baselineY = getHeight() - mTextPadding * 1.5f;
+ Rect[] axisLabelDisplayAreas;
+ switch (mViewModel.axisLabelPosition()) {
+ case CENTER_OF_TRAPEZOIDS:
+ axisLabelDisplayAreas = getAxisLabelDisplayAreas(
+ /* size= */ mViewModel.size() - 1,
+ /* baselineX= */ mDividerWidth + unitWidth * .5f,
+ /* offsetX= */ mDividerWidth + unitWidth,
+ baselineY,
+ /* shiftFirstAndLast= */ false);
+ break;
+ case BETWEEN_TRAPEZOIDS:
+ default:
+ axisLabelDisplayAreas = getAxisLabelDisplayAreas(
+ /* size= */ mViewModel.size(),
+ /* baselineX= */ mDividerWidth * .5f,
+ /* offsetX= */ mDividerWidth + unitWidth,
+ baselineY,
+ /* shiftFirstAndLast= */ true);
+ break;
+ }
+ drawAxisLabels(canvas, axisLabelDisplayAreas, baselineY);
+ }
+ }
+
+ /** Gets all the axis label texts displaying area positions if they are shown. */
+ private Rect[] getAxisLabelDisplayAreas(final int size, final float baselineX,
+ final float offsetX, final float baselineY, final boolean shiftFirstAndLast) {
+ final Rect[] result = new Rect[size];
+ for (int index = 0; index < result.length; index++) {
+ final float width = mAxisLabelsBounds.get(index).width();
+ float middle = baselineX + index * offsetX;
+ if (shiftFirstAndLast) {
+ if (index == 0) {
+ middle += width * .5f;
+ }
+ if (index == size - 1) {
+ middle -= width * .5f;
+ }
+ }
+ final float left = middle - width * .5f;
+ final float right = left + width;
+ final float top = baselineY + mAxisLabelsBounds.get(index).top;
+ final float bottom = top + mAxisLabelsBounds.get(index).height();
+ result[index] = new Rect(round(left), round(top), round(right), round(bottom));
+ }
+ return result;
+ }
+
+ private void drawAxisLabels(Canvas canvas, final Rect[] displayAreas, final float baselineY) {
+ final int lastIndex = displayAreas.length - 1;
+ // Suppose first and last labels are always able to draw.
+ drawAxisLabelText(canvas, 0, displayAreas[0], baselineY);
+ drawAxisLabelText(canvas, lastIndex, displayAreas[lastIndex], baselineY);
+ drawAxisLabelsBetweenStartIndexAndEndIndex(canvas, displayAreas, 0, lastIndex, baselineY);
+ }
+
+ /**
+ * Recursively draws axis labels between the start index and the end index. If the inner number
+ * can be exactly divided into 2 parts, check and draw the middle index label and then
+ * recursively draw the 2 parts. Otherwise, divide into 3 parts. Check and draw the middle two
+ * labels and then recursively draw the 3 parts. If there are any overlaps, skip drawing and go
+ * back to the uplevel of the recursion.
+ */
+ private void drawAxisLabelsBetweenStartIndexAndEndIndex(Canvas canvas,
+ final Rect[] displayAreas, final int startIndex, final int endIndex,
+ final float baselineY) {
+ if (endIndex - startIndex <= 1) {
+ return;
+ }
+ if ((endIndex - startIndex) % 2 == 0) {
+ int middleIndex = (startIndex + endIndex) / 2;
+ if (hasOverlap(displayAreas, startIndex, middleIndex)
+ || hasOverlap(displayAreas, middleIndex, endIndex)) {
+ return;
+ }
+ drawAxisLabelText(canvas, middleIndex, displayAreas[middleIndex], baselineY);
+ drawAxisLabelsBetweenStartIndexAndEndIndex(
+ canvas, displayAreas, startIndex, middleIndex, baselineY);
+ drawAxisLabelsBetweenStartIndexAndEndIndex(
+ canvas, displayAreas, middleIndex, endIndex, baselineY);
+ } else {
+ int middleIndex1 = startIndex + round((endIndex - startIndex) / 3f);
+ int middleIndex2 = startIndex + round((endIndex - startIndex) * 2 / 3f);
+ if (hasOverlap(displayAreas, startIndex, middleIndex1)
+ || hasOverlap(displayAreas, middleIndex1, middleIndex2)
+ || hasOverlap(displayAreas, middleIndex2, endIndex)) {
+ return;
+ }
+ drawAxisLabelText(canvas, middleIndex1, displayAreas[middleIndex1], baselineY);
+ drawAxisLabelText(canvas, middleIndex2, displayAreas[middleIndex2], baselineY);
+ drawAxisLabelsBetweenStartIndexAndEndIndex(
+ canvas, displayAreas, startIndex, middleIndex1, baselineY);
+ drawAxisLabelsBetweenStartIndexAndEndIndex(
+ canvas, displayAreas, middleIndex1, middleIndex2, baselineY);
+ drawAxisLabelsBetweenStartIndexAndEndIndex(
+ canvas, displayAreas, middleIndex2, endIndex, baselineY);
+ }
+ }
+
+ private boolean hasOverlap(
+ final Rect[] displayAreas, final int leftIndex, final int rightIndex) {
+ return displayAreas[leftIndex].right + mTextPadding * 2f > displayAreas[rightIndex].left;
+ }
+
+ private void drawAxisLabelText(
+ Canvas canvas, final int index, final Rect displayArea, final float baselineY) {
+ mTextPaint.setTextAlign(Paint.Align.CENTER);
+ canvas.drawText(
+ mViewModel.texts().get(index),
+ displayArea.centerX(),
+ baselineY,
+ mTextPaint);
+ }
+
+ private void drawTrapezoids(Canvas canvas) {
+ // Ignores invalid trapezoid data.
+ if (mViewModel == null) {
+ return;
+ }
+ final float trapezoidBottom =
+ getHeight() - mIndent.bottom - mDividerHeight - mDividerWidth
+ - mTrapezoidVOffset;
+ final float availableSpace =
+ trapezoidBottom - mDividerWidth * .5f - mIndent.top - mTrapezoidVOffset;
+ final float unitHeight = availableSpace / 100f;
+ // Draws all trapezoid shapes into the canvas.
+ final Path trapezoidPath = new Path();
+ Path trapezoidCurvePath = null;
+ for (int index = 0; index < mTrapezoidSlots.length; index++) {
+ // Not draws the trapezoid for corner or not initialization cases.
+ if (!isValidToDraw(mViewModel, index)) {
+ if (mTrapezoidCurvePaint != null && trapezoidCurvePath != null) {
+ canvas.drawPath(trapezoidCurvePath, mTrapezoidCurvePaint);
+ trapezoidCurvePath = null;
+ }
+ continue;
+ }
+ // Configures the trapezoid paint color.
+ final int trapezoidColor = mIsSlotsClickabled && (mViewModel.selectedIndex() == index
+ || mViewModel.selectedIndex() == BatteryChartViewModel.SELECTED_INDEX_ALL)
+ ? mTrapezoidSolidColor : mTrapezoidColor;
+ final boolean isHoverState =
+ mIsSlotsClickabled && mHoveredIndex == index
+ && isValidToDraw(mViewModel, mHoveredIndex);
+ mTrapezoidPaint.setColor(isHoverState ? mTrapezoidHoverColor : trapezoidColor);
+
+ final float leftTop = round(
+ trapezoidBottom - requireNonNull(mViewModel.levels().get(index)) * unitHeight);
+ final float rightTop = round(trapezoidBottom
+ - requireNonNull(mViewModel.levels().get(index + 1)) * unitHeight);
+ trapezoidPath.reset();
+ trapezoidPath.moveTo(mTrapezoidSlots[index].mLeft, trapezoidBottom);
+ trapezoidPath.lineTo(mTrapezoidSlots[index].mLeft, leftTop);
+ trapezoidPath.lineTo(mTrapezoidSlots[index].mRight, rightTop);
+ trapezoidPath.lineTo(mTrapezoidSlots[index].mRight, trapezoidBottom);
+ // A tricky way to make the trapezoid shape drawing the rounded corner.
+ trapezoidPath.lineTo(mTrapezoidSlots[index].mLeft, trapezoidBottom);
+ trapezoidPath.lineTo(mTrapezoidSlots[index].mLeft, leftTop);
+ // Draws the trapezoid shape into canvas.
+ canvas.drawPath(trapezoidPath, mTrapezoidPaint);
+
+ // Generates path for non-clickable trapezoid curve.
+ if (mTrapezoidCurvePaint != null) {
+ if (trapezoidCurvePath == null) {
+ trapezoidCurvePath = new Path();
+ trapezoidCurvePath.moveTo(mTrapezoidSlots[index].mLeft, leftTop);
+ } else {
+ trapezoidCurvePath.lineTo(mTrapezoidSlots[index].mLeft, leftTop);
+ }
+ trapezoidCurvePath.lineTo(mTrapezoidSlots[index].mRight, rightTop);
+ }
+ }
+ // Draws the trapezoid curve for non-clickable case.
+ if (mTrapezoidCurvePaint != null && trapezoidCurvePath != null) {
+ canvas.drawPath(trapezoidCurvePath, mTrapezoidCurvePaint);
+ trapezoidCurvePath = null;
+ }
+ }
+
+ // Searches the corresponding trapezoid index from x location.
+ private int getTrapezoidIndex(float x) {
+ for (int index = 0; index < mTrapezoidSlots.length; index++) {
+ final TrapezoidSlot slot = mTrapezoidSlots[index];
+ if (x >= slot.mLeft - mTrapezoidHOffset
+ && x <= slot.mRight + mTrapezoidHOffset) {
+ return index;
+ }
+ }
+ return BatteryChartViewModel.SELECTED_INDEX_INVALID;
+ }
+
+ private void initializeAxisLabelsBounds() {
+ mAxisLabelsBounds.clear();
+ for (int i = 0; i < mViewModel.size(); i++) {
+ mAxisLabelsBounds.add(new Rect());
+ }
+ }
+
+ private static boolean isTrapezoidValid(
+ @NonNull BatteryChartViewModel viewModel, int trapezoidIndex) {
+ return viewModel.levels().get(trapezoidIndex) != null
+ && viewModel.levels().get(trapezoidIndex + 1) != null;
+ }
+
+ private static boolean isValidToDraw(BatteryChartViewModel viewModel, int trapezoidIndex) {
+ return viewModel != null
+ && trapezoidIndex >= 0
+ && trapezoidIndex < viewModel.size() - 1
+ && isTrapezoidValid(viewModel, trapezoidIndex);
+ }
+
+ private static boolean hasAnyValidTrapezoid(@NonNull BatteryChartViewModel viewModel) {
+ // Sets the chart is clickable if there is at least one valid item in it.
+ for (int trapezoidIndex = 0; trapezoidIndex < viewModel.size() - 1; trapezoidIndex++) {
+ if (isTrapezoidValid(viewModel, trapezoidIndex)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static String[] getPercentages() {
+ return new String[]{
+ formatPercentage(/*percentage=*/ 100, /*round=*/ true),
+ formatPercentage(/*percentage=*/ 50, /*round=*/ true),
+ formatPercentage(/*percentage=*/ 0, /*round=*/ true)};
+ }
+
+ @VisibleForTesting
+ static boolean isAccessibilityEnabled(Context context) {
+ final AccessibilityManager accessibilityManager =
+ context.getSystemService(AccessibilityManager.class);
+ if (!accessibilityManager.isEnabled()) {
+ return false;
+ }
+ final List<AccessibilityServiceInfo> serviceInfoList =
+ accessibilityManager.getEnabledAccessibilityServiceList(
+ AccessibilityServiceInfo.FEEDBACK_SPOKEN
+ | AccessibilityServiceInfo.FEEDBACK_GENERIC);
+ for (AccessibilityServiceInfo info : serviceInfoList) {
+ for (String serviceName : ACCESSIBILITY_SERVICE_NAMES) {
+ final String serviceId = info.getId();
+ if (serviceId != null && serviceId.contains(serviceName)) {
+ Log.d(TAG, "acccessibilityEnabled:" + serviceId);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ // A container class for each trapezoid left and right location.
+ @VisibleForTesting
+ static final class TrapezoidSlot {
+ public float mLeft;
+ public float mRight;
+
+ @Override
+ public String toString() {
+ return String.format(Locale.US, "TrapezoidSlot[%f,%f]", mLeft, mRight);
+ }
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java
new file mode 100644
index 0000000..ac01bfd
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge.batteryusage;
+
+import androidx.annotation.NonNull;
+import androidx.core.util.Preconditions;
+
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+
+/** The view model of {@code BatteryChartView} */
+class BatteryChartViewModel {
+ private static final String TAG = "BatteryChartViewModel";
+
+ public static final int SELECTED_INDEX_ALL = -1;
+ public static final int SELECTED_INDEX_INVALID = -2;
+
+ // We need at least 2 levels to draw a trapezoid.
+ private static final int MIN_LEVELS_DATA_SIZE = 2;
+
+ enum AxisLabelPosition {
+ BETWEEN_TRAPEZOIDS,
+ CENTER_OF_TRAPEZOIDS,
+ }
+
+ private final List<Integer> mLevels;
+ private final List<String> mTexts;
+ private final AxisLabelPosition mAxisLabelPosition;
+ private int mSelectedIndex = SELECTED_INDEX_ALL;
+
+ BatteryChartViewModel(
+ @NonNull List<Integer> levels, @NonNull List<String> texts,
+ @NonNull AxisLabelPosition axisLabelPosition) {
+ Preconditions.checkArgument(
+ levels.size() == texts.size() && levels.size() >= MIN_LEVELS_DATA_SIZE,
+ String.format(Locale.ENGLISH,
+ "Invalid BatteryChartViewModel levels.size: %d, texts.size: %d.",
+ levels.size(), texts.size()));
+ mLevels = levels;
+ mTexts = texts;
+ mAxisLabelPosition = axisLabelPosition;
+ }
+
+ public int size() {
+ return mLevels.size();
+ }
+
+ public List<Integer> levels() {
+ return mLevels;
+ }
+
+ public List<String> texts() {
+ return mTexts;
+ }
+
+ public AxisLabelPosition axisLabelPosition() {
+ return mAxisLabelPosition;
+ }
+
+ public int selectedIndex() {
+ return mSelectedIndex;
+ }
+
+ public void setSelectedIndex(int index) {
+ mSelectedIndex = index;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mLevels, mTexts, mSelectedIndex, mAxisLabelPosition);
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (this == other) {
+ return true;
+ } else if (!(other instanceof BatteryChartViewModel)) {
+ return false;
+ }
+ final BatteryChartViewModel batteryChartViewModel = (BatteryChartViewModel) other;
+ return Objects.equals(mLevels, batteryChartViewModel.mLevels)
+ && Objects.equals(mTexts, batteryChartViewModel.mTexts)
+ && mAxisLabelPosition == batteryChartViewModel.mAxisLabelPosition
+ && mSelectedIndex == batteryChartViewModel.mSelectedIndex;
+ }
+
+ @Override
+ public String toString() {
+ return String.format(Locale.ENGLISH,
+ "levels: %s,\ntexts: %s,\naxisLabelPosition: %s, selectedIndex: %d",
+ Objects.toString(mLevels), Objects.toString(mTexts), mAxisLabelPosition,
+ mSelectedIndex);
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
new file mode 100644
index 0000000..b5d4dde
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge.batteryusage;
+
+import androidx.annotation.NonNull;
+
+import java.util.Collections;
+import java.util.List;
+
+/** Wraps the battery usage diff data for each entry used for battery usage app list. */
+public class BatteryDiffData {
+ private final List<BatteryDiffEntry> mAppEntries;
+ private final List<BatteryDiffEntry> mSystemEntries;
+
+ /** Constructor for the diff entries which already have totalConsumePower value. */
+ public BatteryDiffData(
+ @NonNull List<BatteryDiffEntry> appDiffEntries,
+ @NonNull List<BatteryDiffEntry> systemDiffEntries) {
+ mAppEntries = appDiffEntries;
+ mSystemEntries = systemDiffEntries;
+ sortEntries();
+ }
+
+ /** Constructor for the diff entries which have not set totalConsumePower value. */
+ public BatteryDiffData(
+ @NonNull List<BatteryDiffEntry> appDiffEntries,
+ @NonNull List<BatteryDiffEntry> systemDiffEntries,
+ final double totalConsumePower) {
+ mAppEntries = appDiffEntries;
+ mSystemEntries = systemDiffEntries;
+ setTotalConsumePowerForAllEntries(totalConsumePower);
+ sortEntries();
+ }
+
+ public List<BatteryDiffEntry> getAppDiffEntryList() {
+ return mAppEntries;
+ }
+
+ public List<BatteryDiffEntry> getSystemDiffEntryList() {
+ return mSystemEntries;
+ }
+
+ // Sets total consume power for each entry.
+ private void setTotalConsumePowerForAllEntries(final double totalConsumePower) {
+ mAppEntries.forEach(diffEntry -> diffEntry.setTotalConsumePower(totalConsumePower));
+ mSystemEntries.forEach(diffEntry -> diffEntry.setTotalConsumePower(totalConsumePower));
+ }
+
+ // Sorts entries based on consumed percentage.
+ private void sortEntries() {
+ Collections.sort(mAppEntries, BatteryDiffEntry.COMPARATOR);
+ Collections.sort(mSystemEntries, BatteryDiffEntry.COMPARATOR);
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java
similarity index 71%
rename from src/com/android/settings/fuelgauge/BatteryDiffEntry.java
rename to src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java
index 403f79c..d4d7a00 100644
--- a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java
@@ -1,17 +1,19 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -26,6 +28,7 @@
import androidx.annotation.VisibleForTesting;
import com.android.settings.R;
+import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settingslib.utils.StringUtil;
import java.util.Comparator;
@@ -61,11 +64,16 @@
private UserManager mUserManager;
private String mDefaultPackageName = null;
- @VisibleForTesting int mAppIconId;
- @VisibleForTesting String mAppLabel = null;
- @VisibleForTesting Drawable mAppIcon = null;
- @VisibleForTesting boolean mIsLoaded = false;
- @VisibleForTesting boolean mValidForRestriction = true;
+ @VisibleForTesting
+ int mAppIconId;
+ @VisibleForTesting
+ String mAppLabel = null;
+ @VisibleForTesting
+ Drawable mAppIcon = null;
+ @VisibleForTesting
+ boolean mIsLoaded = false;
+ @VisibleForTesting
+ boolean mValidForRestriction = true;
public BatteryDiffEntry(
Context context,
@@ -85,7 +93,7 @@
public void setTotalConsumePower(double totalConsumePower) {
mTotalConsumePower = totalConsumePower;
mPercentOfTotal = totalConsumePower == 0
- ? 0 : (mConsumePower / mTotalConsumePower) * 100.0;
+ ? 0 : (mConsumePower / mTotalConsumePower) * 100.0;
}
/** Gets the percentage of total consumed power. */
@@ -96,24 +104,30 @@
/** Clones a new instance. */
public BatteryDiffEntry clone() {
return new BatteryDiffEntry(
- this.mContext,
- this.mForegroundUsageTimeInMs,
- this.mBackgroundUsageTimeInMs,
- this.mConsumePower,
- this.mBatteryHistEntry /*same instance*/);
+ this.mContext,
+ this.mForegroundUsageTimeInMs,
+ this.mBackgroundUsageTimeInMs,
+ this.mConsumePower,
+ this.mBatteryHistEntry /*same instance*/);
}
/** Gets the app label name for this entry. */
public String getAppLabel() {
+ if (isOtherUsers()) {
+ return mContext.getString(R.string.battery_usage_other_users);
+ }
loadLabelAndIcon();
// Returns default applicationn label if we cannot find it.
return mAppLabel == null || mAppLabel.length() == 0
- ? mBatteryHistEntry.mAppLabel
- : mAppLabel;
+ ? mBatteryHistEntry.mAppLabel
+ : mAppLabel;
}
/** Gets the app icon {@link Drawable} for this entry. */
public Drawable getAppIcon() {
+ if (isOtherUsers()) {
+ return mContext.getDrawable(R.drawable.ic_power_system);
+ }
loadLabelAndIcon();
return mAppIcon != null && mAppIcon.getConstantState() != null
? mAppIcon.getConstantState().newDrawable()
@@ -129,15 +143,15 @@
/** Gets the searching package name for UID battery type. */
public String getPackageName() {
final String packageName = mDefaultPackageName != null
- ? mDefaultPackageName : mBatteryHistEntry.mPackageName;
+ ? mDefaultPackageName : mBatteryHistEntry.mPackageName;
if (packageName == null) {
return packageName;
}
// Removes potential appended process name in the PackageName.
// From "com.opera.browser:privileged_process0" to "com.opera.browser"
- final String[] splittedPackageNames = packageName.split(":");
- return splittedPackageNames != null && splittedPackageNames.length > 0
- ? splittedPackageNames[0] : packageName;
+ final String[] splitPackageNames = packageName.split(":");
+ return splitPackageNames != null && splitPackageNames.length > 0
+ ? splitPackageNames[0] : packageName;
}
/** Whether this item is valid for users to launch restriction page? */
@@ -148,6 +162,9 @@
/** Whether the current BatteryDiffEntry is system component or not. */
public boolean isSystemEntry() {
+ if (isOtherUsers()) {
+ return true;
+ }
switch (mBatteryHistEntry.mConsumerType) {
case ConvertUtils.CONSUMER_TYPE_USER_BATTERY:
case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY:
@@ -167,6 +184,11 @@
return false;
}
+ private boolean isOtherUsers() {
+ return mBatteryHistEntry.mConsumerType == ConvertUtils.CONSUMER_TYPE_UID_BATTERY
+ && mBatteryHistEntry.mUid == BatteryUtils.UID_OTHER_USERS;
+ }
+
void loadLabelAndIcon() {
if (mIsLoaded) {
return;
@@ -196,20 +218,20 @@
switch (mBatteryHistEntry.mConsumerType) {
case ConvertUtils.CONSUMER_TYPE_USER_BATTERY:
final BatteryEntry.NameAndIcon nameAndIconForUser =
- BatteryEntry.getNameAndIconFromUserId(
- mContext, (int) mBatteryHistEntry.mUserId);
+ BatteryEntry.getNameAndIconFromUserId(
+ mContext, (int) mBatteryHistEntry.mUserId);
if (nameAndIconForUser != null) {
mAppIcon = nameAndIconForUser.mIcon;
mAppLabel = nameAndIconForUser.mName;
sResourceCache.put(
- getKey(),
- new BatteryEntry.NameAndIcon(mAppLabel, mAppIcon, /*iconId=*/ 0));
+ getKey(),
+ new BatteryEntry.NameAndIcon(mAppLabel, mAppIcon, /*iconId=*/ 0));
}
break;
case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY:
final BatteryEntry.NameAndIcon nameAndIconForSystem =
- BatteryEntry.getNameAndIconFromPowerComponent(
- mContext, mBatteryHistEntry.mDrainType);
+ BatteryEntry.getNameAndIconFromPowerComponent(
+ mContext, mBatteryHistEntry.mDrainType);
if (nameAndIconForSystem != null) {
mAppLabel = nameAndIconForSystem.mName;
if (nameAndIconForSystem.mIconId != 0) {
@@ -217,8 +239,8 @@
mAppIcon = mContext.getDrawable(nameAndIconForSystem.mIconId);
}
sResourceCache.put(
- getKey(),
- new BatteryEntry.NameAndIcon(mAppLabel, mAppIcon, mAppIconId));
+ getKey(),
+ new BatteryEntry.NameAndIcon(mAppLabel, mAppIcon, mAppIconId));
}
break;
case ConvertUtils.CONSUMER_TYPE_UID_BATTERY:
@@ -231,8 +253,8 @@
mAppIcon = getBadgeIconForUser(mAppIcon);
if (mAppLabel != null || mAppIcon != null) {
sResourceCache.put(
- getKey(),
- new BatteryEntry.NameAndIcon(mAppLabel, mAppIcon, /*iconId=*/ 0));
+ getKey(),
+ new BatteryEntry.NameAndIcon(mAppLabel, mAppIcon, /*iconId=*/ 0));
}
break;
}
@@ -251,23 +273,23 @@
}
final boolean isValidPackage =
BatteryUtils.getInstance(mContext).getPackageUid(getPackageName())
- != BatteryUtils.UID_NULL;
+ != BatteryUtils.UID_NULL;
if (!isValidPackage) {
mValidForRestriction = false;
return;
}
try {
mValidForRestriction =
- mContext.getPackageManager().getPackageInfo(
- getPackageName(),
- PackageManager.MATCH_DISABLED_COMPONENTS
- | PackageManager.MATCH_ANY_USER
- | PackageManager.GET_SIGNATURES
- | PackageManager.GET_PERMISSIONS)
- != null;
+ mContext.getPackageManager().getPackageInfo(
+ getPackageName(),
+ PackageManager.MATCH_DISABLED_COMPONENTS
+ | PackageManager.MATCH_ANY_USER
+ | PackageManager.GET_SIGNATURES
+ | PackageManager.GET_PERMISSIONS)
+ != null;
} catch (Exception e) {
Log.e(TAG, String.format("getPackageInfo() error %s for package=%s",
- e.getCause(), getPackageName()));
+ e.getCause(), getPackageName()));
mValidForRestriction = false;
}
}
@@ -276,7 +298,7 @@
final Locale locale = Locale.getDefault();
if (sCurrentLocale != locale) {
Log.d(TAG, String.format("clearCache() locale is changed from %s to %s",
- sCurrentLocale, locale));
+ sCurrentLocale, locale));
sCurrentLocale = locale;
clearCache();
}
@@ -290,7 +312,7 @@
if (packageName != null && packageName.length() != 0) {
try {
final ApplicationInfo appInfo =
- packageManager.getApplicationInfo(packageName, /*no flags*/ 0);
+ packageManager.getApplicationInfo(packageName, /*no flags*/ 0);
if (appInfo != null) {
mAppLabel = packageManager.getApplicationLabel(appInfo).toString();
mAppIcon = packageManager.getApplicationIcon(appInfo);
@@ -310,15 +332,15 @@
// Loads special defined application label and icon if available.
if (packages == null || packages.length == 0) {
final BatteryEntry.NameAndIcon nameAndIcon =
- BatteryEntry.getNameAndIconFromUid(mContext, mAppLabel, uid);
+ BatteryEntry.getNameAndIconFromUid(mContext, mAppLabel, uid);
mAppLabel = nameAndIcon.mName;
mAppIcon = nameAndIcon.mIcon;
}
final BatteryEntry.NameAndIcon nameAndIcon =
- BatteryEntry.loadNameAndIcon(
- mContext, uid, /*handler=*/ null, /*batteryEntry=*/ null,
- packageName, mAppLabel, mAppIcon);
+ BatteryEntry.loadNameAndIcon(
+ mContext, uid, /*handler=*/ null, /*batteryEntry=*/ null,
+ packageName, mAppLabel, mAppIcon);
// Clears BatteryEntry internal cache since we will have another one.
BatteryEntry.clearUidCache();
if (nameAndIcon != null) {
@@ -328,7 +350,7 @@
if (mDefaultPackageName != null
&& !mDefaultPackageName.equals(nameAndIcon.mPackageName)) {
Log.w(TAG, String.format("found different package: %s | %s",
- mDefaultPackageName, nameAndIcon.mPackageName));
+ mDefaultPackageName, nameAndIcon.mPackageName));
}
}
}
@@ -336,19 +358,19 @@
@Override
public String toString() {
final StringBuilder builder = new StringBuilder()
- .append("BatteryDiffEntry{")
- .append(String.format("\n\tname=%s restrictable=%b",
- mAppLabel, mValidForRestriction))
- .append(String.format("\n\tconsume=%.2f%% %f/%f",
- mPercentOfTotal, mConsumePower, mTotalConsumePower))
- .append(String.format("\n\tforeground:%s background:%s",
- StringUtil.formatElapsedTime(mContext, mForegroundUsageTimeInMs,
- /*withSeconds=*/ true, /*collapseTimeUnit=*/ false),
- StringUtil.formatElapsedTime(mContext, mBackgroundUsageTimeInMs,
- /*withSeconds=*/ true, /*collapseTimeUnit=*/ false)))
- .append(String.format("\n\tpackage:%s|%s uid:%d userId:%d",
- mBatteryHistEntry.mPackageName, getPackageName(),
- mBatteryHistEntry.mUid, mBatteryHistEntry.mUserId));
+ .append("BatteryDiffEntry{")
+ .append(String.format("\n\tname=%s restrictable=%b",
+ mAppLabel, mValidForRestriction))
+ .append(String.format("\n\tconsume=%.2f%% %f/%f",
+ mPercentOfTotal, mConsumePower, mTotalConsumePower))
+ .append(String.format("\n\tforeground:%s background:%s",
+ StringUtil.formatElapsedTime(mContext, mForegroundUsageTimeInMs,
+ /*withSeconds=*/ true, /*collapseTimeUnit=*/ false),
+ StringUtil.formatElapsedTime(mContext, mBackgroundUsageTimeInMs,
+ /*withSeconds=*/ true, /*collapseTimeUnit=*/ false)))
+ .append(String.format("\n\tpackage:%s|%s uid:%d userId:%d",
+ mBatteryHistEntry.mPackageName, getPackageName(),
+ mBatteryHistEntry.mUid, mBatteryHistEntry.mUserId));
return builder.toString();
}
@@ -361,7 +383,7 @@
private Drawable getBadgeIconForUser(Drawable icon) {
final int userId = UserHandle.getUserId((int) mBatteryHistEntry.mUid);
return userId == UserHandle.USER_OWNER ? icon :
- mUserManager.getBadgedIconForUser(icon, new UserHandle(userId));
+ mUserManager.getBadgedIconForUser(icon, new UserHandle(userId));
}
private static boolean isSystemUid(int uid) {
diff --git a/src/com/android/settings/fuelgauge/BatteryEntry.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java
similarity index 92%
rename from src/com/android/settings/fuelgauge/BatteryEntry.java
rename to src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java
index 9dcbd05..24d6dad 100644
--- a/src/com/android/settings/fuelgauge/BatteryEntry.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryEntry.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.app.AppGlobals;
import android.content.Context;
@@ -36,9 +36,8 @@
import android.util.DebugUtils;
import android.util.Log;
-import androidx.annotation.NonNull;
-
import com.android.settings.R;
+import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settingslib.Utils;
import java.util.ArrayList;
@@ -52,6 +51,7 @@
*/
public class BatteryEntry {
+ /** The app name and icon in app list. */
public static final class NameAndIcon {
public final String mName;
public final String mPackageName;
@@ -84,10 +84,10 @@
static Locale sCurrentLocale = null;
- static private class NameAndIconLoader extends Thread {
+ private static class NameAndIconLoader extends Thread {
private boolean mAbort = false;
- public NameAndIconLoader() {
+ NameAndIconLoader() {
super("BatteryUsage Icon Loader");
}
@@ -109,9 +109,9 @@
be = sRequestQueue.remove(0);
}
final NameAndIcon nameAndIcon =
- BatteryEntry.loadNameAndIcon(
- be.mContext, be.getUid(), sHandler, be,
- be.mDefaultPackageName, be.mName, be.mIcon);
+ BatteryEntry.loadNameAndIcon(
+ be.mContext, be.getUid(), sHandler, be,
+ be.mDefaultPackageName, be.mName, be.mIcon);
if (nameAndIcon != null) {
be.mIcon = nameAndIcon.mIcon;
be.mName = nameAndIcon.mName;
@@ -121,35 +121,38 @@
}
}
- private static NameAndIconLoader mRequestThread;
+ private static NameAndIconLoader sRequestThread;
+ /** Starts the request queue. */
public static void startRequestQueue() {
if (sHandler != null) {
synchronized (sRequestQueue) {
if (!sRequestQueue.isEmpty()) {
- if (mRequestThread != null) {
- mRequestThread.abort();
+ if (sRequestThread != null) {
+ sRequestThread.abort();
}
- mRequestThread = new NameAndIconLoader();
- mRequestThread.setPriority(Thread.MIN_PRIORITY);
- mRequestThread.start();
+ sRequestThread = new NameAndIconLoader();
+ sRequestThread.setPriority(Thread.MIN_PRIORITY);
+ sRequestThread.start();
sRequestQueue.notify();
}
}
}
}
+ /** Stops the request queue. */
public static void stopRequestQueue() {
synchronized (sRequestQueue) {
- if (mRequestThread != null) {
- mRequestThread.abort();
- mRequestThread = null;
+ if (sRequestThread != null) {
+ sRequestThread.abort();
+ sRequestThread = null;
sRequestQueue.clear();
sHandler = null;
}
}
}
+ /** Clears the UID cache. */
public static void clearUidCache() {
sUidCache.clear();
}
@@ -252,14 +255,14 @@
mIsHidden = false;
mPowerComponentId = powerComponentId;
mConsumedPower =
- powerComponentId == BatteryConsumer.POWER_COMPONENT_SCREEN
- ? devicePowerMah
- : devicePowerMah - appsPowerMah;
+ powerComponentId == BatteryConsumer.POWER_COMPONENT_SCREEN
+ ? devicePowerMah
+ : devicePowerMah - appsPowerMah;
mUsageDurationMs = usageDurationMs;
mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
final NameAndIcon nameAndIcon =
- getNameAndIconFromPowerComponent(context, powerComponentId);
+ getNameAndIconFromPowerComponent(context, powerComponentId);
mIconId = nameAndIcon.mIconId;
mName = nameAndIcon.mName;
if (mIconId != 0) {
@@ -280,9 +283,9 @@
mIcon = context.getDrawable(mIconId);
mName = powerComponentName;
mConsumedPower =
- powerComponentId == BatteryConsumer.POWER_COMPONENT_SCREEN
- ? devicePowerMah
- : devicePowerMah - appsPowerMah;
+ powerComponentId == BatteryConsumer.POWER_COMPONENT_SCREEN
+ ? devicePowerMah
+ : devicePowerMah - appsPowerMah;
mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
}
@@ -354,7 +357,7 @@
final PackageManager pm = context.getPackageManager();
final String[] packages = isSystemUid(uid)
- ? new String[] {PACKAGE_SYSTEM} : pm.getPackagesForUid(uid);
+ ? new String[]{PACKAGE_SYSTEM} : pm.getPackagesForUid(uid);
if (packages != null) {
final String[] packageLabels = new String[packages.length];
System.arraycopy(packages, 0, packageLabels, 0, packages.length);
@@ -552,8 +555,8 @@
name = context.getResources().getString(R.string.process_network_tethering);
} else if ("mediaserver".equals(name)) {
name = context.getResources().getString(R.string.process_mediaserver_label);
- } else if ("dex2oat".equals(name) || "dex2oat32".equals(name) ||
- "dex2oat64".equals(name)) {
+ } else if ("dex2oat".equals(name) || "dex2oat32".equals(name)
+ || "dex2oat64".equals(name)) {
name = context.getResources().getString(R.string.process_dex2oat_label);
}
return new NameAndIcon(name, icon, 0 /* iconId */);
@@ -612,7 +615,8 @@
return new NameAndIcon(name, null /* icon */, iconId);
}
- static boolean isSystemUid(int uid) {
+ /** Whether the uid is system uid. */
+ public static boolean isSystemUid(int uid) {
return uid == Process.SYSTEM_UID;
}
}
diff --git a/src/com/android/settings/fuelgauge/BatteryHistEntry.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryHistEntry.java
similarity index 78%
rename from src/com/android/settings/fuelgauge/BatteryHistEntry.java
rename to src/com/android/settings/fuelgauge/batteryusage/BatteryHistEntry.java
index 45f9e9f..b88b2f6 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistEntry.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryHistEntry.java
@@ -1,17 +1,19 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.content.ContentValues;
import android.database.Cursor;
@@ -117,14 +119,14 @@
}
private BatteryHistEntry(
- BatteryHistEntry fromEntry,
- long bootTimestamp,
- long timestamp,
- double totalPower,
- double consumePower,
- long foregroundUsageTimeInMs,
- long backgroundUsageTimeInMs,
- int batteryLevel) {
+ BatteryHistEntry fromEntry,
+ long bootTimestamp,
+ long timestamp,
+ double totalPower,
+ double consumePower,
+ long foregroundUsageTimeInMs,
+ long backgroundUsageTimeInMs,
+ int batteryLevel) {
mUid = fromEntry.mUid;
mUserId = fromEntry.mUserId;
mAppLabel = fromEntry.mAppLabel;
@@ -186,28 +188,28 @@
@Override
public String toString() {
final String recordAtDateTime =
- ConvertUtils.utcToLocalTime(/*context=*/ null, mTimestamp);
+ ConvertUtils.utcToLocalTime(/*context=*/ null, mTimestamp);
final StringBuilder builder = new StringBuilder()
- .append("\nBatteryHistEntry{")
- .append(String.format("\n\tpackage=%s|label=%s|uid=%d|userId=%d|isHidden=%b",
- mPackageName, mAppLabel, mUid, mUserId, mIsHidden))
- .append(String.format("\n\ttimestamp=%s|zoneId=%s|bootTimestamp=%d",
- recordAtDateTime, mZoneId, Duration.ofMillis(mBootTimestamp).getSeconds()))
- .append(String.format("\n\tusage=%f|total=%f|consume=%f|elapsedTime=%d|%d",
- mPercentOfTotal, mTotalPower, mConsumePower,
- Duration.ofMillis(mForegroundUsageTimeInMs).getSeconds(),
- Duration.ofMillis(mBackgroundUsageTimeInMs).getSeconds()))
- .append(String.format("\n\tdrainType=%d|consumerType=%d",
- mDrainType, mConsumerType))
- .append(String.format("\n\tbattery=%d|status=%d|health=%d\n}",
- mBatteryLevel, mBatteryStatus, mBatteryHealth));
+ .append("\nBatteryHistEntry{")
+ .append(String.format("\n\tpackage=%s|label=%s|uid=%d|userId=%d|isHidden=%b",
+ mPackageName, mAppLabel, mUid, mUserId, mIsHidden))
+ .append(String.format("\n\ttimestamp=%s|zoneId=%s|bootTimestamp=%d",
+ recordAtDateTime, mZoneId, Duration.ofMillis(mBootTimestamp).getSeconds()))
+ .append(String.format("\n\tusage=%f|total=%f|consume=%f|elapsedTime=%d|%d",
+ mPercentOfTotal, mTotalPower, mConsumePower,
+ Duration.ofMillis(mForegroundUsageTimeInMs).getSeconds(),
+ Duration.ofMillis(mBackgroundUsageTimeInMs).getSeconds()))
+ .append(String.format("\n\tdrainType=%d|consumerType=%d",
+ mDrainType, mConsumerType))
+ .append(String.format("\n\tbattery=%d|status=%d|health=%d\n}",
+ mBatteryLevel, mBatteryStatus, mBatteryHealth));
return builder.toString();
}
private int getInteger(ContentValues values, String key) {
if (values != null && values.containsKey(key)) {
return values.getAsInteger(key);
- };
+ }
mIsValidEntry = false;
return 0;
}
@@ -298,21 +300,21 @@
BatteryHistEntry lowerHistEntry,
BatteryHistEntry upperHistEntry) {
final double totalPower = interpolate(
- lowerHistEntry == null ? 0 : lowerHistEntry.mTotalPower,
- upperHistEntry.mTotalPower,
- ratio);
+ lowerHistEntry == null ? 0 : lowerHistEntry.mTotalPower,
+ upperHistEntry.mTotalPower,
+ ratio);
final double consumePower = interpolate(
- lowerHistEntry == null ? 0 : lowerHistEntry.mConsumePower,
- upperHistEntry.mConsumePower,
- ratio);
+ lowerHistEntry == null ? 0 : lowerHistEntry.mConsumePower,
+ upperHistEntry.mConsumePower,
+ ratio);
final double foregroundUsageTimeInMs = interpolate(
- lowerHistEntry == null ? 0 : lowerHistEntry.mForegroundUsageTimeInMs,
- upperHistEntry.mForegroundUsageTimeInMs,
- ratio);
+ lowerHistEntry == null ? 0 : lowerHistEntry.mForegroundUsageTimeInMs,
+ upperHistEntry.mForegroundUsageTimeInMs,
+ ratio);
final double backgroundUsageTimeInMs = interpolate(
- lowerHistEntry == null ? 0 : lowerHistEntry.mBackgroundUsageTimeInMs,
- upperHistEntry.mBackgroundUsageTimeInMs,
- ratio);
+ lowerHistEntry == null ? 0 : lowerHistEntry.mBackgroundUsageTimeInMs,
+ upperHistEntry.mBackgroundUsageTimeInMs,
+ ratio);
// Checks whether there is any abnoaml cases!
if (upperHistEntry.mConsumePower < consumePower
|| upperHistEntry.mForegroundUsageTimeInMs < foregroundUsageTimeInMs
@@ -324,22 +326,22 @@
}
}
final double batteryLevel =
- lowerHistEntry == null
- ? upperHistEntry.mBatteryLevel
- : interpolate(
- lowerHistEntry.mBatteryLevel,
- upperHistEntry.mBatteryLevel,
- ratio);
+ lowerHistEntry == null
+ ? upperHistEntry.mBatteryLevel
+ : interpolate(
+ lowerHistEntry.mBatteryLevel,
+ upperHistEntry.mBatteryLevel,
+ ratio);
return new BatteryHistEntry(
- upperHistEntry,
- /*bootTimestamp=*/ upperHistEntry.mBootTimestamp
+ upperHistEntry,
+ /*bootTimestamp=*/ upperHistEntry.mBootTimestamp
- (upperTimestamp - slotTimestamp),
- /*timestamp=*/ slotTimestamp,
- totalPower,
- consumePower,
- Math.round(foregroundUsageTimeInMs),
- Math.round(backgroundUsageTimeInMs),
- (int) Math.round(batteryLevel));
+ /*timestamp=*/ slotTimestamp,
+ totalPower,
+ consumePower,
+ Math.round(foregroundUsageTimeInMs),
+ Math.round(backgroundUsageTimeInMs),
+ (int) Math.round(batteryLevel));
}
private static double interpolate(double v1, double v2, double ratio) {
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryLoader.java
similarity index 79%
rename from src/com/android/settings/fuelgauge/BatteryHistoryLoader.java
rename to src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryLoader.java
index ddf3bf4..83b2615 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryLoader.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryLoader.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,10 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.content.Context;
+import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.utils.AsyncLoaderCompat;
@@ -41,7 +42,7 @@
@Override
public Map<Long, Map<String, BatteryHistEntry>> loadInBackground() {
final PowerUsageFeatureProvider powerUsageFeatureProvider =
- FeatureFactory.getFactory(mContext).getPowerUsageFeatureProvider(mContext);
- return powerUsageFeatureProvider.getBatteryHistory(mContext);
+ FeatureFactory.getFactory(mContext).getPowerUsageFeatureProvider(mContext);
+ return powerUsageFeatureProvider.getBatteryHistorySinceLastFullCharge(mContext);
}
}
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryPreference.java
similarity index 72%
rename from src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
rename to src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryPreference.java
index b2818bf..71fd26c 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryPreference.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2010 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.content.Context;
import android.os.BatteryUsageStats;
@@ -29,6 +29,8 @@
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
+import com.android.settings.fuelgauge.BatteryInfo;
+import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.UsageView;
@@ -38,29 +40,33 @@
public class BatteryHistoryPreference extends Preference {
private static final String TAG = "BatteryHistoryPreference";
- @VisibleForTesting boolean mHideSummary;
- @VisibleForTesting BatteryInfo mBatteryInfo;
+ @VisibleForTesting
+ boolean mHideSummary;
+ @VisibleForTesting
+ BatteryInfo mBatteryInfo;
private boolean mIsChartGraphEnabled;
private TextView mSummaryView;
private CharSequence mSummaryContent;
- private BatteryChartView mBatteryChartView;
+ private BatteryChartView mDailyChartView;
+ private BatteryChartView mHourlyChartView;
private BatteryChartPreferenceController mChartPreferenceController;
public BatteryHistoryPreference(Context context, AttributeSet attrs) {
super(context, attrs);
mIsChartGraphEnabled =
- FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context)
- .isChartGraphEnabled(context);
+ FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context)
+ .isChartGraphEnabled(context);
Log.i(TAG, "isChartGraphEnabled: " + mIsChartGraphEnabled);
setLayoutResource(
- mIsChartGraphEnabled
- ? R.layout.battery_chart_graph
- : R.layout.battery_usage_graph);
+ mIsChartGraphEnabled
+ ? R.layout.battery_chart_graph
+ : R.layout.battery_usage_graph);
setSelectable(false);
}
+ /** Sets the text of bottom summary. */
public void setBottomSummary(CharSequence text) {
mSummaryContent = text;
if (mSummaryView != null) {
@@ -70,6 +76,7 @@
mHideSummary = false;
}
+ /** Hides the bottom summary. */
public void hideBottomSummary() {
if (mSummaryView != null) {
mSummaryView.setVisibility(View.GONE);
@@ -86,8 +93,8 @@
void setChartPreferenceController(BatteryChartPreferenceController controller) {
mChartPreferenceController = controller;
- if (mBatteryChartView != null) {
- mChartPreferenceController.setBatteryChartView(mBatteryChartView);
+ if (mDailyChartView != null && mHourlyChartView != null) {
+ mChartPreferenceController.setBatteryChartView(mDailyChartView, mHourlyChartView);
}
}
@@ -99,11 +106,14 @@
return;
}
if (mIsChartGraphEnabled) {
- mBatteryChartView = (BatteryChartView) view.findViewById(R.id.battery_chart);
- mBatteryChartView.setCompanionTextView(
- (TextView) view.findViewById(R.id.companion_text));
+ mDailyChartView = (BatteryChartView) view.findViewById(R.id.daily_battery_chart);
+ mDailyChartView.setCompanionTextView(
+ (TextView) view.findViewById(R.id.companion_text));
+ mHourlyChartView = (BatteryChartView) view.findViewById(R.id.hourly_battery_chart);
+ mHourlyChartView.setCompanionTextView(
+ (TextView) view.findViewById(R.id.companion_text));
if (mChartPreferenceController != null) {
- mChartPreferenceController.setBatteryChartView(mBatteryChartView);
+ mChartPreferenceController.setBatteryChartView(mDailyChartView, mHourlyChartView);
}
} else {
final TextView chargeView = (TextView) view.findViewById(R.id.charge);
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryLevelData.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryLevelData.java
new file mode 100644
index 0000000..4ff9eeb
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryLevelData.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge.batteryusage;
+
+import androidx.annotation.NonNull;
+import androidx.core.util.Preconditions;
+
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+
+/** Wraps the battery timestamp and level data used for battery usage chart. */
+public final class BatteryLevelData {
+ /** A container for the battery timestamp and level data. */
+ public static final class PeriodBatteryLevelData {
+ // The length of mTimestamps and mLevels must be the same. mLevels[index] might be null when
+ // there is no level data for the corresponding timestamp.
+ private final List<Long> mTimestamps;
+ private final List<Integer> mLevels;
+
+ public PeriodBatteryLevelData(
+ @NonNull List<Long> timestamps, @NonNull List<Integer> levels) {
+ Preconditions.checkArgument(timestamps.size() == levels.size(),
+ /* errorMessage= */ "Timestamp: " + timestamps.size() + ", Level: "
+ + levels.size());
+ mTimestamps = timestamps;
+ mLevels = levels;
+ }
+
+ public List<Long> getTimestamps() {
+ return mTimestamps;
+ }
+
+ public List<Integer> getLevels() {
+ return mLevels;
+ }
+
+ @Override
+ public String toString() {
+ return String.format(Locale.ENGLISH, "timestamps: %s; levels: %s",
+ Objects.toString(mTimestamps), Objects.toString(mLevels));
+ }
+ }
+
+ /**
+ * There could be 2 cases for the daily battery levels:
+ * 1) length is 2: The usage data is within 1 day. Only contains start and end data, such as
+ * data of 2022-01-01 06:00 and 2022-01-01 16:00.
+ * 2) length > 2: The usage data is more than 1 days. The data should be the start, end and 0am
+ * data of every day between the start and end, such as data of 2022-01-01 06:00,
+ * 2022-01-02 00:00, 2022-01-03 00:00 and 2022-01-03 08:00.
+ */
+ private final PeriodBatteryLevelData mDailyBatteryLevels;
+ // The size of hourly data must be the size of daily data - 1.
+ private final List<PeriodBatteryLevelData> mHourlyBatteryLevelsPerDay;
+
+ public BatteryLevelData(
+ @NonNull PeriodBatteryLevelData dailyBatteryLevels,
+ @NonNull List<PeriodBatteryLevelData> hourlyBatteryLevelsPerDay) {
+ final long dailySize = dailyBatteryLevels.getTimestamps().size();
+ final long hourlySize = hourlyBatteryLevelsPerDay.size();
+ Preconditions.checkArgument(hourlySize == dailySize - 1,
+ /* errorMessage= */ "DailySize: " + dailySize + ", HourlySize: " + hourlySize);
+ mDailyBatteryLevels = dailyBatteryLevels;
+ mHourlyBatteryLevelsPerDay = hourlyBatteryLevelsPerDay;
+ }
+
+ public PeriodBatteryLevelData getDailyBatteryLevels() {
+ return mDailyBatteryLevels;
+ }
+
+ public List<PeriodBatteryLevelData> getHourlyBatteryLevelsPerDay() {
+ return mHourlyBatteryLevelsPerDay;
+ }
+
+ @Override
+ public String toString() {
+ return String.format(Locale.ENGLISH,
+ "dailyBatteryLevels: %s; hourlyBatteryLevelsPerDay: %s",
+ Objects.toString(mDailyBatteryLevels),
+ Objects.toString(mHourlyBatteryLevelsPerDay));
+ }
+}
+
diff --git a/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageStatsLoader.java
similarity index 94%
rename from src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java
rename to src/com/android/settings/fuelgauge/batteryusage/BatteryUsageStatsLoader.java
index 65f2ddb..d61b276 100644
--- a/src/com/android/settings/fuelgauge/BatteryUsageStatsLoader.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageStatsLoader.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.content.Context;
import android.os.BatteryStatsManager;
diff --git a/src/com/android/settings/fuelgauge/ConvertUtils.java b/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java
similarity index 64%
rename from src/com/android/settings/fuelgauge/ConvertUtils.java
rename to src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java
index 696147b..f04658d 100644
--- a/src/com/android/settings/fuelgauge/ConvertUtils.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java
@@ -1,17 +1,19 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.annotation.IntDef;
import android.content.ContentValues;
@@ -19,6 +21,7 @@
import android.os.BatteryUsageStats;
import android.os.LocaleList;
import android.os.UserHandle;
+import android.os.UserManager;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
import android.util.ArraySet;
@@ -26,6 +29,8 @@
import androidx.annotation.VisibleForTesting;
+import com.android.settings.Utils;
+import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.overlay.FeatureFactory;
import java.lang.annotation.Retention;
@@ -46,7 +51,7 @@
private static final String TAG = "ConvertUtils";
private static final Map<String, BatteryHistEntry> EMPTY_BATTERY_MAP = new HashMap<>();
private static final BatteryHistEntry EMPTY_BATTERY_HIST_ENTRY =
- new BatteryHistEntry(new ContentValues());
+ new BatteryHistEntry(new ContentValues());
// Maximum total time value for each slot cumulative data at most 2 hours.
private static final float TOTAL_TIME_THRESHOLD = DateUtils.HOUR_IN_MILLIS * 2;
@@ -64,21 +69,24 @@
public static final String FAKE_PACKAGE_NAME = "fake_package";
@IntDef(prefix = {"CONSUMER_TYPE"}, value = {
- CONSUMER_TYPE_UNKNOWN,
- CONSUMER_TYPE_UID_BATTERY,
- CONSUMER_TYPE_USER_BATTERY,
- CONSUMER_TYPE_SYSTEM_BATTERY,
+ CONSUMER_TYPE_UNKNOWN,
+ CONSUMER_TYPE_UID_BATTERY,
+ CONSUMER_TYPE_USER_BATTERY,
+ CONSUMER_TYPE_SYSTEM_BATTERY,
})
@Retention(RetentionPolicy.SOURCE)
- public static @interface ConsumerType {}
+ public static @interface ConsumerType {
+ }
public static final int CONSUMER_TYPE_UNKNOWN = 0;
public static final int CONSUMER_TYPE_UID_BATTERY = 1;
public static final int CONSUMER_TYPE_USER_BATTERY = 2;
public static final int CONSUMER_TYPE_SYSTEM_BATTERY = 3;
- private ConvertUtils() {}
+ private ConvertUtils() {
+ }
+ /** Converts to content values */
public static ContentValues convert(
BatteryEntry entry,
BatteryUsageStats batteryUsageStats,
@@ -91,25 +99,25 @@
if (entry != null && batteryUsageStats != null) {
values.put(BatteryHistEntry.KEY_UID, Long.valueOf(entry.getUid()));
values.put(BatteryHistEntry.KEY_USER_ID,
- Long.valueOf(UserHandle.getUserId(entry.getUid())));
+ Long.valueOf(UserHandle.getUserId(entry.getUid())));
values.put(BatteryHistEntry.KEY_APP_LABEL, entry.getLabel());
values.put(BatteryHistEntry.KEY_PACKAGE_NAME,
- entry.getDefaultPackageName());
+ entry.getDefaultPackageName());
values.put(BatteryHistEntry.KEY_IS_HIDDEN, Boolean.valueOf(entry.isHidden()));
values.put(BatteryHistEntry.KEY_TOTAL_POWER,
- Double.valueOf(batteryUsageStats.getConsumedPower()));
+ Double.valueOf(batteryUsageStats.getConsumedPower()));
values.put(BatteryHistEntry.KEY_CONSUME_POWER,
- Double.valueOf(entry.getConsumedPower()));
+ Double.valueOf(entry.getConsumedPower()));
values.put(BatteryHistEntry.KEY_PERCENT_OF_TOTAL,
- Double.valueOf(entry.mPercent));
+ Double.valueOf(entry.mPercent));
values.put(BatteryHistEntry.KEY_FOREGROUND_USAGE_TIME,
- Long.valueOf(entry.getTimeInForegroundMs()));
+ Long.valueOf(entry.getTimeInForegroundMs()));
values.put(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME,
- Long.valueOf(entry.getTimeInBackgroundMs()));
+ Long.valueOf(entry.getTimeInBackgroundMs()));
values.put(BatteryHistEntry.KEY_DRAIN_TYPE,
- Integer.valueOf(entry.getPowerComponentId()));
+ Integer.valueOf(entry.getPowerComponentId()));
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE,
- Integer.valueOf(entry.getConsumerType()));
+ Integer.valueOf(entry.getConsumerType()));
} else {
values.put(BatteryHistEntry.KEY_PACKAGE_NAME, FAKE_PACKAGE_NAME);
}
@@ -126,13 +134,13 @@
public static String utcToLocalTime(Context context, long timestamp) {
final Locale locale = getLocale(context);
final String pattern =
- DateFormat.getBestDateTimePattern(locale, "MMM dd,yyyy HH:mm:ss");
+ DateFormat.getBestDateTimePattern(locale, "MMM dd,yyyy HH:mm:ss");
return DateFormat.format(pattern, timestamp).toString();
}
/** Converts UTC timestamp to local time hour data. */
public static String utcToLocalTimeHour(
- Context context, long timestamp, boolean is24HourFormat) {
+ final Context context, final long timestamp, final boolean is24HourFormat) {
final Locale locale = getLocale(context);
// e.g. for 12-hour format: 9 pm
// e.g. for 24-hour format: 09:00
@@ -141,6 +149,15 @@
return DateFormat.format(pattern, timestamp).toString().toLowerCase(locale);
}
+ /** Converts UTC timestamp to local time day of week data. */
+ public static String utcToLocalTimeDayOfWeek(
+ final Context context, final long timestamp, final boolean isAbbreviation) {
+ final Locale locale = getLocale(context);
+ final String pattern = DateFormat.getBestDateTimePattern(locale,
+ isAbbreviation ? "E" : "EEEE");
+ return DateFormat.format(pattern, timestamp).toString();
+ }
+
/** Gets indexed battery usage data for each corresponding time slot. */
public static Map<Integer, List<BatteryDiffEntry>> getIndexedUsageMap(
final Context context,
@@ -159,18 +176,18 @@
final int timestampStride = 2;
for (int index = 0; index < timeSlotSize; index++) {
final Long currentTimestamp =
- Long.valueOf(batteryHistoryKeys[index * timestampStride]);
+ Long.valueOf(batteryHistoryKeys[index * timestampStride]);
final Long nextTimestamp =
- Long.valueOf(batteryHistoryKeys[index * timestampStride + 1]);
+ Long.valueOf(batteryHistoryKeys[index * timestampStride + 1]);
final Long nextTwoTimestamp =
- Long.valueOf(batteryHistoryKeys[index * timestampStride + 2]);
+ Long.valueOf(batteryHistoryKeys[index * timestampStride + 2]);
// Fetches BatteryHistEntry data from corresponding time slot.
final Map<String, BatteryHistEntry> currentBatteryHistMap =
- batteryHistoryMap.getOrDefault(currentTimestamp, EMPTY_BATTERY_MAP);
+ batteryHistoryMap.getOrDefault(currentTimestamp, EMPTY_BATTERY_MAP);
final Map<String, BatteryHistEntry> nextBatteryHistMap =
- batteryHistoryMap.getOrDefault(nextTimestamp, EMPTY_BATTERY_MAP);
+ batteryHistoryMap.getOrDefault(nextTimestamp, EMPTY_BATTERY_MAP);
final Map<String, BatteryHistEntry> nextTwoBatteryHistMap =
- batteryHistoryMap.getOrDefault(nextTwoTimestamp, EMPTY_BATTERY_MAP);
+ batteryHistoryMap.getOrDefault(nextTwoTimestamp, EMPTY_BATTERY_MAP);
// We should not get the empty list since we have at least one fake data to record
// the battery level and status in each time slot, the empty list is used to
// represent there is no enough data to apply interpolation arithmetic.
@@ -195,27 +212,27 @@
// Calculates all packages diff usage data in a specific time slot.
for (String key : allBatteryHistEntryKeys) {
final BatteryHistEntry currentEntry =
- currentBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
+ currentBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
final BatteryHistEntry nextEntry =
- nextBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
+ nextBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
final BatteryHistEntry nextTwoEntry =
- nextTwoBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
+ nextTwoBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
// Cumulative values is a specific time slot for a specific app.
long foregroundUsageTimeInMs =
- getDiffValue(
- currentEntry.mForegroundUsageTimeInMs,
- nextEntry.mForegroundUsageTimeInMs,
- nextTwoEntry.mForegroundUsageTimeInMs);
+ getDiffValue(
+ currentEntry.mForegroundUsageTimeInMs,
+ nextEntry.mForegroundUsageTimeInMs,
+ nextTwoEntry.mForegroundUsageTimeInMs);
long backgroundUsageTimeInMs =
- getDiffValue(
- currentEntry.mBackgroundUsageTimeInMs,
- nextEntry.mBackgroundUsageTimeInMs,
- nextTwoEntry.mBackgroundUsageTimeInMs);
+ getDiffValue(
+ currentEntry.mBackgroundUsageTimeInMs,
+ nextEntry.mBackgroundUsageTimeInMs,
+ nextTwoEntry.mBackgroundUsageTimeInMs);
double consumePower =
- getDiffValue(
- currentEntry.mConsumePower,
- nextEntry.mConsumePower,
- nextTwoEntry.mConsumePower);
+ getDiffValue(
+ currentEntry.mConsumePower,
+ nextEntry.mConsumePower,
+ nextTwoEntry.mConsumePower);
// Excludes entry since we don't have enough data to calculate.
if (foregroundUsageTimeInMs == 0
&& backgroundUsageTimeInMs == 0
@@ -223,14 +240,14 @@
continue;
}
final BatteryHistEntry selectedBatteryEntry =
- selectBatteryHistEntry(currentEntry, nextEntry, nextTwoEntry);
+ selectBatteryHistEntry(currentEntry, nextEntry, nextTwoEntry);
if (selectedBatteryEntry == null) {
continue;
}
// Forces refine the cumulative value since it may introduce deviation
// error since we will apply the interpolation arithmetic.
final float totalUsageTimeInMs =
- foregroundUsageTimeInMs + backgroundUsageTimeInMs;
+ foregroundUsageTimeInMs + backgroundUsageTimeInMs;
if (totalUsageTimeInMs > TOTAL_TIME_THRESHOLD) {
final float ratio = TOTAL_TIME_THRESHOLD / totalUsageTimeInMs;
if (DEBUG) {
@@ -240,37 +257,75 @@
currentEntry));
}
foregroundUsageTimeInMs =
- Math.round(foregroundUsageTimeInMs * ratio);
+ Math.round(foregroundUsageTimeInMs * ratio);
backgroundUsageTimeInMs =
- Math.round(backgroundUsageTimeInMs * ratio);
+ Math.round(backgroundUsageTimeInMs * ratio);
consumePower = consumePower * ratio;
}
totalConsumePower += consumePower;
batteryDiffEntryList.add(
- new BatteryDiffEntry(
- context,
- foregroundUsageTimeInMs,
- backgroundUsageTimeInMs,
- consumePower,
- selectedBatteryEntry));
+ new BatteryDiffEntry(
+ context,
+ foregroundUsageTimeInMs,
+ backgroundUsageTimeInMs,
+ consumePower,
+ selectedBatteryEntry));
}
// Sets total consume power data into all BatteryDiffEntry in the same slot.
for (BatteryDiffEntry diffEntry : batteryDiffEntryList) {
diffEntry.setTotalConsumePower(totalConsumePower);
}
}
- insert24HoursData(BatteryChartView.SELECTED_INDEX_ALL, resultMap);
+ insert24HoursData(BatteryChartViewModel.SELECTED_INDEX_ALL, resultMap);
+ resolveMultiUsersData(context, resultMap);
if (purgeLowPercentageAndFakeData) {
purgeLowPercentageAndFakeData(context, resultMap);
}
return resultMap;
}
+ @VisibleForTesting
+ static void resolveMultiUsersData(
+ final Context context,
+ final Map<Integer, List<BatteryDiffEntry>> indexedUsageMap) {
+ final int currentUserId = context.getUserId();
+ final UserHandle userHandle =
+ Utils.getManagedProfile(context.getSystemService(UserManager.class));
+ final int workProfileUserId =
+ userHandle != null ? userHandle.getIdentifier() : Integer.MIN_VALUE;
+ // Loops for all BatteryDiffEntry in the different slots.
+ for (List<BatteryDiffEntry> entryList : indexedUsageMap.values()) {
+ double consumePowerFromOtherUsers = 0f;
+ double consumePercentageFromOtherUsers = 0f;
+ final Iterator<BatteryDiffEntry> iterator = entryList.iterator();
+ while (iterator.hasNext()) {
+ final BatteryDiffEntry entry = iterator.next();
+ final BatteryHistEntry batteryHistEntry = entry.mBatteryHistEntry;
+ if (batteryHistEntry.mConsumerType != CONSUMER_TYPE_UID_BATTERY) {
+ continue;
+ }
+ // Whether the BatteryHistEntry represents the current user data?
+ if (batteryHistEntry.mUserId == currentUserId
+ || batteryHistEntry.mUserId == workProfileUserId) {
+ continue;
+ }
+ // Removes and aggregates non-current users data from the list.
+ iterator.remove();
+ consumePowerFromOtherUsers += entry.mConsumePower;
+ consumePercentageFromOtherUsers += entry.getPercentOfTotal();
+ }
+ if (consumePercentageFromOtherUsers != 0) {
+ entryList.add(createOtherUsersEntry(context, consumePowerFromOtherUsers,
+ consumePercentageFromOtherUsers));
+ }
+ }
+ }
+
private static void insert24HoursData(
final int desiredIndex,
final Map<Integer, List<BatteryDiffEntry>> indexedUsageMap) {
final Map<String, BatteryDiffEntry> resultMap = new HashMap<>();
- double totalConsumePower = 0.0;
+ double totalConsumePower = 0f;
// Loops for all BatteryDiffEntry and aggregate them together.
for (List<BatteryDiffEntry> entryList : indexedUsageMap.values()) {
for (BatteryDiffEntry entry : entryList) {
@@ -282,9 +337,9 @@
} else {
// Sums up some fields data into the existing one.
oldBatteryDiffEntry.mForegroundUsageTimeInMs +=
- entry.mForegroundUsageTimeInMs;
+ entry.mForegroundUsageTimeInMs;
oldBatteryDiffEntry.mBackgroundUsageTimeInMs +=
- entry.mBackgroundUsageTimeInMs;
+ entry.mBackgroundUsageTimeInMs;
oldBatteryDiffEntry.mConsumePower += entry.mConsumePower;
}
totalConsumePower += entry.mConsumePower;
@@ -318,7 +373,7 @@
if (packageName != null
&& !backgroundUsageTimeHideList.isEmpty()
&& backgroundUsageTimeHideList.contains(packageName)) {
- entry.mBackgroundUsageTimeInMs = 0;
+ entry.mBackgroundUsageTimeInMs = 0;
}
}
}
@@ -342,7 +397,7 @@
return entry2;
} else {
return entry3 != null && entry3 != EMPTY_BATTERY_HIST_ENTRY
- ? entry3 : null;
+ ? entry3 : null;
}
}
@@ -352,8 +407,26 @@
return Locale.getDefault();
}
final LocaleList locales =
- context.getResources().getConfiguration().getLocales();
+ context.getResources().getConfiguration().getLocales();
return locales != null && !locales.isEmpty() ? locales.get(0)
- : Locale.getDefault();
+ : Locale.getDefault();
+ }
+
+ private static BatteryDiffEntry createOtherUsersEntry(
+ Context context, double consumePower, double consumePercentage) {
+ final ContentValues values = new ContentValues();
+ values.put(BatteryHistEntry.KEY_UID, BatteryUtils.UID_OTHER_USERS);
+ values.put(BatteryHistEntry.KEY_USER_ID, BatteryUtils.UID_OTHER_USERS);
+ values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, CONSUMER_TYPE_UID_BATTERY);
+ // We will show the percentage for the "other users" item only, the aggregated
+ // running time information is useless for users to identify individual apps.
+ final BatteryDiffEntry batteryDiffEntry = new BatteryDiffEntry(
+ context,
+ /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ 0,
+ consumePower,
+ new BatteryHistEntry(values));
+ batteryDiffEntry.setTotalConsumePower(100 * consumePower / consumePercentage);
+ return batteryDiffEntry;
}
}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
new file mode 100644
index 0000000..125f879
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
@@ -0,0 +1,1058 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge.batteryusage;
+
+import static com.android.settings.fuelgauge.batteryusage.ConvertUtils.utcToLocalTime;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.text.TextUtils;
+import android.text.format.DateUtils;
+import android.util.ArraySet;
+import android.util.Log;
+
+import androidx.annotation.Nullable;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.settings.Utils;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.fuelgauge.BatteryStatus;
+
+import java.time.Duration;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A utility class to process data loaded from database and make the data easy to use for battery
+ * usage UI.
+ */
+public final class DataProcessor {
+ private static final boolean DEBUG = false;
+ private static final String TAG = "DataProcessor";
+ private static final int MIN_DAILY_DATA_SIZE = 2;
+ private static final int MIN_TIMESTAMP_DATA_SIZE = 2;
+ private static final int MAX_DIFF_SECONDS_OF_UPPER_TIMESTAMP = 5;
+ // Maximum total time value for each hourly slot cumulative data at most 2 hours.
+ private static final float TOTAL_HOURLY_TIME_THRESHOLD = DateUtils.HOUR_IN_MILLIS * 2;
+ private static final Map<String, BatteryHistEntry> EMPTY_BATTERY_MAP = new HashMap<>();
+ private static final BatteryHistEntry EMPTY_BATTERY_HIST_ENTRY =
+ new BatteryHistEntry(new ContentValues());
+
+ @VisibleForTesting
+ static final double PERCENTAGE_OF_TOTAL_THRESHOLD = 1f;
+ @VisibleForTesting
+ static final int SELECTED_INDEX_ALL = BatteryChartViewModel.SELECTED_INDEX_ALL;
+
+ /** A fake package name to represent no BatteryEntry data. */
+ public static final String FAKE_PACKAGE_NAME = "fake_package";
+
+ /** A callback listener when battery usage loading async task is executed. */
+ public interface UsageMapAsyncResponse {
+ /** The callback function when batteryUsageMap is loaded. */
+ void onBatteryUsageMapLoaded(
+ Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageMap);
+ }
+
+ private DataProcessor() {
+ }
+
+ /**
+ * @return Returns battery level data and start async task to compute battery diff usage data
+ * and load app labels + icons.
+ * Returns null if the input is invalid or not having at least 2 hours data.
+ */
+ @Nullable
+ public static BatteryLevelData getBatteryLevelData(
+ Context context,
+ @Nullable Handler handler,
+ @Nullable final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap,
+ final UsageMapAsyncResponse asyncResponseDelegate) {
+ if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
+ Log.d(TAG, "getBatteryLevelData() returns null");
+ return null;
+ }
+ handler = handler != null ? handler : new Handler(Looper.getMainLooper());
+ // Process raw history map data into hourly timestamps.
+ final Map<Long, Map<String, BatteryHistEntry>> processedBatteryHistoryMap =
+ getHistoryMapWithExpectedTimestamps(context, batteryHistoryMap);
+ // Wrap and processed history map into easy-to-use format for UI rendering.
+ final BatteryLevelData batteryLevelData =
+ getLevelDataThroughProcessedHistoryMap(context, processedBatteryHistoryMap);
+
+ // Start the async task to compute diff usage data and load labels and icons.
+ if (batteryLevelData != null) {
+ new ComputeUsageMapAndLoadItemsTask(
+ context,
+ handler,
+ asyncResponseDelegate,
+ batteryLevelData.getHourlyBatteryLevelsPerDay(),
+ processedBatteryHistoryMap).execute();
+ }
+
+ return batteryLevelData;
+ }
+
+ /**
+ * @return Returns battery usage data of different entries.
+ * Returns null if the input is invalid or there is no enough data.
+ */
+ @Nullable
+ public static Map<Integer, Map<Integer, BatteryDiffData>> getBatteryUsageData(
+ Context context,
+ @Nullable final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
+ if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
+ Log.d(TAG, "getBatteryLevelData() returns null");
+ return null;
+ }
+ // Process raw history map data into hourly timestamps.
+ final Map<Long, Map<String, BatteryHistEntry>> processedBatteryHistoryMap =
+ getHistoryMapWithExpectedTimestamps(context, batteryHistoryMap);
+ // Wrap and processed history map into easy-to-use format for UI rendering.
+ final BatteryLevelData batteryLevelData =
+ getLevelDataThroughProcessedHistoryMap(context, processedBatteryHistoryMap);
+ return batteryLevelData == null
+ ? null
+ : getBatteryUsageMap(
+ context,
+ batteryLevelData.getHourlyBatteryLevelsPerDay(),
+ processedBatteryHistoryMap);
+ }
+
+ /**
+ * @return Returns whether the target is in the CharSequence array.
+ */
+ public static boolean contains(String target, CharSequence[] packageNames) {
+ if (target != null && packageNames != null) {
+ for (CharSequence packageName : packageNames) {
+ if (TextUtils.equals(target, packageName)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @return Returns the processed history map which has interpolated to every hour data.
+ * The start and end timestamp must be the even hours.
+ * The keys of processed history map should contain every hour between the start and end
+ * timestamp. If there's no data in some key, the value will be the empty hashmap.
+ */
+ @VisibleForTesting
+ static Map<Long, Map<String, BatteryHistEntry>> getHistoryMapWithExpectedTimestamps(
+ Context context,
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
+ final long startTime = System.currentTimeMillis();
+ final List<Long> rawTimestampList = new ArrayList<>(batteryHistoryMap.keySet());
+ final Map<Long, Map<String, BatteryHistEntry>> resultMap = new HashMap();
+ if (rawTimestampList.isEmpty()) {
+ Log.d(TAG, "empty batteryHistoryMap in getHistoryMapWithExpectedTimestamps()");
+ return resultMap;
+ }
+ Collections.sort(rawTimestampList);
+ final List<Long> expectedTimestampList = getTimestampSlots(rawTimestampList);
+ final boolean isFromFullCharge =
+ isFromFullCharge(batteryHistoryMap.get(rawTimestampList.get(0)));
+ interpolateHistory(
+ context, rawTimestampList, expectedTimestampList, isFromFullCharge,
+ batteryHistoryMap, resultMap);
+ Log.d(TAG, String.format("getHistoryMapWithExpectedTimestamps() size=%d in %d/ms",
+ resultMap.size(), (System.currentTimeMillis() - startTime)));
+ return resultMap;
+ }
+
+ @VisibleForTesting
+ @Nullable
+ static BatteryLevelData getLevelDataThroughProcessedHistoryMap(
+ Context context,
+ final Map<Long, Map<String, BatteryHistEntry>> processedBatteryHistoryMap) {
+ final List<Long> timestampList = new ArrayList<>(processedBatteryHistoryMap.keySet());
+ Collections.sort(timestampList);
+ final List<Long> dailyTimestamps = getDailyTimestamps(timestampList);
+ // There should be at least the start and end timestamps. Otherwise, return null to not show
+ // data in usage chart.
+ if (dailyTimestamps.size() < MIN_DAILY_DATA_SIZE) {
+ return null;
+ }
+
+ final List<List<Long>> hourlyTimestamps = getHourlyTimestamps(dailyTimestamps);
+ final BatteryLevelData.PeriodBatteryLevelData dailyLevelData =
+ getPeriodBatteryLevelData(context, processedBatteryHistoryMap, dailyTimestamps);
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyLevelData =
+ getHourlyPeriodBatteryLevelData(
+ context, processedBatteryHistoryMap, hourlyTimestamps);
+ return new BatteryLevelData(dailyLevelData, hourlyLevelData);
+ }
+
+ /**
+ * Computes expected timestamp slots for last full charge, which will return hourly timestamps
+ * between start and end two even hour values.
+ */
+ @VisibleForTesting
+ static List<Long> getTimestampSlots(final List<Long> rawTimestampList) {
+ final List<Long> timestampSlots = new ArrayList<>();
+ final int rawTimestampListSize = rawTimestampList.size();
+ // If timestamp number is smaller than 2, the following computation is not necessary.
+ if (rawTimestampListSize < MIN_TIMESTAMP_DATA_SIZE) {
+ return timestampSlots;
+ }
+ final long rawStartTimestamp = rawTimestampList.get(0);
+ final long rawEndTimestamp = rawTimestampList.get(rawTimestampListSize - 1);
+ // No matter the start is from last full charge or 6 days ago, use the nearest even hour.
+ final long startTimestamp = getNearestEvenHourTimestamp(rawStartTimestamp);
+ // Use the even hour before the raw end timestamp as the end.
+ final long endTimestamp = getLastEvenHourBeforeTimestamp(rawEndTimestamp);
+ // If the start timestamp is later or equal the end one, return the empty list.
+ if (startTimestamp >= endTimestamp) {
+ return timestampSlots;
+ }
+ for (long timestamp = startTimestamp; timestamp <= endTimestamp;
+ timestamp += DateUtils.HOUR_IN_MILLIS) {
+ timestampSlots.add(timestamp);
+ }
+ return timestampSlots;
+ }
+
+ /**
+ * Computes expected daily timestamp slots.
+ *
+ * The valid result should be composed of 3 parts:
+ * 1) start timestamp
+ * 2) every 00:00 timestamp (default timezone) between the start and end
+ * 3) end timestamp
+ * Otherwise, returns an empty list.
+ */
+ @VisibleForTesting
+ static List<Long> getDailyTimestamps(final List<Long> timestampList) {
+ final List<Long> dailyTimestampList = new ArrayList<>();
+ // If timestamp number is smaller than 2, the following computation is not necessary.
+ if (timestampList.size() < MIN_TIMESTAMP_DATA_SIZE) {
+ return dailyTimestampList;
+ }
+ final long startTime = timestampList.get(0);
+ final long endTime = timestampList.get(timestampList.size() - 1);
+ long nextDay = getTimestampOfNextDay(startTime);
+ dailyTimestampList.add(startTime);
+ while (nextDay < endTime) {
+ dailyTimestampList.add(nextDay);
+ nextDay += DateUtils.DAY_IN_MILLIS;
+ }
+ dailyTimestampList.add(endTime);
+ return dailyTimestampList;
+ }
+
+ @VisibleForTesting
+ static boolean isFromFullCharge(@Nullable final Map<String, BatteryHistEntry> entryList) {
+ if (entryList == null) {
+ Log.d(TAG, "entryList is null in isFromFullCharge()");
+ return false;
+ }
+ final List<String> entryKeys = new ArrayList<>(entryList.keySet());
+ if (entryKeys.isEmpty()) {
+ Log.d(TAG, "empty entryList in isFromFullCharge()");
+ return false;
+ }
+ // The hist entries in the same timestamp should have same battery status and level.
+ // Checking the first one should be enough.
+ final BatteryHistEntry firstHistEntry = entryList.get(entryKeys.get(0));
+ return BatteryStatus.isCharged(firstHistEntry.mBatteryStatus, firstHistEntry.mBatteryLevel);
+ }
+
+ @VisibleForTesting
+ static long[] findNearestTimestamp(final List<Long> timestamps, final long target) {
+ final long[] results = new long[] {Long.MIN_VALUE, Long.MAX_VALUE};
+ // Searches the nearest lower and upper timestamp value.
+ timestamps.forEach(timestamp -> {
+ if (timestamp <= target && timestamp > results[0]) {
+ results[0] = timestamp;
+ }
+ if (timestamp >= target && timestamp < results[1]) {
+ results[1] = timestamp;
+ }
+ });
+ // Uses zero value to represent invalid searching result.
+ results[0] = results[0] == Long.MIN_VALUE ? 0 : results[0];
+ results[1] = results[1] == Long.MAX_VALUE ? 0 : results[1];
+ return results;
+ }
+
+ /**
+ * @return Returns the timestamp for 00:00 1 day after the given timestamp based on local
+ * timezone.
+ */
+ @VisibleForTesting
+ static long getTimestampOfNextDay(long timestamp) {
+ return getTimestampWithDayDiff(timestamp, /*dayDiff=*/ 1);
+ }
+
+ /**
+ * Returns whether currentSlot will be used in daily chart.
+ */
+ @VisibleForTesting
+ static boolean isForDailyChart(final boolean isStartOrEnd, final long currentSlot) {
+ // The start and end timestamps will always be used in daily chart.
+ if (isStartOrEnd) {
+ return true;
+ }
+
+ // The timestamps for 00:00 will be used in daily chart.
+ final long startOfTheDay = getTimestampWithDayDiff(currentSlot, /*dayDiff=*/ 0);
+ return currentSlot == startOfTheDay;
+ }
+
+ /**
+ * @return Returns the indexed battery usage data for each corresponding time slot.
+ *
+ * There could be 2 cases of the returned value:
+ * 1) null: empty or invalid data.
+ * 2) non-null: must be a 2d map and composed by 3 parts:
+ * 1 - [SELECTED_INDEX_ALL][SELECTED_INDEX_ALL]
+ * 2 - [0][SELECTED_INDEX_ALL] ~ [maxDailyIndex][SELECTED_INDEX_ALL]
+ * 3 - [0][0] ~ [maxDailyIndex][maxHourlyIndex]
+ */
+ @VisibleForTesting
+ @Nullable
+ static Map<Integer, Map<Integer, BatteryDiffData>> getBatteryUsageMap(
+ final Context context,
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay,
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
+ if (batteryHistoryMap.isEmpty()) {
+ return null;
+ }
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap = new HashMap<>();
+ // Insert diff data from [0][0] to [maxDailyIndex][maxHourlyIndex].
+ insertHourlyUsageDiffData(
+ context, hourlyBatteryLevelsPerDay, batteryHistoryMap, resultMap);
+ // Insert diff data from [0][SELECTED_INDEX_ALL] to [maxDailyIndex][SELECTED_INDEX_ALL].
+ insertDailyUsageDiffData(hourlyBatteryLevelsPerDay, resultMap);
+ // Insert diff data [SELECTED_INDEX_ALL][SELECTED_INDEX_ALL].
+ insertAllUsageDiffData(resultMap);
+ purgeLowPercentageAndFakeData(context, resultMap);
+ if (!isUsageMapValid(resultMap, hourlyBatteryLevelsPerDay)) {
+ return null;
+ }
+ return resultMap;
+ }
+
+ /**
+ * Interpolates history map based on expected timestamp slots and processes the corner case when
+ * the expected start timestamp is earlier than what we have.
+ */
+ private static void interpolateHistory(
+ Context context,
+ final List<Long> rawTimestampList,
+ final List<Long> expectedTimestampSlots,
+ final boolean isFromFullCharge,
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap,
+ final Map<Long, Map<String, BatteryHistEntry>> resultMap) {
+ if (rawTimestampList.isEmpty() || expectedTimestampSlots.isEmpty()) {
+ return;
+ }
+ final long expectedStartTimestamp = expectedTimestampSlots.get(0);
+ final long rawStartTimestamp = rawTimestampList.get(0);
+ int startIndex = 0;
+ // If the expected start timestamp is full charge or earlier than what we have, use the
+ // first data of what we have directly. This should be OK because the expected start
+ // timestamp is the nearest even hour of the raw start timestamp, their time diff is no
+ // more than 1 hour.
+ if (isFromFullCharge || expectedStartTimestamp < rawStartTimestamp) {
+ startIndex = 1;
+ resultMap.put(expectedStartTimestamp, batteryHistoryMap.get(rawStartTimestamp));
+ }
+ final int expectedTimestampSlotsSize = expectedTimestampSlots.size();
+ for (int index = startIndex; index < expectedTimestampSlotsSize; index++) {
+ final long currentSlot = expectedTimestampSlots.get(index);
+ final boolean isStartOrEnd = index == 0 || index == expectedTimestampSlotsSize - 1;
+ interpolateHistoryForSlot(
+ context, currentSlot, rawTimestampList, batteryHistoryMap, resultMap,
+ isStartOrEnd);
+ }
+ }
+
+ private static void interpolateHistoryForSlot(
+ Context context,
+ final long currentSlot,
+ final List<Long> rawTimestampList,
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap,
+ final Map<Long, Map<String, BatteryHistEntry>> resultMap,
+ final boolean isStartOrEnd) {
+ final long[] nearestTimestamps = findNearestTimestamp(rawTimestampList, currentSlot);
+ final long lowerTimestamp = nearestTimestamps[0];
+ final long upperTimestamp = nearestTimestamps[1];
+ // Case 1: upper timestamp is zero since scheduler is delayed!
+ if (upperTimestamp == 0) {
+ log(context, "job scheduler is delayed", currentSlot, null);
+ resultMap.put(currentSlot, new HashMap<>());
+ return;
+ }
+ // Case 2: upper timestamp is closed to the current timestamp.
+ if ((upperTimestamp - currentSlot)
+ < MAX_DIFF_SECONDS_OF_UPPER_TIMESTAMP * DateUtils.SECOND_IN_MILLIS) {
+ log(context, "force align into the nearest slot", currentSlot, null);
+ resultMap.put(currentSlot, batteryHistoryMap.get(upperTimestamp));
+ return;
+ }
+ // Case 3: lower timestamp is zero before starting to collect data.
+ if (lowerTimestamp == 0) {
+ log(context, "no lower timestamp slot data", currentSlot, null);
+ resultMap.put(currentSlot, new HashMap<>());
+ return;
+ }
+ interpolateHistoryForSlot(context,
+ currentSlot, lowerTimestamp, upperTimestamp, batteryHistoryMap, resultMap,
+ isStartOrEnd);
+ }
+
+ private static void interpolateHistoryForSlot(
+ Context context,
+ final long currentSlot,
+ final long lowerTimestamp,
+ final long upperTimestamp,
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap,
+ final Map<Long, Map<String, BatteryHistEntry>> resultMap,
+ final boolean isStartOrEnd) {
+ final Map<String, BatteryHistEntry> lowerEntryDataMap =
+ batteryHistoryMap.get(lowerTimestamp);
+ final Map<String, BatteryHistEntry> upperEntryDataMap =
+ batteryHistoryMap.get(upperTimestamp);
+ // Verifies whether the lower data is valid to use or not by checking boot time.
+ final BatteryHistEntry upperEntryDataFirstEntry =
+ upperEntryDataMap.values().stream().findFirst().get();
+ final long upperEntryDataBootTimestamp =
+ upperEntryDataFirstEntry.mTimestamp - upperEntryDataFirstEntry.mBootTimestamp;
+ // Lower data is captured before upper data corresponding device is booting.
+ // Skips the booting-specific logics and always does interpolation for daily chart level
+ // data.
+ if (lowerTimestamp < upperEntryDataBootTimestamp
+ && !isForDailyChart(isStartOrEnd, currentSlot)) {
+ // Provides an opportunity to force align the slot directly.
+ if ((upperTimestamp - currentSlot) < 10 * DateUtils.MINUTE_IN_MILLIS) {
+ log(context, "force align into the nearest slot", currentSlot, null);
+ resultMap.put(currentSlot, upperEntryDataMap);
+ } else {
+ log(context, "in the different booting section", currentSlot, null);
+ resultMap.put(currentSlot, new HashMap<>());
+ }
+ return;
+ }
+ log(context, "apply interpolation arithmetic", currentSlot, null);
+ final Map<String, BatteryHistEntry> newHistEntryMap = new HashMap<>();
+ final double timestampLength = upperTimestamp - lowerTimestamp;
+ final double timestampDiff = currentSlot - lowerTimestamp;
+ // Applies interpolation arithmetic for each BatteryHistEntry.
+ for (String entryKey : upperEntryDataMap.keySet()) {
+ final BatteryHistEntry lowerEntry = lowerEntryDataMap.get(entryKey);
+ final BatteryHistEntry upperEntry = upperEntryDataMap.get(entryKey);
+ // Checks whether there is any abnormal battery reset conditions.
+ if (lowerEntry != null) {
+ final boolean invalidForegroundUsageTime =
+ lowerEntry.mForegroundUsageTimeInMs > upperEntry.mForegroundUsageTimeInMs;
+ final boolean invalidBackgroundUsageTime =
+ lowerEntry.mBackgroundUsageTimeInMs > upperEntry.mBackgroundUsageTimeInMs;
+ if (invalidForegroundUsageTime || invalidBackgroundUsageTime) {
+ newHistEntryMap.put(entryKey, upperEntry);
+ log(context, "abnormal reset condition is found", currentSlot, upperEntry);
+ continue;
+ }
+ }
+ final BatteryHistEntry newEntry =
+ BatteryHistEntry.interpolate(
+ currentSlot,
+ upperTimestamp,
+ /*ratio=*/ timestampDiff / timestampLength,
+ lowerEntry,
+ upperEntry);
+ newHistEntryMap.put(entryKey, newEntry);
+ if (lowerEntry == null) {
+ log(context, "cannot find lower entry data", currentSlot, upperEntry);
+ continue;
+ }
+ }
+ resultMap.put(currentSlot, newHistEntryMap);
+ }
+
+ /**
+ * @return Returns the nearest even hour timestamp of the given timestamp.
+ */
+ private static long getNearestEvenHourTimestamp(long rawTimestamp) {
+ // If raw hour is even, the nearest even hour should be the even hour before raw
+ // start. The hour doesn't need to change and just set the minutes and seconds to 0.
+ // Otherwise, the nearest even hour should be raw hour + 1.
+ // For example, the nearest hour of 14:30:50 should be 14:00:00. While the nearest
+ // hour of 15:30:50 should be 16:00:00.
+ return getEvenHourTimestamp(rawTimestamp, /*addHourOfDay*/ 1);
+ }
+
+ /**
+ * @return Returns the last even hour timestamp before the given timestamp.
+ */
+ private static long getLastEvenHourBeforeTimestamp(long rawTimestamp) {
+ // If raw hour is even, the hour doesn't need to change as well.
+ // Otherwise, the even hour before raw end should be raw hour - 1.
+ // For example, the even hour before 14:30:50 should be 14:00:00. While the even
+ // hour before 15:30:50 should be 14:00:00.
+ return getEvenHourTimestamp(rawTimestamp, /*addHourOfDay*/ -1);
+ }
+
+ private static long getEvenHourTimestamp(long rawTimestamp, int addHourOfDay) {
+ final Calendar evenHourCalendar = Calendar.getInstance();
+ evenHourCalendar.setTimeInMillis(rawTimestamp);
+ // Before computing the evenHourCalendar, record raw hour based on local timezone.
+ final int rawHour = evenHourCalendar.get(Calendar.HOUR_OF_DAY);
+ if (rawHour % 2 != 0) {
+ evenHourCalendar.add(Calendar.HOUR_OF_DAY, addHourOfDay);
+ }
+ evenHourCalendar.set(Calendar.MINUTE, 0);
+ evenHourCalendar.set(Calendar.SECOND, 0);
+ evenHourCalendar.set(Calendar.MILLISECOND, 0);
+ return evenHourCalendar.getTimeInMillis();
+ }
+
+ private static List<List<Long>> getHourlyTimestamps(final List<Long> dailyTimestamps) {
+ final List<List<Long>> hourlyTimestamps = new ArrayList<>();
+ if (dailyTimestamps.size() < MIN_DAILY_DATA_SIZE) {
+ return hourlyTimestamps;
+ }
+
+ for (int dailyStartIndex = 0; dailyStartIndex < dailyTimestamps.size() - 1;
+ dailyStartIndex++) {
+ long currentTimestamp = dailyTimestamps.get(dailyStartIndex);
+ final long dailyEndTimestamp = dailyTimestamps.get(dailyStartIndex + 1);
+ final List<Long> hourlyTimestampsPerDay = new ArrayList<>();
+ while (currentTimestamp <= dailyEndTimestamp) {
+ hourlyTimestampsPerDay.add(currentTimestamp);
+ currentTimestamp += 2 * DateUtils.HOUR_IN_MILLIS;
+ }
+ hourlyTimestamps.add(hourlyTimestampsPerDay);
+ }
+ return hourlyTimestamps;
+ }
+
+ private static List<BatteryLevelData.PeriodBatteryLevelData> getHourlyPeriodBatteryLevelData(
+ Context context,
+ final Map<Long, Map<String, BatteryHistEntry>> processedBatteryHistoryMap,
+ final List<List<Long>> timestamps) {
+ final List<BatteryLevelData.PeriodBatteryLevelData> levelData = new ArrayList<>();
+ timestamps.forEach(
+ timestampList -> levelData.add(
+ getPeriodBatteryLevelData(
+ context, processedBatteryHistoryMap, timestampList)));
+ return levelData;
+ }
+
+ private static BatteryLevelData.PeriodBatteryLevelData getPeriodBatteryLevelData(
+ Context context,
+ final Map<Long, Map<String, BatteryHistEntry>> processedBatteryHistoryMap,
+ final List<Long> timestamps) {
+ final List<Integer> levels = new ArrayList<>();
+ timestamps.forEach(
+ timestamp -> levels.add(getLevel(context, processedBatteryHistoryMap, timestamp)));
+ return new BatteryLevelData.PeriodBatteryLevelData(timestamps, levels);
+ }
+
+ private static Integer getLevel(
+ Context context,
+ final Map<Long, Map<String, BatteryHistEntry>> processedBatteryHistoryMap,
+ final long timestamp) {
+ final Map<String, BatteryHistEntry> entryMap = processedBatteryHistoryMap.get(timestamp);
+ if (entryMap == null || entryMap.isEmpty()) {
+ Log.e(TAG, "abnormal entry list in the timestamp:"
+ + utcToLocalTime(context, timestamp));
+ return null;
+ }
+ // Averages the battery level in each time slot to avoid corner conditions.
+ float batteryLevelCounter = 0;
+ for (BatteryHistEntry entry : entryMap.values()) {
+ batteryLevelCounter += entry.mBatteryLevel;
+ }
+ return Math.round(batteryLevelCounter / entryMap.size());
+ }
+
+ private static void insertHourlyUsageDiffData(
+ Context context,
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay,
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap,
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap) {
+ final int currentUserId = context.getUserId();
+ final UserHandle userHandle =
+ Utils.getManagedProfile(context.getSystemService(UserManager.class));
+ final int workProfileUserId =
+ userHandle != null ? userHandle.getIdentifier() : Integer.MIN_VALUE;
+ // Each time slot usage diff data =
+ // Math.abs(timestamp[i+2] data - timestamp[i+1] data) +
+ // Math.abs(timestamp[i+1] data - timestamp[i] data);
+ // since we want to aggregate every two hours data into a single time slot.
+ for (int dailyIndex = 0; dailyIndex < hourlyBatteryLevelsPerDay.size(); dailyIndex++) {
+ final Map<Integer, BatteryDiffData> dailyDiffMap = new HashMap<>();
+ resultMap.put(dailyIndex, dailyDiffMap);
+ if (hourlyBatteryLevelsPerDay.get(dailyIndex) == null) {
+ continue;
+ }
+ final List<Long> timestamps = hourlyBatteryLevelsPerDay.get(dailyIndex).getTimestamps();
+ for (int hourlyIndex = 0; hourlyIndex < timestamps.size() - 1; hourlyIndex++) {
+ final BatteryDiffData hourlyBatteryDiffData =
+ insertHourlyUsageDiffDataPerSlot(
+ context,
+ currentUserId,
+ workProfileUserId,
+ hourlyIndex,
+ timestamps,
+ batteryHistoryMap);
+ dailyDiffMap.put(hourlyIndex, hourlyBatteryDiffData);
+ }
+ }
+ }
+
+ private static void insertDailyUsageDiffData(
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay,
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap) {
+ for (int index = 0; index < hourlyBatteryLevelsPerDay.size(); index++) {
+ Map<Integer, BatteryDiffData> dailyUsageMap = resultMap.get(index);
+ if (dailyUsageMap == null) {
+ dailyUsageMap = new HashMap<>();
+ resultMap.put(index, dailyUsageMap);
+ }
+ dailyUsageMap.put(
+ SELECTED_INDEX_ALL,
+ getAccumulatedUsageDiffData(dailyUsageMap.values()));
+ }
+ }
+
+ private static void insertAllUsageDiffData(
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap) {
+ final List<BatteryDiffData> diffDataList = new ArrayList<>();
+ resultMap.keySet().forEach(
+ key -> diffDataList.add(resultMap.get(key).get(SELECTED_INDEX_ALL)));
+ final Map<Integer, BatteryDiffData> allUsageMap = new HashMap<>();
+ allUsageMap.put(SELECTED_INDEX_ALL, getAccumulatedUsageDiffData(diffDataList));
+ resultMap.put(SELECTED_INDEX_ALL, allUsageMap);
+ }
+
+ @Nullable
+ private static BatteryDiffData insertHourlyUsageDiffDataPerSlot(
+ Context context,
+ final int currentUserId,
+ final int workProfileUserId,
+ final int currentIndex,
+ final List<Long> timestamps,
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
+ final List<BatteryDiffEntry> appEntries = new ArrayList<>();
+ final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
+
+ final Long currentTimestamp = timestamps.get(currentIndex);
+ final Long nextTimestamp = currentTimestamp + DateUtils.HOUR_IN_MILLIS;
+ final Long nextTwoTimestamp = nextTimestamp + DateUtils.HOUR_IN_MILLIS;
+ // Fetches BatteryHistEntry data from corresponding time slot.
+ final Map<String, BatteryHistEntry> currentBatteryHistMap =
+ batteryHistoryMap.getOrDefault(currentTimestamp, EMPTY_BATTERY_MAP);
+ final Map<String, BatteryHistEntry> nextBatteryHistMap =
+ batteryHistoryMap.getOrDefault(nextTimestamp, EMPTY_BATTERY_MAP);
+ final Map<String, BatteryHistEntry> nextTwoBatteryHistMap =
+ batteryHistoryMap.getOrDefault(nextTwoTimestamp, EMPTY_BATTERY_MAP);
+ // We should not get the empty list since we have at least one fake data to record
+ // the battery level and status in each time slot, the empty list is used to
+ // represent there is no enough data to apply interpolation arithmetic.
+ if (currentBatteryHistMap.isEmpty()
+ || nextBatteryHistMap.isEmpty()
+ || nextTwoBatteryHistMap.isEmpty()) {
+ return null;
+ }
+
+ // Collects all keys in these three time slot records as all populations.
+ final Set<String> allBatteryHistEntryKeys = new ArraySet<>();
+ allBatteryHistEntryKeys.addAll(currentBatteryHistMap.keySet());
+ allBatteryHistEntryKeys.addAll(nextBatteryHistMap.keySet());
+ allBatteryHistEntryKeys.addAll(nextTwoBatteryHistMap.keySet());
+
+ double totalConsumePower = 0.0;
+ double consumePowerFromOtherUsers = 0f;
+ // Calculates all packages diff usage data in a specific time slot.
+ for (String key : allBatteryHistEntryKeys) {
+ final BatteryHistEntry currentEntry =
+ currentBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
+ final BatteryHistEntry nextEntry =
+ nextBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
+ final BatteryHistEntry nextTwoEntry =
+ nextTwoBatteryHistMap.getOrDefault(key, EMPTY_BATTERY_HIST_ENTRY);
+ // Cumulative values is a specific time slot for a specific app.
+ long foregroundUsageTimeInMs =
+ getDiffValue(
+ currentEntry.mForegroundUsageTimeInMs,
+ nextEntry.mForegroundUsageTimeInMs,
+ nextTwoEntry.mForegroundUsageTimeInMs);
+ long backgroundUsageTimeInMs =
+ getDiffValue(
+ currentEntry.mBackgroundUsageTimeInMs,
+ nextEntry.mBackgroundUsageTimeInMs,
+ nextTwoEntry.mBackgroundUsageTimeInMs);
+ double consumePower =
+ getDiffValue(
+ currentEntry.mConsumePower,
+ nextEntry.mConsumePower,
+ nextTwoEntry.mConsumePower);
+ // Excludes entry since we don't have enough data to calculate.
+ if (foregroundUsageTimeInMs == 0
+ && backgroundUsageTimeInMs == 0
+ && consumePower == 0) {
+ continue;
+ }
+ final BatteryHistEntry selectedBatteryEntry =
+ selectBatteryHistEntry(currentEntry, nextEntry, nextTwoEntry);
+ if (selectedBatteryEntry == null) {
+ continue;
+ }
+ // Forces refine the cumulative value since it may introduce deviation error since we
+ // will apply the interpolation arithmetic.
+ final float totalUsageTimeInMs =
+ foregroundUsageTimeInMs + backgroundUsageTimeInMs;
+ if (totalUsageTimeInMs > TOTAL_HOURLY_TIME_THRESHOLD) {
+ final float ratio = TOTAL_HOURLY_TIME_THRESHOLD / totalUsageTimeInMs;
+ if (DEBUG) {
+ Log.w(TAG, String.format("abnormal usage time %d|%d for:\n%s",
+ Duration.ofMillis(foregroundUsageTimeInMs).getSeconds(),
+ Duration.ofMillis(backgroundUsageTimeInMs).getSeconds(),
+ currentEntry));
+ }
+ foregroundUsageTimeInMs =
+ Math.round(foregroundUsageTimeInMs * ratio);
+ backgroundUsageTimeInMs =
+ Math.round(backgroundUsageTimeInMs * ratio);
+ consumePower = consumePower * ratio;
+ }
+ totalConsumePower += consumePower;
+
+ final boolean isFromOtherUsers = isConsumedFromOtherUsers(
+ currentUserId, workProfileUserId, selectedBatteryEntry);
+ if (isFromOtherUsers) {
+ consumePowerFromOtherUsers += consumePower;
+ } else {
+ final BatteryDiffEntry currentBatteryDiffEntry = new BatteryDiffEntry(
+ context,
+ foregroundUsageTimeInMs,
+ backgroundUsageTimeInMs,
+ consumePower,
+ selectedBatteryEntry);
+ if (currentBatteryDiffEntry.isSystemEntry()) {
+ systemEntries.add(currentBatteryDiffEntry);
+ } else {
+ appEntries.add(currentBatteryDiffEntry);
+ }
+ }
+ }
+ if (consumePowerFromOtherUsers != 0) {
+ systemEntries.add(createOtherUsersEntry(context, consumePowerFromOtherUsers));
+ }
+
+ // If there is no data, return null instead of empty item.
+ if (appEntries.isEmpty() && systemEntries.isEmpty()) {
+ return null;
+ }
+
+ final BatteryDiffData resultDiffData =
+ new BatteryDiffData(appEntries, systemEntries, totalConsumePower);
+ return resultDiffData;
+ }
+
+ private static boolean isConsumedFromOtherUsers(
+ final int currentUserId,
+ final int workProfileUserId,
+ final BatteryHistEntry batteryHistEntry) {
+ return batteryHistEntry.mConsumerType == ConvertUtils.CONSUMER_TYPE_UID_BATTERY
+ && batteryHistEntry.mUserId != currentUserId
+ && batteryHistEntry.mUserId != workProfileUserId;
+ }
+
+ @Nullable
+ private static BatteryDiffData getAccumulatedUsageDiffData(
+ final Collection<BatteryDiffData> diffEntryListData) {
+ double totalConsumePower = 0f;
+ final Map<String, BatteryDiffEntry> diffEntryMap = new HashMap<>();
+ final List<BatteryDiffEntry> appEntries = new ArrayList<>();
+ final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
+
+ for (BatteryDiffData diffEntryList : diffEntryListData) {
+ if (diffEntryList == null) {
+ continue;
+ }
+ for (BatteryDiffEntry entry : diffEntryList.getAppDiffEntryList()) {
+ computeUsageDiffDataPerEntry(entry, diffEntryMap);
+ totalConsumePower += entry.mConsumePower;
+ }
+ for (BatteryDiffEntry entry : diffEntryList.getSystemDiffEntryList()) {
+ computeUsageDiffDataPerEntry(entry, diffEntryMap);
+ totalConsumePower += entry.mConsumePower;
+ }
+ }
+
+ final Collection<BatteryDiffEntry> diffEntryList = diffEntryMap.values();
+ for (BatteryDiffEntry entry : diffEntryList) {
+ // Sets total daily consume power data into all BatteryDiffEntry.
+ entry.setTotalConsumePower(totalConsumePower);
+ if (entry.isSystemEntry()) {
+ systemEntries.add(entry);
+ } else {
+ appEntries.add(entry);
+ }
+ }
+
+ return diffEntryList.isEmpty() ? null : new BatteryDiffData(appEntries, systemEntries);
+ }
+
+ private static void computeUsageDiffDataPerEntry(
+ final BatteryDiffEntry entry,
+ final Map<String, BatteryDiffEntry> diffEntryMap) {
+ final String key = entry.mBatteryHistEntry.getKey();
+ final BatteryDiffEntry oldBatteryDiffEntry = diffEntryMap.get(key);
+ // Creates new BatteryDiffEntry if we don't have it.
+ if (oldBatteryDiffEntry == null) {
+ diffEntryMap.put(key, entry.clone());
+ } else {
+ // Sums up some field data into the existing one.
+ oldBatteryDiffEntry.mForegroundUsageTimeInMs +=
+ entry.mForegroundUsageTimeInMs;
+ oldBatteryDiffEntry.mBackgroundUsageTimeInMs +=
+ entry.mBackgroundUsageTimeInMs;
+ oldBatteryDiffEntry.mConsumePower += entry.mConsumePower;
+ }
+ }
+
+ // Removes low percentage data and fake usage data, which will be zero value.
+ private static void purgeLowPercentageAndFakeData(
+ final Context context,
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap) {
+ final Set<CharSequence> backgroundUsageTimeHideList =
+ FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context)
+ .getHideBackgroundUsageTimeSet(context);
+ final CharSequence[] notAllowShowEntryPackages =
+ FeatureFactory.getFactory(context)
+ .getPowerUsageFeatureProvider(context)
+ .getHideApplicationEntries(context);
+ resultMap.keySet().forEach(dailyKey -> {
+ final Map<Integer, BatteryDiffData> dailyUsageMap = resultMap.get(dailyKey);
+ dailyUsageMap.values().forEach(diffEntryLists -> {
+ if (diffEntryLists == null) {
+ return;
+ }
+ purgeLowPercentageAndFakeData(
+ diffEntryLists.getAppDiffEntryList(), backgroundUsageTimeHideList,
+ notAllowShowEntryPackages);
+ purgeLowPercentageAndFakeData(
+ diffEntryLists.getSystemDiffEntryList(), backgroundUsageTimeHideList,
+ notAllowShowEntryPackages);
+ });
+ });
+ }
+
+ private static void purgeLowPercentageAndFakeData(
+ final List<BatteryDiffEntry> entries,
+ final Set<CharSequence> backgroundUsageTimeHideList,
+ final CharSequence[] notAllowShowEntryPackages) {
+ final Iterator<BatteryDiffEntry> iterator = entries.iterator();
+ while (iterator.hasNext()) {
+ final BatteryDiffEntry entry = iterator.next();
+ final String packageName = entry.getPackageName();
+ if (entry.getPercentOfTotal() < PERCENTAGE_OF_TOTAL_THRESHOLD
+ || FAKE_PACKAGE_NAME.equals(packageName)
+ || contains(packageName, notAllowShowEntryPackages)) {
+ iterator.remove();
+ }
+ if (packageName != null
+ && !backgroundUsageTimeHideList.isEmpty()
+ && contains(packageName, backgroundUsageTimeHideList)) {
+ entry.mBackgroundUsageTimeInMs = 0;
+ }
+ }
+ }
+
+ private static boolean isUsageMapValid(
+ final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageMap,
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay) {
+ if (batteryUsageMap.get(SELECTED_INDEX_ALL) == null
+ || !batteryUsageMap.get(SELECTED_INDEX_ALL).containsKey(SELECTED_INDEX_ALL)) {
+ Log.e(TAG, "no [SELECTED_INDEX_ALL][SELECTED_INDEX_ALL] in batteryUsageMap");
+ return false;
+ }
+ for (int dailyIndex = 0; dailyIndex < hourlyBatteryLevelsPerDay.size(); dailyIndex++) {
+ if (batteryUsageMap.get(dailyIndex) == null
+ || !batteryUsageMap.get(dailyIndex).containsKey(SELECTED_INDEX_ALL)) {
+ Log.e(TAG, "no [" + dailyIndex + "][SELECTED_INDEX_ALL] in batteryUsageMap, "
+ + "daily size is: " + hourlyBatteryLevelsPerDay.size());
+ return false;
+ }
+ if (hourlyBatteryLevelsPerDay.get(dailyIndex) == null) {
+ continue;
+ }
+ final List<Long> timestamps = hourlyBatteryLevelsPerDay.get(dailyIndex).getTimestamps();
+ // Length of hourly usage map should be the length of hourly level data - 1.
+ for (int hourlyIndex = 0; hourlyIndex < timestamps.size() - 1; hourlyIndex++) {
+ if (!batteryUsageMap.get(dailyIndex).containsKey(hourlyIndex)) {
+ Log.e(TAG, "no [" + dailyIndex + "][" + hourlyIndex + "] in batteryUsageMap, "
+ + "hourly size is: " + (timestamps.size() - 1));
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ private static long getTimestampWithDayDiff(final long timestamp, final int dayDiff) {
+ final Calendar calendar = Calendar.getInstance();
+ calendar.setTimeInMillis(timestamp);
+ calendar.add(Calendar.DAY_OF_YEAR, dayDiff);
+ calendar.set(Calendar.HOUR_OF_DAY, 0);
+ calendar.set(Calendar.MINUTE, 0);
+ calendar.set(Calendar.SECOND, 0);
+ return calendar.getTimeInMillis();
+ }
+
+ private static boolean contains(String target, Set<CharSequence> packageNames) {
+ if (target != null && packageNames != null) {
+ for (CharSequence packageName : packageNames) {
+ if (TextUtils.equals(target, packageName)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private static long getDiffValue(long v1, long v2, long v3) {
+ return (v2 > v1 ? v2 - v1 : 0) + (v3 > v2 ? v3 - v2 : 0);
+ }
+
+ private static double getDiffValue(double v1, double v2, double v3) {
+ return (v2 > v1 ? v2 - v1 : 0) + (v3 > v2 ? v3 - v2 : 0);
+ }
+
+ @Nullable
+ private static BatteryHistEntry selectBatteryHistEntry(
+ final BatteryHistEntry... batteryHistEntries) {
+ for (BatteryHistEntry entry : batteryHistEntries) {
+ if (entry != null && entry != EMPTY_BATTERY_HIST_ENTRY) {
+ return entry;
+ }
+ }
+ return null;
+ }
+
+ private static BatteryDiffEntry createOtherUsersEntry(
+ Context context, final double consumePower) {
+ final ContentValues values = new ContentValues();
+ values.put(BatteryHistEntry.KEY_UID, BatteryUtils.UID_OTHER_USERS);
+ values.put(BatteryHistEntry.KEY_USER_ID, BatteryUtils.UID_OTHER_USERS);
+ values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ // We will show the percentage for the "other users" item only, the aggregated
+ // running time information is useless for users to identify individual apps.
+ final BatteryDiffEntry batteryDiffEntry = new BatteryDiffEntry(
+ context,
+ /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ 0,
+ consumePower,
+ new BatteryHistEntry(values));
+ return batteryDiffEntry;
+ }
+
+ private static void log(Context context, final String content, final long timestamp,
+ final BatteryHistEntry entry) {
+ if (DEBUG) {
+ Log.d(TAG, String.format(entry != null ? "%s %s:\n%s" : "%s %s:%s",
+ utcToLocalTime(context, timestamp), content, entry));
+ }
+ }
+
+ // Compute diff map and loads all items (icon and label) in the background.
+ private static final class ComputeUsageMapAndLoadItemsTask
+ extends AsyncTask<Void, Void, Map<Integer, Map<Integer, BatteryDiffData>>> {
+
+ private Context mApplicationContext;
+ private Handler mHandler;
+ private UsageMapAsyncResponse mAsyncResponseDelegate;
+ private List<BatteryLevelData.PeriodBatteryLevelData> mHourlyBatteryLevelsPerDay;
+ private Map<Long, Map<String, BatteryHistEntry>> mBatteryHistoryMap;
+
+ private ComputeUsageMapAndLoadItemsTask(
+ Context context,
+ Handler handler,
+ final UsageMapAsyncResponse asyncResponseDelegate,
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay,
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
+ mApplicationContext = context.getApplicationContext();
+ mHandler = handler;
+ mAsyncResponseDelegate = asyncResponseDelegate;
+ mHourlyBatteryLevelsPerDay = hourlyBatteryLevelsPerDay;
+ mBatteryHistoryMap = batteryHistoryMap;
+ }
+
+ @Override
+ protected Map<Integer, Map<Integer, BatteryDiffData>> doInBackground(Void... voids) {
+ if (mApplicationContext == null
+ || mHandler == null
+ || mAsyncResponseDelegate == null
+ || mBatteryHistoryMap == null
+ || mHourlyBatteryLevelsPerDay == null) {
+ Log.e(TAG, "invalid input for ComputeUsageMapAndLoadItemsTask()");
+ return null;
+ }
+ final long startTime = System.currentTimeMillis();
+ final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageMap =
+ getBatteryUsageMap(
+ mApplicationContext, mHourlyBatteryLevelsPerDay, mBatteryHistoryMap);
+ if (batteryUsageMap != null) {
+ // Pre-loads each BatteryDiffEntry relative icon and label for all slots.
+ final BatteryDiffData batteryUsageMapForAll =
+ batteryUsageMap.get(SELECTED_INDEX_ALL).get(SELECTED_INDEX_ALL);
+ if (batteryUsageMapForAll != null) {
+ batteryUsageMapForAll.getAppDiffEntryList().forEach(
+ entry -> entry.loadLabelAndIcon());
+ batteryUsageMapForAll.getSystemDiffEntryList().forEach(
+ entry -> entry.loadLabelAndIcon());
+ }
+ }
+ Log.d(TAG, String.format("execute ComputeUsageMapAndLoadItemsTask in %d/ms",
+ (System.currentTimeMillis() - startTime)));
+ return batteryUsageMap;
+ }
+
+ @Override
+ protected void onPostExecute(
+ final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageMap) {
+ mApplicationContext = null;
+ mHourlyBatteryLevelsPerDay = null;
+ mBatteryHistoryMap = null;
+ // Post results back to main thread to refresh UI.
+ if (mHandler != null && mAsyncResponseDelegate != null) {
+ mHandler.post(() -> {
+ mAsyncResponseDelegate.onBatteryUsageMapLoaded(batteryUsageMap);
+ });
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/ExpandDividerPreference.java b/src/com/android/settings/fuelgauge/batteryusage/ExpandDividerPreference.java
similarity index 91%
rename from src/com/android/settings/fuelgauge/ExpandDividerPreference.java
rename to src/com/android/settings/fuelgauge/batteryusage/ExpandDividerPreference.java
index 4517177..8af842b 100644
--- a/src/com/android/settings/fuelgauge/ExpandDividerPreference.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/ExpandDividerPreference.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,11 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.content.Context;
import android.util.AttributeSet;
-import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
@@ -33,8 +32,10 @@
@VisibleForTesting
static final String PREFERENCE_KEY = "expandable_divider";
- @VisibleForTesting TextView mTextView;
- @VisibleForTesting ImageView mImageView;
+ @VisibleForTesting
+ TextView mTextView;
+ @VisibleForTesting
+ ImageView mImageView;
private OnExpandListener mOnExpandListener;
private boolean mIsExpanded = false;
@@ -42,6 +43,7 @@
/** A callback listener for expand state is changed by users. */
public interface OnExpandListener {
+ /** Callback function for expand state is changed by users. */
void onExpand(boolean isExpanded);
}
diff --git a/src/com/android/settings/fuelgauge/PowerGaugePreference.java b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
similarity index 91%
rename from src/com/android/settings/fuelgauge/PowerGaugePreference.java
rename to src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
index ea79d11..5a4f672 100644
--- a/src/com/android/settings/fuelgauge/PowerGaugePreference.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreference.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import android.content.Context;
import android.graphics.drawable.Drawable;
@@ -67,34 +67,41 @@
mShowAnomalyIcon = false;
}
+ /** Sets the content description. */
public void setContentDescription(String name) {
mContentDescription = name;
notifyChanged();
}
+ /** Sets the percent of total. */
public void setPercent(double percentOfTotal) {
mProgress = Utils.formatPercentage(percentOfTotal, true);
notifyChanged();
}
+ /** Gets the percent of total. */
public String getPercent() {
return mProgress.toString();
}
+ /** Sets the subtitle. */
public void setSubtitle(CharSequence subtitle) {
mProgress = subtitle;
notifyChanged();
}
+ /** Gets the subtitle. */
public CharSequence getSubtitle() {
return mProgress;
}
+ /** Sets whether to show anomaly icon */
public void shouldShowAnomalyIcon(boolean showAnomalyIcon) {
mShowAnomalyIcon = showAnomalyIcon;
notifyChanged();
}
+ /** Gets whether to show anomaly icon */
public boolean showAnomalyIcon() {
return mShowAnomalyIcon;
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
similarity index 88%
rename from src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
rename to src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
index afbb71f..b88d85d 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
@@ -1,17 +1,19 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of the License at
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
- * Unless required by applicable law or agreed to in writing, software distributed under the
- * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the specific language governing
- * permissions and limitations under the License.
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType;
@@ -35,6 +37,7 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.fuelgauge.BatteryBroadcastReceiver;
+import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -45,6 +48,7 @@
import java.util.List;
import java.util.Map;
+/** Advanced power usage. */
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class PowerUsageAdvanced extends PowerUsageBase {
private static final String TAG = "AdvancedBatteryUsage";
@@ -69,14 +73,14 @@
private final ContentObserver mBatteryObserver =
new ContentObserver(new Handler()) {
- @Override
- public void onChange(boolean selfChange) {
- Log.d(TAG, "onBatteryContentChange: " + selfChange);
- mIsChartDataLoaded = false;
- restartBatteryStatsLoader(
- BatteryBroadcastReceiver.BatteryUpdateType.MANUAL);
- }
- };
+ @Override
+ public void onChange(boolean selfChange) {
+ Log.d(TAG, "onBatteryContentChange: " + selfChange);
+ mIsChartDataLoaded = false;
+ restartBatteryStatsLoader(
+ BatteryBroadcastReceiver.BatteryUpdateType.MANUAL);
+ }
+ };
@Override
public void onCreate(Bundle icicle) {
@@ -87,7 +91,7 @@
if (mIsChartGraphEnabled) {
setBatteryChartPreferenceController();
} else {
- updateHistPrefSummary(context);
+ updateHistPrefSummary(context);
}
}
@@ -143,13 +147,13 @@
if (mIsChartGraphEnabled) {
mBatteryChartPreferenceController =
new BatteryChartPreferenceController(context, KEY_APP_LIST,
- getSettingsLifecycle(), (SettingsActivity) getActivity(), this);
+ getSettingsLifecycle(), (SettingsActivity) getActivity(), this);
controllers.add(mBatteryChartPreferenceController);
setBatteryChartPreferenceController();
} else {
mBatteryAppListPreferenceController =
new BatteryAppListPreferenceController(context, KEY_APP_LIST,
- getSettingsLifecycle(), (SettingsActivity) getActivity(), this);
+ getSettingsLifecycle(), (SettingsActivity) getActivity(), this);
controllers.add(mBatteryAppListPreferenceController);
}
return controllers;
@@ -185,7 +189,7 @@
if (mIsChartGraphEnabled && !mIsChartDataLoaded) {
mIsChartDataLoaded = true;
getLoaderManager().restartLoader(LOADER_BATTERY_USAGE_STATS, bundle,
- mBatteryHistoryLoaderCallbacks);
+ mBatteryHistoryLoaderCallbacks);
} else if (!mIsChartGraphEnabled) {
super.restartBatteryStatsLoader(refreshType);
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageBase.java
similarity index 95%
rename from src/com/android/settings/fuelgauge/PowerUsageBase.java
rename to src/com/android/settings/fuelgauge/batteryusage/PowerUsageBase.java
index 6563155..ccefdf2 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageBase.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageBase.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType;
@@ -23,7 +23,6 @@
import android.os.Bundle;
import android.os.UserManager;
import android.util.Log;
-import android.view.Menu;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
@@ -31,6 +30,8 @@
import androidx.loader.content.Loader;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.fuelgauge.BatteryBroadcastReceiver;
+import com.android.settings.fuelgauge.BatteryUtils;
/**
* Common base class for things that need to show the battery usage graph.
@@ -99,6 +100,7 @@
}
protected abstract void refreshUi(@BatteryUpdateType int refreshType);
+
protected abstract boolean isBatteryHistoryNeeded();
protected void updatePreference(BatteryHistoryPreference historyPref) {
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java
similarity index 95%
rename from src/com/android/settings/fuelgauge/PowerUsageSummary.java
rename to src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java
index 19a8011..bca32a7 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType;
@@ -34,6 +34,11 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
+import com.android.settings.fuelgauge.BatteryHeaderPreferenceController;
+import com.android.settings.fuelgauge.BatteryInfo;
+import com.android.settings.fuelgauge.BatteryInfoLoader;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
@@ -254,10 +259,7 @@
@VisibleForTesting
void initPreference() {
mBatteryUsagePreference = findPreference(KEY_BATTERY_USAGE);
- mBatteryUsagePreference.setSummary(
- mPowerFeatureProvider.isChartGraphEnabled(getContext()) ?
- getString(R.string.advanced_battery_preference_summary_with_hours) :
- getString(R.string.advanced_battery_preference_summary));
+ mBatteryUsagePreference.setSummary(getString(R.string.advanced_battery_preference_summary));
mHelpPreference = findPreference(KEY_BATTERY_ERROR);
mHelpPreference.setVisible(false);
diff --git a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
deleted file mode 100644
index 82766db..0000000
--- a/src/com/android/settings/gestures/LongPressPowerButtonPreferenceController.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.gestures;
-
-import static com.android.settings.gestures.PowerMenuSettingsUtils.LONG_PRESS_POWER_ASSISTANT_VALUE;
-import static com.android.settings.gestures.PowerMenuSettingsUtils.LONG_PRESS_POWER_GLOBAL_ACTIONS;
-import static com.android.settings.gestures.PowerMenuSettingsUtils.POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE;
-import static com.android.settings.gestures.PowerMenuSettingsUtils.POWER_BUTTON_LONG_PRESS_SETTING;
-
-import android.content.Context;
-import android.provider.Settings;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.settings.R;
-import com.android.settings.core.TogglePreferenceController;
-
-import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
-
-/**
- * Configures the behaviour of long press power button action.
- */
-public class LongPressPowerButtonPreferenceController extends TogglePreferenceController {
-
- private static final String KEY_CHORD_POWER_VOLUME_UP_SETTING =
- Settings.Global.KEY_CHORD_POWER_VOLUME_UP;
-
- private static final String FOOTER_HINT_KEY = "power_menu_power_volume_up_hint";
- private static final String ASSIST_SWITCH_KEY = "gesture_power_menu_long_press_for_assist";
-
- /**
- * Values used for volume key chord behaviour when Assist setting is enabled.
- *
- * Values based on config_keyChordPowerVolumeUp in
- * frameworks/base/core/res/res/values/config.xml
- */
- @VisibleForTesting
- static final int KEY_CHORD_POWER_VOLUME_UP_NO_ACTION = 0;
- @VisibleForTesting
- static final int KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE = 1;
- @VisibleForTesting
- static final int KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS = 2;
-
- private static final int KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE =
- com.android.internal.R.integer.config_keyChordPowerVolumeUp;
-
- @MonotonicNonNull
- @VisibleForTesting
- Preference mFooterHint;
-
- @MonotonicNonNull
- @VisibleForTesting
- Preference mAssistSwitch;
-
- public LongPressPowerButtonPreferenceController(Context context, String key) {
- super(context, key);
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- mFooterHint = screen.findPreference(FOOTER_HINT_KEY);
- mAssistSwitch = screen.findPreference(ASSIST_SWITCH_KEY);
- refreshStateDisplay();
- }
-
- @Override
- public CharSequence getSummary() {
- final int powerButtonValue = PowerMenuSettingsUtils.getPowerButtonSettingValue(mContext);
- if (powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
- return mContext.getString(R.string.power_menu_summary_long_press_for_assist_enabled);
- } else if (powerButtonValue == LONG_PRESS_POWER_GLOBAL_ACTIONS) {
- return mContext.getString(
- R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu);
- } else {
- return mContext.getString(
- R.string.power_menu_summary_long_press_for_assist_disabled_no_action);
- }
- }
-
- @Override
- public int getAvailabilityStatus() {
- final boolean enabled = mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable);
- return enabled ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
- }
-
- @Override
- public boolean isChecked() {
- return PowerMenuSettingsUtils.isLongPressPowerForAssistEnabled(mContext);
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- if (setPowerLongPressValue(isChecked)) {
- // The key chord value is dependant on the long press setting and it always
- // toggled in tandem. POWER_BUTTON_LONG_PRESS_SETTING is always the source
- // of truth for both.
- setPowerVolumeChordValue(isChecked);
- refreshStateDisplay();
- return true;
- }
-
- return false;
- }
-
- @Override
- public int getSliceHighlightMenuRes() {
- return R.string.menu_key_system;
- }
-
- private void refreshStateDisplay() {
- if (mAssistSwitch != null) {
- mAssistSwitch.setSummary(getSummary());
- }
-
- if (mFooterHint != null) {
- String footerHintText = mContext.getString(R.string.power_menu_power_volume_up_hint);
- // If the device supports hush gesture, we need to notify the user where to find
- // the setting.
- if (mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_volumeHushGestureEnabled)) {
- footerHintText = footerHintText + "\n\n" + mContext.getString(
- R.string.power_menu_power_prevent_ringing_hint);
- }
-
- mFooterHint.setSummary(footerHintText);
- mFooterHint.setVisible(isPowerMenuKeyChordEnabled(mContext));
- }
- }
-
- private static boolean isPowerMenuKeyChordEnabled(Context context) {
- return Settings.Global.getInt(context.getContentResolver(),
- KEY_CHORD_POWER_VOLUME_UP_SETTING,
- context.getResources().getInteger(
- com.android.internal.R.integer.config_keyChordPowerVolumeUp))
- == KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS;
- }
-
- private boolean setPowerLongPressValue(boolean isChecked) {
- if (isChecked) {
- return Settings.Global.putInt(mContext.getContentResolver(),
- POWER_BUTTON_LONG_PRESS_SETTING, LONG_PRESS_POWER_ASSISTANT_VALUE);
- }
-
- // We need to determine the right disabled value based on the device default
- // for long-press power.
-
- // If the default is to start the assistant, then the fallback is GlobalActions.
- final int defaultPowerButtonValue = mContext.getResources().getInteger(
- POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE);
- if (defaultPowerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
- return Settings.Global.putInt(mContext.getContentResolver(),
- POWER_BUTTON_LONG_PRESS_SETTING, LONG_PRESS_POWER_GLOBAL_ACTIONS);
- }
-
- // If the default is something different than Assist, we use that default.
- return Settings.Global.putInt(mContext.getContentResolver(),
- POWER_BUTTON_LONG_PRESS_SETTING, defaultPowerButtonValue);
- }
-
- /**
- * Updates {@link Settings.Global.KEY_CHORD_POWER_VOLUME_UP} based on the changed value of
- * {@link #POWER_BUTTON_LONG_PRESS_SETTING}. If power button is used for Assist, key chord
- * should show the power menu.
- */
- private boolean setPowerVolumeChordValue(boolean isPowerButtonLongPressChecked) {
- if (isPowerButtonLongPressChecked) {
- return Settings.Global.putInt(mContext.getContentResolver(),
- KEY_CHORD_POWER_VOLUME_UP_SETTING, KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
- }
-
- // We restore key chord to the default value.
- int keyChordDefaultValue = mContext.getResources().getInteger(
- KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE);
- return Settings.Global.putInt(mContext.getContentResolver(),
- KEY_CHORD_POWER_VOLUME_UP_SETTING, keyChordDefaultValue);
- }
-
-}
diff --git a/src/com/android/settings/gestures/LongPressPowerFooterPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerFooterPreferenceController.java
new file mode 100644
index 0000000..b4f6def
--- /dev/null
+++ b/src/com/android/settings/gestures/LongPressPowerFooterPreferenceController.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.gestures;
+
+import android.content.Context;
+import android.net.Uri;
+import android.text.TextUtils;
+
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+/** Configures the behaviour of long press power footer. */
+public class LongPressPowerFooterPreferenceController extends BasePreferenceController
+ implements PowerMenuSettingsUtils.SettingsStateCallback, LifecycleObserver {
+
+ private Preference mPreference;
+ private final PowerMenuSettingsUtils mUtils;
+
+ public LongPressPowerFooterPreferenceController(Context context, String key) {
+ super(context, key);
+ mUtils = new PowerMenuSettingsUtils(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+
+ CharSequence footerHintText = mContext.getString(R.string.power_menu_power_volume_up_hint);
+ // If the device supports hush gesture, we need to tell the user where to find the setting.
+ if (mContext.getResources()
+ .getBoolean(com.android.internal.R.bool.config_volumeHushGestureEnabled)) {
+ footerHintText =
+ TextUtils.concat(
+ footerHintText,
+ "\n\n",
+ mContext.getString(R.string.power_menu_power_prevent_ringing_hint));
+ }
+
+ preference.setSummary(footerHintText);
+ preference.setVisible(PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext));
+ }
+
+ @Override
+ public void onChange(Uri uri) {
+ if (mPreference != null) {
+ updateState(mPreference);
+ }
+ }
+
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_START) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
+ public void onStart() {
+ mUtils.registerObserver(this);
+ }
+
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_STOP) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+ public void onStop() {
+ mUtils.unregisterObserver();
+ }
+}
diff --git a/src/com/android/settings/gestures/LongPressPowerForAssistantPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerForAssistantPreferenceController.java
new file mode 100644
index 0000000..4a0ad74
--- /dev/null
+++ b/src/com/android/settings/gestures/LongPressPowerForAssistantPreferenceController.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.gestures;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
+
+/**
+ * Configures the behaviour of the radio selector to configure long press power button to Assistant.
+ */
+public class LongPressPowerForAssistantPreferenceController extends BasePreferenceController
+ implements PowerMenuSettingsUtils.SettingsStateCallback,
+ SelectorWithWidgetPreference.OnClickListener,
+ LifecycleObserver {
+
+ private SelectorWithWidgetPreference mPreference;
+ private final PowerMenuSettingsUtils mUtils;
+
+ public LongPressPowerForAssistantPreferenceController(Context context, String key) {
+ super(context, key);
+ mUtils = new PowerMenuSettingsUtils(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return PowerMenuSettingsUtils.isLongPressPowerSettingAvailable(mContext)
+ ? AVAILABLE
+ : UNSUPPORTED_ON_DEVICE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
+ if (mPreference != null) {
+ mPreference.setOnClickListener(this);
+ }
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ if (preference instanceof SelectorWithWidgetPreference) {
+ ((SelectorWithWidgetPreference) preference)
+ .setChecked(
+ PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext));
+ }
+ }
+
+ @Override
+ public void onRadioButtonClicked(SelectorWithWidgetPreference preference) {
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+ if (mPreference != null) {
+ updateState(mPreference);
+ }
+ }
+
+ @Override
+ public void onChange(Uri uri) {
+ if (mPreference != null) {
+ updateState(mPreference);
+ }
+ }
+
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_START) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
+ public void onStart() {
+ mUtils.registerObserver(this);
+ }
+
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_STOP) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+ public void onStop() {
+ mUtils.unregisterObserver();
+ }
+}
diff --git a/src/com/android/settings/gestures/LongPressPowerForPowerMenuPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerForPowerMenuPreferenceController.java
new file mode 100644
index 0000000..c11f0e4
--- /dev/null
+++ b/src/com/android/settings/gestures/LongPressPowerForPowerMenuPreferenceController.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.gestures;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
+
+/**
+ * Configures the behaviour of the radio selector to configure long press power button to Power
+ * Menu.
+ */
+public class LongPressPowerForPowerMenuPreferenceController extends BasePreferenceController
+ implements PowerMenuSettingsUtils.SettingsStateCallback,
+ SelectorWithWidgetPreference.OnClickListener,
+ LifecycleObserver {
+
+ private SelectorWithWidgetPreference mPreference;
+ private final PowerMenuSettingsUtils mUtils;
+
+ public LongPressPowerForPowerMenuPreferenceController(Context context, String key) {
+ super(context, key);
+ mUtils = new PowerMenuSettingsUtils(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return PowerMenuSettingsUtils.isLongPressPowerSettingAvailable(mContext)
+ ? AVAILABLE
+ : UNSUPPORTED_ON_DEVICE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
+ if (mPreference != null) {
+ mPreference.setOnClickListener(this);
+ }
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ if (preference instanceof SelectorWithWidgetPreference) {
+ ((SelectorWithWidgetPreference) preference)
+ .setChecked(
+ !PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext));
+ }
+ }
+
+ @Override
+ public void onRadioButtonClicked(SelectorWithWidgetPreference preference) {
+ PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
+ if (mPreference != null) {
+ updateState(mPreference);
+ }
+ }
+
+ @Override
+ public void onChange(Uri uri) {
+ if (mPreference != null) {
+ updateState(mPreference);
+ }
+ }
+
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_START) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
+ public void onStart() {
+ mUtils.registerObserver(this);
+ }
+
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_STOP) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+ public void onStop() {
+ mUtils.unregisterObserver();
+ }
+}
diff --git a/src/com/android/settings/gestures/LongPressPowerIllustrationPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerIllustrationPreferenceController.java
new file mode 100644
index 0000000..b3db9e7
--- /dev/null
+++ b/src/com/android/settings/gestures/LongPressPowerIllustrationPreferenceController.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.gestures;
+
+import android.content.Context;
+import android.net.Uri;
+
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.widget.IllustrationPreference;
+
+/** Configures the behaviour of long press power illustration. */
+public class LongPressPowerIllustrationPreferenceController extends BasePreferenceController
+ implements PowerMenuSettingsUtils.SettingsStateCallback, LifecycleObserver {
+
+ private IllustrationPreference mIllustrationPreference;
+ private final PowerMenuSettingsUtils mUtils;
+
+ public LongPressPowerIllustrationPreferenceController(Context context, String key) {
+ super(context, key);
+ mUtils = new PowerMenuSettingsUtils(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mIllustrationPreference = screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+
+ ((IllustrationPreference) preference)
+ .setLottieAnimationResId(
+ PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)
+ ? R.raw.lottie_long_press_power_for_assistant
+ : R.raw.lottie_long_press_power_for_power_menu);
+ }
+
+ @Override
+ public void onChange(Uri uri) {
+ if (mIllustrationPreference != null) {
+ updateState(mIllustrationPreference);
+ }
+ }
+
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_START) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
+ public void onStart() {
+ mUtils.registerObserver(this);
+ }
+
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_STOP) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+ public void onStop() {
+ mUtils.unregisterObserver();
+ }
+}
diff --git a/src/com/android/settings/gestures/LongPressPowerSensitivityPreferenceController.java b/src/com/android/settings/gestures/LongPressPowerSensitivityPreferenceController.java
index a1d681c..6df4d72 100644
--- a/src/com/android/settings/gestures/LongPressPowerSensitivityPreferenceController.java
+++ b/src/com/android/settings/gestures/LongPressPowerSensitivityPreferenceController.java
@@ -17,37 +17,28 @@
package com.android.settings.gestures;
import android.content.Context;
-import android.database.ContentObserver;
-import android.os.Handler;
+import android.net.Uri;
import android.provider.Settings;
import androidx.annotation.Nullable;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.core.SliderPreferenceController;
import com.android.settings.widget.LabeledSeekBarPreference;
-import com.android.settingslib.core.lifecycle.LifecycleObserver;
-import com.android.settingslib.core.lifecycle.events.OnStart;
-import com.android.settingslib.core.lifecycle.events.OnStop;
/** Handles changes to the long press power button sensitivity slider. */
-public class LongPressPowerSensitivityPreferenceController extends
- SliderPreferenceController implements
- LifecycleObserver, OnStart, OnStop {
-
- private final ContentObserver mPowerButtonObserver = new ContentObserver(Handler.getMain()) {
- @Override
- public void onChange(boolean selfChange) {
- if (mPreference != null) {
- updateState(mPreference);
- }
- }
- };
+public class LongPressPowerSensitivityPreferenceController extends SliderPreferenceController
+ implements PowerMenuSettingsUtils.SettingsStateCallback, LifecycleObserver {
@Nullable
private final int[] mSensitivityValues;
+ private final PowerMenuSettingsUtils mUtils;
+
@Nullable
private LabeledSeekBarPreference mPreference;
@@ -55,18 +46,19 @@
super(context, preferenceKey);
mSensitivityValues = context.getResources().getIntArray(
com.android.internal.R.array.config_longPressOnPowerDurationSettings);
+ mUtils = new PowerMenuSettingsUtils(context);
}
- @Override
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_START) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
- mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(PowerMenuSettingsUtils.POWER_BUTTON_LONG_PRESS_SETTING),
- false, mPowerButtonObserver);
+ mUtils.registerObserver(this);
}
- @Override
+ /** @OnLifecycleEvent(Lifecycle.Event.ON_STOP) */
+ @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
- mContext.getContentResolver().unregisterContentObserver(mPowerButtonObserver);
+ mUtils.unregisterObserver();
}
@Override
@@ -86,21 +78,19 @@
public void updateState(Preference preference) {
super.updateState(preference);
final LabeledSeekBarPreference pref = (LabeledSeekBarPreference) preference;
- pref.setEnabled(
- isAvailable() && PowerMenuSettingsUtils.isLongPressPowerForAssistEnabled(mContext));
+ pref.setVisible(
+ PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)
+ && getAvailabilityStatus() == AVAILABLE);
pref.setProgress(getSliderPosition());
}
@Override
public int getAvailabilityStatus() {
- if (mSensitivityValues == null || mSensitivityValues.length < 2) {
+ if (mSensitivityValues == null
+ || mSensitivityValues.length < 2
+ || !PowerMenuSettingsUtils.isLongPressPowerSettingAvailable(mContext)) {
return UNSUPPORTED_ON_DEVICE;
}
-
- if (!PowerMenuSettingsUtils.isLongPressPowerForAssistEnabled(mContext)) {
- return DISABLED_DEPENDENT_SETTING;
- }
-
return AVAILABLE;
}
@@ -121,6 +111,13 @@
}
@Override
+ public void onChange(Uri uri) {
+ if (mPreference != null) {
+ updateState(mPreference);
+ }
+ }
+
+ @Override
public int getMax() {
if (mSensitivityValues == null || mSensitivityValues.length == 0) {
return 0;
diff --git a/src/com/android/settings/gestures/PowerMenuPreferenceController.java b/src/com/android/settings/gestures/PowerMenuPreferenceController.java
index b4f97aa..599dd18 100644
--- a/src/com/android/settings/gestures/PowerMenuPreferenceController.java
+++ b/src/com/android/settings/gestures/PowerMenuPreferenceController.java
@@ -16,9 +16,6 @@
package com.android.settings.gestures;
-import static com.android.settings.gestures.PowerMenuSettingsUtils.LONG_PRESS_POWER_ASSISTANT_VALUE;
-import static com.android.settings.gestures.PowerMenuSettingsUtils.LONG_PRESS_POWER_GLOBAL_ACTIONS;
-
import android.content.Context;
import com.android.settings.R;
@@ -32,25 +29,17 @@
@Override
public CharSequence getSummary() {
- final int powerButtonValue = PowerMenuSettingsUtils.getPowerButtonSettingValue(mContext);
- if (powerButtonValue == LONG_PRESS_POWER_ASSISTANT_VALUE) {
- return mContext.getText(R.string.power_menu_summary_long_press_for_assist_enabled);
- } else if (powerButtonValue == LONG_PRESS_POWER_GLOBAL_ACTIONS) {
- return mContext.getText(
- R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu);
+ if (PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)) {
+ return mContext.getText(R.string.power_menu_summary_long_press_for_assistant);
} else {
- return mContext.getText(
- R.string.power_menu_summary_long_press_for_assist_disabled_no_action);
+ return mContext.getText(R.string.power_menu_summary_long_press_for_power_menu);
}
}
@Override
public int getAvailabilityStatus() {
- return isAssistInvocationAvailable() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
- }
-
- private boolean isAssistInvocationAvailable() {
- return mContext.getResources().getBoolean(
- com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable);
+ return PowerMenuSettingsUtils.isLongPressPowerSettingAvailable(mContext)
+ ? AVAILABLE
+ : UNSUPPORTED_ON_DEVICE;
}
}
diff --git a/src/com/android/settings/gestures/PowerMenuSettingsUtils.java b/src/com/android/settings/gestures/PowerMenuSettingsUtils.java
index 444b7c1..b110381 100644
--- a/src/com/android/settings/gestures/PowerMenuSettingsUtils.java
+++ b/src/com/android/settings/gestures/PowerMenuSettingsUtils.java
@@ -16,53 +16,163 @@
package com.android.settings.gestures;
+import android.content.ContentResolver;
import android.content.Context;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
import android.provider.Settings;
/** Common code for long press power settings shared between controllers. */
final class PowerMenuSettingsUtils {
- /**
- * Setting storing the current behaviour of long press power.
- */
- public static final String POWER_BUTTON_LONG_PRESS_SETTING =
+ /** Setting storing the current behaviour of long press power. */
+ private static final String POWER_BUTTON_LONG_PRESS_SETTING =
Settings.Global.POWER_BUTTON_LONG_PRESS;
+ /** Setting storing the current behaviour of key chord power + volume up. */
+ private static final String KEY_CHORD_POWER_VOLUME_UP_SETTING =
+ Settings.Global.KEY_CHORD_POWER_VOLUME_UP;
+
/**
- * Value used for long press power button behaviour when the Assist setting is disabled.
+ * Value used for long press power button behaviour when long press power for Assistant is
+ * disabled.
*
- * If this value matches Assist setting, then it falls back to Global Actions panel or
- * power menu, depending on their respective settings.
+ * <p>If this value matches long press power for Assistant, then it falls back to Global Actions
+ * panel (i.e., the Power Menu), depending on their respective settings.
*/
- public static final int POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE =
+ private static final int POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE =
com.android.internal.R.integer.config_longPressOnPowerBehavior;
/**
- * Values used for long press power button behaviour when Assist setting is enabled.
- *
- * {@link com.android.server.policy.PhoneWindowManager#LONG_PRESS_POWER_GLOBAL_ACTIONS} for
- * source of the value.
+ * Value used for key chord power + volume up behaviour when long press power for Assistant is
+ * disabled.
*/
- static final int LONG_PRESS_POWER_NO_ACTION = 0;
- static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1;
- static final int LONG_PRESS_POWER_ASSISTANT_VALUE = 5; // Settings.Secure.ASSISTANT
+ private static final int KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE =
+ com.android.internal.R.integer.config_keyChordPowerVolumeUp;
+
+ private static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1; // a.k.a., Power Menu
+ private static final int LONG_PRESS_POWER_ASSISTANT_VALUE = 5; // Settings.Secure.ASSISTANT
+
+ private static final int KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS = 2;
+
+ private static final Uri POWER_BUTTON_LONG_PRESS_URI =
+ Settings.Global.getUriFor(POWER_BUTTON_LONG_PRESS_SETTING);
/**
- * @return current value of power button behaviour.
+ * @return true if long press power for assistant is currently enabled.
*/
- public static int getPowerButtonSettingValue(Context context) {
- return Settings.Global.getInt(context.getContentResolver(),
+ public static boolean isLongPressPowerForAssistantEnabled(Context context) {
+ int longPressPowerSettingValue = Settings.Global.getInt(
+ context.getContentResolver(),
POWER_BUTTON_LONG_PRESS_SETTING,
context.getResources().getInteger(POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE));
+ return longPressPowerSettingValue == LONG_PRESS_POWER_ASSISTANT_VALUE;
}
/**
- * @return true if long press power for assist is currently enabled.
+ * @return true if long press power for assistant setting is available on the device.
*/
- public static boolean isLongPressPowerForAssistEnabled(Context context) {
- return getPowerButtonSettingValue(context) == LONG_PRESS_POWER_ASSISTANT_VALUE;
+ public static boolean isLongPressPowerSettingAvailable(Context context) {
+ if (!context.getResources().getBoolean(
+ com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable)) {
+ return false;
+ }
+
+ int defaultLongPressPowerSettingValue =
+ context.getResources().getInteger(POWER_BUTTON_LONG_PRESS_DEFAULT_VALUE_RESOURCE);
+ switch (defaultLongPressPowerSettingValue) {
+ case LONG_PRESS_POWER_GLOBAL_ACTIONS:
+ case LONG_PRESS_POWER_ASSISTANT_VALUE:
+ // We support switching between Power Menu and Digital Assistant.
+ return true;
+ default:
+ // All other combinations are not supported.
+ return false;
+ }
}
- private PowerMenuSettingsUtils() {
+ public static boolean setLongPressPowerForAssistant(Context context) {
+ if (Settings.Global.putInt(
+ context.getContentResolver(),
+ POWER_BUTTON_LONG_PRESS_SETTING,
+ LONG_PRESS_POWER_ASSISTANT_VALUE)) {
+ // Make power + volume up buttons to open the power menu
+ Settings.Global.putInt(
+ context.getContentResolver(),
+ KEY_CHORD_POWER_VOLUME_UP_SETTING,
+ KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
+ return true;
+ }
+ return false;
+ }
+
+ public static boolean setLongPressPowerForPowerMenu(Context context) {
+ if (Settings.Global.putInt(
+ context.getContentResolver(),
+ POWER_BUTTON_LONG_PRESS_SETTING,
+ LONG_PRESS_POWER_GLOBAL_ACTIONS)) {
+ // We restore power + volume up buttons to the default action.
+ int keyChordDefaultValue =
+ context.getResources()
+ .getInteger(KEY_CHORD_POWER_VOLUME_UP_DEFAULT_VALUE_RESOURCE);
+ Settings.Global.putInt(
+ context.getContentResolver(),
+ KEY_CHORD_POWER_VOLUME_UP_SETTING,
+ keyChordDefaultValue);
+ return true;
+ }
+ return false;
+ }
+
+ private final Context mContext;
+ private final SettingsObserver mSettingsObserver;
+
+ PowerMenuSettingsUtils(Context context) {
+ mContext = context;
+ mSettingsObserver = new SettingsObserver(new Handler(Looper.getMainLooper()));
+ }
+
+ /**
+ * Registers callback for observing SettingsProvider state.
+ *
+ * @param callback for state changes
+ */
+ public void registerObserver(SettingsStateCallback callback) {
+ mSettingsObserver.setCallback(callback);
+ final ContentResolver resolver = mContext.getContentResolver();
+ resolver.registerContentObserver(POWER_BUTTON_LONG_PRESS_URI, true, mSettingsObserver);
+ }
+
+ /** Unregisters callback for observing SettingsProvider state. */
+ public void unregisterObserver() {
+ final ContentResolver resolver = mContext.getContentResolver();
+ resolver.unregisterContentObserver(mSettingsObserver);
+ }
+
+ /** An interface for when SettingsProvider key state changes. */
+ public interface SettingsStateCallback {
+ /** Callback method for SettingsProvider key state changes. */
+ void onChange(Uri uri);
+ }
+
+ private static final class SettingsObserver extends ContentObserver {
+ private SettingsStateCallback mCallback;
+
+ SettingsObserver(Handler handler) {
+ super(handler);
+ }
+
+ private void setCallback(SettingsStateCallback callback) {
+ mCallback = callback;
+ }
+
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ if (mCallback != null) {
+ mCallback.onChange(uri);
+ }
+ }
}
}
diff --git a/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java b/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
index f10a2d7..33dcd4e 100644
--- a/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
+++ b/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSlice.java
@@ -44,11 +44,11 @@
import com.android.settings.R;
import com.android.settings.SubSettings;
import com.android.settings.Utils;
-import com.android.settings.fuelgauge.BatteryUsageStatsLoader;
-import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
+import com.android.settings.fuelgauge.batteryusage.BatteryUsageStatsLoader;
+import com.android.settings.fuelgauge.batteryusage.PowerUsageSummary;
import com.android.settings.slices.CustomSliceable;
import com.android.settings.slices.SliceBackgroundWorker;
import com.android.settings.slices.SliceBuilderUtils;
diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java
index 71b48f9..2d80da5 100644
--- a/src/com/android/settings/language/LanguageAndInputSettings.java
+++ b/src/com/android/settings/language/LanguageAndInputSettings.java
@@ -50,6 +50,7 @@
private static final String KEY_KEYBOARDS_CATEGORY = "keyboards_category";
private static final String KEY_SPEECH_CATEGORY = "speech_category";
+ private static final String KEY_ON_DEVICE_RECOGNITION = "odsr_settings";
private static final String KEY_TEXT_TO_SPEECH = "tts_settings_summary";
private static final String KEY_POINTER_CATEGORY = "pointer_category";
@@ -123,11 +124,21 @@
new DefaultVoiceInputPreferenceController(context, lifecycle);
final TtsPreferenceController ttsPreferenceController =
new TtsPreferenceController(context, KEY_TEXT_TO_SPEECH);
+ final OnDeviceRecognitionPreferenceController onDeviceRecognitionPreferenceController =
+ new OnDeviceRecognitionPreferenceController(context, KEY_ON_DEVICE_RECOGNITION);
+
controllers.add(defaultVoiceInputPreferenceController);
controllers.add(ttsPreferenceController);
- controllers.add(new PreferenceCategoryController(context,
- KEY_SPEECH_CATEGORY).setChildren(
- Arrays.asList(defaultVoiceInputPreferenceController, ttsPreferenceController)));
+ List<AbstractPreferenceController> speechCategoryChildren = new ArrayList<>(
+ List.of(defaultVoiceInputPreferenceController, ttsPreferenceController));
+
+ if (onDeviceRecognitionPreferenceController.isAvailable()) {
+ controllers.add(onDeviceRecognitionPreferenceController);
+ speechCategoryChildren.add(onDeviceRecognitionPreferenceController);
+ }
+
+ controllers.add(new PreferenceCategoryController(context, KEY_SPEECH_CATEGORY)
+ .setChildren(speechCategoryChildren));
// Pointer
final PointerSpeedController pointerController = new PointerSpeedController(context);
diff --git a/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java b/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java
new file mode 100644
index 0000000..3186639
--- /dev/null
+++ b/src/com/android/settings/language/OnDeviceRecognitionPreferenceController.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.language;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.util.Log;
+
+import androidx.annotation.Nullable;
+import androidx.preference.Preference;
+
+import com.android.internal.R;
+import com.android.settings.core.BasePreferenceController;
+
+import java.util.ArrayList;
+import java.util.Optional;
+
+/** Controller of the On-device recognition preference. */
+public class OnDeviceRecognitionPreferenceController extends BasePreferenceController {
+
+ private static final String TAG = "OnDeviceRecognitionPreferenceController";
+
+ private Optional<Intent> mIntent;
+
+ public OnDeviceRecognitionPreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ if (mIntent == null) {
+ mIntent = Optional.ofNullable(onDeviceRecognitionIntent());
+ }
+ return mIntent.isPresent()
+ ? AVAILABLE
+ : CONDITIONALLY_UNAVAILABLE;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ if (mIntent != null && mIntent.isPresent()) {
+ preference.setIntent(mIntent.get());
+ }
+ }
+
+ /**
+ * Create an {@link Intent} for the activity in the default on-device recognizer service if
+ * there is a properly defined speech recognition xml meta-data for that service.
+ *
+ * @return {@link Intent} if the proper activity is fount, {@code null} otherwise.
+ */
+ @Nullable
+ private Intent onDeviceRecognitionIntent() {
+ final String resString = mContext.getString(
+ R.string.config_defaultOnDeviceSpeechRecognitionService);
+
+ if (resString == null) {
+ Log.v(TAG, "No on-device recognizer, intent not created.");
+ return null;
+ }
+
+ final ComponentName defaultOnDeviceRecognizerComponentName =
+ ComponentName.unflattenFromString(resString);
+
+ if (defaultOnDeviceRecognizerComponentName == null) {
+ Log.v(TAG, "Invalid on-device recognizer string format, intent not created.");
+ return null;
+ }
+
+ final ArrayList<VoiceInputHelper.RecognizerInfo> validRecognitionServices =
+ VoiceInputHelper.validRecognitionServices(mContext);
+
+ if (validRecognitionServices.isEmpty()) {
+ Log.v(TAG, "No speech recognition services"
+ + "with proper `recognition-service` meta-data found.");
+ return null;
+ }
+
+ // Filter the recognizer services which are in the same package as the default on-device
+ // speech recognizer and have a settings activity defined in the meta-data.
+ final ArrayList<VoiceInputHelper.RecognizerInfo> validOnDeviceRecognitionServices =
+ new ArrayList<>();
+ for (VoiceInputHelper.RecognizerInfo recognizerInfo: validRecognitionServices) {
+ if (!defaultOnDeviceRecognizerComponentName.getPackageName().equals(
+ recognizerInfo.mService.packageName)) {
+ Log.v(TAG, String.format("Recognition service not in the same package as the "
+ + "default on-device recognizer: %s.",
+ recognizerInfo.mComponentName.flattenToString()));
+ } else if (recognizerInfo.mSettings == null) {
+ Log.v(TAG, String.format("Recognition service with no settings activity: %s.",
+ recognizerInfo.mComponentName.flattenToString()));
+ } else {
+ validOnDeviceRecognitionServices.add(recognizerInfo);
+ Log.v(TAG, String.format("Recognition service in the same package as the default "
+ + "on-device recognizer with settings activity: %s.",
+ recognizerInfo.mSettings.flattenToString()));
+ }
+ }
+
+ if (validOnDeviceRecognitionServices.isEmpty()) {
+ Log.v(TAG, "No speech recognition services with proper `recognition-service` "
+ + "meta-data found in the same package as the default on-device recognizer.");
+ return null;
+ }
+
+ // Not more than one proper recognition services should be found in the same
+ // package as the default on-device recognizer. If that happens,
+ // the first one which passed the filter will be selected.
+ if (validOnDeviceRecognitionServices.size() > 1) {
+ Log.w(TAG, "More than one recognition services with proper `recognition-service` "
+ + "meta-data found in the same package as the default on-device recognizer.");
+ }
+ VoiceInputHelper.RecognizerInfo chosenRecognizer = validOnDeviceRecognitionServices.get(0);
+
+ return new Intent(Intent.ACTION_MAIN).setComponent(chosenRecognizer.mSettings);
+ }
+}
diff --git a/src/com/android/settings/language/VoiceInputHelper.java b/src/com/android/settings/language/VoiceInputHelper.java
index 7915ba4..289a2f9 100644
--- a/src/com/android/settings/language/VoiceInputHelper.java
+++ b/src/com/android/settings/language/VoiceInputHelper.java
@@ -29,6 +29,7 @@
import android.speech.RecognitionService;
import android.util.AttributeSet;
import android.util.Log;
+import android.util.Pair;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
@@ -44,12 +45,11 @@
static final String TAG = "VoiceInputHelper";
final Context mContext;
- final List<ResolveInfo> mAvailableRecognition;
-
/**
* Base info of the Voice Input provider.
*
* TODO: Remove this superclass as we only have 1 class now (RecognizerInfo).
+ * TODO: Group recognition service xml meta-data attributes in a single class.
*/
public static class BaseInfo implements Comparable<BaseInfo> {
public final ServiceInfo mService;
@@ -90,16 +90,12 @@
}
}
- final ArrayList<RecognizerInfo> mAvailableRecognizerInfos = new ArrayList<>();
+ ArrayList<RecognizerInfo> mAvailableRecognizerInfos = new ArrayList<>();
ComponentName mCurrentRecognizer;
public VoiceInputHelper(Context context) {
mContext = context;
-
- mAvailableRecognition = mContext.getPackageManager().queryIntentServices(
- new Intent(RecognitionService.SERVICE_INTERFACE),
- PackageManager.GET_META_DATA);
}
/** Draws the UI of the Voice Input picker page. */
@@ -113,63 +109,120 @@
mCurrentRecognizer = null;
}
- // Iterate through all the available recognizers and load up their info to show
- // in the preference.
- int size = mAvailableRecognition.size();
- for (int i = 0; i < size; i++) {
- ResolveInfo resolveInfo = mAvailableRecognition.get(i);
- ComponentName comp = new ComponentName(resolveInfo.serviceInfo.packageName,
- resolveInfo.serviceInfo.name);
- ServiceInfo si = resolveInfo.serviceInfo;
- String settingsActivity = null;
- // Always show in voice input settings unless specifically set to False.
- boolean selectableAsDefault = true;
- try (XmlResourceParser parser = si.loadXmlMetaData(mContext.getPackageManager(),
- RecognitionService.SERVICE_META_DATA)) {
- if (parser == null) {
- throw new XmlPullParserException("No " + RecognitionService.SERVICE_META_DATA
- + " meta-data for " + si.packageName);
- }
+ final ArrayList<RecognizerInfo> validRecognitionServices =
+ validRecognitionServices(mContext);
- Resources res = mContext.getPackageManager().getResourcesForApplication(
- si.applicationInfo);
-
- AttributeSet attrs = Xml.asAttributeSet(parser);
-
- int type;
- while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
- && type != XmlPullParser.START_TAG) {
- // Intentionally do nothing.
- }
-
- String nodeName = parser.getName();
- if (!"recognition-service".equals(nodeName)) {
- throw new XmlPullParserException(
- "Meta-data does not start with recognition-service tag");
- }
-
- TypedArray array = res.obtainAttributes(attrs,
- com.android.internal.R.styleable.RecognitionService);
- settingsActivity = array.getString(
- com.android.internal.R.styleable.RecognitionService_settingsActivity);
- selectableAsDefault = array.getBoolean(
- com.android.internal.R.styleable.RecognitionService_selectableAsDefault,
- true);
- array.recycle();
- } catch (XmlPullParserException e) {
- Log.e(TAG, "error parsing recognition service meta-data", e);
- } catch (IOException e) {
- Log.e(TAG, "error parsing recognition service meta-data", e);
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(TAG, "error parsing recognition service meta-data", e);
- }
- // The current recognizer must always be shown in the settings, whatever its
- // selectableAsDefault value is.
- if (selectableAsDefault || comp.equals(mCurrentRecognizer)) {
- mAvailableRecognizerInfos.add(new RecognizerInfo(mContext.getPackageManager(),
- resolveInfo.serviceInfo, settingsActivity, selectableAsDefault));
+ // Filter all recognizers which can be selected as default or are the current recognizer.
+ mAvailableRecognizerInfos = new ArrayList<>();
+ for (RecognizerInfo recognizerInfo: validRecognitionServices) {
+ if (recognizerInfo.mSelectableAsDefault || new ComponentName(
+ recognizerInfo.mService.packageName, recognizerInfo.mService.name)
+ .equals(mCurrentRecognizer)) {
+ mAvailableRecognizerInfos.add(recognizerInfo);
}
}
+
Collections.sort(mAvailableRecognizerInfos);
}
+
+ /**
+ * Query all services with {@link RecognitionService#SERVICE_INTERFACE} intent. Filter only
+ * those which have proper xml meta-data which start with a `recognition-service` tag.
+ * Filtered services are sorted by their labels in the ascending order.
+ *
+ * @param context {@link Context} inside which the settings app is run.
+ *
+ * @return {@link ArrayList}<{@link RecognizerInfo}>
+ * containing info about the filtered speech recognition services.
+ */
+ static ArrayList<RecognizerInfo> validRecognitionServices(Context context) {
+ final List<ResolveInfo> resolvedRecognitionServices =
+ context.getPackageManager().queryIntentServices(
+ new Intent(RecognitionService.SERVICE_INTERFACE),
+ PackageManager.GET_META_DATA);
+
+ final ArrayList<RecognizerInfo> validRecognitionServices = new ArrayList<>();
+
+ for (ResolveInfo resolveInfo: resolvedRecognitionServices) {
+ final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
+
+ final Pair<String, Boolean> recognitionServiceAttributes =
+ parseRecognitionServiceXmlMetadata(context, serviceInfo);
+
+ if (recognitionServiceAttributes != null) {
+ validRecognitionServices.add(new RecognizerInfo(
+ context.getPackageManager(),
+ serviceInfo,
+ recognitionServiceAttributes.first /* settingsActivity */,
+ recognitionServiceAttributes.second /* selectableAsDefault */));
+ }
+ }
+
+ return validRecognitionServices;
+ }
+
+ /**
+ * Load recognition service's xml meta-data and parse it. Return the meta-data attributes,
+ * namely, `settingsActivity` {@link String} and `selectableAsDefault` {@link Boolean}.
+ *
+ * <p>Parsing fails if the meta-data for the given service is not found
+ * or the found meta-data does not start with a `recognition-service`.</p>
+ *
+ * @param context {@link Context} inside which the settings app is run.
+ * @param serviceInfo {@link ServiceInfo} containing info
+ * about the speech recognition service in question.
+ *
+ * @return {@link Pair}<{@link String}, {@link Boolean}> containing `settingsActivity`
+ * and `selectableAsDefault` attributes if the parsing was successful, {@code null} otherwise.
+ */
+ private static Pair<String, Boolean> parseRecognitionServiceXmlMetadata(
+ Context context, ServiceInfo serviceInfo) {
+ // Default recognition service attribute values.
+ // Every recognizer can be selected unless specified otherwise.
+ String settingsActivity;
+ boolean selectableAsDefault = true;
+
+ // Parse xml meta-data.
+ try (XmlResourceParser parser = serviceInfo.loadXmlMetaData(
+ context.getPackageManager(), RecognitionService.SERVICE_META_DATA)) {
+ if (parser == null) {
+ throw new XmlPullParserException(String.format("No %s meta-data for %s package",
+ RecognitionService.SERVICE_META_DATA, serviceInfo.packageName));
+ }
+
+ final Resources res = context.getPackageManager().getResourcesForApplication(
+ serviceInfo.applicationInfo);
+ final AttributeSet attrs = Xml.asAttributeSet(parser);
+
+ // Xml meta-data must start with a `recognition-service tag`.
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && type != XmlPullParser.START_TAG) {
+ // Intentionally do nothing.
+ }
+
+ final String nodeName = parser.getName();
+ if (!"recognition-service".equals(nodeName)) {
+ throw new XmlPullParserException(String.format(
+ "%s package meta-data does not start with a `recognition-service` tag",
+ serviceInfo.packageName));
+ }
+
+ final TypedArray array = res.obtainAttributes(attrs,
+ com.android.internal.R.styleable.RecognitionService);
+ settingsActivity = array.getString(
+ com.android.internal.R.styleable.RecognitionService_settingsActivity);
+ selectableAsDefault = array.getBoolean(
+ com.android.internal.R.styleable.RecognitionService_selectableAsDefault,
+ selectableAsDefault);
+ array.recycle();
+ } catch (XmlPullParserException | IOException
+ | PackageManager.NameNotFoundException e) {
+ Log.e(TAG, String.format("Error parsing %s package recognition service meta-data",
+ serviceInfo.packageName), e);
+ return null;
+ }
+
+ return Pair.create(settingsActivity, selectableAsDefault);
+ }
}
diff --git a/src/com/android/settings/network/ProviderModelSlice.java b/src/com/android/settings/network/ProviderModelSlice.java
index 0aae349..86ba563 100644
--- a/src/com/android/settings/network/ProviderModelSlice.java
+++ b/src/com/android/settings/network/ProviderModelSlice.java
@@ -34,6 +34,7 @@
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.telephony.SubscriptionManager;
+import android.util.EventLog;
import android.util.Log;
import android.view.WindowManager.LayoutParams;
@@ -103,6 +104,12 @@
// Fifth section: Add the Wi-Fi items which are not connected.
// Sixth section: Add the See All item.
final ListBuilder listBuilder = mHelper.createListBuilder(getUri());
+ if (isGuestUser(mContext)) {
+ Log.e(TAG, "Guest user is not allowed to configure Internet!");
+ EventLog.writeEvent(0x534e4554, "227470877", -1 /* UID */, "User is a guest");
+ return listBuilder.build();
+ }
+
int maxListSize = 0;
final NetworkProviderWorker worker = getWorker();
if (worker != null) {
@@ -297,6 +304,8 @@
@Override
public Class getBackgroundWorkerClass() {
+ if (isGuestUser(mContext)) return null;
+
return NetworkProviderWorker.class;
}
diff --git a/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java b/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java
index 14bdd41..688084f 100644
--- a/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java
+++ b/src/com/android/settings/network/telephony/NetworkProviderWifiCallingGroup.java
@@ -74,6 +74,7 @@
private Map<Integer, PhoneAccountHandle> mSimCallManagerList = new HashMap<>();
private Map<Integer, Preference> mWifiCallingForSubPreferences;
private List<SubscriptionInfo> mSubInfoListForWfc;
+ private SubscriptionsChangeListener mChangeListener;
public NetworkProviderWifiCallingGroup(Context context, Lifecycle lifecycle,
String preferenceGroupKey) {
@@ -87,26 +88,25 @@
mTelephonyCallback = new PhoneCallStateTelephonyCallback();
}
lifecycle.addObserver(this);
+ mChangeListener = new SubscriptionsChangeListener(context, this);
}
private void setSubscriptionInfoList(Context context) {
mSubInfoListForWfc = new ArrayList<>(
SubscriptionUtil.getActiveSubscriptions(mSubscriptionManager));
- if (mSubInfoListForWfc != null) {
- mSubInfoListForWfc.removeIf(info -> {
- final int subId = info.getSubscriptionId();
- setTelephonyManagerForSubscriptionId(context, subId);
- setPhoneAccountHandleForSubscriptionId(context, subId);
- boolean isExisted = mSubInfoListForWfc.contains(info);
- boolean shouldShowWfcForSub = shouldShowWifiCallingForSub(subId);
- if (!shouldShowWfcForSub && isExisted) {
- return true;
- }
- return false;
- });
- } else {
- Log.d(TAG, "No active subscriptions");
- }
+ mSubInfoListForWfc.removeIf(info -> {
+ final int subId = info.getSubscriptionId();
+ setTelephonyManagerForSubscriptionId(context, subId);
+ setPhoneAccountHandleForSubscriptionId(context, subId);
+ boolean isExisted = mSubInfoListForWfc.contains(info);
+ boolean shouldShowWfcForSub = shouldShowWifiCallingForSub(subId);
+ if (!shouldShowWfcForSub && isExisted) {
+ return true;
+ }
+ return false;
+ });
+ Log.d(TAG, "setSubscriptionInfoList: mSubInfoListForWfc size:"
+ + mSubInfoListForWfc.size());
}
private void setTelephonyManagerForSubscriptionId(Context context, int subId) {
@@ -137,12 +137,18 @@
@OnLifecycleEvent(Event.ON_RESUME)
public void onResume() {
+ if (mChangeListener != null) {
+ mChangeListener.start();
+ }
updateListener();
update();
}
@OnLifecycleEvent(Event.ON_PAUSE)
public void onPause() {
+ if (mChangeListener != null) {
+ mChangeListener.stop();
+ }
if ((mTelephonyCallback != null)) {
mTelephonyCallback.unregister();
}
@@ -176,6 +182,7 @@
private void update() {
if (mPreferenceGroup == null) {
+ Log.d(TAG, "mPreferenceGroup == null");
return;
}
@@ -255,7 +262,11 @@
@Override
public void onSubscriptionsChanged() {
+ Log.d(TAG, "onSubscriptionsChanged:");
setSubscriptionInfoList(mContext);
+ if (mPreferenceGroup != null) {
+ mPreferenceGroup.setVisible(isAvailable());
+ }
updateListener();
update();
}
@@ -322,6 +333,7 @@
CarrierConfigManager.KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL);
}
}
+ Log.d(TAG, "isWifiCallingAvailableForCarrier:" + isWifiCallingAvailableForCarrier);
return isWifiCallingAvailableForCarrier;
}
diff --git a/src/com/android/settings/notification/AppBubbleListPreferenceController.java b/src/com/android/settings/notification/AppBubbleListPreferenceController.java
index bf7fcc0..6ebb376 100644
--- a/src/com/android/settings/notification/AppBubbleListPreferenceController.java
+++ b/src/com/android/settings/notification/AppBubbleListPreferenceController.java
@@ -51,7 +51,7 @@
private static final String KEY = "bubble_conversations";
public AppBubbleListPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY);
}
@Override
@@ -80,25 +80,25 @@
}
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
// copy rather than inherit super's isAvailable because apps can link to this page
// as part of onboarding, before they send a valid conversation notification
if (mAppRow == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow.banned) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel != null) {
if (mBackend.onlyHasDefaultChannel(mAppRow.pkg, mAppRow.uid)
|| NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
}
if (mAppRow.bubblePreference == BUBBLE_PREFERENCE_NONE) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return true;
+ return AVAILABLE;
}
@VisibleForTesting
diff --git a/src/com/android/settings/notification/ConfigureNotificationSettings.java b/src/com/android/settings/notification/ConfigureNotificationSettings.java
index f888ea7..1922261 100644
--- a/src/com/android/settings/notification/ConfigureNotificationSettings.java
+++ b/src/com/android/settings/notification/ConfigureNotificationSettings.java
@@ -107,7 +107,6 @@
mNotificationAssistantPreferenceController =
use(NotificationAssistantPreferenceController.class);
mNotificationAssistantPreferenceController.setFragment(this);
- mNotificationAssistantPreferenceController.setBackend(new NotificationBackend());
}
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
diff --git a/src/com/android/settings/notification/MediaVolumePreferenceController.java b/src/com/android/settings/notification/MediaVolumePreferenceController.java
index 05c8e03..2466b77 100644
--- a/src/com/android/settings/notification/MediaVolumePreferenceController.java
+++ b/src/com/android/settings/notification/MediaVolumePreferenceController.java
@@ -29,6 +29,7 @@
import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.SliceAction;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.bluetooth.BluetoothBroadcastDialog;
@@ -90,13 +91,16 @@
return R.drawable.ic_media_stream_off;
}
- private boolean isSupportEndItem() {
- return getWorker() != null
- && getWorker().getActiveLocalMediaController() != null
- && isConnectedBLEDevice();
+ @VisibleForTesting
+ boolean isSupportEndItem() {
+ return isConnectedBLEDevice();
}
private boolean isConnectedBLEDevice() {
+ if (getWorker() == null) {
+ Log.d(TAG, "The Worker is null");
+ return false;
+ }
mMediaDevice = getWorker().getCurrentConnectedMediaDevice();
if (mMediaDevice != null) {
return mMediaDevice.isBLEDevice();
@@ -133,6 +137,8 @@
Utils.getApplicationLabel(mContext, getWorker().getPackageName()));
intent.putExtra(BluetoothBroadcastDialog.KEY_DEVICE_ADDRESS,
bluetoothDevice.getAddress());
+ intent.putExtra(BluetoothBroadcastDialog.KEY_MEDIA_STREAMING, getWorker() != null
+ && getWorker().getActiveLocalMediaController() != null);
pi = PendingIntent.getActivity(context, 0 /* requestCode */, intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
diff --git a/src/com/android/settings/notification/NotificationAssistantPreferenceController.java b/src/com/android/settings/notification/NotificationAssistantPreferenceController.java
index 91031c8..a6179e5 100644
--- a/src/com/android/settings/notification/NotificationAssistantPreferenceController.java
+++ b/src/com/android/settings/notification/NotificationAssistantPreferenceController.java
@@ -44,6 +44,7 @@
public NotificationAssistantPreferenceController(Context context) {
super(context, KEY_NAS);
mUserManager = UserManager.get(context);
+ mNotificationBackend = new NotificationBackend();
}
@Override
@@ -101,4 +102,9 @@
void setBackend(NotificationBackend backend) {
mNotificationBackend = backend;
}
-}
\ No newline at end of file
+
+ @Override
+ public boolean isSliceable() {
+ return (mFragment != null && mFragment instanceof ConfigureNotificationSettings);
+ }
+}
diff --git a/src/com/android/settings/notification/app/AddToHomeScreenPreferenceController.java b/src/com/android/settings/notification/app/AddToHomeScreenPreferenceController.java
index e5afd9d..12b8075 100644
--- a/src/com/android/settings/notification/app/AddToHomeScreenPreferenceController.java
+++ b/src/com/android/settings/notification/app/AddToHomeScreenPreferenceController.java
@@ -32,7 +32,7 @@
private static final String KEY = "add_to_home";
public AddToHomeScreenPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY);
}
@Override
@@ -41,11 +41,11 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
- return mConversationInfo != null;
+ return mConversationInfo != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/AllowSoundPreferenceController.java b/src/com/android/settings/notification/app/AllowSoundPreferenceController.java
index 0664c54..99d0873 100644
--- a/src/com/android/settings/notification/app/AllowSoundPreferenceController.java
+++ b/src/com/android/settings/notification/app/AllowSoundPreferenceController.java
@@ -40,7 +40,7 @@
public AllowSoundPreferenceController(Context context,
NotificationSettings.DependentFieldListener dependentFieldListener,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_IMPORTANCE);
mDependentFieldListener = dependentFieldListener;
}
@@ -50,11 +50,14 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
- return mChannel != null && NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId());
+ if (mChannel != null && NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
diff --git a/src/com/android/settings/notification/app/AppChannelsBypassingDndPreferenceController.java b/src/com/android/settings/notification/app/AppChannelsBypassingDndPreferenceController.java
index 92cd911..6c2c0c3 100644
--- a/src/com/android/settings/notification/app/AppChannelsBypassingDndPreferenceController.java
+++ b/src/com/android/settings/notification/app/AppChannelsBypassingDndPreferenceController.java
@@ -64,7 +64,7 @@
public AppChannelsBypassingDndPreferenceController(
Context context,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY);
}
@Override
@@ -110,8 +110,8 @@
}
@Override
- public boolean isAvailable() {
- return mAppRow != null;
+ public int getAvailabilityStatus() {
+ return mAppRow != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/AppConversationListPreferenceController.java b/src/com/android/settings/notification/app/AppConversationListPreferenceController.java
index dd44a13..e7b2378 100644
--- a/src/com/android/settings/notification/app/AppConversationListPreferenceController.java
+++ b/src/com/android/settings/notification/app/AppConversationListPreferenceController.java
@@ -49,7 +49,12 @@
protected PreferenceCategory mPreference;
public AppConversationListPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ this(context, backend, KEY);
+ }
+
+ public AppConversationListPreferenceController(Context context, NotificationBackend backend,
+ String key) {
+ super(context, backend, key);
}
@Override
@@ -58,21 +63,24 @@
}
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
if (mAppRow == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow.banned) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel != null) {
if (mBackend.onlyHasDefaultChannel(mAppRow.pkg, mAppRow.uid)
|| NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
}
- return mBackend.hasSentValidMsg(mAppRow.pkg, mAppRow.uid) || mBackend.isInInvalidMsgState(
- mAppRow.pkg, mAppRow.uid);
+ if (mBackend.hasSentValidMsg(mAppRow.pkg, mAppRow.uid) || mBackend.isInInvalidMsgState(
+ mAppRow.pkg, mAppRow.uid)) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/AppLinkPreferenceController.java b/src/com/android/settings/notification/app/AppLinkPreferenceController.java
index 043ae69..ecf9670 100644
--- a/src/com/android/settings/notification/app/AppLinkPreferenceController.java
+++ b/src/com/android/settings/notification/app/AppLinkPreferenceController.java
@@ -32,7 +32,7 @@
private static final String KEY_APP_LINK = "app_link";
public AppLinkPreferenceController(Context context) {
- super(context, null);
+ super(context, null, KEY_APP_LINK);
}
@Override
@@ -41,11 +41,11 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
- return mAppRow.settingsIntent != null;
+ return mAppRow.settingsIntent != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/BadgePreferenceController.java b/src/com/android/settings/notification/app/BadgePreferenceController.java
index 108fa1d..f94dfb5 100644
--- a/src/com/android/settings/notification/app/BadgePreferenceController.java
+++ b/src/com/android/settings/notification/app/BadgePreferenceController.java
@@ -38,7 +38,7 @@
public BadgePreferenceController(Context context,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_BADGE);
}
@Override
@@ -47,25 +47,29 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow == null && mChannel == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (Settings.Secure.getInt(mContext.getContentResolver(),
NOTIFICATION_BADGING, SYSTEM_WIDE_ON) == SYSTEM_WIDE_OFF) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel != null) {
if (isDefaultChannel()) {
- return true;
+ return AVAILABLE;
} else {
- return mAppRow == null ? false : mAppRow.showBadge;
+ return mAppRow == null
+ ? CONDITIONALLY_UNAVAILABLE
+ : mAppRow.showBadge
+ ? AVAILABLE
+ : CONDITIONALLY_UNAVAILABLE;
}
}
- return true;
+ return AVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/BlockPreferenceController.java b/src/com/android/settings/notification/app/BlockPreferenceController.java
index f4e2132..ea3eaeb 100644
--- a/src/com/android/settings/notification/app/BlockPreferenceController.java
+++ b/src/com/android/settings/notification/app/BlockPreferenceController.java
@@ -42,7 +42,7 @@
public BlockPreferenceController(Context context,
NotificationSettings.DependentFieldListener dependentFieldListener,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_BLOCK);
mDependentFieldListener = dependentFieldListener;
}
@@ -52,14 +52,14 @@
}
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
if (mAppRow == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mPreferenceFilter != null && !isIncludedInFilter()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return true;
+ return AVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/BubbleCategoryPreferenceController.java b/src/com/android/settings/notification/app/BubbleCategoryPreferenceController.java
index ad3a10c..da67afe 100644
--- a/src/com/android/settings/notification/app/BubbleCategoryPreferenceController.java
+++ b/src/com/android/settings/notification/app/BubbleCategoryPreferenceController.java
@@ -32,15 +32,15 @@
static final int ON = 1;
public BubbleCategoryPreferenceController(Context context) {
- super(context, null);
+ super(context, null, KEY);
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
- return areBubblesEnabled();
+ return areBubblesEnabled() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/BubbleLinkPreferenceController.java b/src/com/android/settings/notification/app/BubbleLinkPreferenceController.java
index 0b9529b..ed1c9b5 100644
--- a/src/com/android/settings/notification/app/BubbleLinkPreferenceController.java
+++ b/src/com/android/settings/notification/app/BubbleLinkPreferenceController.java
@@ -32,15 +32,15 @@
static final int ON = 1;
public BubbleLinkPreferenceController(Context context) {
- super(context, null);
+ super(context, null, KEY);
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
- return areBubblesEnabled();
+ return areBubblesEnabled() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/BubblePreferenceController.java b/src/com/android/settings/notification/app/BubblePreferenceController.java
index 351b463..516a45e 100644
--- a/src/com/android/settings/notification/app/BubblePreferenceController.java
+++ b/src/com/android/settings/notification/app/BubblePreferenceController.java
@@ -56,7 +56,7 @@
public BubblePreferenceController(Context context, @Nullable FragmentManager fragmentManager,
NotificationBackend backend, boolean isAppPage,
@Nullable NotificationSettings.DependentFieldListener listener) {
- super(context, backend);
+ super(context, backend, KEY);
mFragmentManager = fragmentManager;
mIsAppPage = isAppPage;
mListener = listener;
@@ -68,21 +68,24 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (!mIsAppPage && !isEnabled()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel != null) {
if (isDefaultChannel()) {
- return true;
+ return AVAILABLE;
} else {
- return mAppRow != null && mAppRow.bubblePreference != BUBBLE_PREFERENCE_NONE;
+ if (mAppRow != null && mAppRow.bubblePreference != BUBBLE_PREFERENCE_NONE) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
}
- return true;
+ return AVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java b/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java
index 51370b1..abbe89e 100644
--- a/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java
+++ b/src/com/android/settings/notification/app/BubbleSummaryPreferenceController.java
@@ -42,28 +42,31 @@
static final int ON = 1;
public BubbleSummaryPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY);
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel != null) {
if (!isGloballyEnabled()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (isDefaultChannel()) {
- return true;
+ return AVAILABLE;
} else {
- return mAppRow != null;
+ return mAppRow != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
}
- return isGloballyEnabled() && mBackend.hasSentValidBubble(mAppRow.pkg, mAppRow.uid);
+ if (isGloballyEnabled() && mBackend.hasSentValidBubble(mAppRow.pkg, mAppRow.uid)) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/ChannelListPreferenceController.java b/src/com/android/settings/notification/app/ChannelListPreferenceController.java
index 8db3b21..8d07911 100644
--- a/src/com/android/settings/notification/app/ChannelListPreferenceController.java
+++ b/src/com/android/settings/notification/app/ChannelListPreferenceController.java
@@ -28,6 +28,7 @@
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
+import android.util.Slog;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -39,16 +40,19 @@
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.applications.AppInfoBase;
+import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.PrimarySwitchPreference;
import com.android.settingslib.RestrictedSwitchPreference;
+import com.android.settingslib.utils.ThreadUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-public class ChannelListPreferenceController extends NotificationPreferenceController {
+public class ChannelListPreferenceController extends NotificationPreferenceController
+ implements BasePreferenceController.UiBlocker {
private static final String KEY = "channels";
private static final String KEY_GENERAL_CATEGORY = "categories";
@@ -59,7 +63,7 @@
private PreferenceCategory mPreference;
public ChannelListPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY);
}
@Override
@@ -68,20 +72,20 @@
}
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
if (mAppRow == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow.banned) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel != null) {
if (mBackend.onlyHasDefaultChannel(mAppRow.pkg, mAppRow.uid)
|| NotificationChannel.DEFAULT_CHANNEL_ID.equals(mChannel.getId())) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
}
- return true;
+ return AVAILABLE;
}
@Override
@@ -91,24 +95,17 @@
@Override
public void updateState(Preference preference) {
- mPreference = (PreferenceCategory) preference;
- // Load channel settings
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... unused) {
+ mPreference = (PreferenceCategory) preference;
+ // Load channel settings
+ ThreadUtils.postOnBackgroundThread(() -> {
mChannelGroupList = mBackend.getGroups(mAppRow.pkg, mAppRow.uid).getList();
Collections.sort(mChannelGroupList, CHANNEL_GROUP_COMPARATOR);
- return null;
- }
-
- @Override
- protected void onPostExecute(Void unused) {
- if (mContext == null) {
- return;
- }
+ ThreadUtils.getUiThreadHandler().getLooper().prepare();
updateFullList(mPreference, mChannelGroupList);
- }
- }.execute();
+ ThreadUtils.postOnMainThread(() -> {
+ showPreferences();
+ });
+ });
}
/**
@@ -144,6 +141,12 @@
}
}
+ private void showPreferences() {
+ if (mUiBlockListener != null) {
+ mUiBlockListener.onBlockerWorkFinished(this);
+ }
+ }
+
/**
* Looks for the category for the given group's key at the expected index, if that doesn't
* match, it checks all groups, and if it can't find that group anywhere, it creates it.
diff --git a/src/com/android/settings/notification/app/ConversationDemotePreferenceController.java b/src/com/android/settings/notification/app/ConversationDemotePreferenceController.java
index 02f639c..ba7ca35 100644
--- a/src/com/android/settings/notification/app/ConversationDemotePreferenceController.java
+++ b/src/com/android/settings/notification/app/ConversationDemotePreferenceController.java
@@ -37,7 +37,7 @@
public ConversationDemotePreferenceController(Context context,
SettingsPreferenceFragment hostFragment,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY);
mHostFragment = hostFragment;
}
@@ -47,14 +47,17 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow == null || mChannel == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return !TextUtils.isEmpty(mChannel.getConversationId()) && !mChannel.isDemoted();
+ if (!TextUtils.isEmpty(mChannel.getConversationId()) && !mChannel.isDemoted()) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java b/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java
index f99a56a..56de88b 100644
--- a/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java
+++ b/src/com/android/settings/notification/app/ConversationHeaderPreferenceController.java
@@ -45,7 +45,7 @@
private boolean mStarted = false;
public ConversationHeaderPreferenceController(Context context, DashboardFragment fragment) {
- super(context, null);
+ super(context, null, PREF_KEY_APP_HEADER);
mFragment = fragment;
}
@@ -55,8 +55,8 @@
}
@Override
- public boolean isAvailable() {
- return mAppRow != null;
+ public int getAvailabilityStatus() {
+ return mAppRow != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/ConversationPriorityPreferenceController.java b/src/com/android/settings/notification/app/ConversationPriorityPreferenceController.java
index ae16928..46bc3c0 100644
--- a/src/com/android/settings/notification/app/ConversationPriorityPreferenceController.java
+++ b/src/com/android/settings/notification/app/ConversationPriorityPreferenceController.java
@@ -34,7 +34,7 @@
public ConversationPriorityPreferenceController(Context context,
NotificationBackend backend, NotificationSettings.DependentFieldListener listener) {
- super(context, backend);
+ super(context, backend, KEY);
mDependentFieldListener = listener;
}
@@ -44,14 +44,14 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow == null || mChannel == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return true;
+ return AVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/ConversationPromotePreferenceController.java b/src/com/android/settings/notification/app/ConversationPromotePreferenceController.java
index 24c3d2f..a5ef569 100644
--- a/src/com/android/settings/notification/app/ConversationPromotePreferenceController.java
+++ b/src/com/android/settings/notification/app/ConversationPromotePreferenceController.java
@@ -37,7 +37,7 @@
public ConversationPromotePreferenceController(Context context,
SettingsPreferenceFragment hostFragment,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY);
mHostFragment = hostFragment;
}
@@ -47,14 +47,17 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow == null || mChannel == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return !TextUtils.isEmpty(mChannel.getConversationId()) && mChannel.isDemoted();
+ if (!TextUtils.isEmpty(mChannel.getConversationId()) && mChannel.isDemoted()) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java b/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java
index 77a692f..cd160df 100644
--- a/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java
+++ b/src/com/android/settings/notification/app/DeletedChannelsPreferenceController.java
@@ -30,7 +30,7 @@
private static final String KEY_DELETED = "deleted";
public DeletedChannelsPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_DELETED);
}
@Override
@@ -39,16 +39,19 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
// only visible on app screen
if (mChannel != null || hasValidGroup()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid) > 0;
+ if (mBackend.getDeletedChannelCount(mAppRow.pkg, mAppRow.uid) > 0) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/DescriptionPreferenceController.java b/src/com/android/settings/notification/app/DescriptionPreferenceController.java
index 0a5bb2f..413a876 100644
--- a/src/com/android/settings/notification/app/DescriptionPreferenceController.java
+++ b/src/com/android/settings/notification/app/DescriptionPreferenceController.java
@@ -29,7 +29,7 @@
private static final String KEY_DESC = "desc";
public DescriptionPreferenceController(Context context) {
- super(context, null);
+ super(context, null, KEY_DESC);
}
@Override
@@ -38,20 +38,20 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel == null && !hasValidGroup()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel != null && !TextUtils.isEmpty(mChannel.getDescription())) {
- return true;
+ return AVAILABLE;
}
if (hasValidGroup() && !TextUtils.isEmpty(mChannelGroup.getDescription())) {
- return true;
+ return AVAILABLE;
}
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/DndPreferenceController.java b/src/com/android/settings/notification/app/DndPreferenceController.java
index b65928a..811eeb4 100644
--- a/src/com/android/settings/notification/app/DndPreferenceController.java
+++ b/src/com/android/settings/notification/app/DndPreferenceController.java
@@ -31,7 +31,7 @@
private static final String KEY_BYPASS_DND = "bypass_dnd";
public DndPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_BYPASS_DND);
}
@Override
@@ -40,11 +40,11 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable() || mChannel == null) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE || mChannel == null) {
+ return CONDITIONALLY_UNAVAILABLE;
}
- return true;
+ return AVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/HeaderPreferenceController.java b/src/com/android/settings/notification/app/HeaderPreferenceController.java
index 7379d55..c4b0e59 100644
--- a/src/com/android/settings/notification/app/HeaderPreferenceController.java
+++ b/src/com/android/settings/notification/app/HeaderPreferenceController.java
@@ -45,7 +45,7 @@
private boolean mStarted = false;
public HeaderPreferenceController(Context context, DashboardFragment fragment) {
- super(context, null);
+ super(context, null, PREF_KEY_APP_HEADER);
mFragment = fragment;
}
@@ -55,8 +55,8 @@
}
@Override
- public boolean isAvailable() {
- return mAppRow != null;
+ public int getAvailabilityStatus() {
+ return mAppRow != null ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/HighImportancePreferenceController.java b/src/com/android/settings/notification/app/HighImportancePreferenceController.java
index d60668b..98dc8a7 100644
--- a/src/com/android/settings/notification/app/HighImportancePreferenceController.java
+++ b/src/com/android/settings/notification/app/HighImportancePreferenceController.java
@@ -37,7 +37,7 @@
public HighImportancePreferenceController(Context context,
NotificationSettings.DependentFieldListener dependentFieldListener,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_IMPORTANCE);
mDependentFieldListener = dependentFieldListener;
}
@@ -47,17 +47,19 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (isDefaultChannel()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return mChannel.getImportance() >= IMPORTANCE_DEFAULT;
+ return mChannel.getImportance() >= IMPORTANCE_DEFAULT
+ ? AVAILABLE
+ : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/ImportancePreferenceController.java b/src/com/android/settings/notification/app/ImportancePreferenceController.java
index 3c32ca4..31ddac3 100644
--- a/src/com/android/settings/notification/app/ImportancePreferenceController.java
+++ b/src/com/android/settings/notification/app/ImportancePreferenceController.java
@@ -38,7 +38,7 @@
public ImportancePreferenceController(Context context,
NotificationSettings.DependentFieldListener dependentFieldListener,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_IMPORTANCE);
mDependentFieldListener = dependentFieldListener;
}
@@ -48,14 +48,14 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return !isDefaultChannel();
+ return !isDefaultChannel() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java b/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java
index b937e80..bb2c58b 100644
--- a/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java
+++ b/src/com/android/settings/notification/app/InvalidConversationInfoPreferenceController.java
@@ -31,7 +31,7 @@
public InvalidConversationInfoPreferenceController(Context context,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY);
}
@Override
@@ -40,17 +40,19 @@
}
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
if (mAppRow == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow.banned) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mPreferenceFilter != null && !isIncludedInFilter()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid);
+ return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid)
+ ? AVAILABLE
+ : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java b/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java
index 5c502dc..219ccbc 100644
--- a/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java
+++ b/src/com/android/settings/notification/app/InvalidConversationPreferenceController.java
@@ -31,7 +31,7 @@
private static final String KEY = "invalid_conversation_switch";
public InvalidConversationPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY);
}
@Override
@@ -40,17 +40,19 @@
}
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
if (mAppRow == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow.banned) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mPreferenceFilter != null && !isIncludedInFilter()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid);
+ return mBackend.isInInvalidMsgState(mAppRow.pkg, mAppRow.uid)
+ ? AVAILABLE
+ : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/LightsPreferenceController.java b/src/com/android/settings/notification/app/LightsPreferenceController.java
index d096922..f7f9244 100644
--- a/src/com/android/settings/notification/app/LightsPreferenceController.java
+++ b/src/com/android/settings/notification/app/LightsPreferenceController.java
@@ -33,7 +33,7 @@
private static final String KEY_LIGHTS = "lights";
public LightsPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_LIGHTS);
}
@Override
@@ -42,16 +42,18 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT)
- && canPulseLight()
- && !isDefaultChannel();
+ if (checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) && canPulseLight()
+ && !isDefaultChannel()) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/MinImportancePreferenceController.java b/src/com/android/settings/notification/app/MinImportancePreferenceController.java
index f825763..b2c0862 100644
--- a/src/com/android/settings/notification/app/MinImportancePreferenceController.java
+++ b/src/com/android/settings/notification/app/MinImportancePreferenceController.java
@@ -37,7 +37,7 @@
public MinImportancePreferenceController(Context context,
NotificationSettings.DependentFieldListener dependentFieldListener,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_IMPORTANCE);
mDependentFieldListener = dependentFieldListener;
}
@@ -47,17 +47,17 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (isDefaultChannel()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return mChannel.getImportance() <= IMPORTANCE_LOW;
+ return mChannel.getImportance() <= IMPORTANCE_LOW ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/NotificationPreferenceController.java b/src/com/android/settings/notification/app/NotificationPreferenceController.java
index fb19d9d..271a83d 100644
--- a/src/com/android/settings/notification/app/NotificationPreferenceController.java
+++ b/src/com/android/settings/notification/app/NotificationPreferenceController.java
@@ -17,26 +17,24 @@
package com.android.settings.notification.app;
import static android.app.NotificationManager.IMPORTANCE_NONE;
-import static android.os.UserHandle.USER_SYSTEM;
import android.annotation.Nullable;
import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
import android.app.NotificationManager;
import android.content.Context;
-import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ShortcutInfo;
import android.graphics.drawable.Drawable;
import android.os.UserManager;
-import android.provider.Settings;
import android.util.Log;
+import android.util.Slog;
import androidx.preference.Preference;
+import com.android.settings.core.BasePreferenceController;
import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.RestrictedLockUtils;
-import com.android.settingslib.core.AbstractPreferenceController;
import java.util.Comparator;
import java.util.List;
@@ -46,7 +44,7 @@
* Parent class for preferences appearing on notification setting pages at the app,
* notification channel group, or notification channel level.
*/
-public abstract class NotificationPreferenceController extends AbstractPreferenceController {
+public abstract class NotificationPreferenceController extends BasePreferenceController {
private static final String TAG = "ChannelPrefContr";
@Nullable
protected NotificationChannel mChannel;
@@ -71,8 +69,11 @@
boolean overrideCanBlockValue;
boolean overrideCanConfigureValue;
- public NotificationPreferenceController(Context context, NotificationBackend backend) {
- super(context);
+ boolean mLoadedChannelState;
+
+ public NotificationPreferenceController(Context context, NotificationBackend backend,
+ String key) {
+ super(context, key);
mContext = context;
mNm = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
mBackend = backend;
@@ -81,28 +82,30 @@
}
/**
- * Returns true if field's parent object is not blocked.
+ * Returns available if field's parent object is not blocked.
*/
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
if (mAppRow == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mAppRow.banned) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannelGroup != null) {
if (mChannelGroup.isBlocked()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
}
if (mChannel != null) {
if (mPreferenceFilter != null && !isIncludedInFilter()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return mChannel.getImportance() != IMPORTANCE_NONE;
+ if(mChannel.getImportance() == IMPORTANCE_NONE) {
+ return CONDITIONALLY_UNAVAILABLE;
+ }
}
- return true;
+ return AVAILABLE;
}
protected void onResume(NotificationBackend.AppRow appRow,
diff --git a/src/com/android/settings/notification/app/NotificationSettings.java b/src/com/android/settings/notification/app/NotificationSettings.java
index 192a0ee..5750167 100644
--- a/src/com/android/settings/notification/app/NotificationSettings.java
+++ b/src/com/android/settings/notification/app/NotificationSettings.java
@@ -41,6 +41,7 @@
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;
+import android.util.Slog;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
@@ -129,15 +130,52 @@
}
}
+ mUserId = UserHandle.getUserId(mUid);
mPkgInfo = findPackageInfo(mPkg, mUid);
+ }
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if (mIntent == null && mArgs == null) {
+ toastAndFinish("no intent");
+ return;
+ }
+
+ if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
+ toastAndFinish("Missing package or uid or packageinfo");
+ return;
+ }
+
+ startListeningToPackageRemove();
+ }
+
+ @Override
+ public void onDestroy() {
+ stopListeningToPackageRemove();
+ super.onDestroy();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
+ toastAndFinish("Missing package or uid or packageinfo");
+ return;
+ }
+ mPkgInfo = findPackageInfo(mPkg, mUid);
if (mPkgInfo != null) {
- mUserId = UserHandle.getUserId(mUid);
mSuspendedAppsAdmin = RestrictedLockUtilsInternal.checkIfApplicationIsSuspended(
mContext, mPkg, mUserId);
- loadChannel();
loadAppRow();
+ if (mAppRow == null) {
+ toastAndFinish("Can't load package");
+ return;
+ }
+ loadChannel();
+ loadConversation();
loadChannelGroup();
loadPreferencesFilter();
collectConfigActivities();
@@ -157,55 +195,6 @@
}
}
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- if (mIntent == null && mArgs == null) {
- Log.w(TAG, "No intent");
- toastAndFinish();
- return;
- }
-
- if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null) {
- Log.w(TAG, "Missing package or uid or packageinfo");
- toastAndFinish();
- return;
- }
-
- startListeningToPackageRemove();
- }
-
- @Override
- public void onDestroy() {
- stopListeningToPackageRemove();
- super.onDestroy();
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (mUid < 0 || TextUtils.isEmpty(mPkg) || mPkgInfo == null || mAppRow == null) {
- Log.w(TAG, "Missing package or uid or packageinfo");
- finish();
- return;
- }
- // Reload app, channel, etc onResume in case they've changed. A little wasteful if we've
- // just done onAttach but better than making every preference controller reload all
- // the data
- loadAppRow();
- if (mAppRow == null) {
- Log.w(TAG, "Can't load package");
- finish();
- return;
- }
- loadChannel();
- loadConversation();
- loadChannelGroup();
- loadPreferencesFilter();
- collectConfigActivities();
- }
-
protected void animatePanel() {
if (mPreferenceFilter != null) {
mLayoutView = getActivity().findViewById(R.id.main_content);
@@ -307,7 +296,8 @@
}
}
- protected void toastAndFinish() {
+ protected void toastAndFinish(String msg) {
+ Log.w(TAG, msg);
Toast.makeText(mContext, R.string.app_not_found_dlg_text, Toast.LENGTH_SHORT).show();
getActivity().finish();
}
diff --git a/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java b/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java
index 0c7cd23..46625c3 100644
--- a/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java
+++ b/src/com/android/settings/notification/app/NotificationsOffPreferenceController.java
@@ -30,7 +30,7 @@
private static final String KEY_BLOCKED_DESC = "block_desc";
public NotificationsOffPreferenceController(Context context) {
- super(context, null);
+ super(context, null, KEY_BLOCKED_DESC);
}
@Override
@@ -39,16 +39,20 @@
}
@Override
- public boolean isAvailable() {
+ public int getAvailabilityStatus() {
if (mAppRow == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mPreferenceFilter != null && !isIncludedInFilter()) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
// Available only when other controllers are unavailable - this UI replaces the UI that
// would give more detailed notification controls.
- return !super.isAvailable();
+ if (super.getAvailabilityStatus() == AVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
+ } else {
+ return AVAILABLE;
+ }
}
@Override
diff --git a/src/com/android/settings/notification/app/SoundPreferenceController.java b/src/com/android/settings/notification/app/SoundPreferenceController.java
index b23b4fc..335b442 100644
--- a/src/com/android/settings/notification/app/SoundPreferenceController.java
+++ b/src/com/android/settings/notification/app/SoundPreferenceController.java
@@ -47,7 +47,7 @@
public SoundPreferenceController(Context context, SettingsPreferenceFragment hostFragment,
NotificationSettings.DependentFieldListener dependentFieldListener,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_SOUND);
mFragment = hostFragment;
mListener = dependentFieldListener;
}
@@ -58,14 +58,17 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel == null) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) && !isDefaultChannel();
+ if (checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) && !isDefaultChannel()) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/VibrationPreferenceController.java b/src/com/android/settings/notification/app/VibrationPreferenceController.java
index 34d1a54..f91999f 100644
--- a/src/com/android/settings/notification/app/VibrationPreferenceController.java
+++ b/src/com/android/settings/notification/app/VibrationPreferenceController.java
@@ -34,7 +34,7 @@
private final Vibrator mVibrator;
public VibrationPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_VIBRATE);
mVibrator = context.getSystemService(Vibrator.class);
}
@@ -44,14 +44,15 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable() || mChannel == null) {
- return false;
- }
- return checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT)
- && !isDefaultChannel()
- && mVibrator != null
- && mVibrator.hasVibrator();
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE || mChannel == null) {
+ return CONDITIONALLY_UNAVAILABLE;
+ }
+ if (checkCanBeVisible(NotificationManager.IMPORTANCE_DEFAULT) && !isDefaultChannel()
+ && mVibrator != null && mVibrator.hasVibrator()) {
+ return AVAILABLE;
+ }
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/app/VisibilityPreferenceController.java b/src/com/android/settings/notification/app/VisibilityPreferenceController.java
index a2a1d76..3f33267 100644
--- a/src/com/android/settings/notification/app/VisibilityPreferenceController.java
+++ b/src/com/android/settings/notification/app/VisibilityPreferenceController.java
@@ -48,7 +48,7 @@
public VisibilityPreferenceController(Context context, LockPatternUtils utils,
NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, KEY_VISIBILITY_OVERRIDE);
mLockPatternUtils = utils;
}
@@ -58,14 +58,18 @@
}
@Override
- public boolean isAvailable() {
- if (!super.isAvailable()) {
- return false;
+ public int getAvailabilityStatus() {
+ if (super.getAvailabilityStatus() == CONDITIONALLY_UNAVAILABLE) {
+ return CONDITIONALLY_UNAVAILABLE;
}
if (mChannel == null || mAppRow.banned) {
- return false;
+ return CONDITIONALLY_UNAVAILABLE;
}
- return checkCanBeVisible(NotificationManager.IMPORTANCE_LOW) && isLockScreenSecure();
+ if (checkCanBeVisible(NotificationManager.IMPORTANCE_LOW) && isLockScreenSecure()) {
+ return AVAILABLE;
+ }
+
+ return CONDITIONALLY_UNAVAILABLE;
}
@Override
diff --git a/src/com/android/settings/notification/zen/ZenModeAutomationSettings.java b/src/com/android/settings/notification/zen/ZenModeAutomationSettings.java
index 31a4ba7..4f18e5d 100644
--- a/src/com/android/settings/notification/zen/ZenModeAutomationSettings.java
+++ b/src/com/android/settings/notification/zen/ZenModeAutomationSettings.java
@@ -51,16 +51,6 @@
private boolean[] mDeleteDialogChecked;
@Override
- public void onAttach(Context context) {
- super.onAttach(context);
- Bundle bundle = getArguments();
- if (bundle != null && bundle.containsKey(DELETE)) {
- mBackend.removeZenRule(bundle.getString(DELETE));
- bundle.remove(DELETE);
- }
- }
-
- @Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
ZenServiceListing serviceListing = new ZenServiceListing(getContext(), CONFIG);
serviceListing.reloadApprovedServices();
diff --git a/src/com/android/settings/notification/zen/ZenRuleButtonsPreferenceController.java b/src/com/android/settings/notification/zen/ZenRuleButtonsPreferenceController.java
index 3b7cde0..023a770 100644
--- a/src/com/android/settings/notification/zen/ZenRuleButtonsPreferenceController.java
+++ b/src/com/android/settings/notification/zen/ZenRuleButtonsPreferenceController.java
@@ -103,8 +103,7 @@
new ZenDeleteRuleDialog.PositiveClickListener() {
@Override
public void onOk(String id) {
- Bundle bundle = new Bundle();
- bundle.putString(ZenModeAutomationSettings.DELETE, id);
+ mBackend.removeZenRule(id);
mMetricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_ZEN_DELETE_RULE_OK);
new SubSettingLauncher(mContext)
@@ -112,7 +111,6 @@
.setDestination(ZenModeAutomationSettings.class.getName())
.setSourceMetricsCategory(MetricsProto.MetricsEvent
.NOTIFICATION_ZEN_MODE_AUTOMATION)
- .setArguments(bundle)
.launch();
}
});
diff --git a/src/com/android/settings/overlay/FeatureFactory.java b/src/com/android/settings/overlay/FeatureFactory.java
index aff7197..c59b385 100644
--- a/src/com/android/settings/overlay/FeatureFactory.java
+++ b/src/com/android/settings/overlay/FeatureFactory.java
@@ -45,6 +45,7 @@
import com.android.settings.security.SecuritySettingsFeatureProvider;
import com.android.settings.slices.SlicesFeatureProvider;
import com.android.settings.users.UserFeatureProvider;
+import com.android.settings.vpn2.AdvancedVpnFeatureProvider;
import com.android.settings.wifi.WifiTrackerLibProvider;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -177,6 +178,11 @@
*/
public abstract AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider();
+ /**
+ * Retrieves implementation for advanced vpn feature.
+ */
+ public abstract AdvancedVpnFeatureProvider getAdvancedVpnFeatureProvider();
+
public static final class FactoryNotFoundException extends RuntimeException {
public FactoryNotFoundException(Throwable throwable) {
super("Unable to create factory. Did you misconfigure Proguard?", throwable);
diff --git a/src/com/android/settings/overlay/FeatureFactoryImpl.java b/src/com/android/settings/overlay/FeatureFactoryImpl.java
index 89f74de..593b866 100644
--- a/src/com/android/settings/overlay/FeatureFactoryImpl.java
+++ b/src/com/android/settings/overlay/FeatureFactoryImpl.java
@@ -71,6 +71,8 @@
import com.android.settings.slices.SlicesFeatureProviderImpl;
import com.android.settings.users.UserFeatureProvider;
import com.android.settings.users.UserFeatureProviderImpl;
+import com.android.settings.vpn2.AdvancedVpnFeatureProvider;
+import com.android.settings.vpn2.AdvancedVpnFeatureProviderImpl;
import com.android.settings.wifi.WifiTrackerLibProvider;
import com.android.settings.wifi.WifiTrackerLibProviderImpl;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -106,6 +108,7 @@
private SecuritySettingsFeatureProvider mSecuritySettingsFeatureProvider;
private AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider;
private AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
+ private AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider;
@Override
public SupportFeatureProvider getSupportFeatureProvider(Context context) {
@@ -334,4 +337,12 @@
}
return mAccessibilityMetricsFeatureProvider;
}
+
+ @Override
+ public AdvancedVpnFeatureProvider getAdvancedVpnFeatureProvider() {
+ if (mAdvancedVpnFeatureProvider == null) {
+ mAdvancedVpnFeatureProvider = new AdvancedVpnFeatureProviderImpl();
+ }
+ return mAdvancedVpnFeatureProvider;
+ }
}
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index 199d584..c4a3159 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -69,6 +69,7 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.ImeAwareEditText;
import android.widget.TextView;
@@ -214,6 +215,7 @@
ThemeHelper.trySetDynamicColor(this);
super.onCreate(savedInstanceState);
findViewById(R.id.content_parent).setFitsSystemWindows(false);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
public static class ChooseLockPasswordFragment extends InstrumentedFragment
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index 6558262..c39ef66 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -41,6 +41,7 @@
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
+import android.view.WindowManager;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
@@ -175,6 +176,7 @@
ThemeHelper.trySetDynamicColor(this);
super.onCreate(savedInstanceState);
findViewById(R.id.content_parent).setFitsSystemWindows(false);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
@Override
diff --git a/src/com/android/settings/password/SetupChooseLockPattern.java b/src/com/android/settings/password/SetupChooseLockPattern.java
index 7151c6d..fd925ec 100644
--- a/src/com/android/settings/password/SetupChooseLockPattern.java
+++ b/src/com/android/settings/password/SetupChooseLockPattern.java
@@ -143,7 +143,8 @@
}
final GlifLayout layout = getActivity().findViewById(R.id.setup_wizard_layout);
- layout.setDescriptionText("");
+ layout.setDescriptionText(
+ getString(R.string.lockpassword_choose_your_pattern_description));
}
@Override
diff --git a/src/com/android/settings/privacy/PrivacyControlsFragment.java b/src/com/android/settings/privacy/PrivacyControlsFragment.java
index 7b33364..1d9a4712 100644
--- a/src/com/android/settings/privacy/PrivacyControlsFragment.java
+++ b/src/com/android/settings/privacy/PrivacyControlsFragment.java
@@ -33,15 +33,12 @@
private static final String TAG = "PrivacyDashboardFrag";
private static final String CAMERA_KEY = "privacy_camera_toggle";
private static final String MIC_KEY = "privacy_mic_toggle";
- private static final String LOCATION_KEY = "privacy_location_toggle";
@Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new CameraToggleController(context, CAMERA_KEY));
controllers.add(new MicToggleController(context, MIC_KEY));
- controllers.add(new LocationToggleController(context, LOCATION_KEY,
- getSettingsLifecycle()));
controllers.add(new ShowClipAccessNotificationPreferenceController(context));
return controllers;
}
diff --git a/src/com/android/settings/privacy/WorkPolicyInfoPreferenceController.java b/src/com/android/settings/privacy/WorkPolicyInfoPreferenceController.java
index 55ba064..2d1d9e1 100644
--- a/src/com/android/settings/privacy/WorkPolicyInfoPreferenceController.java
+++ b/src/com/android/settings/privacy/WorkPolicyInfoPreferenceController.java
@@ -24,6 +24,8 @@
import com.android.settings.core.BasePreferenceController;
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.safetycenter.SafetyCenterManagerWrapper;
+
public class WorkPolicyInfoPreferenceController extends BasePreferenceController {
@@ -37,7 +39,12 @@
@Override
public int getAvailabilityStatus() {
- return mEnterpriseProvider.hasWorkPolicyInfo() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+ // Your Work policy info will be shown in the Safety Center.
+ // No need to show it in the privacy settings.
+ return !SafetyCenterManagerWrapper.get().isEnabled(mContext)
+ && mEnterpriseProvider.hasWorkPolicyInfo()
+ ? AVAILABLE
+ : UNSUPPORTED_ON_DEVICE;
}
@Override
diff --git a/src/com/android/settings/safetycenter/BiometricsSafetySource.java b/src/com/android/settings/safetycenter/BiometricsSafetySource.java
index 738268c..d3e3189 100644
--- a/src/com/android/settings/safetycenter/BiometricsSafetySource.java
+++ b/src/com/android/settings/safetycenter/BiometricsSafetySource.java
@@ -39,6 +39,9 @@
public final class BiometricsSafetySource {
public static final String SAFETY_SOURCE_ID = "AndroidBiometrics";
+ private static final int REQUEST_CODE_COMBINED_BIOMETRIC_SETTING = 10;
+ private static final int REQUEST_CODE_FACE_SETTING = 20;
+ private static final int REQUEST_CODE_FINGERPRINT_SETTING = 30;
private BiometricsSafetySource() {
}
@@ -62,9 +65,11 @@
setBiometricSafetySourceData(context,
context.getString(R.string.security_settings_biometric_preference_title),
combinedBiometricStatusUtils.getSummary(),
- biometricNavigationUtils.getBiometricSettingsIntent(context,
- combinedBiometricStatusUtils.getSettingsClassName(), disablingAdmin,
- Bundle.EMPTY),
+ createPendingIntent(context,
+ biometricNavigationUtils.getBiometricSettingsIntent(context,
+ combinedBiometricStatusUtils.getSettingsClassName(),
+ disablingAdmin, Bundle.EMPTY),
+ REQUEST_CODE_COMBINED_BIOMETRIC_SETTING),
disablingAdmin == null /* enabled */,
combinedBiometricStatusUtils.hasEnrolled(),
safetyEvent);
@@ -80,9 +85,11 @@
setBiometricSafetySourceData(context,
context.getString(R.string.security_settings_face_preference_title),
faceStatusUtils.getSummary(),
- biometricNavigationUtils.getBiometricSettingsIntent(context,
- faceStatusUtils.getSettingsClassName(), disablingAdmin,
- Bundle.EMPTY),
+ createPendingIntent(context,
+ biometricNavigationUtils.getBiometricSettingsIntent(context,
+ faceStatusUtils.getSettingsClassName(), disablingAdmin,
+ Bundle.EMPTY),
+ REQUEST_CODE_FACE_SETTING),
disablingAdmin == null /* enabled */,
faceStatusUtils.hasEnrolled(),
safetyEvent);
@@ -100,9 +107,11 @@
setBiometricSafetySourceData(context,
context.getString(R.string.security_settings_fingerprint_preference_title),
fingerprintStatusUtils.getSummary(),
- biometricNavigationUtils.getBiometricSettingsIntent(context,
- fingerprintStatusUtils.getSettingsClassName(), disablingAdmin,
- Bundle.EMPTY),
+ createPendingIntent(context,
+ biometricNavigationUtils.getBiometricSettingsIntent(context,
+ fingerprintStatusUtils.getSettingsClassName(), disablingAdmin,
+ Bundle.EMPTY),
+ REQUEST_CODE_FINGERPRINT_SETTING),
disablingAdmin == null /* enabled */,
fingerprintStatusUtils.hasEnrolled(),
safetyEvent);
@@ -118,8 +127,8 @@
}
private static void setBiometricSafetySourceData(Context context, String title, String summary,
- Intent clickIntent, boolean enabled, boolean hasEnrolled, SafetyEvent safetyEvent) {
- final PendingIntent pendingIntent = createPendingIntent(context, clickIntent);
+ PendingIntent pendingIntent, boolean enabled, boolean hasEnrolled,
+ SafetyEvent safetyEvent) {
final int severityLevel =
enabled && hasEnrolled ? SafetySourceData.SEVERITY_LEVEL_INFORMATION
: SafetySourceData.SEVERITY_LEVEL_UNSPECIFIED;
@@ -133,11 +142,12 @@
context, SAFETY_SOURCE_ID, safetySourceData, safetyEvent);
}
- private static PendingIntent createPendingIntent(Context context, Intent intent) {
+ private static PendingIntent createPendingIntent(Context context, Intent intent,
+ int requestCode) {
return PendingIntent
.getActivity(
context,
- 0 /* requestCode */,
+ requestCode,
intent,
PendingIntent.FLAG_IMMUTABLE);
}
diff --git a/src/com/android/settings/safetycenter/LockScreenSafetySource.java b/src/com/android/settings/safetycenter/LockScreenSafetySource.java
index 6295268..bdc0a09 100644
--- a/src/com/android/settings/safetycenter/LockScreenSafetySource.java
+++ b/src/com/android/settings/safetycenter/LockScreenSafetySource.java
@@ -42,6 +42,9 @@
public static final String NO_SCREEN_LOCK_ISSUE_TYPE_ID = "NoScreenLockIssueType";
public static final String SET_SCREEN_LOCK_ACTION_ID = "SetScreenLockAction";
+ private static final int REQUEST_CODE_SCREEN_LOCK = 1;
+ private static final int REQUEST_CODE_SCREEN_LOCK_SETTINGS = 2;
+
private LockScreenSafetySource() {
}
@@ -62,7 +65,7 @@
.checkIfPasswordQualityIsSet(context, userId);
final PendingIntent pendingIntent = createPendingIntent(context,
screenLockPreferenceDetailsUtils.getLaunchChooseLockGenericFragmentIntent(
- SettingsEnums.SAFETY_CENTER));
+ SettingsEnums.SAFETY_CENTER), REQUEST_CODE_SCREEN_LOCK);
final IconAction gearMenuIconAction = createGearMenuIconAction(context,
screenLockPreferenceDetailsUtils);
final boolean enabled =
@@ -114,15 +117,17 @@
IconAction.ICON_TYPE_GEAR,
createPendingIntent(context,
screenLockPreferenceDetailsUtils.getLaunchScreenLockSettingsIntent(
- SettingsEnums.SAFETY_CENTER)))
+ SettingsEnums.SAFETY_CENTER),
+ REQUEST_CODE_SCREEN_LOCK_SETTINGS))
: null;
}
- private static PendingIntent createPendingIntent(Context context, Intent intent) {
+ private static PendingIntent createPendingIntent(Context context, Intent intent,
+ int requestCode) {
return PendingIntent
.getActivity(
context,
- 0 /* requestCode */,
+ requestCode,
intent,
PendingIntent.FLAG_IMMUTABLE);
}
diff --git a/src/com/android/settings/search/CustomSiteMapRegistry.java b/src/com/android/settings/search/CustomSiteMapRegistry.java
index ab33fa2..1777cb8 100644
--- a/src/com/android/settings/search/CustomSiteMapRegistry.java
+++ b/src/com/android/settings/search/CustomSiteMapRegistry.java
@@ -21,8 +21,8 @@
import com.android.settings.backup.UserBackupSettingsActivity;
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
import com.android.settings.connecteddevice.usb.UsbDetailsFragment;
-import com.android.settings.fuelgauge.PowerUsageAdvanced;
-import com.android.settings.fuelgauge.PowerUsageSummary;
+import com.android.settings.fuelgauge.batteryusage.PowerUsageAdvanced;
+import com.android.settings.fuelgauge.batteryusage.PowerUsageSummary;
import com.android.settings.gestures.GestureNavigationSettingsFragment;
import com.android.settings.gestures.SystemNavigationGestureSettings;
import com.android.settings.location.LocationSettings;
diff --git a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
index c871e9f..89ee19b 100644
--- a/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
+++ b/src/com/android/settings/shortcut/CreateShortcutPreferenceController.java
@@ -46,6 +46,7 @@
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.Settings.TetherSettingsActivity;
+import com.android.settings.activityembedding.ActivityEmbeddingUtils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.gestures.OneHandedSettingsUtils;
import com.android.settings.overlay.FeatureFactory;
@@ -127,7 +128,7 @@
return false;
}
final Intent shortcutIntent = createResultIntent(
- buildShortcutIntent(info),
+ buildShortcutIntent(uiContext, info),
info, clickTarget.getTitle());
mHost.setResult(Activity.RESULT_OK, shortcutIntent);
logCreateShortcut(info);
@@ -210,10 +211,14 @@
info.activityInfo.name);
}
- private static Intent buildShortcutIntent(ResolveInfo info) {
- return new Intent(SHORTCUT_PROBE)
+ private static Intent buildShortcutIntent(Context context, ResolveInfo info) {
+ Intent intent = new Intent(SHORTCUT_PROBE)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP)
.setClassName(info.activityInfo.packageName, info.activityInfo.name);
+ if (ActivityEmbeddingUtils.isEmbeddingActivityEnabled(context)) {
+ intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
+ }
+ return intent;
}
private static ShortcutInfo createShortcutInfo(Context context, Intent shortcutIntent,
@@ -277,8 +282,8 @@
ResolveInfo ri = context.getPackageManager().resolveActivity(si.getIntent(), 0);
if (ri != null) {
- updatedShortcuts.add(createShortcutInfo(context, buildShortcutIntent(ri), ri,
- si.getShortLabel()));
+ updatedShortcuts.add(createShortcutInfo(context,
+ buildShortcutIntent(context, ri), ri, si.getShortLabel()));
}
}
}
diff --git a/src/com/android/settings/sound/MediaControlsLockScreenPreferenceController.java b/src/com/android/settings/sound/MediaControlsLockScreenPreferenceController.java
new file mode 100644
index 0000000..009ab2e
--- /dev/null
+++ b/src/com/android/settings/sound/MediaControlsLockScreenPreferenceController.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.sound;
+
+import static android.provider.Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+
+/**
+ * Toggle for media control resumption on lock screen.
+ */
+public class MediaControlsLockScreenPreferenceController extends TogglePreferenceController {
+ public MediaControlsLockScreenPreferenceController(Context context, String key) {
+ super(context, key);
+ }
+
+ @Override
+ public boolean isChecked() {
+ int val = Settings.Secure.getInt(mContext.getContentResolver(),
+ MEDIA_CONTROLS_LOCK_SCREEN, 1);
+ return val == 1;
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ int val = isChecked ? 1 : 0;
+ return Settings.Secure.putInt(mContext.getContentResolver(),
+ MEDIA_CONTROLS_LOCK_SCREEN, val);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public int getSliceHighlightMenuRes() {
+ return R.string.menu_key_sound;
+ }
+}
diff --git a/src/com/android/settings/users/AutoSyncWorkDataPreferenceController.java b/src/com/android/settings/users/AutoSyncWorkDataPreferenceController.java
index fb57173..9ac1b87 100644
--- a/src/com/android/settings/users/AutoSyncWorkDataPreferenceController.java
+++ b/src/com/android/settings/users/AutoSyncWorkDataPreferenceController.java
@@ -22,7 +22,8 @@
import com.android.settings.Utils;
-public class AutoSyncWorkDataPreferenceController extends AutoSyncPersonalDataPreferenceController {
+/** An account sync data preference controller for work */
+public class AutoSyncWorkDataPreferenceController extends AutoSyncDataPreferenceController {
private static final String KEY_AUTO_SYNC_WORK_ACCOUNT = "auto_sync_work_account_data";
@@ -38,6 +39,7 @@
@Override
public boolean isAvailable() {
+ mUserHandle = Utils.getManagedProfileWithDisabled(mUserManager);
return mUserHandle != null && !mUserManager.isManagedProfile() && !mUserManager.isLinkedUser()
&& mUserManager.getProfiles(UserHandle.myUserId()).size() > 1;
}
diff --git a/src/com/android/settings/users/RemoveGuestOnExitPreferenceController.java b/src/com/android/settings/users/RemoveGuestOnExitPreferenceController.java
new file mode 100644
index 0000000..182494c
--- /dev/null
+++ b/src/com/android/settings/users/RemoveGuestOnExitPreferenceController.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.users;
+
+import android.app.Dialog;
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.pm.UserInfo;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.util.FeatureFlagUtils;
+import android.util.Log;
+
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.Fragment;
+import androidx.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settingslib.RestrictedSwitchPreference;
+
+/**
+ * Controller to control the preference toggle for "remove guest on exit"
+ *
+ * Note, class is not 'final' since we need to mock it for unit tests
+ */
+public class RemoveGuestOnExitPreferenceController extends BasePreferenceController
+ implements Preference.OnPreferenceChangeListener {
+
+ private static final String TAG = RemoveGuestOnExitPreferenceController.class.getSimpleName();
+ private static final String TAG_CONFIRM_GUEST_REMOVE = "confirmGuestRemove";
+ private static final int REMOVE_GUEST_ON_EXIT_DEFAULT = 1;
+
+ private final UserCapabilities mUserCaps;
+ private final UserManager mUserManager;
+ private final Fragment mParentFragment;
+ private final Handler mHandler;
+
+ public RemoveGuestOnExitPreferenceController(Context context, String key,
+ Fragment parent, Handler handler) {
+ super(context, key);
+ mUserCaps = UserCapabilities.create(context);
+ mUserManager = context.getSystemService(UserManager.class);
+ mParentFragment = parent;
+ mHandler = handler;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ mUserCaps.updateAddUserCapabilities(mContext);
+ final RestrictedSwitchPreference restrictedSwitchPreference =
+ (RestrictedSwitchPreference) preference;
+ restrictedSwitchPreference.setChecked(isChecked());
+ if (!isAvailable()) {
+ restrictedSwitchPreference.setVisible(false);
+ } else {
+ restrictedSwitchPreference.setDisabledByAdmin(
+ mUserCaps.disallowAddUser() ? mUserCaps.getEnforcedAdmin() : null);
+ restrictedSwitchPreference.setVisible(mUserCaps.mUserSwitcherEnabled);
+ }
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ // if guest is forced to be ephemeral via config_guestUserEphemeral
+ // then disable this controller
+ // also disable this controller for non-admin users
+ // also disable when config_guestUserAllowEphemeralStateChange is false
+ if (mUserManager.isGuestUserAlwaysEphemeral()
+ || !UserManager.isGuestUserAllowEphemeralStateChange()
+ || !mUserCaps.isAdmin()
+ || mUserCaps.disallowAddUser()
+ || mUserCaps.disallowAddUserSetByAdmin()
+ || !FeatureFlagUtils.isEnabled(mContext,
+ FeatureFlagUtils.SETTINGS_GUEST_MODE_UX_CHANGES)) {
+ return DISABLED_FOR_USER;
+ } else {
+ return mUserCaps.mUserSwitcherEnabled ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ }
+ }
+
+ private boolean isChecked() {
+ return Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.REMOVE_GUEST_ON_EXIT, REMOVE_GUEST_ON_EXIT_DEFAULT) != 0;
+ }
+
+ private static boolean setChecked(Context context, boolean isChecked) {
+ Settings.Global.putInt(context.getContentResolver(),
+ Settings.Global.REMOVE_GUEST_ON_EXIT, isChecked ? 1 : 0);
+ return true;
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ boolean enable = (boolean) newValue;
+ UserInfo guestInfo = mUserManager.findCurrentGuestUser();
+
+ // no guest do the setting and return
+ // guest ephemeral state will take effect on guest create
+ if (guestInfo == null) {
+ return setChecked(mContext, enable);
+ }
+ // if guest has never been initialized or started
+ // we can change guest ephemeral state
+ if (!guestInfo.isInitialized()) {
+ boolean isSuccess = mUserManager.setUserEphemeral(guestInfo.id, enable);
+ if (isSuccess) {
+ return setChecked(mContext, enable);
+ } else {
+ Log.w(TAG, "Unused guest, id=" + guestInfo.id
+ + ". Mark ephemeral as " + enable + " failed !!!");
+ return false;
+ }
+ }
+ // if guest has been used before and is not ephemeral
+ // but now we are making reset guest on exit preference as enabled
+ // then show confirmation dialog box and remove this guest if confirmed by user
+ if (guestInfo.isInitialized() && !guestInfo.isEphemeral() && enable) {
+ ConfirmGuestRemoveFragment.show(mParentFragment,
+ mHandler,
+ enable,
+ guestInfo.id,
+ (RestrictedSwitchPreference) preference);
+ return false;
+ }
+ // all other cases, there should be none, don't change state
+ return false;
+ }
+
+
+ /**
+ * Dialog to confirm guest removal on toggle clicked set to true
+ *
+ * Fragment must be a public static class to be properly recreated from instance state
+ * else we will get "AndroidRuntime: java.lang.IllegalStateException"
+ */
+ public static final class ConfirmGuestRemoveFragment extends InstrumentedDialogFragment
+ implements DialogInterface.OnClickListener {
+
+ private static final String TAG = ConfirmGuestRemoveFragment.class.getSimpleName();
+ private static final String SAVE_ENABLING = "enabling";
+ private static final String SAVE_GUEST_USER_ID = "guestUserId";
+
+ private boolean mEnabling;
+ private int mGuestUserId;
+ private RestrictedSwitchPreference mPreference;
+ private Handler mHandler;
+
+ private static void show(Fragment parent,
+ Handler handler,
+ boolean enabling, int guestUserId,
+ RestrictedSwitchPreference preference) {
+ if (!parent.isAdded()) return;
+
+ final ConfirmGuestRemoveFragment dialog = new ConfirmGuestRemoveFragment();
+ dialog.mHandler = handler;
+ dialog.mEnabling = enabling;
+ dialog.mGuestUserId = guestUserId;
+ dialog.setTargetFragment(parent, 0);
+ dialog.mPreference = preference;
+ dialog.show(parent.getFragmentManager(), TAG_CONFIRM_GUEST_REMOVE);
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ final Context context = getActivity();
+ if (savedInstanceState != null) {
+ mEnabling = savedInstanceState.getBoolean(SAVE_ENABLING);
+ mGuestUserId = savedInstanceState.getInt(SAVE_GUEST_USER_ID);
+ }
+
+ final AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ builder.setTitle(R.string.remove_guest_on_exit_dialog_title);
+ builder.setMessage(R.string.remove_guest_on_exit_dialog_message);
+ builder.setPositiveButton(
+ com.android.settingslib.R.string.guest_exit_clear_data_button, this);
+ builder.setNegativeButton(android.R.string.cancel, null);
+
+ return builder.create();
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putBoolean(SAVE_ENABLING, mEnabling);
+ outState.putInt(SAVE_GUEST_USER_ID, mGuestUserId);
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.DIALOG_USER_REMOVE;
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ if (which != DialogInterface.BUTTON_POSITIVE) {
+ return;
+ }
+ UserManager userManager = getContext().getSystemService(UserManager.class);
+ if (userManager == null) {
+ Log.e(TAG, "Unable to get user manager service");
+ return;
+ }
+ UserInfo guestUserInfo = userManager.getUserInfo(mGuestUserId);
+ // only do action for guests and when enabling the preference
+ if (guestUserInfo == null || !guestUserInfo.isGuest() || !mEnabling) {
+ Log.w(TAG, "Removing guest user ... failed, id=" + mGuestUserId);
+ return;
+ }
+ if (mPreference != null) {
+ // Using markGuestForDeletion allows us to create a new guest before this one is
+ // fully removed.
+ boolean isSuccess = userManager.markGuestForDeletion(guestUserInfo.id);
+ if (!isSuccess) {
+ Log.w(TAG, "Couldn't mark the guest for deletion for user "
+ + guestUserInfo.id);
+ return;
+ }
+ userManager.removeUser(guestUserInfo.id);
+ if (setChecked(getContext(), mEnabling)) {
+ mPreference.setChecked(mEnabling);
+ mHandler.sendEmptyMessage(
+ UserSettings
+ .MESSAGE_REMOVE_GUEST_ON_EXIT_CONTROLLER_GUEST_REMOVED);
+ }
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/users/UserCapabilities.java b/src/com/android/settings/users/UserCapabilities.java
index 620738f..cf0e10b 100644
--- a/src/com/android/settings/users/UserCapabilities.java
+++ b/src/com/android/settings/users/UserCapabilities.java
@@ -34,6 +34,7 @@
boolean mCanAddRestrictedProfile;
boolean mIsAdmin;
boolean mIsGuest;
+ boolean mIsEphemeral;
boolean mUserSwitcherEnabled;
boolean mCanAddGuest;
boolean mDisallowAddUser;
@@ -56,6 +57,7 @@
final UserInfo myUserInfo = userManager.getUserInfo(UserHandle.myUserId());
caps.mIsGuest = myUserInfo.isGuest();
caps.mIsAdmin = myUserInfo.isAdmin();
+ caps.mIsEphemeral = myUserInfo.isEphemeral();
DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
Context.DEVICE_POLICY_SERVICE);
diff --git a/src/com/android/settings/users/UserDetailsSettings.java b/src/com/android/settings/users/UserDetailsSettings.java
index 9976040..3f51b83 100644
--- a/src/com/android/settings/users/UserDetailsSettings.java
+++ b/src/com/android/settings/users/UserDetailsSettings.java
@@ -73,6 +73,7 @@
private static final int DIALOG_CONFIRM_ENABLE_CALLING_AND_SMS = 3;
private static final int DIALOG_SETUP_USER = 4;
private static final int DIALOG_CONFIRM_RESET_GUEST = 5;
+ private static final int DIALOG_CONFIRM_RESET_GUEST_AND_SWITCH_USER = 6;
/** Whether to enable the app_copying fragment. */
private static final boolean SHOW_APP_COPYING_PREF = false;
@@ -142,6 +143,11 @@
if (canSwitchUserNow()) {
if (shouldShowSetupPromptDialog()) {
showDialog(DIALOG_SETUP_USER);
+ } else if (mUserCaps.mIsGuest && mUserCaps.mIsEphemeral) {
+ // if we are switching away from a ephemeral guest then,
+ // show a dialog that guest user will be reset and then switch
+ // the user
+ showDialog(DIALOG_CONFIRM_RESET_GUEST_AND_SWITCH_USER);
} else {
switchUser();
}
@@ -173,6 +179,7 @@
switch (dialogId) {
case DIALOG_CONFIRM_REMOVE:
case DIALOG_CONFIRM_RESET_GUEST:
+ case DIALOG_CONFIRM_RESET_GUEST_AND_SWITCH_USER:
return SettingsEnums.DIALOG_USER_REMOVE;
case DIALOG_CONFIRM_ENABLE_CALLING:
return SettingsEnums.DIALOG_USER_ENABLE_CALLING;
@@ -216,6 +223,14 @@
return UserDialogs.createRemoveGuestDialog(getActivity(),
(dialog, which) -> resetGuest());
}
+ case DIALOG_CONFIRM_RESET_GUEST_AND_SWITCH_USER:
+ if (mGuestUserAutoCreated) {
+ return UserDialogs.createResetGuestDialog(getActivity(),
+ (dialog, which) -> switchUser());
+ } else {
+ return UserDialogs.createRemoveGuestDialog(getActivity(),
+ (dialog, which) -> switchUser());
+ }
}
throw new IllegalArgumentException("Unsupported dialogId " + dialogId);
}
@@ -361,6 +376,16 @@
if (mUserInfo.isGuest()) {
mMetricsFeatureProvider.action(getActivity(), SettingsEnums.ACTION_SWITCH_TO_GUEST);
}
+ if (mUserCaps.mIsGuest && mUserCaps.mIsEphemeral) {
+ int guestUserId = UserHandle.myUserId();
+ // Using markGuestForDeletion allows us to create a new guest before this one is
+ // fully removed.
+ boolean marked = mUserManager.markGuestForDeletion(guestUserId);
+ if (!marked) {
+ Log.w(TAG, "Couldn't mark the guest for deletion for user " + guestUserId);
+ return;
+ }
+ }
ActivityManager.getService().switchUser(mUserInfo.id);
} catch (RemoteException re) {
Log.e(TAG, "Error while switching to other user.");
diff --git a/src/com/android/settings/users/UserDialogs.java b/src/com/android/settings/users/UserDialogs.java
index 8549ffe..faaff4c 100644
--- a/src/com/android/settings/users/UserDialogs.java
+++ b/src/com/android/settings/users/UserDialogs.java
@@ -189,7 +189,7 @@
DialogInterface.OnClickListener onConfirmListener) {
return new AlertDialog.Builder(context)
.setTitle(com.android.settingslib.R.string.guest_reset_guest_dialog_title)
- .setMessage(R.string.user_exit_guest_confirm_message)
+ .setMessage(com.android.settingslib.R.string.guest_exit_dialog_message)
.setPositiveButton(
com.android.settingslib.R.string.guest_reset_guest_confirm_button,
onConfirmListener)
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 358b87b..ca03e3f 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -47,13 +47,16 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.ContactsContract;
+import android.provider.Settings;
import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
import android.util.Log;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.WindowManagerGlobal;
import android.widget.SimpleAdapter;
import android.widget.Toast;
@@ -95,6 +98,7 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
/**
* Screen that manages the list of users on the device.
@@ -123,6 +127,13 @@
private static final String KEY_ADD_USER_WHEN_LOCKED = "user_settings_add_users_when_locked";
private static final String KEY_MULTIUSER_TOP_INTRO = "multiuser_top_intro";
private static final String KEY_TIMEOUT_TO_USER_ZERO = "timeout_to_user_zero_preference";
+ private static final String KEY_GUEST_CATEGORY = "guest_category";
+ private static final String KEY_GUEST_RESET = "guest_reset";
+ private static final String KEY_GUEST_EXIT = "guest_exit";
+ private static final String KEY_REMOVE_GUEST_ON_EXIT = "remove_guest_on_exit";
+ private static final String KEY_GUEST_USER_CATEGORY = "guest_user_category";
+
+ private static final String SETTING_GUEST_HAS_LOGGED_IN = "systemui.guest_has_logged_in";
private static final int MENU_REMOVE_USER = Menu.FIRST;
@@ -134,14 +145,18 @@
private static final int DIALOG_USER_CANNOT_MANAGE = 5;
private static final int DIALOG_CHOOSE_USER_TYPE = 6;
private static final int DIALOG_NEED_LOCKSCREEN = 7;
- private static final int DIALOG_CONFIRM_EXIT_GUEST = 8;
+ private static final int DIALOG_CONFIRM_REMOVE_GUEST = 8;
private static final int DIALOG_USER_PROFILE_EDITOR = 9;
private static final int DIALOG_USER_PROFILE_EDITOR_ADD_USER = 10;
private static final int DIALOG_USER_PROFILE_EDITOR_ADD_RESTRICTED_PROFILE = 11;
- private static final int DIALOG_CONFIRM_RESET_GUEST = 12;
+ private static final int DIALOG_CONFIRM_REMOVE_GUEST_WITH_AUTO_CREATE = 12;
+ private static final int DIALOG_CONFIRM_RESET_AND_RESTART_GUEST = 13;
+ private static final int DIALOG_CONFIRM_EXIT_GUEST_EPHEMERAL = 14;
+ private static final int DIALOG_CONFIRM_EXIT_GUEST_NON_EPHEMERAL = 15;
private static final int MESSAGE_UPDATE_LIST = 1;
private static final int MESSAGE_USER_CREATED = 2;
+ static final int MESSAGE_REMOVE_GUEST_ON_EXIT_CONTROLLER_GUEST_REMOVED = 3;
private static final int USER_TYPE_USER = 1;
private static final int USER_TYPE_RESTRICTED_PROFILE = 2;
@@ -165,6 +180,14 @@
@VisibleForTesting
PreferenceGroup mUserListCategory;
@VisibleForTesting
+ PreferenceGroup mGuestUserCategory;
+ @VisibleForTesting
+ PreferenceGroup mGuestCategory;
+ @VisibleForTesting
+ Preference mGuestResetPreference;
+ @VisibleForTesting
+ Preference mGuestExitPreference;
+ @VisibleForTesting
UserPreference mMePreference;
@VisibleForTesting
RestrictedPreference mAddGuest;
@@ -189,6 +212,7 @@
private EditUserInfoController mEditUserInfoController =
new EditUserInfoController(Utils.FILE_PROVIDER_AUTHORITY);
private AddUserWhenLockedPreferenceController mAddUserWhenLockedPreferenceController;
+ private RemoveGuestOnExitPreferenceController mRemoveGuestOnExitPreferenceController;
private MultiUserTopIntroPreferenceController mMultiUserTopIntroPreferenceController;
private TimeoutToUserZeroPreferenceController mTimeoutToUserZeroPreferenceController;
private UserCreatingDialog mUserCreatingDialog;
@@ -213,6 +237,12 @@
case MESSAGE_USER_CREATED:
onUserCreated(msg.arg1);
break;
+ case MESSAGE_REMOVE_GUEST_ON_EXIT_CONTROLLER_GUEST_REMOVED:
+ updateUserList();
+ if (mGuestUserAutoCreated) {
+ scheduleGuestCreation();
+ }
+ break;
}
}
};
@@ -245,7 +275,11 @@
final SettingsActivity activity = (SettingsActivity) getActivity();
final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.setTitle(getContext().getString(R.string.multiple_users_main_switch_title));
- switchBar.show();
+ if (mUserCaps.mIsAdmin) {
+ switchBar.show();
+ } else {
+ switchBar.hide();
+ }
mSwitchBarController = new MultiUserSwitchBarController(activity,
new MainSwitchBarController(switchBar), this /* listener */);
getSettingsLifecycle().addObserver(mSwitchBarController);
@@ -267,6 +301,9 @@
mAddUserWhenLockedPreferenceController = new AddUserWhenLockedPreferenceController(
activity, KEY_ADD_USER_WHEN_LOCKED);
+ mRemoveGuestOnExitPreferenceController = new RemoveGuestOnExitPreferenceController(
+ activity, KEY_REMOVE_GUEST_ON_EXIT, this, mHandler);
+
mMultiUserTopIntroPreferenceController = new MultiUserTopIntroPreferenceController(activity,
KEY_MULTIUSER_TOP_INTRO);
@@ -275,12 +312,16 @@
final PreferenceScreen screen = getPreferenceScreen();
mAddUserWhenLockedPreferenceController.displayPreference(screen);
+ mRemoveGuestOnExitPreferenceController.displayPreference(screen);
mMultiUserTopIntroPreferenceController.displayPreference(screen);
mTimeoutToUserZeroPreferenceController.displayPreference(screen);
screen.findPreference(mAddUserWhenLockedPreferenceController.getPreferenceKey())
.setOnPreferenceChangeListener(mAddUserWhenLockedPreferenceController);
+ screen.findPreference(mRemoveGuestOnExitPreferenceController.getPreferenceKey())
+ .setOnPreferenceChangeListener(mRemoveGuestOnExitPreferenceController);
+
if (icicle != null) {
if (icicle.containsKey(SAVE_REMOVING_USER)) {
mRemovingUserId = icicle.getInt(SAVE_REMOVING_USER);
@@ -304,6 +345,16 @@
mMePreference.setSummary(R.string.user_admin);
}
+ mGuestCategory = findPreference(KEY_GUEST_CATEGORY);
+
+ mGuestResetPreference = findPreference(KEY_GUEST_RESET);
+ mGuestResetPreference.setOnPreferenceClickListener(this);
+
+ mGuestExitPreference = findPreference(KEY_GUEST_EXIT);
+ mGuestExitPreference.setOnPreferenceClickListener(this);
+
+ mGuestUserCategory = findPreference(KEY_GUEST_USER_CATEGORY);
+
mAddGuest = findPreference(KEY_ADD_GUEST);
mAddGuest.setOnPreferenceClickListener(this);
@@ -339,7 +390,8 @@
mAddUserWhenLockedPreferenceController.getPreferenceKey()));
mTimeoutToUserZeroPreferenceController.updateState(screen.findPreference(
mTimeoutToUserZeroPreferenceController.getPreferenceKey()));
-
+ mRemoveGuestOnExitPreferenceController.updateState(screen.findPreference(
+ mRemoveGuestOnExitPreferenceController.getPreferenceKey()));
if (mShouldUpdateUserList) {
updateUI();
}
@@ -418,6 +470,11 @@
updateUserList();
}
+ private boolean isEnableGuestModeUxChanges() {
+ return FeatureFlagUtils.isEnabled(getContext(),
+ FeatureFlagUtils.SETTINGS_GUEST_MODE_UX_CHANGES);
+ }
+
/**
* Loads profile information for the current user.
*/
@@ -460,7 +517,7 @@
int myUserId = UserHandle.myUserId();
Bitmap b = mUserManager.getUserIcon(myUserId);
if (b != null) {
- mMePreference.setIcon(encircle(b));
+ mMePreference.setIcon(encircleUserIcon(b));
mUserIcons.put(myUserId, b);
}
}
@@ -702,7 +759,7 @@
.create();
return dlg;
}
- case DIALOG_CONFIRM_EXIT_GUEST: {
+ case DIALOG_CONFIRM_REMOVE_GUEST: {
Dialog dlg = new AlertDialog.Builder(context)
.setTitle(com.android.settingslib.R.string.guest_remove_guest_dialog_title)
.setMessage(R.string.user_exit_guest_confirm_message)
@@ -710,13 +767,56 @@
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- exitGuest();
+ clearAndExitGuest();
}
})
.setNegativeButton(android.R.string.cancel, null)
.create();
return dlg;
}
+ case DIALOG_CONFIRM_EXIT_GUEST_EPHEMERAL: {
+ Dialog dlg = new AlertDialog.Builder(context)
+ .setTitle(com.android.settingslib.R.string.guest_exit_dialog_title)
+ .setMessage(com.android.settingslib.R.string.guest_exit_dialog_message)
+ .setPositiveButton(
+ com.android.settingslib.R.string.guest_exit_dialog_button,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ clearAndExitGuest();
+ }
+ })
+ .setNeutralButton(android.R.string.cancel, null)
+ .create();
+ return dlg;
+ }
+ case DIALOG_CONFIRM_EXIT_GUEST_NON_EPHEMERAL: {
+ Dialog dlg = new AlertDialog.Builder(context)
+ .setTitle(
+ com.android.settingslib.R.string.guest_exit_dialog_title_non_ephemeral)
+ .setMessage(
+ com.android.settingslib
+ .R.string.guest_exit_dialog_message_non_ephemeral)
+ .setPositiveButton(
+ com.android.settingslib.R.string.guest_exit_save_data_button,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ exitGuest();
+ }
+ })
+ .setNegativeButton(
+ com.android.settingslib.R.string.guest_exit_clear_data_button,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ clearAndExitGuest();
+ }
+ })
+ .setNeutralButton(android.R.string.cancel, null)
+ .create();
+ return dlg;
+ }
case DIALOG_USER_PROFILE_EDITOR: {
return buildEditCurrentUserDialog();
}
@@ -736,14 +836,27 @@
}
return buildAddUserDialog(USER_TYPE_RESTRICTED_PROFILE);
}
- case DIALOG_CONFIRM_RESET_GUEST: {
- if (mGuestUserAutoCreated) {
- return UserDialogs.createResetGuestDialog(getActivity(),
- (dialog, which) -> resetGuest());
- } else {
- return UserDialogs.createRemoveGuestDialog(getActivity(),
- (dialog, which) -> resetGuest());
- }
+ case DIALOG_CONFIRM_REMOVE_GUEST_WITH_AUTO_CREATE: {
+ return UserDialogs.createResetGuestDialog(getActivity(),
+ (dialog, which) -> clearAndExitGuest());
+ }
+ case DIALOG_CONFIRM_RESET_AND_RESTART_GUEST: {
+ Dialog dlg = new AlertDialog.Builder(context)
+ .setTitle(
+ com.android.settingslib.R.string.guest_reset_and_restart_dialog_title)
+ .setMessage(
+ com.android.settingslib.R.string.guest_reset_and_restart_dialog_message)
+ .setPositiveButton(
+ com.android.settingslib.R.string.guest_reset_guest_confirm_button,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ resetAndRestartGuest();
+ }
+ })
+ .setNeutralButton(android.R.string.cancel, null)
+ .create();
+ return dlg;
}
default:
return null;
@@ -821,8 +934,11 @@
return SettingsEnums.DIALOG_USER_CHOOSE_TYPE;
case DIALOG_NEED_LOCKSCREEN:
return SettingsEnums.DIALOG_USER_NEED_LOCKSCREEN;
- case DIALOG_CONFIRM_EXIT_GUEST:
- case DIALOG_CONFIRM_RESET_GUEST:
+ case DIALOG_CONFIRM_REMOVE_GUEST:
+ case DIALOG_CONFIRM_REMOVE_GUEST_WITH_AUTO_CREATE:
+ case DIALOG_CONFIRM_EXIT_GUEST_EPHEMERAL:
+ case DIALOG_CONFIRM_EXIT_GUEST_NON_EPHEMERAL:
+ case DIALOG_CONFIRM_RESET_AND_RESTART_GUEST:
return SettingsEnums.DIALOG_USER_CONFIRM_EXIT_GUEST;
case DIALOG_USER_PROFILE_EDITOR:
case DIALOG_USER_PROFILE_EDITOR_ADD_USER:
@@ -864,6 +980,18 @@
}
}
+ private void switchToUserId(int userId) {
+ if (!canSwitchUserNow()) {
+ Log.w(TAG, "Cannot switch current user when switching is disabled");
+ return;
+ }
+ try {
+ ActivityManager.getService().switchUser(userId);
+ } catch (RemoteException re) {
+ Log.e(TAG, "Unable to switch user");
+ }
+ }
+
private void addUserNow(final int userType) {
Trace.beginAsyncSection("UserSettings.addUserNow", 0);
synchronized (mUserLock) {
@@ -945,36 +1073,91 @@
* Erase the current user (guest) and switch to another user.
*/
@VisibleForTesting
- void exitGuest() {
+ void clearAndExitGuest() {
// Just to be safe
if (!isCurrentUserGuest()) {
return;
}
mMetricsFeatureProvider.action(getActivity(),
SettingsEnums.ACTION_USER_GUEST_EXIT_CONFIRMED);
- removeThisUser();
- }
- /**
- * Erase the current user (assuming it is a guest user), and create a new one in the background
- */
- @VisibleForTesting
- void resetGuest() {
- // Just to be safe
- if (!isCurrentUserGuest()) {
- return;
- }
int guestUserId = UserHandle.myUserId();
// Using markGuestForDeletion allows us to create a new guest before this one is
- // fully removed. This could happen if someone calls scheduleGuestCreation()
- // immediately after calling this method.
+ // fully removed.
boolean marked = mUserManager.markGuestForDeletion(guestUserId);
if (!marked) {
Log.w(TAG, "Couldn't mark the guest for deletion for user " + guestUserId);
return;
}
- exitGuest();
- scheduleGuestCreation();
+
+ removeThisUser();
+ if (mGuestUserAutoCreated) {
+ scheduleGuestCreation();
+ }
+ }
+
+ /**
+ * Switch to another user.
+ */
+ private void exitGuest() {
+ // Just to be safe
+ if (!isCurrentUserGuest()) {
+ return;
+ }
+ mMetricsFeatureProvider.action(getActivity(),
+ SettingsEnums.ACTION_USER_GUEST_EXIT_CONFIRMED);
+ switchToUserId(UserHandle.USER_SYSTEM);
+ }
+
+ private int createGuest() {
+ UserInfo guest;
+ Context context = getPrefContext();
+ try {
+ guest = mUserManager.createGuest(context);
+ } catch (UserManager.UserOperationException e) {
+ Log.e(TAG, "Couldn't create guest user", e);
+ return UserHandle.USER_NULL;
+ }
+ if (guest == null) {
+ Log.e(TAG, "Couldn't create guest, most likely because there already exists one");
+ return UserHandle.USER_NULL;
+ }
+ return guest.id;
+ }
+
+ /**
+ * Remove current guest and start a new guest session
+ */
+ private void resetAndRestartGuest() {
+ // Just to be safe
+ if (!isCurrentUserGuest()) {
+ return;
+ }
+ int oldGuestUserId = UserHandle.myUserId();
+ // Using markGuestForDeletion allows us to create a new guest before this one is
+ // fully removed.
+ boolean marked = mUserManager.markGuestForDeletion(oldGuestUserId);
+ if (!marked) {
+ Log.w(TAG, "Couldn't mark the guest for deletion for user " + oldGuestUserId);
+ return;
+ }
+
+ try {
+ // Create a new guest in the foreground, and then immediately switch to it
+ int newGuestUserId = createGuest();
+ if (newGuestUserId == UserHandle.USER_NULL) {
+ Log.e(TAG, "Could not create new guest, switching back to system user");
+ switchToUserId(UserHandle.USER_SYSTEM);
+ mUserManager.removeUser(oldGuestUserId);
+ WindowManagerGlobal.getWindowManagerService().lockNow(/* options= */ null);
+ return;
+ }
+ switchToUserId(newGuestUserId);
+ mUserManager.removeUser(oldGuestUserId);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Couldn't remove guest because ActivityManager or WindowManager is dead");
+ return;
+ }
}
/**
@@ -1009,18 +1192,28 @@
if (context == null) {
return;
}
- final List<UserInfo> users = mUserManager.getAliveUsers();
-
+ final List<UserInfo> users = mUserManager.getAliveUsers()
+ // Only users that can be switched to should show up here.
+ // e.g. Managed profiles appear under Accounts Settings instead
+ .stream().filter(UserInfo::supportsSwitchToByUser)
+ .collect(Collectors.toList());
final ArrayList<Integer> missingIcons = new ArrayList<>();
final ArrayList<UserPreference> userPreferences = new ArrayList<>();
- userPreferences.add(mMePreference);
+
+ // mMePreference shows a icon for current user. However when current user is a guest, we
+ // don't show the guest user icon, instead we show two preferences for guest user to
+ // exit and reset itself. Hence we don't add mMePreference, i.e. guest user to the
+ // list of users visible in the UI.
+ if (!mUserCaps.mIsGuest) {
+ userPreferences.add(mMePreference);
+ }
boolean canOpenUserDetails =
mUserCaps.mIsAdmin || (canSwitchUserNow() && !mUserCaps.mDisallowSwitchUser);
for (UserInfo user : users) {
- if (!user.supportsSwitchToByUser()) {
- // Only users that can be switched to should show up here.
- // e.g. Managed profiles appear under Accounts Settings instead
+ if (user.isGuest()) {
+ // Guest user is added to guest category via updateGuestCategory
+ // and not to user list so skip guest here
continue;
}
UserPreference pref;
@@ -1033,21 +1226,9 @@
pref.setOnPreferenceClickListener(this);
pref.setEnabled(canOpenUserDetails);
pref.setSelectable(true);
-
- if (user.isGuest()) {
- pref.setIcon(getEncircledDefaultIcon());
- pref.setKey(KEY_USER_GUEST);
- if (mUserCaps.mDisallowSwitchUser) {
- pref.setDisabledByAdmin(
- RestrictedLockUtilsInternal.getDeviceOwner(context));
- } else {
- pref.setDisabledByAdmin(null);
- }
- } else {
- pref.setKey("id=" + user.id);
- if (user.isAdmin()) {
- pref.setSummary(R.string.user_admin);
- }
+ pref.setKey("id=" + user.id);
+ if (user.isAdmin()) {
+ pref.setSummary(R.string.user_admin);
}
}
if (pref == null) {
@@ -1102,12 +1283,13 @@
loadIconsAsync(missingIcons);
}
- // If profiles are supported, mUserListCategory will have a special title
+ // If restricted profiles are supported, mUserListCategory will have a special title
if (mUserCaps.mCanAddRestrictedProfile) {
mUserListCategory.setTitle(R.string.user_list_title);
+ } else if (isCurrentUserGuest()) {
+ mUserListCategory.setTitle(R.string.other_user_category_title);
} else {
- mUserListCategory.setTitle(null);
- mUserListCategory.setLayoutResource(R.layout.empty_view);
+ mUserListCategory.setTitle(R.string.user_category_title);
}
// Remove everything from mUserListCategory and add new users.
@@ -1122,8 +1304,8 @@
mMultiUserTopIntroPreferenceController.getPreferenceKey());
mMultiUserTopIntroPreferenceController.updateState(multiUserTopIntroPrefence);
mUserListCategory.setVisible(mUserCaps.mUserSwitcherEnabled);
-
- updateAddGuest(context, users.stream().anyMatch(UserInfo::isGuest));
+ updateGuestPreferences();
+ updateGuestCategory(context, users);
updateAddUser(context);
updateAddSupervisedUser(context);
@@ -1152,14 +1334,130 @@
return mUserManager.getUserSwitchability() == UserManager.SWITCHABILITY_STATUS_OK;
}
- private void updateAddGuest(Context context, boolean isGuestAlreadyCreated) {
+ private void updateGuestPreferences() {
+ // reset guest and exit guest preferences are shown only in guest mode.
+ // For all other users these are not visible.
+ mGuestCategory.setVisible(false);
+ mGuestResetPreference.setVisible(false);
+ mGuestExitPreference.setVisible(false);
+ if (!isCurrentUserGuest()) {
+ return;
+ }
+ mGuestCategory.setVisible(true);
+ mGuestExitPreference.setVisible(true);
+ if (isEnableGuestModeUxChanges()) {
+ mGuestResetPreference.setVisible(true);
+
+ boolean isGuestFirstLogin = Settings.Secure.getIntForUser(
+ getContext().getContentResolver(),
+ SETTING_GUEST_HAS_LOGGED_IN,
+ 0,
+ UserHandle.myUserId()) <= 1;
+ String guestExitSummary;
+ if (mUserCaps.mIsEphemeral) {
+ guestExitSummary = getContext().getString(
+ R.string.guest_notification_ephemeral);
+ } else if (isGuestFirstLogin) {
+ guestExitSummary = getContext().getString(
+ R.string.guest_notification_non_ephemeral);
+ } else {
+ guestExitSummary = getContext().getString(
+ R.string.guest_notification_non_ephemeral_non_first_login);
+ }
+ mGuestExitPreference.setSummary(guestExitSummary);
+ } else {
+ mGuestExitPreference.setIcon(getEncircledDefaultIcon());
+ mGuestExitPreference.setTitle(
+ mGuestUserAutoCreated
+ ? com.android.settingslib.R.string.guest_reset_guest
+ : com.android.settingslib.R.string.guest_exit_guest);
+ }
+ }
+
+ private void updateGuestCategory(Context context, List<UserInfo> users) {
+ // show guest category title and related guest preferences
+ // - if guest is created, then show guest user preference
+ // - if guest is not created and its allowed to create guest,
+ // then show "add guest" preference
+ // - if allowed, show "reset guest on exit" preference
+ // - if there is nothing to show, then make the guest category as not visible
+ // - guest category is not visible for guest user.
+ UserPreference pref = null;
+ boolean isGuestAlreadyCreated = false;
+ boolean canOpenUserDetails =
+ mUserCaps.mIsAdmin || (canSwitchUserNow() && !mUserCaps.mDisallowSwitchUser);
+
+ mGuestUserCategory.removeAll();
+ mGuestUserCategory.setVisible(false);
+ for (UserInfo user : users) {
+ if (!user.isGuest() || !user.isEnabled()) {
+ // Only look at enabled, guest users
+ continue;
+ }
+ final Context prefContext = getPrefContext();
+ pref = new UserPreference(prefContext, null, user.id);
+ pref.setTitle(user.name);
+ pref.setOnPreferenceClickListener(this);
+ pref.setEnabled(canOpenUserDetails);
+ pref.setSelectable(true);
+ if (isEnableGuestModeUxChanges()) {
+ Drawable icon = getContext().getDrawable(R.drawable.ic_account_circle_outline);
+ icon.setTint(
+ getColorAttrDefaultColor(getContext(), android.R.attr.colorControlNormal));
+ pref.setIcon(encircleUserIcon(
+ UserIcons.convertToBitmapAtUserIconSize(
+ getContext().getResources(), icon)));
+ } else {
+ pref.setIcon(getEncircledDefaultIcon());
+ }
+ pref.setKey(KEY_USER_GUEST);
+ pref.setOrder(Preference.DEFAULT_ORDER);
+ if (mUserCaps.mDisallowSwitchUser) {
+ pref.setDisabledByAdmin(
+ RestrictedLockUtilsInternal.getDeviceOwner(context));
+ } else {
+ pref.setDisabledByAdmin(null);
+ }
+ if (mUserCaps.mUserSwitcherEnabled) {
+ mGuestUserCategory.addPreference(pref);
+ // guest user preference is shown hence also make guest category visible
+ mGuestUserCategory.setVisible(true);
+ }
+ isGuestAlreadyCreated = true;
+ }
+ boolean isVisible = updateAddGuestPreference(context, isGuestAlreadyCreated);
+ if (isVisible) {
+ // "add guest" preference is shown hence also make guest category visible
+ mGuestUserCategory.setVisible(true);
+ }
+ final Preference removeGuestOnExit = getPreferenceScreen().findPreference(
+ mRemoveGuestOnExitPreferenceController.getPreferenceKey());
+ mRemoveGuestOnExitPreferenceController.updateState(removeGuestOnExit);
+ if (mRemoveGuestOnExitPreferenceController.isAvailable()) {
+ // "reset guest on exit" preference is shown hence also make guest category visible
+ mGuestUserCategory.setVisible(true);
+ }
+ if (mUserCaps.mIsGuest) {
+ // guest category is not visible for guest user.
+ mGuestUserCategory.setVisible(false);
+ }
+ }
+
+ private boolean updateAddGuestPreference(Context context, boolean isGuestAlreadyCreated) {
+ boolean isVisible = false;
if (!isGuestAlreadyCreated && mUserCaps.mCanAddGuest
&& mUserManager.canAddMoreUsers(UserManager.USER_TYPE_FULL_GUEST)
&& WizardManagerHelper.isDeviceProvisioned(context)
&& mUserCaps.mUserSwitcherEnabled) {
+ isVisible = true;
mAddGuest.setVisible(true);
- Drawable icon = context.getDrawable(R.drawable.ic_account_circle);
- mAddGuest.setIcon(centerAndTint(icon));
+ // when isEnableGuestModeUxChanges() is true, the icon is set via the layout xml
+ // In com.android.settings.users.UserSettingsTest
+ // we disable the check for setIcon being called
+ if (!isEnableGuestModeUxChanges()) {
+ Drawable icon = context.getDrawable(R.drawable.ic_account_circle);
+ mAddGuest.setIcon(centerAndTint(icon));
+ }
mAddGuest.setSelectable(true);
if (mGuestUserAutoCreated && mGuestCreationScheduled.get()) {
mAddGuest.setTitle(com.android.internal.R.string.guest_name);
@@ -1172,19 +1470,26 @@
} else {
mAddGuest.setVisible(false);
}
+ return isVisible;
}
private void updateAddUser(Context context) {
updateAddUserCommon(context, mAddUser, mUserCaps.mCanAddRestrictedProfile);
- Drawable icon = context.getDrawable(R.drawable.ic_account_circle_filled);
- mAddUser.setIcon(centerAndTint(icon));
+ // when isEnableGuestModeUxChanges() is true, the icon is set via the layout xml
+ if (!isEnableGuestModeUxChanges()) {
+ Drawable icon = context.getDrawable(R.drawable.ic_account_circle_filled);
+ mAddUser.setIcon(centerAndTint(icon));
+ }
}
private void updateAddSupervisedUser(Context context) {
if (!TextUtils.isEmpty(mConfigSupervisedUserCreationPackage)) {
updateAddUserCommon(context, mAddSupervisedUser, false);
- Drawable icon = context.getDrawable(R.drawable.ic_add_supervised_user);
- mAddSupervisedUser.setIcon(centerAndTint(icon));
+ // when isEnableGuestModeUxChanges() is true, the icon is set via the layout xml
+ if (!isEnableGuestModeUxChanges()) {
+ Drawable icon = context.getDrawable(R.drawable.ic_add_supervised_user);
+ mAddSupervisedUser.setIcon(centerAndTint(icon));
+ }
} else {
mAddSupervisedUser.setVisible(false);
}
@@ -1265,7 +1570,7 @@
private Drawable getEncircledDefaultIcon() {
if (mDefaultIconDrawable == null) {
- mDefaultIconDrawable = encircle(
+ mDefaultIconDrawable = encircleUserIcon(
getDefaultUserIconAsBitmap(getContext().getResources(), UserHandle.USER_NULL));
}
return mDefaultIconDrawable;
@@ -1274,23 +1579,42 @@
private void setPhotoId(Preference pref, UserInfo user) {
Bitmap bitmap = mUserIcons.get(user.id);
if (bitmap != null) {
- pref.setIcon(encircle(bitmap));
+ pref.setIcon(encircleUserIcon(bitmap));
}
}
@Override
public boolean onPreferenceClick(Preference pref) {
- if (pref == mMePreference) {
- if (isCurrentUserGuest()) {
- if (mGuestUserAutoCreated) {
- showDialog(DIALOG_CONFIRM_RESET_GUEST);
- } else {
- showDialog(DIALOG_CONFIRM_EXIT_GUEST);
+ if (isCurrentUserGuest()) {
+ if (isEnableGuestModeUxChanges()) {
+ if (mGuestResetPreference != null && pref == mGuestResetPreference) {
+ showDialog(DIALOG_CONFIRM_RESET_AND_RESTART_GUEST);
+ return true;
+ }
+ if (mGuestExitPreference != null && pref == mGuestExitPreference) {
+ if (mUserCaps.mIsEphemeral) {
+ showDialog(DIALOG_CONFIRM_EXIT_GUEST_EPHEMERAL);
+ } else {
+ showDialog(DIALOG_CONFIRM_EXIT_GUEST_NON_EPHEMERAL);
+ }
+ return true;
}
} else {
- showDialog(DIALOG_USER_PROFILE_EDITOR);
+ if (mGuestExitPreference != null && pref == mGuestExitPreference) {
+ if (mGuestUserAutoCreated) {
+ showDialog(DIALOG_CONFIRM_REMOVE_GUEST_WITH_AUTO_CREATE);
+ } else {
+ showDialog(DIALOG_CONFIRM_REMOVE_GUEST);
+ }
+ return true;
+ }
}
- return true;
+ }
+ if (pref == mMePreference) {
+ if (!isCurrentUserGuest()) {
+ showDialog(DIALOG_USER_PROFILE_EDITOR);
+ return true;
+ }
} else if (pref instanceof UserPreference) {
UserInfo userInfo = mUserManager.getUserInfo(((UserPreference) pref).getUserId());
openUserDetails(userInfo, false);
@@ -1318,9 +1642,11 @@
return false;
}
- private Drawable encircle(Bitmap icon) {
- Drawable circled = CircleFramedDrawable.getInstance(getActivity(), icon);
- return circled;
+ private Drawable encircleUserIcon(Bitmap icon) {
+ return new CircleFramedDrawable(
+ icon,
+ getActivity().getResources().getDimensionPixelSize(
+ R.dimen.multiple_users_user_icon_size));
}
@Override
diff --git a/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java b/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java
new file mode 100644
index 0000000..962b6c2
--- /dev/null
+++ b/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.vpn2;
+
+import android.content.Context;
+
+/**
+ * Feature Provider used in vpn usage
+ */
+public interface AdvancedVpnFeatureProvider {
+
+ /**
+ * Returns package name of advanced vpn.
+ */
+ String getAdvancedVpnPackageName();
+
+ /**
+ * Returns {@code true} advanced vpn is supported.
+ */
+ boolean isAdvancedVpnSupported(Context context);
+
+ /**
+ * Returns the title of advanced vpn preference group.
+ */
+ String getAdvancedVpnPreferenceGroupTitle(Context context);
+
+ /**
+ * Returns the title of vpn preference group.
+ */
+ String getVpnPreferenceGroupTitle(Context context);
+
+ /**
+ * Returns {@code true} advanced vpn is removable.
+ */
+ boolean isAdvancedVpnRemovable();
+
+ /**
+ * Returns {@code true} if the disconnect dialog is enabled when advanced vpn is connected.
+ */
+ boolean isDisconnectDialogEnabled();
+}
diff --git a/src/com/android/settings/vpn2/AdvancedVpnFeatureProviderImpl.java b/src/com/android/settings/vpn2/AdvancedVpnFeatureProviderImpl.java
new file mode 100644
index 0000000..b8f58a9
--- /dev/null
+++ b/src/com/android/settings/vpn2/AdvancedVpnFeatureProviderImpl.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.vpn2;
+
+import android.content.Context;
+
+/**
+ * Feature provider implementation for advanced vpn.
+ */
+public class AdvancedVpnFeatureProviderImpl implements AdvancedVpnFeatureProvider {
+ @Override
+ public String getAdvancedVpnPackageName() {
+ return null;
+ }
+
+ @Override
+ public boolean isAdvancedVpnSupported(Context context) {
+ return false;
+ }
+
+ @Override
+ public String getAdvancedVpnPreferenceGroupTitle(Context context) {
+ return null;
+ }
+
+ @Override
+ public String getVpnPreferenceGroupTitle(Context context) {
+ return null;
+ }
+
+ @Override
+ public boolean isAdvancedVpnRemovable() {
+ return true;
+ }
+
+ @Override
+ public boolean isDisconnectDialogEnabled() {
+ return true;
+ }
+}
diff --git a/src/com/android/settings/vpn2/AppManagementFragment.java b/src/com/android/settings/vpn2/AppManagementFragment.java
index d4ee5b9..d2fa5fc 100644
--- a/src/com/android/settings/vpn2/AppManagementFragment.java
+++ b/src/com/android/settings/vpn2/AppManagementFragment.java
@@ -48,6 +48,7 @@
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedPreference;
@@ -71,6 +72,7 @@
private PackageManager mPackageManager;
private DevicePolicyManager mDevicePolicyManager;
private VpnManager mVpnManager;
+ private AdvancedVpnFeatureProvider mFeatureProvider;
// VPN app info
private final int mUserId = UserHandle.myUserId();
@@ -122,6 +124,7 @@
mPackageManager = getContext().getPackageManager();
mDevicePolicyManager = getContext().getSystemService(DevicePolicyManager.class);
mVpnManager = getContext().getSystemService(VpnManager.class);
+ mFeatureProvider = FeatureFactory.getFactory(getContext()).getAdvancedVpnFeatureProvider();
mPreferenceAlwaysOn = (RestrictedSwitchPreference) findPreference(KEY_ALWAYS_ON_VPN);
mPreferenceLockdown = (RestrictedSwitchPreference) findPreference(KEY_LOCKDOWN_VPN);
@@ -283,7 +286,16 @@
}
}
- private void updateRestrictedViews() {
+ @VisibleForTesting
+ void updateRestrictedViews() {
+ if (mFeatureProvider.isAdvancedVpnSupported(getContext())
+ && !mFeatureProvider.isAdvancedVpnRemovable()
+ && TextUtils.equals(mPackageName, mFeatureProvider.getAdvancedVpnPackageName())) {
+ mPreferenceForget.setVisible(false);
+ } else {
+ mPreferenceForget.setVisible(true);
+ }
+
if (isAdded()) {
mPreferenceAlwaysOn.checkRestrictionAndSetDisabled(UserManager.DISALLOW_CONFIG_VPN,
mUserId);
@@ -314,6 +326,14 @@
}
}
+ @VisibleForTesting
+ void init(String packageName, AdvancedVpnFeatureProvider featureProvider,
+ RestrictedPreference preference) {
+ mPackageName = packageName;
+ mFeatureProvider = featureProvider;
+ mPreferenceForget = preference;
+ }
+
private String getAlwaysOnVpnPackage() {
return mVpnManager.getAlwaysOnVpnPackageForUser(mUserId);
}
diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java
index e89785f..a91bb6c 100644
--- a/src/com/android/settings/vpn2/VpnSettings.java
+++ b/src/com/android/settings/vpn2/VpnSettings.java
@@ -26,6 +26,7 @@
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
@@ -42,6 +43,7 @@
import android.os.UserManager;
import android.security.Credentials;
import android.security.LegacyVpnProfileStore;
+import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
@@ -52,6 +54,7 @@
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceScreen;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.net.LegacyVpnInfo;
@@ -59,6 +62,7 @@
import com.android.internal.net.VpnProfile;
import com.android.settings.R;
import com.android.settings.RestrictedSettingsFragment;
+import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.GearPreference;
import com.android.settings.widget.GearPreference.OnGearClickListener;
import com.android.settingslib.RestrictedLockUtilsInternal;
@@ -79,9 +83,12 @@
public class VpnSettings extends RestrictedSettingsFragment implements
Handler.Callback, Preference.OnPreferenceClickListener {
private static final String LOG_TAG = "VpnSettings";
+ private static final boolean DEBUG = Log.isLoggable(LOG_TAG, Log.DEBUG);
private static final int RESCAN_MESSAGE = 0;
private static final int RESCAN_INTERVAL_MS = 1000;
+ private static final String ADVANCED_VPN_GROUP_KEY = "advanced_vpn_group";
+ private static final String VPN_GROUP_KEY = "vpn_group";
private static final NetworkRequest VPN_REQUEST = new NetworkRequest.Builder()
.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)
@@ -102,6 +109,9 @@
private LegacyVpnInfo mConnectedLegacyVpn;
private boolean mUnavailable;
+ private AdvancedVpnFeatureProvider mFeatureProvider;
+ private PreferenceScreen mPreferenceScreen;
+ private boolean mIsAdvancedVpnSupported;
public VpnSettings() {
super(UserManager.DISALLOW_CONFIG_VPN);
@@ -119,11 +129,14 @@
mUserManager = (UserManager) getSystemService(Context.USER_SERVICE);
mConnectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
mVpnManager = (VpnManager) getSystemService(Context.VPN_MANAGEMENT_SERVICE);
+ mFeatureProvider = FeatureFactory.getFactory(getContext()).getAdvancedVpnFeatureProvider();
+ mIsAdvancedVpnSupported = mFeatureProvider.isAdvancedVpnSupported(getContext());
mUnavailable = isUiRestricted();
setHasOptionsMenu(!mUnavailable);
addPreferencesFromResource(R.xml.vpn_settings2);
+ mPreferenceScreen = getPreferenceScreen();
}
@Override
@@ -229,7 +242,8 @@
// Run heavy RPCs before switching to UI thread
final List<VpnProfile> vpnProfiles = loadVpnProfiles();
- final List<AppVpnInfo> vpnApps = getVpnApps(context, /* includeProfiles */ true);
+ final List<AppVpnInfo> vpnApps = getVpnApps(context, /* includeProfiles */ true,
+ mFeatureProvider);
final Map<String, LegacyVpnInfo> connectedLegacyVpns = getConnectedLegacyVpns();
final Set<AppVpnInfo> connectedAppVpns = getConnectedAppVpns();
@@ -265,7 +279,7 @@
private final VpnSettings mSettings;
- public UpdatePreferences(VpnSettings settings) {
+ UpdatePreferences(VpnSettings settings) {
mSettings = settings;
}
@@ -332,7 +346,14 @@
}
// Trim out deleted VPN preferences
- mSettings.setShownPreferences(updates);
+ if (DEBUG) {
+ Log.d(LOG_TAG, "isAdvancedVpnSupported() : " + mSettings.mIsAdvancedVpnSupported);
+ }
+ if (mSettings.mIsAdvancedVpnSupported) {
+ mSettings.setShownAdvancedPreferences(updates);
+ } else {
+ mSettings.setShownPreferences(updates);
+ }
}
}
@@ -343,12 +364,61 @@
@VisibleForTesting @UiThread
public void setShownPreferences(final Collection<Preference> updates) {
+ retainAllPreference(updates);
+
+ final PreferenceGroup vpnGroup = mPreferenceScreen;
+ updatePreferenceGroup(vpnGroup, updates);
+
+ // Show all new preferences on the screen
+ for (Preference pref : updates) {
+ vpnGroup.addPreference(pref);
+ }
+ }
+
+ @VisibleForTesting @UiThread
+ void setShownAdvancedPreferences(final Collection<Preference> updates) {
+ retainAllPreference(updates);
+
+ PreferenceGroup advancedVpnGroup = mPreferenceScreen.findPreference(ADVANCED_VPN_GROUP_KEY);
+ PreferenceGroup vpnGroup = mPreferenceScreen.findPreference(VPN_GROUP_KEY);
+ advancedVpnGroup.setTitle(
+ mFeatureProvider.getAdvancedVpnPreferenceGroupTitle(getContext()));
+ vpnGroup.setTitle(mFeatureProvider.getVpnPreferenceGroupTitle(getContext()));
+ updatePreferenceGroup(advancedVpnGroup, updates);
+ updatePreferenceGroup(vpnGroup, updates);
+
+ // Show all new preferences on the screen
+ for (Preference pref : updates) {
+ String packageName = "";
+ if (pref instanceof LegacyVpnPreference) {
+ LegacyVpnPreference legacyPref = (LegacyVpnPreference) pref;
+ packageName = legacyPref.getPackageName();
+ } else if (pref instanceof AppPreference) {
+ AppPreference appPref = (AppPreference) pref;
+ packageName = appPref.getPackageName();
+ }
+ if (DEBUG) {
+ Log.d(LOG_TAG, "setShownAdvancedPreferences() package name : " + packageName);
+ }
+ if (TextUtils.equals(packageName, mFeatureProvider.getAdvancedVpnPackageName())) {
+ advancedVpnGroup.addPreference(pref);
+ } else {
+ vpnGroup.addPreference(pref);
+ }
+ }
+
+ advancedVpnGroup.setVisible(advancedVpnGroup.getPreferenceCount() > 0);
+ vpnGroup.setVisible(vpnGroup.getPreferenceCount() > 0);
+ }
+
+ private void retainAllPreference(Collection<Preference> updates) {
mLegacyVpnPreferences.values().retainAll(updates);
mAppPreferences.values().retainAll(updates);
+ }
+ private void updatePreferenceGroup(PreferenceGroup vpnGroup, Collection<Preference> updates) {
// Change {@param updates} in-place to only contain new preferences that were not already
// added to the preference screen.
- final PreferenceGroup vpnGroup = getPreferenceScreen();
for (int i = vpnGroup.getPreferenceCount() - 1; i >= 0; i--) {
Preference p = vpnGroup.getPreference(i);
if (updates.contains(p)) {
@@ -357,11 +427,6 @@
vpnGroup.removePreference(p);
}
}
-
- // Show any new preferences on the screen
- for (Preference pref : updates) {
- vpnGroup.addPreference(pref);
- }
}
@Override
@@ -383,14 +448,16 @@
} else if (preference instanceof AppPreference) {
AppPreference pref = (AppPreference) preference;
boolean connected = (pref.getState() == AppPreference.STATE_CONNECTED);
+ String vpnPackageName = pref.getPackageName();
- if (!connected) {
+ if ((!connected) || (isAdvancedVpn(mFeatureProvider, vpnPackageName, getContext())
+ && !mFeatureProvider.isDisconnectDialogEnabled())) {
try {
UserHandle user = UserHandle.of(pref.getUserId());
- Context userContext = getActivity().createPackageContextAsUser(
- getActivity().getPackageName(), 0 /* flags */, user);
+ Context userContext = getContext().createPackageContextAsUser(
+ getContext().getPackageName(), 0 /* flags */, user);
PackageManager pm = userContext.getPackageManager();
- Intent appIntent = pm.getLaunchIntentForPackage(pref.getPackageName());
+ Intent appIntent = pm.getLaunchIntentForPackage(vpnPackageName);
if (appIntent != null) {
userContext.startActivityAsUser(appIntent, user);
return true;
@@ -470,9 +537,32 @@
pref.setOnPreferenceClickListener(this);
mAppPreferences.put(app, pref);
}
+ enableAdvancedVpnGearIconIfNecessary(pref);
return pref;
}
+ private void enableAdvancedVpnGearIconIfNecessary(AppPreference pref) {
+ Context context = getContext();
+ if (!isAdvancedVpn(mFeatureProvider, pref.getPackageName(), context)) {
+ return;
+ }
+
+ boolean isEnabled = false;
+ AppOpsManager appOpsManager = getContext().getSystemService(AppOpsManager.class);
+ List<AppOpsManager.PackageOps> apps =
+ appOpsManager.getPackagesForOps(
+ new int[] {OP_ACTIVATE_VPN, OP_ACTIVATE_PLATFORM_VPN});
+ if (apps != null) {
+ for (AppOpsManager.PackageOps pkg : apps) {
+ if (isAdvancedVpn(mFeatureProvider, pkg.getPackageName(), context)) {
+ isEnabled = true;
+ break;
+ }
+ }
+ }
+ pref.setOnGearClickListener(isEnabled ? mGearListener : null);
+ }
+
@WorkerThread
private Map<String, LegacyVpnInfo> getConnectedLegacyVpns() {
mConnectedLegacyVpn = mVpnManager.getLegacyVpnInfo(UserHandle.myUserId());
@@ -508,7 +598,15 @@
return result;
}
- static List<AppVpnInfo> getVpnApps(Context context, boolean includeProfiles) {
+ static List<AppVpnInfo> getVpnApps(Context context, boolean includeProfiles,
+ AdvancedVpnFeatureProvider featureProvider) {
+ return getVpnApps(context, includeProfiles, featureProvider,
+ context.getSystemService(AppOpsManager.class));
+ }
+
+ @VisibleForTesting
+ static List<AppVpnInfo> getVpnApps(Context context, boolean includeProfiles,
+ AdvancedVpnFeatureProvider featureProvider, AppOpsManager aom) {
List<AppVpnInfo> result = Lists.newArrayList();
final Set<Integer> profileIds;
@@ -521,8 +619,19 @@
profileIds = Collections.singleton(UserHandle.myUserId());
}
- // Fetch VPN-enabled apps from AppOps.
- AppOpsManager aom = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+ if (featureProvider.isAdvancedVpnSupported(context)) {
+ PackageManager pm = context.getPackageManager();
+ try {
+ ApplicationInfo appInfo =
+ pm.getApplicationInfo(
+ featureProvider.getAdvancedVpnPackageName(), /* flags= */ 0);
+ int userId = UserHandle.getUserId(appInfo.uid);
+ result.add(new AppVpnInfo(userId, featureProvider.getAdvancedVpnPackageName()));
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.e(LOG_TAG, "Advanced VPN package name not found.", e);
+ }
+ }
+
List<AppOpsManager.PackageOps> apps =
aom.getPackagesForOps(new int[] {OP_ACTIVATE_VPN, OP_ACTIVATE_PLATFORM_VPN});
if (apps != null) {
@@ -532,6 +641,9 @@
// Skip packages for users outside of our profile group.
continue;
}
+ if (isAdvancedVpn(featureProvider, pkg.getPackageName(), context)) {
+ continue;
+ }
// Look for a MODE_ALLOWED permission to activate VPN.
boolean allowed = false;
for (AppOpsManager.OpEntry op : pkg.getOps()) {
@@ -550,6 +662,12 @@
return result;
}
+ private static boolean isAdvancedVpn(AdvancedVpnFeatureProvider featureProvider,
+ String packageName, Context context) {
+ return featureProvider.isAdvancedVpnSupported(context)
+ && TextUtils.equals(packageName, featureProvider.getAdvancedVpnPackageName());
+ }
+
private static List<VpnProfile> loadVpnProfiles() {
final ArrayList<VpnProfile> result = Lists.newArrayList();
@@ -562,4 +680,10 @@
}
return result;
}
+
+ @VisibleForTesting
+ void init(PreferenceScreen preferenceScreen, AdvancedVpnFeatureProvider featureProvider) {
+ mPreferenceScreen = preferenceScreen;
+ mFeatureProvider = featureProvider;
+ }
}
diff --git a/src/com/android/settings/widget/CardPreference.java b/src/com/android/settings/widget/CardPreference.java
index c041552..afccfac 100644
--- a/src/com/android/settings/widget/CardPreference.java
+++ b/src/com/android/settings/widget/CardPreference.java
@@ -18,18 +18,36 @@
import android.content.Context;
import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Button;
import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
import com.google.android.material.card.MaterialCardView;
+import java.util.Optional;
+
/**
* Preference that wrapped by {@link MaterialCardView}, only support to set icon, title and summary
*/
public class CardPreference extends Preference {
+ private View.OnClickListener mPrimaryBtnClickListener = null;
+ private View.OnClickListener mSecondaryBtnClickListener = null;
+
+ private String mPrimaryButtonText = null;
+ private String mSecondaryButtonText = null;
+
+ private Optional<Button> mPrimaryButton = Optional.empty();
+ private Optional<Button> mSecondaryButton = Optional.empty();
+ private Optional<View> mButtonsGroup = Optional.empty();
+
+ private boolean mPrimaryButtonVisible = false;
+ private boolean mSecondaryButtonVisible = false;
+
public CardPreference(Context context) {
this(context, null /* attrs */);
}
@@ -37,4 +55,94 @@
public CardPreference(Context context, AttributeSet attrs) {
super(context, attrs, R.attr.cardPreferenceStyle);
}
+
+ @Override
+ public void onBindViewHolder(PreferenceViewHolder holder) {
+ super.onBindViewHolder(holder);
+
+ initButtonsAndLayout(holder);
+ }
+
+ private void initButtonsAndLayout(PreferenceViewHolder holder) {
+ mPrimaryButton = Optional.ofNullable((Button) holder.findViewById(android.R.id.button1));
+ mSecondaryButton = Optional.ofNullable((Button) holder.findViewById(android.R.id.button2));
+ mButtonsGroup = Optional.ofNullable(holder.findViewById(R.id.card_preference_buttons));
+
+ setPrimaryButtonText(mPrimaryButtonText);
+ setPrimaryButtonClickListener(mPrimaryBtnClickListener);
+ setPrimaryButtonVisible(mPrimaryButtonVisible);
+ setSecondaryButtonText(mSecondaryButtonText);
+ setSecondaryButtonClickListener(mSecondaryBtnClickListener);
+ setSecondaryButtonVisible(mSecondaryButtonVisible);
+ }
+
+ /**
+ * Register a callback to be invoked when the primary button is clicked.
+ *
+ * @param l the callback that will run
+ */
+ public void setPrimaryButtonClickListener(View.OnClickListener l) {
+ mPrimaryButton.ifPresent(button -> button.setOnClickListener(l));
+ mPrimaryBtnClickListener = l;
+ }
+
+ /**
+ * Register a callback to be invoked when the secondary button is clicked.
+ *
+ * @param l the callback that will run
+ */
+ public void setSecondaryButtonClickListener(View.OnClickListener l) {
+ mSecondaryButton.ifPresent(button -> button.setOnClickListener(l));
+ mSecondaryBtnClickListener = l;
+ }
+
+ /**
+ * Sets the text to be displayed on primary button.
+ *
+ * @param text text to be displayed
+ */
+ public void setPrimaryButtonText(String text) {
+ mPrimaryButton.ifPresent(button -> button.setText(text));
+ mPrimaryButtonText = text;
+ }
+
+ /**
+ * Sets the text to be displayed on secondary button.
+ *
+ * @param text text to be displayed
+ */
+ public void setSecondaryButtonText(String text) {
+ mSecondaryButton.ifPresent(button -> button.setText(text));
+ mSecondaryButtonText = text;
+ }
+
+ /**
+ * Set the visible on the primary button.
+ *
+ * @param visible {@code true} for visible
+ */
+ public void setPrimaryButtonVisible(boolean visible) {
+ mPrimaryButton.ifPresent(
+ button -> button.setVisibility(visible ? View.VISIBLE : View.GONE));
+ mPrimaryButtonVisible = visible;
+ updateButtonGroupsVisibility();
+ }
+
+ /**
+ * Set the visible on the secondary button.
+ *
+ * @param visible {@code true} for visible
+ */
+ public void setSecondaryButtonVisible(boolean visible) {
+ mSecondaryButton.ifPresent(
+ button -> button.setVisibility(visible ? View.VISIBLE : View.GONE));
+ mSecondaryButtonVisible = visible;
+ updateButtonGroupsVisibility();
+ }
+
+ private void updateButtonGroupsVisibility() {
+ int visibility =
+ (mPrimaryButtonVisible || mSecondaryButtonVisible) ? View.VISIBLE : View.GONE;
+ mButtonsGroup.ifPresent(group -> group.setVisibility(visibility));
+ }
}
diff --git a/src/com/android/settings/widget/SettingsMainSwitchPreference.java b/src/com/android/settings/widget/SettingsMainSwitchPreference.java
index ce91c9e..9fd8d06 100644
--- a/src/com/android/settings/widget/SettingsMainSwitchPreference.java
+++ b/src/com/android/settings/widget/SettingsMainSwitchPreference.java
@@ -22,7 +22,6 @@
import android.content.res.TypedArray;
import android.text.TextUtils;
import android.util.AttributeSet;
-import android.view.ViewGroup;
import android.widget.Switch;
import androidx.core.content.res.TypedArrayUtils;
@@ -35,8 +34,6 @@
import com.android.settingslib.core.instrumentation.SettingsJankMonitor;
import com.android.settingslib.widget.OnMainSwitchChangeListener;
-import com.google.android.setupdesign.util.LayoutStyler;
-
import java.util.ArrayList;
import java.util.List;
@@ -52,7 +49,6 @@
new ArrayList<>();
private final List<OnMainSwitchChangeListener> mSwitchChangeListeners = new ArrayList<>();
- private boolean mApplyPartnerCustomizationPaddingStyle;
private SettingsMainSwitchBar mMainSwitchBar;
private CharSequence mTitle;
private EnforcedAdmin mEnforcedAdmin;
@@ -100,12 +96,6 @@
} else {
mMainSwitchBar.hide();
}
-
- if (mApplyPartnerCustomizationPaddingStyle) {
- // TODO(b/232494666): Replace all margins of the root view with the padding
- final ViewGroup parentView = (ViewGroup) mMainSwitchBar.getParent();
- LayoutStyler.applyPartnerCustomizationLayoutPaddingStyle(parentView);
- }
}
private void init(Context context, AttributeSet attrs) {
@@ -253,14 +243,6 @@
}
}
- /**
- * Apples the padding style of the partner's customization. It's used in the SetupWizard.
- */
- public void applyPartnerCustomizationPaddingStyle() {
- mApplyPartnerCustomizationPaddingStyle = true;
- notifyChanged();
- }
-
private void initMainSwitchBar() {
if (mMainSwitchBar != null) {
mMainSwitchBar.setTitle(mTitle);
diff --git a/src/com/android/settings/wifi/ConfigureWifiSettings.java b/src/com/android/settings/wifi/ConfigureWifiSettings.java
index 6bb4389..33f2827 100644
--- a/src/com/android/settings/wifi/ConfigureWifiSettings.java
+++ b/src/com/android/settings/wifi/ConfigureWifiSettings.java
@@ -15,19 +15,21 @@
*/
package com.android.settings.wifi;
-import static android.content.Context.WIFI_SERVICE;
-
+import android.annotation.Nullable;
import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.os.Bundle;
-import android.util.FeatureFlagUtils;
+import android.os.UserManager;
+import android.util.EventLog;
import android.util.Log;
+import android.view.View;
+import android.widget.TextView;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
-import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
@@ -43,7 +45,8 @@
public class ConfigureWifiSettings extends DashboardFragment {
private static final String TAG = "ConfigureWifiSettings";
- private static final String KEY_INSTALL_CREDENTIALS = "install_credentials";
+ @VisibleForTesting
+ static final String KEY_INSTALL_CREDENTIALS = "install_credentials";
private static final String ACTION_INSTALL_CERTS = "android.credentials.INSTALL";
private static final String PACKAGE_INSTALL_CERTS = "com.android.certinstaller";
private static final String CLASS_INSTALL_CERTS = "com.android.certinstaller.CertInstallerMain";
@@ -53,16 +56,26 @@
public static final int WIFI_WAKEUP_REQUEST_CODE = 600;
private WifiWakeupPreferenceController mWifiWakeupPreferenceController;
- private Preference mCertinstallerPreference;
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ if (isGuestUser(context)) return;
+
+ mWifiWakeupPreferenceController = use(WifiWakeupPreferenceController.class);
+ mWifiWakeupPreferenceController.setFragment(this);
+ }
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
getActivity().setTitle(R.string.network_and_internet_preferences_title);
- mCertinstallerPreference = findPreference(KEY_INSTALL_CREDENTIALS);
- if (mCertinstallerPreference != null) {
- mCertinstallerPreference.setOnPreferenceClickListener(preference -> {
+ if (isGuestUser(getContext())) return;
+
+ final Preference installCredentialsPref = findPreference(KEY_INSTALL_CREDENTIALS);
+ if (installCredentialsPref != null) {
+ installCredentialsPref.setOnPreferenceClickListener(preference -> {
Intent intent = new Intent(ACTION_INSTALL_CERTS);
intent.setFlags(
Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -78,6 +91,23 @@
}
@Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ if (!isGuestUser(getContext())) return;
+
+ Log.w(TAG, "Displays the restricted UI because the user is a guest.");
+ EventLog.writeEvent(0x534e4554, "231987122", -1 /* UID */, "User is a guest");
+
+ // Restricted UI
+ final TextView emptyView = getActivity().findViewById(android.R.id.empty);
+ if (emptyView != null) {
+ emptyView.setVisibility(View.VISIBLE);
+ emptyView.setText(R.string.wifi_empty_list_user_restricted);
+ }
+ getPreferenceScreen().removeAll();
+ }
+
+ @Override
public int getMetricsCategory() {
return SettingsEnums.CONFIGURE_WIFI;
}
@@ -94,7 +124,9 @@
@Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- final WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
+ if (isGuestUser(context)) return null;
+
+ final WifiManager wifiManager = getSystemService(WifiManager.class);
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new WifiP2pPreferenceController(context, getSettingsLifecycle(),
wifiManager));
@@ -102,17 +134,8 @@
}
@Override
- public void onAttach(Context context) {
- super.onAttach(context);
-
-
- mWifiWakeupPreferenceController = use(WifiWakeupPreferenceController.class);
- mWifiWakeupPreferenceController.setFragment(this);
- }
-
- @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == WIFI_WAKEUP_REQUEST_CODE) {
+ if (mWifiWakeupPreferenceController != null && requestCode == WIFI_WAKEUP_REQUEST_CODE) {
mWifiWakeupPreferenceController.onActivityResult(requestCode, resultCode);
return;
}
@@ -122,8 +145,16 @@
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.wifi_configure_settings) {
protected boolean isPageSearchEnabled(Context context) {
+ if (isGuestUser(context)) return false;
return context.getResources()
.getBoolean(R.bool.config_show_wifi_settings);
}
};
+
+ private static boolean isGuestUser(Context context) {
+ if (context == null) return false;
+ final UserManager userManager = context.getSystemService(UserManager.class);
+ if (userManager == null) return false;
+ return userManager.isGuestUser();
+ }
}
diff --git a/src/com/android/settings/wifi/WifiConfigController2.java b/src/com/android/settings/wifi/WifiConfigController2.java
index 9e96be9..e55ea16 100644
--- a/src/com/android/settings/wifi/WifiConfigController2.java
+++ b/src/com/android/settings/wifi/WifiConfigController2.java
@@ -42,6 +42,7 @@
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.TextWatcher;
+import android.util.ArrayMap;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
@@ -1495,13 +1496,20 @@
}
// Shows display name of each active subscription.
- final ArrayList<CharSequence> displayNames = new ArrayList<>();
+ ArrayMap<Integer, CharSequence> displayNames = new ArrayMap<>();
+ int defaultDataSubscriptionId = SubscriptionManager.getDefaultDataSubscriptionId();
for (SubscriptionInfo activeSubInfo : mActiveSubscriptionInfos) {
- displayNames.add(
+ // If multiple SIMs have the same carrier id, only the first or default data SIM is
+ // displayed.
+ if (displayNames.containsKey(activeSubInfo.getCarrierId())
+ && defaultDataSubscriptionId != activeSubInfo.getSubscriptionId()) {
+ continue;
+ }
+ displayNames.put(activeSubInfo.getCarrierId(),
SubscriptionUtil.getUniqueSubscriptionDisplayName(activeSubInfo, mContext));
}
mEapSimSpinner.setAdapter(
- getSpinnerAdapter(displayNames.toArray(new String[displayNames.size()])));
+ getSpinnerAdapter(displayNames.values().toArray(new String[displayNames.size()])));
mEapSimSpinner.setSelection(0 /* position */);
if (displayNames.size() == 1) {
mEapSimSpinner.setEnabled(false);
diff --git a/src/com/android/settings/wifi/WifiDialogActivity.java b/src/com/android/settings/wifi/WifiDialogActivity.java
index 67f291d..e3e77e8 100644
--- a/src/com/android/settings/wifi/WifiDialogActivity.java
+++ b/src/com/android/settings/wifi/WifiDialogActivity.java
@@ -17,7 +17,9 @@
package com.android.settings.wifi;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
+import static android.os.UserManager.DISALLOW_CONFIG_WIFI;
+import android.app.KeyguardManager;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
@@ -31,6 +33,7 @@
import android.os.Process;
import android.os.SimpleClock;
import android.os.SystemClock;
+import android.os.UserManager;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.Log;
@@ -49,6 +52,7 @@
import com.google.android.setupcompat.util.WizardManagerHelper;
import com.google.android.setupdesign.util.ThemeHelper;
+import java.lang.ref.WeakReference;
import java.time.Clock;
import java.time.ZoneOffset;
@@ -94,10 +98,12 @@
// Interval between initiating NetworkDetailsTracker scans.
private static final long SCAN_INTERVAL_MILLIS = 10_000;
- private WifiDialog mDialog;
+ @VisibleForTesting
+ WifiDialog mDialog;
private AccessPoint mAccessPoint;
- private WifiDialog2 mDialog2;
+ @VisibleForTesting
+ WifiDialog2 mDialog2;
// The received intent supports a key of WifiTrackerLib or SettingsLib.
private boolean mIsWifiTrackerLib;
@@ -106,6 +112,7 @@
private NetworkDetailsTracker mNetworkDetailsTracker;
private HandlerThread mWorkerThread;
private WifiManager mWifiManager;
+ private LockScreenMonitor mLockScreenMonitor;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -115,6 +122,10 @@
}
super.onCreate(savedInstanceState);
+ if (!isConfigWifiAllowed()) {
+ finish();
+ return;
+ }
mIsWifiTrackerLib = !TextUtils.isEmpty(mIntent.getStringExtra(KEY_CHOSEN_WIFIENTRY_KEY));
@@ -178,6 +189,10 @@
mDialog.setOnDismissListener(this);
}
}
+
+ if (mDialog2 != null || mDialog != null) {
+ mLockScreenMonitor = new LockScreenMonitor(this);
+ }
}
@VisibleForTesting
@@ -215,6 +230,10 @@
}
}
+ if (mLockScreenMonitor != null) {
+ mLockScreenMonitor.release();
+ mLockScreenMonitor = null;
+ }
super.onDestroy();
}
@@ -361,6 +380,19 @@
}
}
+ @VisibleForTesting
+ boolean isConfigWifiAllowed() {
+ UserManager userManager = getSystemService(UserManager.class);
+ if (userManager == null) return true;
+ final boolean isConfigWifiAllowed = !userManager.hasUserRestriction(DISALLOW_CONFIG_WIFI);
+ if (!isConfigWifiAllowed) {
+ Log.e(TAG, "The user is not allowed to configure Wi-Fi.");
+ EventLog.writeEvent(0x534e4554, "226133034", getApplicationContext().getUserId(),
+ "The user is not allowed to configure Wi-Fi.");
+ }
+ return isConfigWifiAllowed;
+ }
+
private boolean hasWifiManager() {
if (mWifiManager != null) return true;
mWifiManager = getSystemService(WifiManager.class);
@@ -392,4 +424,45 @@
}
return false;
}
+
+ void dismissDialog() {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ mDialog = null;
+ }
+ if (mDialog2 != null) {
+ mDialog2.dismiss();
+ mDialog2 = null;
+ }
+ }
+
+ @VisibleForTesting
+ static final class LockScreenMonitor implements KeyguardManager.KeyguardLockedStateListener {
+ private final WeakReference<WifiDialogActivity> mWifiDialogActivity;
+ private KeyguardManager mKeyguardManager;
+
+ LockScreenMonitor(WifiDialogActivity activity) {
+ mWifiDialogActivity = new WeakReference<>(activity);
+ mKeyguardManager = activity.getSystemService(KeyguardManager.class);
+ mKeyguardManager.addKeyguardLockedStateListener(activity.getMainExecutor(), this);
+ }
+
+ void release() {
+ if (mKeyguardManager == null) return;
+ mKeyguardManager.removeKeyguardLockedStateListener(this);
+ mKeyguardManager = null;
+ }
+
+ @Override
+ public void onKeyguardLockedStateChanged(boolean isKeyguardLocked) {
+ if (!isKeyguardLocked) return;
+ WifiDialogActivity activity = mWifiDialogActivity.get();
+ if (activity == null) return;
+ activity.dismissDialog();
+
+ Log.e(TAG, "Dismiss Wi-Fi dialog to prevent leaking user data on lock screen!");
+ EventLog.writeEvent(0x534e4554, "231583603", -1 /* UID */,
+ "Leak Wi-Fi dialog on lock screen");
+ }
+ }
}
diff --git a/src/com/android/settings/wifi/WifiScanModeActivity.java b/src/com/android/settings/wifi/WifiScanModeActivity.java
index d372135..c10ee27 100644
--- a/src/com/android/settings/wifi/WifiScanModeActivity.java
+++ b/src/com/android/settings/wifi/WifiScanModeActivity.java
@@ -18,11 +18,15 @@
import android.app.Dialog;
import android.app.settings.SettingsEnums;
+import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.os.Bundle;
+import android.os.UserManager;
import android.text.TextUtils;
+import android.util.EventLog;
+import android.util.Log;
import android.view.WindowManager;
import androidx.annotation.VisibleForTesting;
@@ -39,6 +43,7 @@
* This activity requests users permission to allow scanning even when Wi-Fi is turned off
*/
public class WifiScanModeActivity extends FragmentActivity {
+ private static final String TAG = "WifiScanModeActivity";
private DialogFragment mDialog;
@VisibleForTesting
String mApp;
@@ -78,7 +83,15 @@
mApp = Utils.getApplicationLabel(getApplicationContext(), packageName).toString();
}
- private void createDialog() {
+ @VisibleForTesting
+ void createDialog() {
+ if (isGuestUser(getApplicationContext())) {
+ Log.e(TAG, "Guest user is not allowed to configure Wi-Fi Scan Mode!");
+ EventLog.writeEvent(0x534e4554, "235601169", -1 /* UID */, "User is a guest");
+ finish();
+ return;
+ }
+
if (mDialog == null) {
mDialog = AlertDialogFragment.newInstance(mApp);
mDialog.show(getSupportFragmentManager(), "dialog");
@@ -169,4 +182,11 @@
((WifiScanModeActivity) getActivity()).doNegativeClick();
}
}
+
+ private static boolean isGuestUser(Context context) {
+ if (context == null) return false;
+ final UserManager userManager = context.getSystemService(UserManager.class);
+ if (userManager == null) return false;
+ return userManager.isGuestUser();
+ }
}
diff --git a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java
index 169bcb3..c52f75e 100644
--- a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java
+++ b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivity.java
@@ -18,11 +18,14 @@
import android.app.ActivityManager;
import android.app.IActivityManager;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.RemoteException;
+import android.os.UserManager;
import android.provider.Settings;
import android.text.TextUtils;
+import android.util.EventLog;
import android.util.Log;
import android.view.Gravity;
import android.view.Window;
@@ -85,7 +88,13 @@
}
@VisibleForTesting
- protected boolean showAddNetworksFragment() {
+ boolean showAddNetworksFragment() {
+ if (isGuestUser(getApplicationContext())) {
+ Log.e(TAG, "Guest user is not allowed to configure Wi-Fi!");
+ EventLog.writeEvent(0x534e4554, "224772678", -1 /* UID */, "User is a guest");
+ return false;
+ }
+
if (!isAddWifiConfigAllow()) {
Log.d(TAG, "Not allowed by Enterprise Restriction");
return false;
@@ -130,4 +139,11 @@
boolean isAddWifiConfigAllow() {
return WifiEnterpriseRestrictionUtils.isAddWifiConfigAllowed(this);
}
+
+ private static boolean isGuestUser(Context context) {
+ if (context == null) return false;
+ final UserManager userManager = context.getSystemService(UserManager.class);
+ if (userManager == null) return false;
+ return userManager.isGuestUser();
+ }
}
diff --git a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java
index 3f5ef48..62b477f 100644
--- a/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java
+++ b/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragment.java
@@ -39,6 +39,7 @@
import android.os.SystemClock;
import android.provider.Settings;
import android.text.TextUtils;
+import android.util.EventLog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -518,7 +519,13 @@
UiConfigurationItem(String displayedSsid, WifiNetworkSuggestion wifiNetworkSuggestion,
int index, int level) {
- mDisplayedSsid = displayedSsid;
+ if (displayedSsid.contains("\n") || displayedSsid.contains("\r")) {
+ mDisplayedSsid = displayedSsid.replaceAll("\\r|\\n", "");
+ Log.e(TAG, "Ignore CRLF strings in display SSIDs to avoid display errors!");
+ EventLog.writeEvent(0x534e4554, "224545390", -1 /* UID */, "CRLF injection");
+ } else {
+ mDisplayedSsid = displayedSsid;
+ }
mWifiNetworkSuggestion = wifiNetworkSuggestion;
mIndex = index;
mLevel = level;
diff --git a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
index ba7628e..f7fc07a 100644
--- a/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
+++ b/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2.java
@@ -19,6 +19,7 @@
import static android.net.NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
+import static android.telephony.TelephonyManager.UNKNOWN_CARRIER_ID;
import android.app.Activity;
import android.app.AlertDialog;
@@ -49,7 +50,6 @@
import android.provider.Telephony.CarrierId;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.FeatureFlagUtils;
import android.util.Log;
@@ -711,27 +711,17 @@
// Checks if the SIM subscription is active.
final List<SubscriptionInfo> activeSubscriptionInfos = mContext
.getSystemService(SubscriptionManager.class).getActiveSubscriptionInfoList();
- final int defaultDataSubscriptionId = SubscriptionManager.getDefaultDataSubscriptionId();
if (activeSubscriptionInfos != null) {
- for (SubscriptionInfo subscriptionInfo : activeSubscriptionInfos) {
- final CharSequence displayName = SubscriptionUtil.getUniqueSubscriptionDisplayName(
- subscriptionInfo, mContext);
- if (config.carrierId == subscriptionInfo.getCarrierId()) {
- mEapSimSubscriptionPref.setSummary(displayName);
- return;
- }
-
- // When it's UNKNOWN_CARRIER_ID, devices connects it with the SIM subscription of
- // defaultDataSubscriptionId.
- if (config.carrierId == TelephonyManager.UNKNOWN_CARRIER_ID
- && defaultDataSubscriptionId == subscriptionInfo.getSubscriptionId()) {
- mEapSimSubscriptionPref.setSummary(displayName);
- return;
- }
+ SubscriptionInfo info = fineSubscriptionInfo(config.carrierId, activeSubscriptionInfos,
+ SubscriptionManager.getDefaultDataSubscriptionId());
+ if (info != null) {
+ mEapSimSubscriptionPref.setSummary(
+ SubscriptionUtil.getUniqueSubscriptionDisplayName(info, mContext));
+ return;
}
}
- if (config.carrierId == TelephonyManager.UNKNOWN_CARRIER_ID) {
+ if (config.carrierId == UNKNOWN_CARRIER_ID) {
mEapSimSubscriptionPref.setSummary(R.string.wifi_no_related_sim_card);
return;
}
@@ -750,6 +740,25 @@
null /* orderBy */);
}
+ @VisibleForTesting
+ SubscriptionInfo fineSubscriptionInfo(int carrierId,
+ List<SubscriptionInfo> activeSubscriptionInfos, int defaultDataSubscriptionId) {
+ SubscriptionInfo firstMatchedInfo = null;
+ for (SubscriptionInfo info : activeSubscriptionInfos) {
+ // When it's UNKNOWN_CARRIER_ID or matched with configured CarrierId,
+ // devices connects it with the SIM subscription of defaultDataSubscriptionId.
+ if (defaultDataSubscriptionId == info.getSubscriptionId()
+ && (carrierId == info.getCarrierId() || carrierId == UNKNOWN_CARRIER_ID)) {
+ return info;
+ }
+
+ if (firstMatchedInfo == null && carrierId == info.getCarrierId()) {
+ firstMatchedInfo = info;
+ }
+ }
+ return firstMatchedInfo;
+ }
+
private void refreshMacAddress() {
final String macAddress = mWifiEntry.getMacAddress();
if (TextUtils.isEmpty(macAddress)) {
diff --git a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
index ecaf9ee..e6f0b31 100644
--- a/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
+++ b/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivity.java
@@ -17,13 +17,16 @@
package com.android.settings.wifi.dpp;
import android.app.settings.SettingsEnums;
+import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
+import android.os.UserManager;
import android.provider.Settings;
+import android.util.EventLog;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
@@ -116,6 +119,13 @@
@Override
protected void handleIntent(Intent intent) {
+ if (isGuestUser(getApplicationContext())) {
+ Log.e(TAG, "Guest user is not allowed to configure Wi-Fi!");
+ EventLog.writeEvent(0x534e4554, "224772890", -1 /* UID */, "User is a guest");
+ finish();
+ return;
+ }
+
String action = intent != null ? intent.getAction() : null;
if (action == null) {
finish();
@@ -185,7 +195,8 @@
}
}
- private void showQrCodeScannerFragment() {
+ @VisibleForTesting
+ void showQrCodeScannerFragment() {
WifiDppQrCodeScannerFragment fragment =
(WifiDppQrCodeScannerFragment) mFragmentManager.findFragmentByTag(
WifiDppUtils.TAG_FRAGMENT_QR_CODE_SCANNER);
@@ -384,4 +395,11 @@
return null;
}
+
+ private static boolean isGuestUser(Context context) {
+ if (context == null) return false;
+ final UserManager userManager = context.getSystemService(UserManager.class);
+ if (userManager == null) return false;
+ return userManager.isGuestUser();
+ }
}
diff --git a/src/com/android/settings/wifi/slice/WifiSlice.java b/src/com/android/settings/wifi/slice/WifiSlice.java
index 8417d8b..c06e869 100644
--- a/src/com/android/settings/wifi/slice/WifiSlice.java
+++ b/src/com/android/settings/wifi/slice/WifiSlice.java
@@ -34,7 +34,9 @@
import android.net.wifi.WifiManager;
import android.os.Binder;
import android.os.Bundle;
+import android.os.UserManager;
import android.text.TextUtils;
+import android.util.EventLog;
import android.util.Log;
import androidx.annotation.Nullable;
@@ -96,10 +98,18 @@
@Override
public Slice getSlice() {
+ final boolean isWifiEnabled = isWifiEnabled();
+ // If user is a guest just return a slice without a toggle.
+ if (isGuestUser(mContext)) {
+ Log.e(TAG, "Guest user is not allowed to configure Wi-Fi!");
+ EventLog.writeEvent(0x534e4554, "232798363", -1 /* UID */, "User is a guest");
+ return getListBuilder(isWifiEnabled, null /* wifiSliceItem */,
+ false /* isWiFiPermissionGranted */).build();
+ }
+
// If external calling package doesn't have Wi-Fi permission.
final boolean isPermissionGranted =
isCallerExemptUid(mContext) || isPermissionGranted(mContext);
- final boolean isWifiEnabled = isWifiEnabled();
ListBuilder listBuilder = getListBuilder(isWifiEnabled, null /* wifiSliceItem */,
isPermissionGranted);
// If the caller doesn't have the permission granted, just return a slice without a toggle.
@@ -139,6 +149,13 @@
return listBuilder.build();
}
+ protected static boolean isGuestUser(Context context) {
+ if (context == null) return false;
+ final UserManager userManager = context.getSystemService(UserManager.class);
+ if (userManager == null) return false;
+ return userManager.isGuestUser();
+ }
+
private boolean isCallerExemptUid(Context context) {
final String[] allowedUidNames = context.getResources().getStringArray(
R.array.config_exempt_wifi_permission_uid_name);
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java
index b22b156..89e00e1 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java
@@ -45,7 +45,7 @@
import com.android.settings.AccessiblePreferenceCategory;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.profileselector.ProfileSelectFragment;
import com.android.settings.testutils.shadow.ShadowAccountManager;
import com.android.settings.testutils.shadow.ShadowContentResolver;
@@ -77,7 +77,7 @@
@Mock(answer = RETURNS_DEEP_STUBS)
private UserManager mUserManager;
@Mock(answer = RETURNS_DEEP_STUBS)
- private SettingsPreferenceFragment mFragment;
+ private DashboardFragment mFragment;
@Mock(answer = RETURNS_DEEP_STUBS)
private AccountManager mAccountManager;
@Mock(answer = RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
index 03b3a47..c95a509 100644
--- a/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppBatteryPreferenceControllerTest.java
@@ -40,8 +40,8 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.SettingsActivity;
-import com.android.settings.fuelgauge.BatteryDiffEntry;
import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry;
import com.android.settingslib.applications.ApplicationsState;
import org.junit.Before;
@@ -162,7 +162,8 @@
mController.updateBatteryWithDiffEntry();
- assertThat(mBatteryPreference.getSummary()).isEqualTo("No battery use for past 24 hours");
+ assertThat(mBatteryPreference.getSummary().toString()).isEqualTo(
+ "No battery use since last full charge");
}
@Test
@@ -175,7 +176,8 @@
mController.updateBatteryWithDiffEntry();
- assertThat(mBatteryPreference.getSummary()).isEqualTo("60% use for past 24 hours");
+ assertThat(mBatteryPreference.getSummary().toString()).isEqualTo(
+ "60% use since last full charge");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java
index d8852db..1096f40 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollIntroductionTest.java
@@ -173,4 +173,24 @@
assertThat(result).isEqualTo(R.string.fingerprint_intro_error_max);
}
+
+ @Test
+ public void intro_CheckCanEnrollDuringPortal() {
+ setupFingerprintEnrollIntroWith(
+ new Intent().putExtra(WizardManagerHelper.EXTRA_IS_PORTAL_SETUP, true));
+ setFingerprintManagerToHave(2 /* numEnrollments */);
+ int result = mFingerprintEnrollIntroduction.checkMaxEnrolled();
+
+ assertThat(result).isEqualTo(0);
+ }
+
+ @Test
+ public void intro_CheckMaxEnrolledDuringPortal() {
+ setupFingerprintEnrollIntroWith(
+ new Intent().putExtra(WizardManagerHelper.EXTRA_IS_PORTAL_SETUP, true));
+ setFingerprintManagerToHave(6 /* numEnrollments */);
+ int result = mFingerprintEnrollIntroduction.checkMaxEnrolled();
+
+ assertThat(result).isEqualTo(R.string.fingerprint_intro_error_max);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java
index e3b23ac..2aeda71 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java
@@ -34,7 +34,6 @@
import com.android.settings.R;
import com.android.settings.biometrics.BiometricEnrollBase;
import com.android.settings.biometrics.BiometricEnrollIntroduction;
-import com.android.settings.password.SetupChooseLockGeneric.SetupChooseLockGenericFragment;
import com.android.settings.password.SetupSkipDialog;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowFingerprintManager;
@@ -160,8 +159,6 @@
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
assertThat(shadowActivity.getResultIntent()).isNotNull();
- assertThat(shadowActivity.getResultIntent().hasExtra(
- SetupChooseLockGenericFragment.EXTRA_PASSWORD_QUALITY)).isTrue();
}
@Test
@@ -191,8 +188,6 @@
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
assertThat(shadowActivity.getResultIntent()).isNotNull();
- assertThat(shadowActivity.getResultIntent().hasExtra(
- SetupChooseLockGenericFragment.EXTRA_PASSWORD_QUALITY)).isTrue();
}
@Test
@@ -218,8 +213,6 @@
BiometricEnrollBase.RESULT_FINISHED, null);
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
assertThat(shadowActivity.getResultIntent()).isNotNull();
- assertThat(shadowActivity.getResultIntent().hasExtra(
- SetupChooseLockGenericFragment.EXTRA_PASSWORD_QUALITY)).isFalse();
}
@Test
@@ -260,8 +253,6 @@
ShadowActivity shadowActivity = Shadows.shadowOf(activity);
IntentForResult startedActivity = shadowActivity.getNextStartedActivityForResult();
assertThat(startedActivity).isNotNull();
- assertThat(startedActivity.intent.hasExtra(
- SetupChooseLockGenericFragment.EXTRA_PASSWORD_QUALITY)).isFalse();
}
private ShadowKeyguardManager getShadowKeyguardManager() {
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
index 3fa306f..86829b4 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsCompanionAppsControllerTest.java
@@ -109,6 +109,7 @@
/* deviceProfile */ "",
/* selfManaged */ false,
/* notifyOnDeviceNearby */ true,
+ /* revoked */ false,
/* timeApprovedMs */ System.currentTimeMillis(),
/* lastTimeConnected */ Long.MAX_VALUE);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsPairOtherControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsPairOtherControllerTest.java
new file mode 100644
index 0000000..cfa6d41
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsPairOtherControllerTest.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.bluetooth;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import com.android.settings.R;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.HearingAidProfile;
+import com.android.settingslib.widget.ButtonPreference;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link BluetoothDetailsPairOtherController}. */
+@RunWith(RobolectricTestRunner.class)
+public class BluetoothDetailsPairOtherControllerTest extends BluetoothDetailsControllerTestBase {
+ @Rule
+ public final MockitoRule mockito = MockitoJUnit.rule();
+
+ @Mock
+ private CachedBluetoothDevice mSubCachedDevice;
+ private BluetoothDetailsPairOtherController mController;
+ private ButtonPreference mPreference;
+
+ @Override
+ public void setUp() {
+ super.setUp();
+
+ mController = new BluetoothDetailsPairOtherController(mContext, mFragment, mCachedDevice,
+ mLifecycle);
+ mPreference = new ButtonPreference(mContext);
+ mPreference.setKey(mController.getPreferenceKey());
+ mScreen.addPreference(mPreference);
+ }
+
+ @Test
+ public void init_leftSideDevice_expectedTitle() {
+ when(mCachedDevice.getDeviceSide()).thenReturn(HearingAidProfile.DeviceSide.SIDE_LEFT);
+
+ mController.init(mScreen);
+
+ assertThat(mPreference.getTitle().toString()).isEqualTo(
+ mContext.getString(R.string.bluetooth_pair_right_ear_button));
+ }
+
+ @Test
+ public void init_rightSideDevice_expectedTitle() {
+ when(mCachedDevice.getDeviceSide()).thenReturn(HearingAidProfile.DeviceSide.SIDE_RIGHT);
+
+ mController.init(mScreen);
+
+ assertThat(mPreference.getTitle().toString()).isEqualTo(
+ mContext.getString(R.string.bluetooth_pair_left_ear_button));
+ }
+
+ @Test
+ public void isAvailable_isConnectedHearingAidDevice_available() {
+ when(mCachedDevice.isConnectedHearingAidDevice()).thenReturn(false);
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void isAvailable_notConnectedHearingAidDevice_notAvailable() {
+ when(mCachedDevice.isConnectedHearingAidDevice()).thenReturn(true);
+ when(mCachedDevice.getDeviceMode()).thenReturn(HearingAidProfile.DeviceMode.MODE_MONAURAL);
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void isAvailable_subDeviceIsConnectedHearingAidDevice_notAvailable() {
+ when(mCachedDevice.isConnectedHearingAidDevice()).thenReturn(true);
+ when(mCachedDevice.getDeviceMode()).thenReturn(HearingAidProfile.DeviceMode.MODE_BINAURAL);
+ when(mSubCachedDevice.isConnectedHearingAidDevice()).thenReturn(true);
+ when(mCachedDevice.getSubDevice()).thenReturn(mSubCachedDevice);
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void isAvailable_subDeviceNotConnectedHearingAidDevice_available() {
+ when(mCachedDevice.isConnectedHearingAidDevice()).thenReturn(true);
+ when(mCachedDevice.getDeviceMode()).thenReturn(HearingAidProfile.DeviceMode.MODE_BINAURAL);
+ when(mSubCachedDevice.isConnectedHearingAidDevice()).thenReturn(false);
+ when(mCachedDevice.getSubDevice()).thenReturn(mSubCachedDevice);
+
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void isAvailable_subDeviceNotExist_available() {
+ when(mCachedDevice.isConnectedHearingAidDevice()).thenReturn(true);
+ when(mCachedDevice.getDeviceMode()).thenReturn(HearingAidProfile.DeviceMode.MODE_BINAURAL);
+ when(mCachedDevice.getSubDevice()).thenReturn(null);
+
+ assertThat(mController.isAvailable()).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index 894a6c5..fd6689a 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -298,6 +298,14 @@
}
@Test
+ public void forceUpdatePreferences_prefKeyNull_shouldNotCrash() {
+ mTestFragment.addPreferenceController(new TestPreferenceController(mContext));
+
+ // Should not crash
+ mTestFragment.forceUpdatePreferences();
+ }
+
+ @Test
public void checkUiBlocker_noUiBlocker_controllerIsNull() {
mTestFragment.mBlockerController = null;
mControllers.add(new TestPreferenceController(mContext));
diff --git a/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
index eb29b7c..f2ba580 100644
--- a/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
@@ -22,9 +22,13 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.time.Capabilities;
+import android.app.time.TimeManager;
+import android.app.time.TimeZoneCapabilities;
+import android.app.time.TimeZoneCapabilitiesAndConfig;
+import android.app.time.TimeZoneConfiguration;
import android.content.Context;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
+import android.os.UserHandle;
import androidx.preference.Preference;
@@ -32,6 +36,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -46,7 +51,7 @@
private AutoTimeZonePreferenceController mController;
private Preference mPreference;
@Mock
- private TelephonyManager mTelephonyManager;
+ private TimeManager mTimeManager;
@Before
public void setUp() {
@@ -55,12 +60,15 @@
mPreference = new Preference(mContext);
- when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
- when(mTelephonyManager.isDataCapable()).thenReturn(true);
+ when(mContext.getSystemService(TimeManager.class)).thenReturn(mTimeManager);
}
@Test
public void isFromSUW_notAvailable() {
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */true, /* autoEnabled= */false);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
mController = new AutoTimeZonePreferenceController(
mContext, null /* callback */, true /* isFromSUW */);
@@ -69,6 +77,10 @@
@Test
public void notFromSUW_isAvailable() {
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */true, /* autoEnabled= */false);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
mController = new AutoTimeZonePreferenceController(
mContext, null /* callback */, false /* isFromSUW */);
@@ -76,8 +88,11 @@
}
@Test
- public void isWifiOnly_notAvailable() {
- when(mTelephonyManager.isDataCapable()).thenReturn(false);
+ public void autoTimeZoneNotSupported_notAvailable() {
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */false, /* autoEnabled= */false);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
mController = new AutoTimeZonePreferenceController(
mContext, null /* callback */, false /* fromSUW */);
@@ -86,54 +101,134 @@
@Test
public void isFromSUW_notEnable() {
- mController =
- new AutoTimeZonePreferenceController(mContext, null /* callback */, true /* fromSUW */);
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */false, /* autoEnabled= */false);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
+ mController = new AutoTimeZonePreferenceController(
+ mContext, null /* callback */, true /* fromSUW */);
assertThat(mController.isEnabled()).isFalse();
}
@Test
- public void isWifiOnly_notEnable() {
- when(mTelephonyManager.isDataCapable()).thenReturn(false);
+ public void isFromSUW_isEnable() {
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */false, /* autoEnabled= */true);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
mController = new AutoTimeZonePreferenceController(
- mContext, null /* callback */, false /* fromSUW */);
+ mContext, null /* callback */, true /* fromSUW */);
- assertThat(mController.isEnabled()).isFalse();
- }
-
- @Test
- public void testIsEnabled_shouldReadFromSettingsProvider() {
- mController = new AutoTimeZonePreferenceController(
- mContext, null /* callback */, false /* fromSUW */);
-
- // Disabled
- Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTO_TIME_ZONE, 0);
- assertThat(mController.isEnabled()).isFalse();
-
- // Enabled
- Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTO_TIME_ZONE, 1);
assertThat(mController.isEnabled()).isTrue();
}
@Test
+ public void autoTimeZoneNotSupported_notEnable() {
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */false, /* autoEnabled= */false);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
+ mController = new AutoTimeZonePreferenceController(
+ mContext, null /* callback */, false /* fromSUW */);
+
+ assertThat(mController.isEnabled()).isFalse();
+ }
+
+ @Test
+ public void testIsEnabled_shouldReadFromTimeManagerConfig() {
+ mController = new AutoTimeZonePreferenceController(
+ mContext, null /* callback */, false /* fromSUW */);
+
+ {
+ // Disabled
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */true, /* autoEnabled= */false);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
+ assertThat(mController.isEnabled()).isFalse();
+ }
+
+ {
+ // Enabled
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */true, /* autoEnabled= */true);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
+ assertThat(mController.isEnabled()).isTrue();
+ }
+ }
+
+ @Test
public void updatePreferenceChange_prefIsChecked_shouldUpdatePreferenceAndNotifyCallback() {
- mController =
- new AutoTimeZonePreferenceController(mContext, mCallback, false /* fromSUW */);
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */true, /* autoEnabled= */false);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+ when(mTimeManager.updateTimeZoneConfiguration(Mockito.any())).thenReturn(true);
- mController.onPreferenceChange(mPreference, true);
+ mController = new AutoTimeZonePreferenceController(
+ mContext, mCallback, false /* fromSUW */);
+
+ assertThat(mController.onPreferenceChange(mPreference, true)).isTrue();
+ verify(mCallback).updateTimeAndDateDisplay(mContext);
+
+ // Check the service was asked to change the configuration correctly.
+ TimeZoneConfiguration timeZoneConfiguration = new TimeZoneConfiguration.Builder()
+ .setAutoDetectionEnabled(true)
+ .build();
+ verify(mTimeManager).updateTimeZoneConfiguration(timeZoneConfiguration);
+
+ // Update the mTimeManager mock so that it now returns the expected updated config.
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfigAfterUpdate =
+ createCapabilitiesAndConfig(/* autoSupported= */true, /* autoEnabled= */true);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig())
+ .thenReturn(capabilitiesAndConfigAfterUpdate);
assertThat(mController.isEnabled()).isTrue();
- verify(mCallback).updateTimeAndDateDisplay(mContext);
}
@Test
public void updatePreferenceChange_prefIsUnchecked_shouldUpdatePreferenceAndNotifyCallback() {
- mController =
- new AutoTimeZonePreferenceController(mContext, mCallback, false /* fromSUW */);
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* autoSupported= */true, /* autoEnabled= */true);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+ when(mTimeManager.updateTimeZoneConfiguration(Mockito.any())).thenReturn(true);
- mController.onPreferenceChange(mPreference, false);
+ mController = new AutoTimeZonePreferenceController(
+ mContext, mCallback, false /* fromSUW */);
+
+ assertThat(mController.onPreferenceChange(mPreference, false)).isTrue();
+ verify(mCallback).updateTimeAndDateDisplay(mContext);
+
+ // Check the service was asked to change the configuration correctly.
+ TimeZoneConfiguration timeZoneConfiguration = new TimeZoneConfiguration.Builder()
+ .setAutoDetectionEnabled(false)
+ .build();
+ verify(mTimeManager).updateTimeZoneConfiguration(timeZoneConfiguration);
+
+ // Update the mTimeManager mock so that it now returns the expected updated config.
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfigAfterUpdate =
+ createCapabilitiesAndConfig(/* autoSupported= */true, /* autoEnabled= */false);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig())
+ .thenReturn(capabilitiesAndConfigAfterUpdate);
assertThat(mController.isEnabled()).isFalse();
- verify(mCallback).updateTimeAndDateDisplay(mContext);
+ }
+
+ private static TimeZoneCapabilitiesAndConfig createCapabilitiesAndConfig(
+ boolean autoSupported, boolean autoEnabled) {
+ int configureAutoDetectionEnabledCapability =
+ autoSupported ? Capabilities.CAPABILITY_POSSESSED
+ : Capabilities.CAPABILITY_NOT_SUPPORTED;
+ TimeZoneCapabilities capabilities = new TimeZoneCapabilities.Builder(UserHandle.SYSTEM)
+ .setConfigureAutoDetectionEnabledCapability(configureAutoDetectionEnabledCapability)
+ .setConfigureGeoDetectionEnabledCapability(Capabilities.CAPABILITY_NOT_SUPPORTED)
+ .setSuggestManualTimeZoneCapability(Capabilities.CAPABILITY_POSSESSED)
+ .build();
+ TimeZoneConfiguration config = new TimeZoneConfiguration.Builder()
+ .setAutoDetectionEnabled(autoEnabled)
+ .setGeoDetectionEnabled(false)
+ .build();
+ return new TimeZoneCapabilitiesAndConfig(capabilities, config);
}
}
diff --git a/tests/robotests/src/com/android/settings/datetime/TimeZonePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/TimeZonePreferenceControllerTest.java
index f94e8d1..6767b4e 100644
--- a/tests/robotests/src/com/android/settings/datetime/TimeZonePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/TimeZonePreferenceControllerTest.java
@@ -22,7 +22,13 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
+import android.app.time.Capabilities;
+import android.app.time.TimeManager;
+import android.app.time.TimeZoneCapabilities;
+import android.app.time.TimeZoneCapabilitiesAndConfig;
+import android.app.time.TimeZoneConfiguration;
import android.content.Context;
+import android.os.UserHandle;
import com.android.settingslib.RestrictedPreference;
@@ -38,8 +44,7 @@
public class TimeZonePreferenceControllerTest {
@Mock
- private AutoTimeZonePreferenceController mAutoTimeZonePreferenceController;
-
+ private TimeManager mTimeManager;
private Context mContext;
private TimeZonePreferenceController mController;
private RestrictedPreference mPreference;
@@ -47,10 +52,14 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
+
+ mContext = spy(RuntimeEnvironment.application);
+ doReturn(mTimeManager).when(mContext).getSystemService(TimeManager.class);
+
mPreference = new RestrictedPreference(mContext);
- mController = spy(new TimeZonePreferenceController(mContext,
- mAutoTimeZonePreferenceController));
+
+ mController = spy(new TimeZonePreferenceController(mContext));
+ doReturn("test timezone").when(mController).getTimeZoneOffsetAndName();
}
@Test
@@ -59,26 +68,46 @@
}
@Test
- public void updateState_autoTimeZoneEnabled_shouldDisablePref() {
+ public void updateState_suggestManualNotAllowed_shouldDisablePref() {
// Make sure not disabled by admin.
mPreference.setDisabledByAdmin(null);
- doReturn("test timezone").when(mController).getTimeZoneOffsetAndName();
- when(mAutoTimeZonePreferenceController.isEnabled()).thenReturn(true);
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* suggestManualAllowed= */false);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
mController.updateState(mPreference);
assertThat(mPreference.isEnabled()).isFalse();
}
@Test
- public void updateState_autoTimeZoneDisabled_shouldEnablePref() {
+ public void updateState_suggestManualAllowed_shouldEnablePref() {
// Make sure not disabled by admin.
mPreference.setDisabledByAdmin(null);
- doReturn("test timezone").when(mController).getTimeZoneOffsetAndName();
- when(mAutoTimeZonePreferenceController.isEnabled()).thenReturn(false);
+ TimeZoneCapabilitiesAndConfig capabilitiesAndConfig = createCapabilitiesAndConfig(
+ /* suggestManualAllowed= */true);
+ when(mTimeManager.getTimeZoneCapabilitiesAndConfig()).thenReturn(capabilitiesAndConfig);
+
mController.updateState(mPreference);
assertThat(mPreference.isEnabled()).isTrue();
}
+
+ private static TimeZoneCapabilitiesAndConfig createCapabilitiesAndConfig(
+ boolean suggestManualAllowed) {
+ int suggestManualCapability = suggestManualAllowed ? Capabilities.CAPABILITY_POSSESSED
+ : Capabilities.CAPABILITY_NOT_SUPPORTED;
+ TimeZoneCapabilities capabilities = new TimeZoneCapabilities.Builder(UserHandle.SYSTEM)
+ .setConfigureAutoDetectionEnabledCapability(Capabilities.CAPABILITY_POSSESSED)
+ .setConfigureGeoDetectionEnabledCapability(Capabilities.CAPABILITY_NOT_SUPPORTED)
+ .setSuggestManualTimeZoneCapability(suggestManualCapability)
+ .build();
+ TimeZoneConfiguration config = new TimeZoneConfiguration.Builder()
+ .setAutoDetectionEnabled(!suggestManualAllowed)
+ .setGeoDetectionEnabled(false)
+ .build();
+ return new TimeZoneCapabilitiesAndConfig(capabilities, config);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/development/NotificationChannelWarningsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/NotificationChannelWarningsPreferenceControllerTest.java
index 7d08c66..1887247 100644
--- a/tests/robotests/src/com/android/settings/development/NotificationChannelWarningsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/NotificationChannelWarningsPreferenceControllerTest.java
@@ -102,7 +102,7 @@
}
@Test
- public void updateState_settingUndefinedDebuggingEnabled_preferenceShouldBeChecked() {
+ public void updateState_settingUndefinedDebuggingEnabled_preferenceShouldNotBeChecked() {
mController = spy(mController);
doReturn(true).when(mController).isDebuggable();
Settings.Global.putString(mContext.getContentResolver(),
@@ -110,18 +110,6 @@
mController.updateState(mPreference);
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void updateState_settingUndefinedDebuggingDisabled_preferenceShouldNotBeChecked() {
- mController = spy(mController);
- doReturn(false).when(mController).isDebuggable();
- Settings.Global.putString(mContext.getContentResolver(),
- Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS, "NotAnInteger");
-
- mController.updateState(mPreference);
-
verify(mPreference).setChecked(false);
}
diff --git a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java
index f04a80d..8da44cc 100644
--- a/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/bluetooth/BluetoothCodecDialogPreferenceControllerTest.java
@@ -52,6 +52,8 @@
@RunWith(RobolectricTestRunner.class)
public class BluetoothCodecDialogPreferenceControllerTest {
+ private static final int SOURCE_CODEC_TYPE_OPUS = 6; // TODO(b/240635097): remove in U
+
private static final String DEVICE_ADDRESS = "00:11:22:33:44:55";
@Mock
@@ -72,6 +74,7 @@
private BluetoothCodecConfig mCodecConfigAPTX;
private BluetoothCodecConfig mCodecConfigAPTXHD;
private BluetoothCodecConfig mCodecConfigLDAC;
+ private BluetoothCodecConfig mCodecConfigOPUS;
private BluetoothDevice mActiveDevice;
private Context mContext;
private LifecycleOwner mLifecycleOwner;
@@ -119,13 +122,17 @@
mCodecConfigLDAC = new BluetoothCodecConfig.Builder()
.setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC)
.build();
+ mCodecConfigOPUS = new BluetoothCodecConfig.Builder()
+ .setCodecType(SOURCE_CODEC_TYPE_OPUS)
+ .build();
when(mBluetoothAdapter.getActiveDevices(eq(BluetoothProfile.A2DP)))
.thenReturn(Arrays.asList(mActiveDevice));
}
@Test
public void writeConfigurationValues_selectDefault_setHighest() {
- BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC};
+ BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigOPUS, mCodecConfigAAC,
+ mCodecConfigSBC};
mCodecStatus = new BluetoothCodecStatus.Builder()
.setCodecConfig(mCodecConfigSBC)
.setCodecsSelectableCapabilities(Arrays.asList(mCodecConfigs))
@@ -136,13 +143,14 @@
mController.onBluetoothServiceConnected(mBluetoothA2dp);
mController.writeConfigurationValues(0);
- verify(mBluetoothA2dpConfigStore).setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC);
+ // TODO(b/240635097): update in U
+ verify(mBluetoothA2dpConfigStore).setCodecType(SOURCE_CODEC_TYPE_OPUS);
}
@Test
public void writeConfigurationValues_checkCodec() {
- BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC, mCodecConfigAPTX,
- mCodecConfigAPTXHD, mCodecConfigLDAC, mCodecConfigAAC, mCodecConfigSBC};
+ BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigOPUS, mCodecConfigAAC,
+ mCodecConfigSBC, mCodecConfigAPTX, mCodecConfigAPTXHD, mCodecConfigLDAC};
mCodecStatus = new BluetoothCodecStatus.Builder()
.setCodecConfig(mCodecConfigSBC)
.setCodecsSelectableCapabilities(Arrays.asList(mCodecConfigs))
@@ -167,12 +175,15 @@
mController.writeConfigurationValues(5);
verify(mBluetoothA2dpConfigStore).setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC);
+ mController.writeConfigurationValues(7);
+ // TODO(b/240635097): update in U
+ verify(mBluetoothA2dpConfigStore).setCodecType(SOURCE_CODEC_TYPE_OPUS);
}
@Test
public void writeConfigurationValues_resetHighestConfig() {
BluetoothCodecConfig[] mCodecConfigs = {mCodecConfigAAC, mCodecConfigSBC, mCodecConfigAPTX,
- mCodecConfigAPTXHD, mCodecConfigLDAC, mCodecConfigAAC, mCodecConfigSBC};
+ mCodecConfigAPTXHD, mCodecConfigLDAC, mCodecConfigOPUS};
mCodecStatus = new BluetoothCodecStatus.Builder()
.setCodecConfig(mCodecConfigAAC)
.setCodecsSelectableCapabilities(Arrays.asList(mCodecConfigs))
@@ -198,6 +209,14 @@
}
@Test
+ public void getCurrentIndexByConfig_verifyOpusIndex() {
+ assertThat(mController.getCurrentIndexByConfig(mCodecConfigOPUS)).isEqualTo(
+ mController.convertCfgToBtnIndex(SOURCE_CODEC_TYPE_OPUS));
+ // TODO(b/240635097): update in U
+ }
+
+
+ @Test
public void onIndexUpdated_notifyPreference() {
mController.onIndexUpdated(0);
@@ -205,8 +224,28 @@
}
@Test
+ public void onHDAudioEnabled_optionalCodecEnabled_setsCodecTypeAsOpus() {
+ List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigOPUS,
+ mCodecConfigAAC, mCodecConfigSBC);
+ mCodecStatus = new BluetoothCodecStatus.Builder()
+ .setCodecConfig(mCodecConfigOPUS)
+ .setCodecsSelectableCapabilities(mCodecConfigs)
+ .build();
+ when(mBluetoothA2dp.getCodecStatus(mActiveDevice)).thenReturn(mCodecStatus);
+ when(mBluetoothA2dp.isOptionalCodecsEnabled(mActiveDevice)).thenReturn(
+ BluetoothA2dp.OPTIONAL_CODECS_PREF_ENABLED);
+ mController.onBluetoothServiceConnected(mBluetoothA2dp);
+
+ mController.onHDAudioEnabled(/* enabled= */ true);
+
+ verify(mBluetoothA2dpConfigStore, atLeastOnce()).setCodecType(
+ eq(SOURCE_CODEC_TYPE_OPUS)); // TODO(b/240635097): update in U
+ }
+
+ @Test
public void onHDAudioEnabled_optionalCodecEnabled_setsCodecTypeAsAAC() {
- List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigAAC, mCodecConfigSBC);
+ List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigOPUS,
+ mCodecConfigAAC, mCodecConfigSBC);
mCodecStatus = new BluetoothCodecStatus.Builder()
.setCodecConfig(mCodecConfigAAC)
.setCodecsSelectableCapabilities(mCodecConfigs)
@@ -223,7 +262,8 @@
}
@Test
public void onHDAudioEnabled_optionalCodecDisabled_setsCodecTypeAsSBC() {
- List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigAAC, mCodecConfigSBC);
+ List<BluetoothCodecConfig> mCodecConfigs = Arrays.asList(mCodecConfigOPUS,
+ mCodecConfigAAC, mCodecConfigSBC);
mCodecStatus = new BluetoothCodecStatus.Builder()
.setCodecConfig(mCodecConfigAAC)
.setCodecsSelectableCapabilities(mCodecConfigs)
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 269c810..7c56ab3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -45,7 +45,6 @@
import android.os.Bundle;
import android.os.Process;
import android.os.UserHandle;
-import android.util.Pair;
import androidx.fragment.app.FragmentActivity;
import androidx.loader.app.LoaderManager;
@@ -54,6 +53,7 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
+import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowActivityManager;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
@@ -232,7 +232,7 @@
}
@Test
- public void testGetPreferenceScreenResId_returnNewLayout() {
+ public void setPreferenceScreenResId_returnNewLayout() {
assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.power_usage_detail);
}
@@ -252,7 +252,7 @@
}
@Test
- public void testInitHeader_HasAppEntry_BuildByAppEntry() {
+ public void initHeader_HasAppEntry_BuildByAppEntry() {
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
new InstantAppDataProvider() {
@Override
@@ -269,7 +269,7 @@
}
@Test
- public void testInitHeader_HasAppEntry_InstantApp() {
+ public void initHeader_HasAppEntry_InstantApp() {
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
new InstantAppDataProvider() {
@Override
@@ -286,7 +286,7 @@
}
@Test
- public void testInitHeader_noUsageTimeAndGraphDisabled_hasCorrectSummary() {
+ public void initHeader_noUsageTimeAndGraphDisabled_hasCorrectSummary() {
when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
.thenReturn(false);
@@ -304,7 +304,7 @@
}
@Test
- public void testInitHeader_bgTwoMinFgZeroAndGraphDisabled_hasCorrectSummary() {
+ public void initHeader_bgTwoMinFgZeroAndGraphDisabled_hasCorrectSummary() {
when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
.thenReturn(false);
@@ -324,7 +324,7 @@
}
@Test
- public void testInitHeader_bgLessThanAMinFgZeroAndGraphDisabled_hasCorrectSummary() {
+ public void initHeader_bgLessThanAMinFgZeroAndGraphDisabled_hasCorrectSummary() {
when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
.thenReturn(false);
@@ -345,7 +345,7 @@
}
@Test
- public void testInitHeader_totalUsageLessThanAMinAndGraphDisabled_hasCorrectSummary() {
+ public void initHeader_totalUsageLessThanAMinAndGraphDisabled_hasCorrectSummary() {
when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
.thenReturn(false);
@@ -367,7 +367,7 @@
}
@Test
- public void testInitHeader_TotalAMinutesBgLessThanAMinAndGraphDisabled_hasCorrectSummary() {
+ public void initHeader_TotalAMinutesBgLessThanAMinAndGraphDisabled_hasCorrectSummary() {
when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
.thenReturn(false);
@@ -387,7 +387,7 @@
}
@Test
- public void testInitHeader_TotalAMinBackgroundZeroAndGraphDisabled_hasCorrectSummary() {
+ public void initHeader_TotalAMinBackgroundZeroAndGraphDisabled_hasCorrectSummary() {
when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
.thenReturn(false);
final long backgroundTimeZero = 0;
@@ -406,7 +406,7 @@
}
@Test
- public void testInitHeader_fgTwoMinBgFourMinAndGraphDisabled_hasCorrectSummary() {
+ public void initHeader_fgTwoMinBgFourMinAndGraphDisabled_hasCorrectSummary() {
when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mContext))
.thenReturn(false);
final long backgroundTimeFourMinute = 240000;
@@ -424,7 +424,7 @@
}
@Test
- public void testInitHeader_noUsageTime_hasCorrectSummary() {
+ public void initHeader_noUsageTime_hasCorrectSummary() {
Bundle bundle = new Bundle(2);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, /* value */ 0);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, /* value */ 0);
@@ -435,11 +435,11 @@
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("No usage for past 24 hr");
+ .isEqualTo("No usage from last full charge");
}
@Test
- public void testInitHeader_noUsageTimeButConsumedPower_hasEmptySummary() {
+ public void initHeader_noUsageTimeButConsumedPower_hasEmptySummary() {
Bundle bundle = new Bundle(3);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, /* value */ 0);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, /* value */ 0);
@@ -454,7 +454,7 @@
}
@Test
- public void testInitHeader_backgroundTwoMinForegroundZero_hasCorrectSummary() {
+ public void initHeader_backgroundTwoMinForegroundZero_hasCorrectSummary() {
final long backgroundTimeTwoMinutes = 120000;
final long foregroundTimeZero = 0;
Bundle bundle = new Bundle(2);
@@ -467,11 +467,11 @@
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("2 min background for past 24 hr");
+ .isEqualTo("2 min background from last full charge");
}
@Test
- public void testInitHeader_backgroundLessThanAMinForegroundZero_hasCorrectSummary() {
+ public void initHeader_backgroundLessThanAMinForegroundZero_hasCorrectSummary() {
final long backgroundTimeLessThanAMinute = 59999;
final long foregroundTimeZero = 0;
Bundle bundle = new Bundle(2);
@@ -485,11 +485,11 @@
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("Background less than a minute for past 24 hr");
+ .isEqualTo("Background less than a minute from last full charge");
}
@Test
- public void testInitHeader_totalUsageLessThanAMin_hasCorrectSummary() {
+ public void initHeader_totalUsageLessThanAMin_hasCorrectSummary() {
final long backgroundTimeLessThanHalfMinute = 20000;
final long foregroundTimeLessThanHalfMinute = 20000;
Bundle bundle = new Bundle(2);
@@ -504,11 +504,11 @@
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("Total less than a minute for past 24 hr");
+ .isEqualTo("Total less than a minute from last full charge");
}
@Test
- public void testInitHeader_TotalAMinutesBackgroundLessThanAMin_hasCorrectSummary() {
+ public void initHeader_TotalAMinutesBackgroundLessThanAMin_hasCorrectSummary() {
final long backgroundTimeZero = 59999;
final long foregroundTimeTwoMinutes = 1;
Bundle bundle = new Bundle(2);
@@ -521,11 +521,11 @@
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("1 min total • background less than a minute\nfor past 24 hr");
+ .isEqualTo("1 min total • background less than a minute\nfrom last full charge");
}
@Test
- public void testInitHeader_TotalAMinBackgroundZero_hasCorrectSummary() {
+ public void initHeader_TotalAMinBackgroundZero_hasCorrectSummary() {
final long backgroundTimeZero = 0;
final long foregroundTimeAMinutes = 60000;
Bundle bundle = new Bundle(2);
@@ -538,11 +538,11 @@
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("1 min total for past 24 hr");
+ .isEqualTo("1 min total from last full charge");
}
@Test
- public void testInitHeader_foregroundTwoMinBackgroundFourMin_hasCorrectSummary() {
+ public void initHeader_foregroundTwoMinBackgroundFourMin_hasCorrectSummary() {
final long backgroundTimeFourMinute = 240000;
final long foregroundTimeTwoMinutes = 120000;
Bundle bundle = new Bundle(2);
@@ -555,11 +555,11 @@
ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
verify(mEntityHeaderController).setSummary(captor.capture());
assertThat(captor.getValue().toString())
- .isEqualTo("6 min total • 4 min background\nfor past 24 hr");
+ .isEqualTo("6 min total • 4 min background\nfrom last full charge");
}
@Test
- public void testInitHeader_totalUsageLessThanAMinWithSlotTime_hasCorrectSummary() {
+ public void initHeader_totalUsageLessThanAMinWithSlotTime_hasCorrectSummary() {
final long backgroundTimeLessThanHalfMinute = 20000;
final long foregroundTimeLessThanHalfMinute = 20000;
Bundle bundle = new Bundle(3);
@@ -579,7 +579,7 @@
}
@Test
- public void testInitHeader_TotalAMinBackgroundLessThanAMinWithSlotTime_hasCorrectSummary() {
+ public void initHeader_TotalAMinBackgroundLessThanAMinWithSlotTime_hasCorrectSummary() {
final long backgroundTimeZero = 59999;
final long foregroundTimeTwoMinutes = 1;
Bundle bundle = new Bundle(3);
@@ -597,7 +597,7 @@
}
@Test
- public void testInitHeader_TotalAMinBackgroundZeroWithSlotTime_hasCorrectSummary() {
+ public void initHeader_TotalAMinBackgroundZeroWithSlotTime_hasCorrectSummary() {
final long backgroundTimeZero = 0;
final long foregroundTimeAMinutes = 60000;
Bundle bundle = new Bundle(3);
@@ -615,7 +615,7 @@
}
@Test
- public void testInitHeader_foregroundTwoMinBackgroundFourMinWithSlotTime_hasCorrectSummary() {
+ public void initHeader_foregroundTwoMinBackgroundFourMinWithSlotTime_hasCorrectSummary() {
final long backgroundTimeFourMinute = 240000;
final long foregroundTimeTwoMinutes = 120000;
Bundle bundle = new Bundle(3);
@@ -633,7 +633,7 @@
}
@Test
- public void testInitHeader_systemUidWithChartIsDisabled_nullSummary() {
+ public void initHeader_systemUidWithChartIsDisabled_nullSummary() {
Bundle bundle = new Bundle(3);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, 240000);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, 120000);
@@ -650,7 +650,7 @@
}
@Test
- public void testInitHeader_systemUidWithChartIsEnabled_notNullSummary() {
+ public void initHeader_systemUidWithChartIsEnabled_notNullSummary() {
Bundle bundle = new Bundle(3);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME, 240000);
bundle.putLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME, 120000);
@@ -665,21 +665,21 @@
}
@Test
- public void testStartBatteryDetailPage_hasBasicData() {
+ public void startBatteryDetailPage_hasBasicData() {
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
mBatteryEntry, USAGE_PERCENT, /*isValidToShowSummary=*/ true);
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME))
- .isEqualTo(BACKGROUND_TIME_MS);
+ .isEqualTo(BACKGROUND_TIME_MS);
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME))
- .isEqualTo(FOREGROUND_TIME_MS);
+ .isEqualTo(FOREGROUND_TIME_MS);
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
- .isEqualTo(USAGE_PERCENT);
+ .isEqualTo(USAGE_PERCENT);
}
@Test
- public void testStartBatteryDetailPage_invalidToShowSummary_noFGBDData() {
+ public void startBatteryDetailPage_invalidToShowSummary_noFGBDData() {
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
mBatteryEntry, USAGE_PERCENT, /*isValidToShowSummary=*/ false);
@@ -693,7 +693,7 @@
}
@Test
- public void testStartBatteryDetailPage_NormalApp() {
+ public void startBatteryDetailPage_NormalApp() {
when(mBatteryEntry.getDefaultPackageName()).thenReturn(PACKAGE_NAME[0]);
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
@@ -704,7 +704,7 @@
}
@Test
- public void testStartBatteryDetailPage_SystemApp() {
+ public void startBatteryDetailPage_SystemApp() {
when(mBatteryEntry.getDefaultPackageName()).thenReturn(null);
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
@@ -716,7 +716,7 @@
}
@Test
- public void testStartBatteryDetailPage_WorkApp() {
+ public void startBatteryDetailPage_WorkApp() {
final int appUid = 1010019;
doReturn(appUid).when(mBatteryEntry).getUid();
@@ -727,7 +727,7 @@
}
@Test
- public void testStartBatteryDetailPage_typeUser_startByCurrentUser() {
+ public void startBatteryDetailPage_typeUser_startByCurrentUser() {
when(mBatteryEntry.isUserEntry()).thenReturn(true);
final int currentUser = 20;
@@ -739,7 +739,7 @@
}
@Test
- public void testStartBatteryDetailPage_noBatteryUsage_hasBasicData() {
+ public void startBatteryDetailPage_noBatteryUsage_hasBasicData() {
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment, PACKAGE_NAME[0]);
@@ -747,16 +747,16 @@
verify(mActivity).startActivity(captor.capture());
assertThat(captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS)
- .getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME))
- .isEqualTo(PACKAGE_NAME[0]);
+ .getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME))
+ .isEqualTo(PACKAGE_NAME[0]);
assertThat(captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS)
- .getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
- .isEqualTo("0%");
+ .getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
+ .isEqualTo("0%");
}
@Test
- public void testStartBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName() throws
+ public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName() throws
PackageManager.NameNotFoundException {
doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */);
@@ -796,7 +796,7 @@
}
@Test
- public void testInitPreferenceForTriState_isSystemOrDefaultApp_hasCorrectString() {
+ public void initPreferenceForTriState_isSystemOrDefaultApp_hasCorrectString() {
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
@@ -807,7 +807,7 @@
}
@Test
- public void testInitPreferenceForTriState_hasCorrectString() {
+ public void initPreferenceForTriState_hasCorrectString() {
when(mBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
@@ -818,7 +818,7 @@
}
@Test
- public void testOnRadioButtonClicked_clickOptimizePref_optimizePreferenceChecked() {
+ public void onRadioButtonClicked_clickOptimizePref_optimizePreferenceChecked() {
mOptimizePreference.setKey(KEY_PREF_OPTIMIZED);
mRestrictedPreference.setKey(KEY_PREF_RESTRICTED);
mUnrestrictedPreference.setKey(KEY_PREF_UNRESTRICTED);
@@ -830,7 +830,7 @@
}
@Test
- public void testOnPause_optimizationModeChanged_logPreference() {
+ public void onPause_optimizationModeChanged_logPreference() {
final int mode = BatteryOptimizeUtils.MODE_RESTRICTED;
mFragment.mOptimizationMode = mode;
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode);
@@ -849,7 +849,7 @@
}
@Test
- public void testOnPause_optimizationModeIsNotChanged_notInvokeLogging() {
+ public void onPause_optimizationModeIsNotChanged_notInvokeLogging() {
final int mode = BatteryOptimizeUtils.MODE_OPTIMIZED;
mFragment.mOptimizationMode = mode;
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(mode);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
index ca1797a..283df7b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
@@ -25,6 +25,7 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
@@ -48,6 +49,7 @@
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
+import android.util.ArraySet;
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
@@ -68,6 +70,7 @@
import java.util.Arrays;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
@RunWith(RobolectricTestRunner.class)
@@ -193,7 +196,7 @@
doReturn(Arrays.asList(userInfo)).when(mUserManager).getProfiles(anyInt());
doThrow(new RuntimeException())
.when(mIPackageManager)
- .getInstalledApplications(anyInt(), anyInt());
+ .getInstalledApplications(anyLong(), anyInt());
mBatteryBackupHelper.backupOptimizationMode(mBackupDataOutput, null);
@@ -341,9 +344,17 @@
private void verifyBackupData(String expectedResult) throws Exception {
final byte[] expectedBytes = expectedResult.getBytes();
+ final ArgumentCaptor<byte[]> captor = ArgumentCaptor.forClass(byte[].class);
+ final Set<String> expectedResultSet =
+ Set.of(expectedResult.split(BatteryBackupHelper.DELIMITER));
+
verify(mBackupDataOutput).writeEntityHeader(
BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
- verify(mBackupDataOutput).writeEntityData(expectedBytes, expectedBytes.length);
+ verify(mBackupDataOutput).writeEntityData(captor.capture(), eq(expectedBytes.length));
+ final String actualResult = new String(captor.getValue());
+ final Set<String> actualResultSet =
+ Set.of(actualResult.split(BatteryBackupHelper.DELIMITER));
+ assertThat(actualResultSet).isEqualTo(expectedResultSet);
}
private void createTestingData(
@@ -369,7 +380,7 @@
doReturn(new ParceledListSlice<ApplicationInfo>(
Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3)))
.when(mIPackageManager)
- .getInstalledApplications(anyInt(), anyInt());
+ .getInstalledApplications(anyLong(), anyInt());
// Sets the AppOpsManager for checkOpNoThrow() method.
doReturn(AppOpsManager.MODE_ALLOWED)
.when(mAppOpsManager)
@@ -384,7 +395,7 @@
applicationInfo2.uid,
applicationInfo2.packageName);
mBatteryBackupHelper.mTestApplicationInfoList =
- Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3);
+ new ArraySet<>(Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3));
}
@Implements(UserHandle.class)
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
deleted file mode 100644
index 1d74491..0000000
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartPreferenceControllerTest.java
+++ /dev/null
@@ -1,702 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-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.app.settings.SettingsEnums;
-import android.content.Context;
-import android.content.ContentValues;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.LocaleList;
-import android.text.format.DateUtils;
-import android.util.Pair;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceCategory;
-import androidx.preference.PreferenceGroup;
-
-import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.core.InstrumentedPreferenceFragment;
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.List;
-import java.util.Map;
-
-@RunWith(RobolectricTestRunner.class)
-public final class BatteryChartPreferenceControllerTest {
- private static final String PREF_KEY = "pref_key";
- private static final String PREF_SUMMARY = "fake preference summary";
- private static final int DESIRED_HISTORY_SIZE =
- BatteryChartPreferenceController.DESIRED_HISTORY_SIZE;
-
- @Mock private InstrumentedPreferenceFragment mFragment;
- @Mock private SettingsActivity mSettingsActivity;
- @Mock private PreferenceGroup mAppListGroup;
- @Mock private PackageManager mPackageManager;
- @Mock private Drawable mDrawable;
- @Mock private BatteryHistEntry mBatteryHistEntry;
- @Mock private BatteryChartView mBatteryChartView;
- @Mock private PowerGaugePreference mPowerGaugePreference;
- @Mock private ExpandDividerPreference mExpandDividerPreference;
- @Mock private BatteryUtils mBatteryUtils;
- @Mock private Configuration mConfiguration;
- @Mock private Resources mResources;
-
- private Context mContext;
- private FakeFeatureFactory mFeatureFactory;
- private BatteryDiffEntry mBatteryDiffEntry;
- private MetricsFeatureProvider mMetricsFeatureProvider;
- private BatteryChartPreferenceController mBatteryChartPreferenceController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- Locale.setDefault(new Locale("en_US"));
- org.robolectric.shadows.ShadowSettings.set24HourTimeFormat(false);
- mFeatureFactory = FakeFeatureFactory.setupForTest();
- mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
- mContext = spy(RuntimeEnvironment.application);
- final Resources resources = spy(mContext.getResources());
- resources.getConfiguration().setLocales(new LocaleList(new Locale("en_US")));
- doReturn(resources).when(mContext).getResources();
- doReturn(new String[] {"com.android.googlequicksearchbox"})
- .when(mFeatureFactory.powerUsageFeatureProvider)
- .getHideApplicationSummary(mContext);
- doReturn(new String[] {"com.android.gms.persistent"})
- .when(mFeatureFactory.powerUsageFeatureProvider)
- .getHideApplicationEntries(mContext);
- mBatteryChartPreferenceController = createController();
- mBatteryChartPreferenceController.mPrefContext = mContext;
- mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup;
- mBatteryChartPreferenceController.mBatteryChartView = mBatteryChartView;
- mBatteryDiffEntry = new BatteryDiffEntry(
- mContext,
- /*foregroundUsageTimeInMs=*/ 1,
- /*backgroundUsageTimeInMs=*/ 2,
- /*consumePower=*/ 3,
- mBatteryHistEntry);
- mBatteryDiffEntry = spy(mBatteryDiffEntry);
- // Adds fake testing data.
- BatteryDiffEntry.sResourceCache.put(
- "fakeBatteryDiffEntryKey",
- new BatteryEntry.NameAndIcon("fakeName", /*icon=*/ null, /*iconId=*/ 1));
- mBatteryChartPreferenceController.setBatteryHistoryMap(
- createBatteryHistoryMap());
- }
-
- @Test
- public void testOnDestroy_activityIsChanging_clearBatteryEntryCache() {
- doReturn(true).when(mSettingsActivity).isChangingConfigurations();
- // Ensures the testing environment is correct.
- assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
-
- mBatteryChartPreferenceController.onDestroy();
- assertThat(BatteryDiffEntry.sResourceCache).isEmpty();
- }
-
- @Test
- public void testOnDestroy_activityIsNotChanging_notClearBatteryEntryCache() {
- doReturn(false).when(mSettingsActivity).isChangingConfigurations();
- // Ensures the testing environment is correct.
- assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
-
- mBatteryChartPreferenceController.onDestroy();
- assertThat(BatteryDiffEntry.sResourceCache).isNotEmpty();
- }
-
- @Test
- public void testOnDestroy_clearPreferenceCache() {
- // Ensures the testing environment is correct.
- mBatteryChartPreferenceController.mPreferenceCache.put(
- PREF_KEY, mPowerGaugePreference);
- assertThat(mBatteryChartPreferenceController.mPreferenceCache).hasSize(1);
-
- mBatteryChartPreferenceController.onDestroy();
- // Verifies the result after onDestroy.
- assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
- }
-
- @Test
- public void testOnDestroy_removeAllPreferenceFromPreferenceGroup() {
- mBatteryChartPreferenceController.onDestroy();
- verify(mAppListGroup).removeAll();
- }
-
- @Test
- public void testSetBatteryHistoryMap_createExpectedKeysAndLevels() {
- mBatteryChartPreferenceController.setBatteryHistoryMap(
- createBatteryHistoryMap());
-
- // Verifies the created battery keys array.
- for (int index = 0; index < DESIRED_HISTORY_SIZE; index++) {
- assertThat(mBatteryChartPreferenceController.mBatteryHistoryKeys[index])
- // These values is are calculated by hand from createBatteryHistoryMap().
- .isEqualTo(index + 1);
- }
- // Verifies the created battery levels array.
- for (int index = 0; index < 13; index++) {
- assertThat(mBatteryChartPreferenceController.mBatteryHistoryLevels[index])
- // These values is are calculated by hand from createBatteryHistoryMap().
- .isEqualTo(100 - index * 2);
- }
- assertThat(mBatteryChartPreferenceController.mBatteryIndexedMap).hasSize(13);
- }
-
- @Test
- public void testSetBatteryHistoryMap_largeSize_createExpectedKeysAndLevels() {
- mBatteryChartPreferenceController.setBatteryHistoryMap(
- createBatteryHistoryMap());
-
- // Verifies the created battery keys array.
- for (int index = 0; index < DESIRED_HISTORY_SIZE; index++) {
- assertThat(mBatteryChartPreferenceController.mBatteryHistoryKeys[index])
- // These values is are calculated by hand from createBatteryHistoryMap().
- .isEqualTo(index + 1);
- }
- // Verifies the created battery levels array.
- for (int index = 0; index < 13; index++) {
- assertThat(mBatteryChartPreferenceController.mBatteryHistoryLevels[index])
- // These values is are calculated by hand from createBatteryHistoryMap().
- .isEqualTo(100 - index * 2);
- }
- assertThat(mBatteryChartPreferenceController.mBatteryIndexedMap).hasSize(13);
- }
-
- @Test
- public void testRefreshUi_batteryIndexedMapIsNull_ignoreRefresh() {
- mBatteryChartPreferenceController.setBatteryHistoryMap(null);
- assertThat(mBatteryChartPreferenceController.refreshUi(
- /*trapezoidIndex=*/ 1, /*isForce=*/ false)).isFalse();
- }
-
- @Test
- public void testRefreshUi_batteryChartViewIsNull_ignoreRefresh() {
- mBatteryChartPreferenceController.mBatteryChartView = null;
- assertThat(mBatteryChartPreferenceController.refreshUi(
- /*trapezoidIndex=*/ 1, /*isForce=*/ false)).isFalse();
- }
-
- @Test
- public void testRefreshUi_trapezoidIndexIsNotChanged_ignoreRefresh() {
- final int trapezoidIndex = 1;
- mBatteryChartPreferenceController.mTrapezoidIndex = trapezoidIndex;
- assertThat(mBatteryChartPreferenceController.refreshUi(
- trapezoidIndex, /*isForce=*/ false)).isFalse();
- }
-
- @Test
- public void testRefreshUi_forceUpdate_refreshUi() {
- final int trapezoidIndex = 1;
- mBatteryChartPreferenceController.mTrapezoidIndex = trapezoidIndex;
- assertThat(mBatteryChartPreferenceController.refreshUi(
- trapezoidIndex, /*isForce=*/ true)).isTrue();
- }
-
- @Test
- public void testForceRefreshUi_updateTrapezoidIndexIntoSelectAll() {
- mBatteryChartPreferenceController.mTrapezoidIndex =
- BatteryChartView.SELECTED_INDEX_INVALID;
- mBatteryChartPreferenceController.setBatteryHistoryMap(
- createBatteryHistoryMap());
-
- assertThat(mBatteryChartPreferenceController.mTrapezoidIndex)
- .isEqualTo(BatteryChartView.SELECTED_INDEX_ALL);
- }
-
- @Test
- public void testRemoveAndCacheAllPrefs_emptyContent_ignoreRemoveAll() {
- final int trapezoidIndex = 1;
- doReturn(0).when(mAppListGroup).getPreferenceCount();
-
- mBatteryChartPreferenceController.refreshUi(
- trapezoidIndex, /*isForce=*/ true);
- verify(mAppListGroup, never()).removeAll();
- }
-
- @Test
- public void testRemoveAndCacheAllPrefs_buildCacheAndRemoveAllPreference() {
- final int trapezoidIndex = 1;
- doReturn(1).when(mAppListGroup).getPreferenceCount();
- doReturn(mPowerGaugePreference).when(mAppListGroup).getPreference(0);
- doReturn(PREF_KEY).when(mPowerGaugePreference).getKey();
- // Ensures the testing data is correct.
- assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
-
- mBatteryChartPreferenceController.refreshUi(
- trapezoidIndex, /*isForce=*/ true);
-
- assertThat(mBatteryChartPreferenceController.mPreferenceCache.get(PREF_KEY))
- .isEqualTo(mPowerGaugePreference);
- verify(mAppListGroup).removeAll();
- }
-
- @Test
- public void testAddPreferenceToScreen_emptyContent_ignoreAddPreference() {
- mBatteryChartPreferenceController.addPreferenceToScreen(
- new ArrayList<BatteryDiffEntry>());
- verify(mAppListGroup, never()).addPreference(any());
- }
-
- @Test
- public void testAddPreferenceToScreen_addPreferenceIntoScreen() {
- final String appLabel = "fake app label";
- doReturn(1).when(mAppListGroup).getPreferenceCount();
- doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
- doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel();
- doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
- doReturn(null).when(mAppListGroup).findPreference(PREF_KEY);
- doReturn(false).when(mBatteryDiffEntry).validForRestriction();
-
- mBatteryChartPreferenceController.addPreferenceToScreen(
- Arrays.asList(mBatteryDiffEntry));
-
- // Verifies the preference cache.
- final PowerGaugePreference pref =
- (PowerGaugePreference) mBatteryChartPreferenceController.mPreferenceCache
- .get(PREF_KEY);
- assertThat(pref).isNotNull();
- // Verifies the added preference configuration.
- verify(mAppListGroup).addPreference(pref);
- assertThat(pref.getKey()).isEqualTo(PREF_KEY);
- assertThat(pref.getTitle()).isEqualTo(appLabel);
- assertThat(pref.getIcon()).isEqualTo(mDrawable);
- assertThat(pref.getOrder()).isEqualTo(1);
- assertThat(pref.getBatteryDiffEntry()).isSameInstanceAs(mBatteryDiffEntry);
- assertThat(pref.isSingleLineTitle()).isTrue();
- assertThat(pref.isEnabled()).isFalse();
- }
-
- @Test
- public void testAddPreferenceToScreen_alreadyInScreen_notAddPreferenceAgain() {
- final String appLabel = "fake app label";
- doReturn(1).when(mAppListGroup).getPreferenceCount();
- doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
- doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel();
- doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
- doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(PREF_KEY);
-
- mBatteryChartPreferenceController.addPreferenceToScreen(
- Arrays.asList(mBatteryDiffEntry));
-
- verify(mAppListGroup, never()).addPreference(any());
- }
-
- @Test
- public void testHandlePreferenceTreeiClick_notPowerGaugePreference_returnFalse() {
- assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(mAppListGroup))
- .isFalse();
-
- verify(mMetricsFeatureProvider, never())
- .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM);
- verify(mMetricsFeatureProvider, never())
- .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM);
- }
-
- @Test
- public void testHandlePreferenceTreeClick_forAppEntry_returnTrue() {
- doReturn(false).when(mBatteryHistEntry).isAppEntry();
- doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry();
-
- assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
- mPowerGaugePreference)).isTrue();
- verify(mMetricsFeatureProvider)
- .action(
- SettingsEnums.OPEN_BATTERY_USAGE,
- SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
- SettingsEnums.OPEN_BATTERY_USAGE,
- /* package name */ "none",
- /* percentage of total */ 0);
- }
-
- @Test
- public void testHandlePreferenceTreeClick_forSystemEntry_returnTrue() {
- mBatteryChartPreferenceController.mBatteryUtils = mBatteryUtils;
- doReturn(true).when(mBatteryHistEntry).isAppEntry();
- doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry();
-
- assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
- mPowerGaugePreference)).isTrue();
- verify(mMetricsFeatureProvider)
- .action(
- SettingsEnums.OPEN_BATTERY_USAGE,
- SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM,
- SettingsEnums.OPEN_BATTERY_USAGE,
- /* package name */ "none",
- /* percentage of total */ 0);
- }
-
- @Test
- public void testSetPreferenceSummary_setNullContentIfTotalUsageTimeIsZero() {
- final PowerGaugePreference pref = new PowerGaugePreference(mContext);
- pref.setSummary(PREF_SUMMARY);
-
- mBatteryChartPreferenceController.setPreferenceSummary(
- pref, createBatteryDiffEntry(
- /*foregroundUsageTimeInMs=*/ 0,
- /*backgroundUsageTimeInMs=*/ 0));
- assertThat(pref.getSummary()).isNull();
- }
-
- @Test
- public void testSetPreferenceSummary_setBackgroundUsageTimeOnly() {
- final PowerGaugePreference pref = new PowerGaugePreference(mContext);
- pref.setSummary(PREF_SUMMARY);
-
- mBatteryChartPreferenceController.setPreferenceSummary(
- pref, createBatteryDiffEntry(
- /*foregroundUsageTimeInMs=*/ 0,
- /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS));
- assertThat(pref.getSummary()).isEqualTo("Background: 1 min");
- }
-
- @Test
- public void testSetPreferenceSummary_setTotalUsageTimeLessThanAMinute() {
- final PowerGaugePreference pref = new PowerGaugePreference(mContext);
- pref.setSummary(PREF_SUMMARY);
-
- mBatteryChartPreferenceController.setPreferenceSummary(
- pref, createBatteryDiffEntry(
- /*foregroundUsageTimeInMs=*/ 100,
- /*backgroundUsageTimeInMs=*/ 200));
- assertThat(pref.getSummary()).isEqualTo("Total: less than a min");
- }
-
- @Test
- public void testSetPreferenceSummary_setTotalTimeIfBackgroundTimeLessThanAMinute() {
- final PowerGaugePreference pref = new PowerGaugePreference(mContext);
- pref.setSummary(PREF_SUMMARY);
-
- mBatteryChartPreferenceController.setPreferenceSummary(
- pref, createBatteryDiffEntry(
- /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
- /*backgroundUsageTimeInMs=*/ 200));
- assertThat(pref.getSummary())
- .isEqualTo("Total: 1 min\nBackground: less than a min");
- }
-
- @Test
- public void testSetPreferenceSummary_setTotalAndBackgroundUsageTime() {
- final PowerGaugePreference pref = new PowerGaugePreference(mContext);
- pref.setSummary(PREF_SUMMARY);
-
- mBatteryChartPreferenceController.setPreferenceSummary(
- pref, createBatteryDiffEntry(
- /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
- /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS));
- assertThat(pref.getSummary()).isEqualTo("Total: 2 min\nBackground: 1 min");
- }
-
- @Test
- public void testSetPreferenceSummary_notAllowShownPackage_setSummayAsNull() {
- final PowerGaugePreference pref = new PowerGaugePreference(mContext);
- pref.setSummary(PREF_SUMMARY);
- final BatteryDiffEntry batteryDiffEntry =
- spy(createBatteryDiffEntry(
- /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
- /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS));
- doReturn("com.android.googlequicksearchbox").when(batteryDiffEntry)
- .getPackageName();
-
- mBatteryChartPreferenceController.setPreferenceSummary(pref, batteryDiffEntry);
- assertThat(pref.getSummary()).isNull();
- }
-
- @Test
- public void testValidateUsageTime_returnTrueIfBatteryDiffEntryIsValid() {
- assertThat(BatteryChartPreferenceController.validateUsageTime(
- createBatteryDiffEntry(
- /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
- /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS)))
- .isTrue();
- }
-
- @Test
- public void testValidateUsageTime_foregroundTimeExceedThreshold_returnFalse() {
- assertThat(BatteryChartPreferenceController.validateUsageTime(
- createBatteryDiffEntry(
- /*foregroundUsageTimeInMs=*/ DateUtils.HOUR_IN_MILLIS * 3,
- /*backgroundUsageTimeInMs=*/ 0)))
- .isFalse();
- }
-
- @Test
- public void testValidateUsageTime_backgroundTimeExceedThreshold_returnFalse() {
- assertThat(BatteryChartPreferenceController.validateUsageTime(
- createBatteryDiffEntry(
- /*foregroundUsageTimeInMs=*/ 0,
- /*backgroundUsageTimeInMs=*/ DateUtils.HOUR_IN_MILLIS * 3)))
- .isFalse();
- }
-
- @Test
- public void testOnExpand_expandedIsTrue_addSystemEntriesToPreferenceGroup() {
- doReturn(1).when(mAppListGroup).getPreferenceCount();
- mBatteryChartPreferenceController.mSystemEntries.add(mBatteryDiffEntry);
- doReturn("label").when(mBatteryDiffEntry).getAppLabel();
- doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
- doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
-
- mBatteryChartPreferenceController.onExpand(/*isExpanded=*/ true);
-
- final ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
- verify(mAppListGroup).addPreference(captor.capture());
- // Verifies the added preference.
- assertThat(captor.getValue().getKey()).isEqualTo(PREF_KEY);
- verify(mMetricsFeatureProvider)
- .action(
- mContext,
- SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
- true /*isExpanded*/);
- }
-
- @Test
- public void testOnExpand_expandedIsFalse_removeSystemEntriesFromPreferenceGroup() {
- doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
- doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(PREF_KEY);
- mBatteryChartPreferenceController.mSystemEntries.add(mBatteryDiffEntry);
- // Verifies the cache is empty first.
- assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
-
- mBatteryChartPreferenceController.onExpand(/*isExpanded=*/ false);
-
- verify(mAppListGroup).findPreference(PREF_KEY);
- verify(mAppListGroup).removePreference(mPowerGaugePreference);
- assertThat(mBatteryChartPreferenceController.mPreferenceCache).hasSize(1);
- verify(mMetricsFeatureProvider)
- .action(
- mContext,
- SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
- false /*isExpanded*/);
- }
-
- @Test
- public void testOnSelect_selectSpecificTimeSlot_logMetric() {
- mBatteryChartPreferenceController.onSelect(1 /*slot index*/);
-
- verify(mMetricsFeatureProvider)
- .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_TIME_SLOT);
- }
-
- @Test
- public void testOnSelect_selectAll_logMetric() {
- mBatteryChartPreferenceController.onSelect(
- BatteryChartView.SELECTED_INDEX_ALL /*slot index*/);
-
- verify(mMetricsFeatureProvider)
- .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SHOW_ALL);
- }
-
- @Test
- public void testRefreshCategoryTitle_setHourIntoBothTitleTextView() {
- mBatteryChartPreferenceController = createController();
- setUpBatteryHistoryKeys();
- mBatteryChartPreferenceController.mAppListPrefGroup =
- spy(new PreferenceCategory(mContext));
- mBatteryChartPreferenceController.mExpandDividerPreference =
- spy(new ExpandDividerPreference(mContext));
- // Simulates select the first slot.
- mBatteryChartPreferenceController.mTrapezoidIndex = 0;
-
- mBatteryChartPreferenceController.refreshCategoryTitle();
-
- ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
- // Verifies the title in the preference group.
- verify(mBatteryChartPreferenceController.mAppListPrefGroup)
- .setTitle(captor.capture());
- assertThat(captor.getValue()).isNotEqualTo("App usage for past 24 hr");
- // Verifies the title in the expandable divider.
- captor = ArgumentCaptor.forClass(String.class);
- verify(mBatteryChartPreferenceController.mExpandDividerPreference)
- .setTitle(captor.capture());
- assertThat(captor.getValue()).isNotEqualTo("System usage for past 24 hr");
- }
-
- @Test
- public void testRefreshCategoryTitle_setLast24HrIntoBothTitleTextView() {
- mBatteryChartPreferenceController = createController();
- mBatteryChartPreferenceController.mAppListPrefGroup =
- spy(new PreferenceCategory(mContext));
- mBatteryChartPreferenceController.mExpandDividerPreference =
- spy(new ExpandDividerPreference(mContext));
- // Simulates select all condition.
- mBatteryChartPreferenceController.mTrapezoidIndex =
- BatteryChartView.SELECTED_INDEX_ALL;
-
- mBatteryChartPreferenceController.refreshCategoryTitle();
-
- ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
- // Verifies the title in the preference group.
- verify(mBatteryChartPreferenceController.mAppListPrefGroup)
- .setTitle(captor.capture());
- assertThat(captor.getValue())
- .isEqualTo("App usage for past 24 hr");
- // Verifies the title in the expandable divider.
- captor = ArgumentCaptor.forClass(String.class);
- verify(mBatteryChartPreferenceController.mExpandDividerPreference)
- .setTitle(captor.capture());
- assertThat(captor.getValue())
- .isEqualTo("System usage for past 24 hr");
- }
-
- @Test
- public void testSetTimestampLabel_nullBatteryHistoryKeys_ignore() {
- mBatteryChartPreferenceController = createController();
- mBatteryChartPreferenceController.mBatteryHistoryKeys = null;
- mBatteryChartPreferenceController.mBatteryChartView =
- spy(new BatteryChartView(mContext));
- mBatteryChartPreferenceController.setTimestampLabel();
-
- verify(mBatteryChartPreferenceController.mBatteryChartView, never())
- .setLatestTimestamp(anyLong());
- }
-
- @Test
- public void testSetTimestampLabel_setExpectedTimestampData() {
- mBatteryChartPreferenceController = createController();
- mBatteryChartPreferenceController.mBatteryChartView =
- spy(new BatteryChartView(mContext));
- setUpBatteryHistoryKeys();
-
- mBatteryChartPreferenceController.setTimestampLabel();
-
- verify(mBatteryChartPreferenceController.mBatteryChartView)
- .setLatestTimestamp(1619247636826L);
- }
-
- @Test
- public void testSetTimestampLabel_withoutValidTimestamp_setExpectedTimestampData() {
- mBatteryChartPreferenceController = createController();
- mBatteryChartPreferenceController.mBatteryChartView =
- spy(new BatteryChartView(mContext));
- mBatteryChartPreferenceController.mBatteryHistoryKeys = new long[] {0L};
-
- mBatteryChartPreferenceController.setTimestampLabel();
-
- verify(mBatteryChartPreferenceController.mBatteryChartView)
- .setLatestTimestamp(anyLong());
- }
-
- @Test
- public void testOnSaveInstanceState_restoreSelectedIndexAndExpandState() {
- final int expectedIndex = 1;
- final boolean isExpanded = true;
- final Bundle bundle = new Bundle();
- mBatteryChartPreferenceController.mTrapezoidIndex = expectedIndex;
- mBatteryChartPreferenceController.mIsExpanded = isExpanded;
- mBatteryChartPreferenceController.onSaveInstanceState(bundle);
- // Replaces the original controller with other values.
- mBatteryChartPreferenceController.mTrapezoidIndex = -1;
- mBatteryChartPreferenceController.mIsExpanded = false;
-
- mBatteryChartPreferenceController.onCreate(bundle);
- mBatteryChartPreferenceController.setBatteryHistoryMap(
- createBatteryHistoryMap());
-
- assertThat(mBatteryChartPreferenceController.mTrapezoidIndex)
- .isEqualTo(expectedIndex);
- assertThat(mBatteryChartPreferenceController.mIsExpanded).isTrue();
- }
-
- @Test
- public void testIsValidToShowSummary_returnExpectedResult() {
- assertThat(mBatteryChartPreferenceController
- .isValidToShowSummary("com.google.android.apps.scone"))
- .isTrue();
-
- // Verifies the item which is defined in the array list.
- assertThat(mBatteryChartPreferenceController
- .isValidToShowSummary("com.android.googlequicksearchbox"))
- .isFalse();
- }
-
- @Test
- public void testIsValidToShowEntry_returnExpectedResult() {
- assertThat(mBatteryChartPreferenceController
- .isValidToShowEntry("com.google.android.apps.scone"))
- .isTrue();
-
- // Verifies the items which are defined in the array list.
- assertThat(mBatteryChartPreferenceController
- .isValidToShowEntry("com.android.gms.persistent"))
- .isFalse();
- }
-
- private static Map<Long, Map<String, BatteryHistEntry>> createBatteryHistoryMap() {
- final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
- for (int index = 0; index < DESIRED_HISTORY_SIZE; index++) {
- final ContentValues values = new ContentValues();
- values.put("batteryLevel", Integer.valueOf(100 - index));
- final BatteryHistEntry entry = new BatteryHistEntry(values);
- final Map<String, BatteryHistEntry> entryMap = new HashMap<>();
- entryMap.put("fake_entry_key" + index, entry);
- batteryHistoryMap.put(Long.valueOf(index + 1), entryMap);
- }
- return batteryHistoryMap;
- }
-
- private BatteryDiffEntry createBatteryDiffEntry(
- long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) {
- return new BatteryDiffEntry(
- mContext, foregroundUsageTimeInMs, backgroundUsageTimeInMs,
- /*consumePower=*/ 0, mBatteryHistEntry);
- }
-
- private void setUpBatteryHistoryKeys() {
- mBatteryChartPreferenceController.mBatteryHistoryKeys =
- new long[] {1619196786769L, 0L, 1619247636826L};
- ConvertUtils.utcToLocalTimeHour(
- mContext, /*timestamp=*/ 0, /*is24HourFormat=*/ false);
- }
-
- private BatteryChartPreferenceController createController() {
- final BatteryChartPreferenceController controller =
- new BatteryChartPreferenceController(
- mContext, "app_list", /*lifecycle=*/ null,
- mSettingsActivity, mFragment);
- controller.mPrefContext = mContext;
- return controller;
- }
-}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartViewTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartViewTest.java
deleted file mode 100644
index 0b75e79..0000000
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryChartViewTest.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- *
- */
-package com.android.settings.fuelgauge;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-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.accessibilityservice.AccessibilityServiceInfo;
-import android.content.Context;
-import android.os.LocaleList;
-import android.view.accessibility.AccessibilityManager;
-
-import com.android.settings.testutils.FakeFeatureFactory;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.Locale;
-
-@RunWith(RobolectricTestRunner.class)
-public final class BatteryChartViewTest {
-
- private Context mContext;
- private BatteryChartView mBatteryChartView;
- private FakeFeatureFactory mFeatureFactory;
- private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
-
- @Mock private AccessibilityServiceInfo mockAccessibilityServiceInfo;
- @Mock private AccessibilityManager mockAccessibilityManager;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mFeatureFactory = FakeFeatureFactory.setupForTest();
- mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
- mContext = spy(RuntimeEnvironment.application);
- mContext.getResources().getConfiguration().setLocales(
- new LocaleList(new Locale("en_US")));
- mBatteryChartView = new BatteryChartView(mContext);
- doReturn(mockAccessibilityManager).when(mContext)
- .getSystemService(AccessibilityManager.class);
- doReturn("TalkBackService").when(mockAccessibilityServiceInfo).getId();
- doReturn(Arrays.asList(mockAccessibilityServiceInfo))
- .when(mockAccessibilityManager)
- .getEnabledAccessibilityServiceList(anyInt());
- }
-
- @Test
- public void testIsAccessibilityEnabled_disable_returnFalse() {
- doReturn(false).when(mockAccessibilityManager).isEnabled();
- assertThat(BatteryChartView.isAccessibilityEnabled(mContext)).isFalse();
- }
-
- @Test
- public void testIsAccessibilityEnabled_emptyInfo_returnFalse() {
- doReturn(true).when(mockAccessibilityManager).isEnabled();
- doReturn(new ArrayList<AccessibilityServiceInfo>())
- .when(mockAccessibilityManager)
- .getEnabledAccessibilityServiceList(anyInt());
-
- assertThat(BatteryChartView.isAccessibilityEnabled(mContext)).isFalse();
- }
-
- @Test
- public void testIsAccessibilityEnabled_validServiceId_returnTrue() {
- doReturn(true).when(mockAccessibilityManager).isEnabled();
- assertThat(BatteryChartView.isAccessibilityEnabled(mContext)).isTrue();
- }
-
- @Test
- public void testSetSelectedIndex_invokesCallback() {
- final int selectedIndex[] = new int[1];
- final int expectedIndex = 2;
- mBatteryChartView.mSelectedIndex = 1;
- mBatteryChartView.setOnSelectListener(
- trapezoidIndex -> {
- selectedIndex[0] = trapezoidIndex;
- });
-
- mBatteryChartView.setSelectedIndex(expectedIndex);
-
- assertThat(mBatteryChartView.mSelectedIndex)
- .isEqualTo(expectedIndex);
- assertThat(selectedIndex[0]).isEqualTo(expectedIndex);
- }
-
- @Test
- public void testSetSelectedIndex_sameIndex_notInvokesCallback() {
- final int selectedIndex[] = new int[1];
- final int expectedIndex = 1;
- mBatteryChartView.mSelectedIndex = expectedIndex;
- mBatteryChartView.setOnSelectListener(
- trapezoidIndex -> {
- selectedIndex[0] = trapezoidIndex;
- });
-
- mBatteryChartView.setSelectedIndex(expectedIndex);
-
- assertThat(selectedIndex[0]).isNotEqualTo(expectedIndex);
- }
-
- @Test
- public void testClickable_isChartGraphSlotsEnabledIsFalse_notClickable() {
- mBatteryChartView.setClickableForce(true);
- when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
- .thenReturn(false);
-
- mBatteryChartView.onAttachedToWindow();
- assertThat(mBatteryChartView.isClickable()).isFalse();
- assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNotNull();
- }
-
- @Test
- public void testClickable_accessibilityIsDisabled_clickable() {
- mBatteryChartView.setClickableForce(true);
- when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
- .thenReturn(true);
- doReturn(false).when(mockAccessibilityManager).isEnabled();
-
- mBatteryChartView.onAttachedToWindow();
- assertThat(mBatteryChartView.isClickable()).isTrue();
- assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNull();
- }
-
- @Test
- public void testClickable_accessibilityIsEnabledWithoutValidId_clickable() {
- mBatteryChartView.setClickableForce(true);
- when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
- .thenReturn(true);
- doReturn(true).when(mockAccessibilityManager).isEnabled();
- doReturn(new ArrayList<AccessibilityServiceInfo>())
- .when(mockAccessibilityManager)
- .getEnabledAccessibilityServiceList(anyInt());
-
- mBatteryChartView.onAttachedToWindow();
- assertThat(mBatteryChartView.isClickable()).isTrue();
- assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNull();
- }
-
- @Test
- public void testClickable_accessibilityIsEnabledWithValidId_notClickable() {
- mBatteryChartView.setClickableForce(true);
- when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
- .thenReturn(true);
- doReturn(true).when(mockAccessibilityManager).isEnabled();
-
- mBatteryChartView.onAttachedToWindow();
- assertThat(mBatteryChartView.isClickable()).isFalse();
- assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNotNull();
- }
-
- @Test
- public void testClickable_restoreFromNonClickableState() {
- final int[] levels = new int[13];
- for (int index = 0; index < levels.length; index++) {
- levels[index] = index + 1;
- }
- mBatteryChartView.setTrapezoidCount(12);
- mBatteryChartView.setLevels(levels);
- mBatteryChartView.setClickableForce(true);
- when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
- .thenReturn(true);
- doReturn(true).when(mockAccessibilityManager).isEnabled();
- mBatteryChartView.onAttachedToWindow();
- // Ensures the testing environment is correct.
- assertThat(mBatteryChartView.isClickable()).isFalse();
- // Turns off accessibility service.
- doReturn(false).when(mockAccessibilityManager).isEnabled();
-
- mBatteryChartView.onAttachedToWindow();
-
- assertThat(mBatteryChartView.isClickable()).isTrue();
- }
-
- @Test
- public void testOnAttachedToWindow_addAccessibilityStateChangeListener() {
- mBatteryChartView.onAttachedToWindow();
- verify(mockAccessibilityManager)
- .addAccessibilityStateChangeListener(mBatteryChartView);
- }
-
- @Test
- public void testOnDetachedFromWindow_removeAccessibilityStateChangeListener() {
- mBatteryChartView.onAttachedToWindow();
- mBatteryChartView.mHandler.postDelayed(
- mBatteryChartView.mUpdateClickableStateRun, 1000);
-
- mBatteryChartView.onDetachedFromWindow();
-
- verify(mockAccessibilityManager)
- .removeAccessibilityStateChangeListener(mBatteryChartView);
- assertThat(mBatteryChartView.mHandler.hasCallbacks(
- mBatteryChartView.mUpdateClickableStateRun))
- .isFalse();
- }
-
- @Test
- public void testOnAccessibilityStateChanged_postUpdateStateRunnable() {
- mBatteryChartView.mHandler = spy(mBatteryChartView.mHandler);
- mBatteryChartView.onAccessibilityStateChanged(/*enabled=*/ true);
-
- verify(mBatteryChartView.mHandler)
- .removeCallbacks(mBatteryChartView.mUpdateClickableStateRun);
- verify(mBatteryChartView.mHandler)
- .postDelayed(mBatteryChartView.mUpdateClickableStateRun, 500L);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
index 591c4e6..c5c47d2 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java
@@ -249,6 +249,8 @@
@Test
public void testGetBatteryInfo_chargingWithOverheated_updateChargeLabel() {
+ final String expectedString =
+ mContext.getString(R.string.battery_tip_limited_temporarily_title);
doReturn(TEST_CHARGE_TIME_REMAINING)
.when(mBatteryUsageStats)
.getChargeTimeRemainingMs();
@@ -260,7 +262,7 @@
false /* shortString */);
assertThat(info.isOverheated).isTrue();
- assertThat(info.chargeLabel).isEqualTo("50% - Charging temporarily limited");
+ assertThat(info.chargeLabel.toString()).contains(expectedString);
}
// Make our battery stats return a sequence of battery events.
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
index c154f42..b223d0b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
@@ -22,26 +22,43 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import android.app.AppOpsManager;
import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.content.pm.ParceledListSlice;
+import android.content.pm.UserInfo;
+import android.os.UserManager;
+import android.util.ArraySet;
import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.InOrder;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import java.util.Arrays;
import java.util.concurrent.TimeUnit;
@RunWith(RobolectricTestRunner.class)
@@ -50,9 +67,11 @@
private static final int UID = 12345;
private static final String PACKAGE_NAME = "com.android.app";
- @Mock BatteryUtils mMockBatteryUtils;
- @Mock AppOpsManager mMockAppOpsManager;
- @Mock PowerAllowlistBackend mMockBackend;
+ @Mock private BatteryUtils mMockBatteryUtils;
+ @Mock private AppOpsManager mMockAppOpsManager;
+ @Mock private PowerAllowlistBackend mMockBackend;
+ @Mock private IPackageManager mMockIPackageManager;
+ @Mock private UserManager mMockUserManager;
private Context mContext;
private BatteryOptimizeUtils mBatteryOptimizeUtils;
@@ -68,6 +87,7 @@
// Sets the default mode as MODE_RESTRICTED.
mBatteryOptimizeUtils.mMode = AppOpsManager.MODE_IGNORED;
mBatteryOptimizeUtils.mAllowListed = false;
+ doReturn(mMockUserManager).when(mContext).getSystemService(UserManager.class);
}
@Test
@@ -135,9 +155,7 @@
mBatteryOptimizeUtils.setAppUsageState(MODE_RESTRICTED);
TimeUnit.SECONDS.sleep(1);
- verify(mMockBatteryUtils).setForceAppStandby(UID,
- PACKAGE_NAME, AppOpsManager.MODE_IGNORED);
- verify(mMockBackend).removeApp(PACKAGE_NAME);
+ verifySetAppOptimizationMode(AppOpsManager.MODE_IGNORED, /* allowListed */ false);
}
@Test
@@ -145,9 +163,7 @@
mBatteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED);
TimeUnit.SECONDS.sleep(1);
- verify(mMockBatteryUtils).setForceAppStandby(UID,
- PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
- verify(mMockBackend).addApp(PACKAGE_NAME);
+ verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ true);
}
@Test
@@ -155,9 +171,7 @@
mBatteryOptimizeUtils.setAppUsageState(MODE_OPTIMIZED);
TimeUnit.SECONDS.sleep(1);
- verify(mMockBatteryUtils).setForceAppStandby(UID,
- PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
- verify(mMockBackend).removeApp(PACKAGE_NAME);
+ verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
}
@Test
@@ -172,4 +186,148 @@
verifyZeroInteractions(mMockBackend);
verifyZeroInteractions(mMockBatteryUtils);
}
+
+ @Test
+ public void testGetInstalledApplications_returnEmptyArray() {
+ assertTrue(BatteryOptimizeUtils.getInstalledApplications(mContext, mMockIPackageManager)
+ .isEmpty());
+ }
+
+ @Test
+ public void testGetInstalledApplications_returnNull() throws Exception {
+ final UserInfo userInfo =
+ new UserInfo(/*userId=*/ 0, /*userName=*/ "google", /*flag=*/ 0);
+ doReturn(Arrays.asList(userInfo)).when(mMockUserManager).getProfiles(anyInt());
+ doThrow(new RuntimeException())
+ .when(mMockIPackageManager)
+ .getInstalledApplications(anyLong(), anyInt());
+
+ assertNull(BatteryOptimizeUtils.getInstalledApplications(mContext, mMockIPackageManager));
+ }
+
+ @Test
+ public void testGetInstalledApplications_returnInstalledApps() throws Exception {
+ final UserInfo userInfo =
+ new UserInfo(/*userId=*/ 0, /*userName=*/ "google", /*flag=*/ 0);
+ doReturn(Arrays.asList(userInfo)).when(mMockUserManager).getProfiles(anyInt());
+
+ final ApplicationInfo applicationInfo1 = new ApplicationInfo();
+ applicationInfo1.enabled = true;
+ applicationInfo1.uid = 1;
+ final ApplicationInfo applicationInfo2 = new ApplicationInfo();
+ applicationInfo2.enabled = false;
+ applicationInfo2.uid = 2;
+ applicationInfo2.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
+ final ApplicationInfo applicationInfo3 = new ApplicationInfo();
+ applicationInfo3.enabled = false;
+ applicationInfo3.uid = 3;
+ applicationInfo3.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+ final ApplicationInfo applicationInfo4 = new ApplicationInfo();
+ applicationInfo4.enabled = true;
+ applicationInfo4.uid = 4;
+ applicationInfo4.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
+ doReturn(new ParceledListSlice<ApplicationInfo>(
+ Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3, applicationInfo4)))
+ .when(mMockIPackageManager)
+ .getInstalledApplications(anyLong(), anyInt());
+
+ final ArraySet<ApplicationInfo> applications =
+ BatteryOptimizeUtils.getInstalledApplications(mContext, mMockIPackageManager);
+ assertThat(applications.size()).isEqualTo(3);
+ // applicationInfo3 should be filtered.
+ assertTrue(applications.contains(applicationInfo1));
+ assertTrue(applications.contains(applicationInfo2));
+ assertFalse(applications.contains(applicationInfo3));
+ assertTrue(applications.contains(applicationInfo4));
+ }
+
+ @Test
+ public void testResetAppOptimizationMode_Optimized_verifyAction() throws Exception {
+ runTestForResetWithMode(
+ AppOpsManager.MODE_ALLOWED, /* allowListed */ false,
+ /* isSystemOrDefaultApp */ false);
+
+ verifyZeroInteractions(mMockBatteryUtils);
+
+ final InOrder inOrder = inOrder(mMockBackend);
+ inOrder.verify(mMockBackend).refreshList();
+ inOrder.verify(mMockBackend).isAllowlisted(PACKAGE_NAME);
+ verifyNoMoreInteractions(mMockBackend);
+ }
+
+ @Test
+ public void testResetAppOptimizationMode_SystemOrDefault_verifyAction() throws Exception {
+ runTestForResetWithMode(
+ AppOpsManager.MODE_ALLOWED, /* allowListed */ true,
+ /* isSystemOrDefaultApp */ true);
+
+ verifyZeroInteractions(mMockBatteryUtils);
+
+ final InOrder inOrder = inOrder(mMockBackend);
+ inOrder.verify(mMockBackend).refreshList();
+ inOrder.verify(mMockBackend).isAllowlisted(PACKAGE_NAME);
+ inOrder.verify(mMockBackend).isSysAllowlisted(PACKAGE_NAME);
+ verifyNoMoreInteractions(mMockBackend);
+ }
+
+ @Test
+ public void testResetAppOptimizationMode_Restricted_verifyAction() throws Exception {
+ runTestForResetWithMode(
+ AppOpsManager.MODE_IGNORED, /* allowListed */ false,
+ /* isSystemOrDefaultApp */ false);
+
+ verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
+ }
+
+ @Test
+ public void testResetAppOptimizationMode_Unrestricted_verifyAction() throws Exception {
+ runTestForResetWithMode(
+ AppOpsManager.MODE_ALLOWED, /* allowListed */ true,
+ /* isSystemOrDefaultApp */ false);
+
+ verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
+ }
+
+ private void runTestForResetWithMode(
+ int appStandbyMode, boolean allowListed, boolean isSystemOrDefaultApp)
+ throws Exception {
+ final UserInfo userInfo =
+ new UserInfo(/*userId=*/ 0, /*userName=*/ "google", /*flag=*/ 0);
+ doReturn(Arrays.asList(userInfo)).when(mMockUserManager).getProfiles(anyInt());
+ final ApplicationInfo applicationInfo = new ApplicationInfo();
+ applicationInfo.uid = UID;
+ applicationInfo.packageName = PACKAGE_NAME;
+ applicationInfo.enabled = true;
+ doReturn(new ParceledListSlice<ApplicationInfo>(
+ Arrays.asList(applicationInfo)))
+ .when(mMockIPackageManager)
+ .getInstalledApplications(anyLong(), anyInt());
+
+ doReturn(appStandbyMode)
+ .when(mMockAppOpsManager)
+ .checkOpNoThrow(anyInt(), anyInt(), anyString());
+ doReturn(allowListed)
+ .when(mMockBackend)
+ .isAllowlisted(anyString());
+ doReturn(isSystemOrDefaultApp)
+ .when(mMockBackend)
+ .isSysAllowlisted(anyString());
+ doReturn(isSystemOrDefaultApp)
+ .when(mMockBackend)
+ .isDefaultActiveApp(anyString());
+
+ BatteryOptimizeUtils.resetAppOptimizationMode(
+ mContext, mMockIPackageManager, mMockAppOpsManager, mMockBackend,
+ mMockBatteryUtils);
+ TimeUnit.SECONDS.sleep(1);
+ }
+
+ private void verifySetAppOptimizationMode(int appStandbyMode, boolean allowListed) {
+ verify(mMockBatteryUtils).setForceAppStandby(UID, PACKAGE_NAME, appStandbyMode);
+ if (allowListed) {
+ verify(mMockBackend).addApp(PACKAGE_NAME);
+ } else {
+ verify(mMockBackend).removeApp(PACKAGE_NAME);
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
index d4c4406..66a5e7f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java
index a1f9d1f..3309f59 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java
@@ -41,7 +41,8 @@
mBatteryInfo.discharging = false;
- mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo);
+ mBatteryDefenderDetector = new BatteryDefenderDetector(
+ mBatteryInfo, /* extraDefend= */ false);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTipTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTipTest.java
index 8660c79..c1ec7c6 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTipTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/tips/BatteryDefenderTipTest.java
@@ -17,13 +17,25 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.BatteryManager;
+import android.util.Log;
+
+import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.widget.CardPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import org.junit.Before;
@@ -33,6 +45,7 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import org.robolectric.shadows.ShadowLog;
@RunWith(RobolectricTestRunner.class)
public class BatteryDefenderTipTest {
@@ -43,6 +56,8 @@
private MetricsFeatureProvider mMetricsFeatureProvider;
@Mock private BatteryTip mBatteryTip;
+ @Mock private Preference mPreference;
+ @Mock private CardPreference mCardPreference;
@Before
public void setUp() {
@@ -52,6 +67,9 @@
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
mContext = RuntimeEnvironment.application;
mBatteryDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW);
+
+ when(mPreference.getContext()).thenReturn(mContext);
+ when(mCardPreference.getContext()).thenReturn(mContext);
}
@Test
@@ -61,12 +79,20 @@
}
@Test
- public void getSummary_showSummary() {
+ public void getSummary_notExtraDefended_showNonExtraDefendedSummary() {
assertThat(mBatteryDefenderTip.getSummary(mContext))
.isEqualTo(mContext.getString(R.string.battery_tip_limited_temporarily_summary));
}
@Test
+ public void getSummary_extraDefended_showExtraDefendedSummary() {
+ BatteryDefenderTip defenderTip = new BatteryDefenderTip(
+ BatteryTip.StateType.NEW, /* extraDefended= */ true);
+
+ assertThat(defenderTip.getSummary(mContext).toString()).isEqualTo("12%");
+ }
+
+ @Test
public void getIcon_showIcon() {
assertThat(mBatteryDefenderTip.getIconId())
.isEqualTo(R.drawable.ic_battery_status_good_24dp);
@@ -80,4 +106,94 @@
verify(mMetricsFeatureProvider).action(mContext,
SettingsEnums.ACTION_BATTERY_DEFENDER_TIP, mBatteryTip.mState);
}
+
+ @Test
+ public void updatePreference_castFail_logErrorMessage() {
+ mBatteryDefenderTip.updatePreference(mPreference);
+
+ assertThat(getLastErrorLog()).isEqualTo("cast Preference to CardPreference failed");
+ }
+
+ @Test
+ public void updatePreference_shouldSetPrimaryButtonText() {
+ String expectedText = mContext.getString(R.string.battery_tip_charge_to_full_button);
+
+ mBatteryDefenderTip.updatePreference(mCardPreference);
+
+ verify(mCardPreference).setPrimaryButtonText(expectedText);
+ }
+
+ @Test
+ public void updatePreference_shouldSetSecondaryButtonText() {
+ String expected = mContext.getString(R.string.see_more);
+
+ mBatteryDefenderTip.updatePreference(mCardPreference);
+
+ verify(mCardPreference).setSecondaryButtonText(expected);
+ }
+
+ @Test
+ public void updatePreference_shouldSetSecondaryButtonVisible() {
+ mBatteryDefenderTip.updatePreference(mCardPreference);
+
+ verify(mCardPreference).setSecondaryButtonVisible(true);
+ }
+
+ @Test
+ public void updatePreference_whenCharging_setPrimaryButtonVisibleToBeTrue() {
+ fakeDeviceIsCharging(true);
+
+ mBatteryDefenderTip.updatePreference(mCardPreference);
+
+ verify(mCardPreference).setPrimaryButtonVisible(true);
+ }
+
+ @Test
+ public void updatePreference_whenNotCharging_setPrimaryButtonVisibleToBeFalse() {
+ fakeDeviceIsCharging(false);
+
+ mBatteryDefenderTip.updatePreference(mCardPreference);
+
+ verify(mCardPreference).setPrimaryButtonVisible(false);
+ }
+
+ @Test
+ public void updatePreference_whenGetChargingStatusFailed_setPrimaryButtonVisibleToBeFalse() {
+ fakeGetChargingStatusFailed();
+
+ mBatteryDefenderTip.updatePreference(mCardPreference);
+
+ verify(mCardPreference).setPrimaryButtonVisible(false);
+ }
+
+ private void fakeDeviceIsCharging(boolean charging) {
+ int charged = charging ? 1 : 0; // 1 means charging, 0:not charging
+ Intent batteryChangedIntent = new Intent(Intent.ACTION_BATTERY_CHANGED);
+ batteryChangedIntent.putExtra(BatteryManager.EXTRA_PLUGGED, charged);
+
+ Context mockContext = mock(Context.class);
+ when(mockContext.getString(anyInt())).thenReturn("fake_string");
+ when(mCardPreference.getContext()).thenReturn(mockContext);
+ when(mockContext.registerReceiver(eq(null), any(IntentFilter.class)))
+ .thenReturn(batteryChangedIntent);
+ }
+
+ private void fakeGetChargingStatusFailed() {
+ Context mockContext = mock(Context.class);
+ when(mockContext.getString(anyInt())).thenReturn("fake_string");
+ when(mCardPreference.getContext()).thenReturn(mockContext);
+ when(mockContext.registerReceiver(eq(null), any(IntentFilter.class))).thenReturn(null);
+ }
+
+ private String getLastErrorLog() {
+ return ShadowLog.getLogsForTag(BatteryDefenderTip.class.getSimpleName()).stream()
+ .filter(log -> log.type == Log.ERROR)
+ .reduce((first, second) -> second)
+ .orElse(createErrorLog("No Error Log"))
+ .msg;
+ }
+
+ private ShadowLog.LogItem createErrorLog(String msg) {
+ return new ShadowLog.LogItem(Log.ERROR, "tag", msg, null);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceControllerTest.java
similarity index 95%
rename from tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceControllerTest.java
index 46773c9..da397fd 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryAppListPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceControllerTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.google.common.truth.Truth.assertThat;
@@ -35,6 +35,7 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
@@ -81,9 +82,9 @@
when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mContext.getApplicationContext()).thenReturn(mContext);
when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
- when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[] {});
+ when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{});
when(mFeatureFactory.powerUsageFeatureProvider.getHideApplicationSummary(mContext))
- .thenReturn(new String[] {"com.android.googlequicksearchbox"});
+ .thenReturn(new String[]{"com.android.googlequicksearchbox"});
mPreference = new PowerGaugePreference(mContext);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
new file mode 100644
index 0000000..016287e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
@@ -0,0 +1,684 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge.batteryusage;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.app.settings.SettingsEnums;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.LocaleList;
+import android.text.format.DateUtils;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceGroup;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TimeZone;
+
+@RunWith(RobolectricTestRunner.class)
+public final class BatteryChartPreferenceControllerTest {
+ private static final String PREF_KEY = "pref_key";
+ private static final String PREF_SUMMARY = "fake preference summary";
+
+ @Mock
+ private InstrumentedPreferenceFragment mFragment;
+ @Mock
+ private SettingsActivity mSettingsActivity;
+ @Mock
+ private PreferenceGroup mAppListGroup;
+ @Mock
+ private Drawable mDrawable;
+ @Mock
+ private BatteryHistEntry mBatteryHistEntry;
+ @Mock
+ private BatteryChartView mDailyChartView;
+ @Mock
+ private BatteryChartView mHourlyChartView;
+ @Mock
+ private PowerGaugePreference mPowerGaugePreference;
+ @Mock
+ private BatteryUtils mBatteryUtils;
+ @Mock
+ private LinearLayout.LayoutParams mLayoutParams;
+
+ private Context mContext;
+ private FakeFeatureFactory mFeatureFactory;
+ private BatteryDiffEntry mBatteryDiffEntry;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+ private BatteryChartPreferenceController mBatteryChartPreferenceController;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ Locale.setDefault(new Locale("en_US"));
+ org.robolectric.shadows.ShadowSettings.set24HourTimeFormat(false);
+ TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
+ mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
+ mContext = spy(RuntimeEnvironment.application);
+ final Resources resources = spy(mContext.getResources());
+ resources.getConfiguration().setLocales(new LocaleList(new Locale("en_US")));
+ doReturn(resources).when(mContext).getResources();
+ doReturn(new String[]{"com.android.googlequicksearchbox"})
+ .when(mFeatureFactory.powerUsageFeatureProvider)
+ .getHideApplicationSummary(mContext);
+ doReturn(new String[]{"com.android.gms.persistent"})
+ .when(mFeatureFactory.powerUsageFeatureProvider)
+ .getHideApplicationEntries(mContext);
+ doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
+ mBatteryChartPreferenceController = createController();
+ mBatteryChartPreferenceController.mPrefContext = mContext;
+ mBatteryChartPreferenceController.mAppListPrefGroup = mAppListGroup;
+ mBatteryChartPreferenceController.mDailyChartView = mDailyChartView;
+ mBatteryChartPreferenceController.mHourlyChartView = mHourlyChartView;
+ mBatteryDiffEntry = new BatteryDiffEntry(
+ mContext,
+ /*foregroundUsageTimeInMs=*/ 1,
+ /*backgroundUsageTimeInMs=*/ 2,
+ /*consumePower=*/ 3,
+ mBatteryHistEntry);
+ mBatteryDiffEntry = spy(mBatteryDiffEntry);
+ // Adds fake testing data.
+ BatteryDiffEntry.sResourceCache.put(
+ "fakeBatteryDiffEntryKey",
+ new BatteryEntry.NameAndIcon("fakeName", /*icon=*/ null, /*iconId=*/ 1));
+ }
+
+ @Test
+ public void onDestroy_activityIsChanging_clearBatteryEntryCache() {
+ doReturn(true).when(mSettingsActivity).isChangingConfigurations();
+ // Ensures the testing environment is correct.
+ assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
+
+ mBatteryChartPreferenceController.onDestroy();
+ assertThat(BatteryDiffEntry.sResourceCache).isEmpty();
+ }
+
+ @Test
+ public void onDestroy_activityIsNotChanging_notClearBatteryEntryCache() {
+ doReturn(false).when(mSettingsActivity).isChangingConfigurations();
+ // Ensures the testing environment is correct.
+ assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
+
+ mBatteryChartPreferenceController.onDestroy();
+ assertThat(BatteryDiffEntry.sResourceCache).isNotEmpty();
+ }
+
+ @Test
+ public void onDestroy_clearPreferenceCache() {
+ // Ensures the testing environment is correct.
+ mBatteryChartPreferenceController.mPreferenceCache.put(
+ PREF_KEY, mPowerGaugePreference);
+ assertThat(mBatteryChartPreferenceController.mPreferenceCache).hasSize(1);
+
+ mBatteryChartPreferenceController.onDestroy();
+ // Verifies the result after onDestroy.
+ assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
+ }
+
+ @Test
+ public void onDestroy_removeAllPreferenceFromPreferenceGroup() {
+ mBatteryChartPreferenceController.onDestroy();
+ verify(mAppListGroup).removeAll();
+ }
+
+ @Test
+ public void setBatteryChartViewModel_6Hours() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
+
+ verify(mDailyChartView, atLeastOnce()).setVisibility(View.GONE);
+ verify(mHourlyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
+ verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
+ List.of(100, 97, 95),
+ List.of("8 am", "10 am", "12 pm"),
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+ }
+
+ @Test
+ public void setBatteryChartViewModel_60Hours() {
+ BatteryChartViewModel expectedDailyViewModel = new BatteryChartViewModel(
+ List.of(100, 83, 59, 41),
+ List.of("Sat", "Sun", "Mon", "Mon"),
+ BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS);
+
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
+
+ verify(mDailyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
+ verify(mHourlyChartView, atLeastOnce()).setVisibility(View.GONE);
+ verify(mDailyChartView).setViewModel(expectedDailyViewModel);
+
+ reset(mDailyChartView);
+ reset(mHourlyChartView);
+ doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
+ mBatteryChartPreferenceController.mDailyChartIndex = 0;
+ mBatteryChartPreferenceController.refreshUi();
+ verify(mDailyChartView).setVisibility(View.VISIBLE);
+ verify(mHourlyChartView).setVisibility(View.VISIBLE);
+
+ expectedDailyViewModel.setSelectedIndex(0);
+ verify(mDailyChartView).setViewModel(expectedDailyViewModel);
+ verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
+ List.of(100, 97, 95, 93, 91, 89, 87, 85, 83),
+ List.of("8 am", "10 am", "12 pm", "2 pm", "4 pm", "6 pm", "8 pm", "10 pm",
+ "12 am"),
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+
+ reset(mDailyChartView);
+ reset(mHourlyChartView);
+ doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
+ mBatteryChartPreferenceController.mDailyChartIndex = 1;
+ mBatteryChartPreferenceController.mHourlyChartIndex = 6;
+ mBatteryChartPreferenceController.refreshUi();
+ verify(mDailyChartView).setVisibility(View.VISIBLE);
+ verify(mHourlyChartView).setVisibility(View.VISIBLE);
+ expectedDailyViewModel.setSelectedIndex(1);
+ verify(mDailyChartView).setViewModel(expectedDailyViewModel);
+ BatteryChartViewModel expectedHourlyViewModel = new BatteryChartViewModel(
+ List.of(83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59),
+ List.of("12 am", "2 am", "4 am", "6 am", "8 am", "10 am", "12 pm", "2 pm",
+ "4 pm", "6 pm", "8 pm", "10 pm", "12 am"),
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS);
+ expectedHourlyViewModel.setSelectedIndex(6);
+ verify(mHourlyChartView).setViewModel(expectedHourlyViewModel);
+
+ reset(mDailyChartView);
+ reset(mHourlyChartView);
+ doReturn(mLayoutParams).when(mDailyChartView).getLayoutParams();
+ mBatteryChartPreferenceController.mDailyChartIndex = 2;
+ mBatteryChartPreferenceController.mHourlyChartIndex =
+ BatteryChartViewModel.SELECTED_INDEX_ALL;
+ mBatteryChartPreferenceController.refreshUi();
+ verify(mDailyChartView).setVisibility(View.VISIBLE);
+ verify(mHourlyChartView).setVisibility(View.VISIBLE);
+ expectedDailyViewModel.setSelectedIndex(2);
+ verify(mDailyChartView).setViewModel(expectedDailyViewModel);
+ verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
+ List.of(59, 57, 55, 53, 51, 49, 47, 45, 43, 41),
+ List.of("12 am", "2 am", "4 am", "6 am", "8 am", "10 am", "12 pm", "2 pm",
+ "4 pm", "6 pm"),
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+ }
+
+ @Test
+ public void refreshUi_normalCase_returnTrue() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
+ assertThat(mBatteryChartPreferenceController.refreshUi()).isTrue();
+ }
+
+ @Test
+ public void refreshUi_batteryIndexedMapIsNull_ignoreRefresh() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(null);
+ assertThat(mBatteryChartPreferenceController.refreshUi()).isFalse();
+ }
+
+ @Test
+ public void refreshUi_dailyChartViewIsNull_ignoreRefresh() {
+ mBatteryChartPreferenceController.mDailyChartView = null;
+ assertThat(mBatteryChartPreferenceController.refreshUi()).isFalse();
+ }
+
+ @Test
+ public void refreshUi_hourlyChartViewIsNull_ignoreRefresh() {
+ mBatteryChartPreferenceController.mHourlyChartView = null;
+ assertThat(mBatteryChartPreferenceController.refreshUi()).isFalse();
+ }
+
+ @Test
+ public void removeAndCacheAllPrefs_emptyContent_ignoreRemoveAll() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
+ mBatteryChartPreferenceController.mBatteryUsageMap = createBatteryUsageMap();
+ doReturn(0).when(mAppListGroup).getPreferenceCount();
+
+ mBatteryChartPreferenceController.refreshUi();
+ verify(mAppListGroup, never()).removeAll();
+ }
+
+ @Test
+ public void removeAndCacheAllPrefs_buildCacheAndRemoveAllPreference() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
+ mBatteryChartPreferenceController.mBatteryUsageMap = createBatteryUsageMap();
+ doReturn(1).when(mAppListGroup).getPreferenceCount();
+ doReturn(mPowerGaugePreference).when(mAppListGroup).getPreference(0);
+ doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
+ doReturn(PREF_KEY).when(mPowerGaugePreference).getKey();
+ doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(PREF_KEY);
+ // Ensures the testing data is correct.
+ assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
+
+ mBatteryChartPreferenceController.refreshUi();
+
+ assertThat(mBatteryChartPreferenceController.mPreferenceCache.get(PREF_KEY))
+ .isEqualTo(mPowerGaugePreference);
+ verify(mAppListGroup).removeAll();
+ }
+
+ @Test
+ public void addPreferenceToScreen_emptyContent_ignoreAddPreference() {
+ mBatteryChartPreferenceController.addPreferenceToScreen(
+ new ArrayList<BatteryDiffEntry>());
+ verify(mAppListGroup, never()).addPreference(any());
+ }
+
+ @Test
+ public void addPreferenceToScreen_addPreferenceIntoScreen() {
+ final String appLabel = "fake app label";
+ doReturn(1).when(mAppListGroup).getPreferenceCount();
+ doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
+ doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel();
+ doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
+ doReturn(null).when(mAppListGroup).findPreference(PREF_KEY);
+ doReturn(false).when(mBatteryDiffEntry).validForRestriction();
+
+ mBatteryChartPreferenceController.addPreferenceToScreen(
+ Arrays.asList(mBatteryDiffEntry));
+
+ // Verifies the preference cache.
+ final PowerGaugePreference pref =
+ (PowerGaugePreference) mBatteryChartPreferenceController.mPreferenceCache
+ .get(PREF_KEY);
+ assertThat(pref).isNotNull();
+ // Verifies the added preference configuration.
+ verify(mAppListGroup).addPreference(pref);
+ assertThat(pref.getKey()).isEqualTo(PREF_KEY);
+ assertThat(pref.getTitle()).isEqualTo(appLabel);
+ assertThat(pref.getIcon()).isEqualTo(mDrawable);
+ assertThat(pref.getOrder()).isEqualTo(1);
+ assertThat(pref.getBatteryDiffEntry()).isSameInstanceAs(mBatteryDiffEntry);
+ assertThat(pref.isSingleLineTitle()).isTrue();
+ assertThat(pref.isEnabled()).isFalse();
+ }
+
+ @Test
+ public void addPreferenceToScreen_alreadyInScreen_notAddPreferenceAgain() {
+ final String appLabel = "fake app label";
+ doReturn(1).when(mAppListGroup).getPreferenceCount();
+ doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
+ doReturn(appLabel).when(mBatteryDiffEntry).getAppLabel();
+ doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
+ doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(PREF_KEY);
+
+ mBatteryChartPreferenceController.addPreferenceToScreen(
+ Arrays.asList(mBatteryDiffEntry));
+
+ verify(mAppListGroup, never()).addPreference(any());
+ }
+
+ @Test
+ public void handlePreferenceTreeClick_notPowerGaugePreference_returnFalse() {
+ assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(mAppListGroup))
+ .isFalse();
+
+ verify(mMetricsFeatureProvider, never())
+ .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM);
+ verify(mMetricsFeatureProvider, never())
+ .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM);
+ }
+
+ @Test
+ public void handlePreferenceTreeClick_forAppEntry_returnTrue() {
+ doReturn(false).when(mBatteryHistEntry).isAppEntry();
+ doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry();
+
+ assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
+ mPowerGaugePreference)).isTrue();
+ verify(mMetricsFeatureProvider)
+ .action(
+ SettingsEnums.OPEN_BATTERY_USAGE,
+ SettingsEnums.ACTION_BATTERY_USAGE_SYSTEM_ITEM,
+ SettingsEnums.OPEN_BATTERY_USAGE,
+ /* package name */ "none",
+ /* percentage of total */ 0);
+ }
+
+ @Test
+ public void handlePreferenceTreeClick_forSystemEntry_returnTrue() {
+ mBatteryChartPreferenceController.mBatteryUtils = mBatteryUtils;
+ doReturn(true).when(mBatteryHistEntry).isAppEntry();
+ doReturn(mBatteryDiffEntry).when(mPowerGaugePreference).getBatteryDiffEntry();
+
+ assertThat(mBatteryChartPreferenceController.handlePreferenceTreeClick(
+ mPowerGaugePreference)).isTrue();
+ verify(mMetricsFeatureProvider)
+ .action(
+ SettingsEnums.OPEN_BATTERY_USAGE,
+ SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM,
+ SettingsEnums.OPEN_BATTERY_USAGE,
+ /* package name */ "none",
+ /* percentage of total */ 0);
+ }
+
+ @Test
+ public void setPreferenceSummary_setNullContentIfTotalUsageTimeIsZero() {
+ final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+ pref.setSummary(PREF_SUMMARY);
+
+ mBatteryChartPreferenceController.setPreferenceSummary(
+ pref, createBatteryDiffEntry(
+ /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ 0));
+ assertThat(pref.getSummary()).isNull();
+ }
+
+ @Test
+ public void setPreferenceSummary_setBackgroundUsageTimeOnly() {
+ final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+ pref.setSummary(PREF_SUMMARY);
+
+ mBatteryChartPreferenceController.setPreferenceSummary(
+ pref, createBatteryDiffEntry(
+ /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS));
+ assertThat(pref.getSummary()).isEqualTo("Background: 1 min");
+ }
+
+ @Test
+ public void setPreferenceSummary_setTotalUsageTimeLessThanAMinute() {
+ final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+ pref.setSummary(PREF_SUMMARY);
+
+ mBatteryChartPreferenceController.setPreferenceSummary(
+ pref, createBatteryDiffEntry(
+ /*foregroundUsageTimeInMs=*/ 100,
+ /*backgroundUsageTimeInMs=*/ 200));
+ assertThat(pref.getSummary()).isEqualTo("Total: less than a min");
+ }
+
+ @Test
+ public void setPreferenceSummary_setTotalTimeIfBackgroundTimeLessThanAMinute() {
+ final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+ pref.setSummary(PREF_SUMMARY);
+
+ mBatteryChartPreferenceController.setPreferenceSummary(
+ pref, createBatteryDiffEntry(
+ /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
+ /*backgroundUsageTimeInMs=*/ 200));
+ assertThat(pref.getSummary())
+ .isEqualTo("Total: 1 min\nBackground: less than a min");
+ }
+
+ @Test
+ public void setPreferenceSummary_setTotalAndBackgroundUsageTime() {
+ final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+ pref.setSummary(PREF_SUMMARY);
+
+ mBatteryChartPreferenceController.setPreferenceSummary(
+ pref, createBatteryDiffEntry(
+ /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
+ /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS));
+ assertThat(pref.getSummary()).isEqualTo("Total: 2 min\nBackground: 1 min");
+ }
+
+ @Test
+ public void setPreferenceSummary_notAllowShownPackage_setSummayAsNull() {
+ final PowerGaugePreference pref = new PowerGaugePreference(mContext);
+ pref.setSummary(PREF_SUMMARY);
+ final BatteryDiffEntry batteryDiffEntry =
+ spy(createBatteryDiffEntry(
+ /*foregroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS,
+ /*backgroundUsageTimeInMs=*/ DateUtils.MINUTE_IN_MILLIS));
+ doReturn("com.android.googlequicksearchbox").when(batteryDiffEntry)
+ .getPackageName();
+
+ mBatteryChartPreferenceController.setPreferenceSummary(pref, batteryDiffEntry);
+ assertThat(pref.getSummary()).isNull();
+ }
+
+ @Test
+ public void onExpand_expandedIsTrue_addSystemEntriesToPreferenceGroup() {
+ doReturn(1).when(mAppListGroup).getPreferenceCount();
+ mBatteryChartPreferenceController.mBatteryUsageMap = createBatteryUsageMap();
+ doReturn("label").when(mBatteryDiffEntry).getAppLabel();
+ doReturn(mDrawable).when(mBatteryDiffEntry).getAppIcon();
+ doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
+
+ mBatteryChartPreferenceController.onExpand(/*isExpanded=*/ true);
+
+ final ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
+ verify(mAppListGroup).addPreference(captor.capture());
+ // Verifies the added preference.
+ assertThat(captor.getValue().getKey()).isEqualTo(PREF_KEY);
+ verify(mMetricsFeatureProvider)
+ .action(
+ mContext,
+ SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
+ true /*isExpanded*/);
+ }
+
+ @Test
+ public void onExpand_expandedIsFalse_removeSystemEntriesFromPreferenceGroup() {
+ doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();
+ doReturn(mPowerGaugePreference).when(mAppListGroup).findPreference(PREF_KEY);
+ mBatteryChartPreferenceController.mBatteryUsageMap = createBatteryUsageMap();
+ // Verifies the cache is empty first.
+ assertThat(mBatteryChartPreferenceController.mPreferenceCache).isEmpty();
+
+ mBatteryChartPreferenceController.onExpand(/*isExpanded=*/ false);
+
+ verify(mAppListGroup).findPreference(PREF_KEY);
+ verify(mAppListGroup).removePreference(mPowerGaugePreference);
+ assertThat(mBatteryChartPreferenceController.mPreferenceCache).hasSize(1);
+ verify(mMetricsFeatureProvider)
+ .action(
+ mContext,
+ SettingsEnums.ACTION_BATTERY_USAGE_EXPAND_ITEM,
+ false /*isExpanded*/);
+ }
+
+ @Test
+ public void refreshCategoryTitle_setLastFullChargeIntoBothTitleTextView() {
+ mBatteryChartPreferenceController = createController();
+ mBatteryChartPreferenceController.mAppListPrefGroup =
+ spy(new PreferenceCategory(mContext));
+ mBatteryChartPreferenceController.mExpandDividerPreference =
+ spy(new ExpandDividerPreference(mContext));
+ // Simulates select all condition.
+ mBatteryChartPreferenceController.mDailyChartIndex =
+ BatteryChartViewModel.SELECTED_INDEX_ALL;
+ mBatteryChartPreferenceController.mHourlyChartIndex =
+ BatteryChartViewModel.SELECTED_INDEX_ALL;
+
+ mBatteryChartPreferenceController.refreshCategoryTitle();
+
+ ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
+ // Verifies the title in the preference group.
+ verify(mBatteryChartPreferenceController.mAppListPrefGroup)
+ .setTitle(captor.capture());
+ assertThat(captor.getValue())
+ .isEqualTo("App usage since last full charge");
+ // Verifies the title in the expandable divider.
+ captor = ArgumentCaptor.forClass(String.class);
+ verify(mBatteryChartPreferenceController.mExpandDividerPreference)
+ .setTitle(captor.capture());
+ assertThat(captor.getValue())
+ .isEqualTo("System usage since last full charge");
+ }
+
+ @Test
+ public void selectedSlotText_selectAllDaysAllHours_returnNull() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
+ mBatteryChartPreferenceController.mDailyChartIndex =
+ BatteryChartViewModel.SELECTED_INDEX_ALL;
+ mBatteryChartPreferenceController.mHourlyChartIndex =
+ BatteryChartViewModel.SELECTED_INDEX_ALL;
+
+ assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(null);
+ }
+
+ @Test
+ public void selectedSlotText_onlyOneDayDataSelectAllHours_returnNull() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
+ mBatteryChartPreferenceController.mDailyChartIndex = 0;
+ mBatteryChartPreferenceController.mHourlyChartIndex =
+ BatteryChartViewModel.SELECTED_INDEX_ALL;
+
+ assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(null);
+ }
+
+ @Test
+ public void selectedSlotText_selectADayAllHours_onlyDayText() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
+ mBatteryChartPreferenceController.mDailyChartIndex = 1;
+ mBatteryChartPreferenceController.mHourlyChartIndex =
+ BatteryChartViewModel.SELECTED_INDEX_ALL;
+
+ assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo("Sunday");
+ }
+
+ @Test
+ public void selectedSlotText_onlyOneDayDataSelectAnHour_onlyHourText() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(6));
+ mBatteryChartPreferenceController.mDailyChartIndex = 0;
+ mBatteryChartPreferenceController.mHourlyChartIndex = 1;
+
+ assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
+ "10 am - 12 pm");
+ }
+
+ @Test
+ public void selectedSlotText_SelectADayAnHour_dayAndHourText() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
+ mBatteryChartPreferenceController.mDailyChartIndex = 1;
+ mBatteryChartPreferenceController.mHourlyChartIndex = 8;
+
+ assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
+ "Sunday 4 pm - 6 pm");
+ }
+
+ @Test
+ public void onSaveInstanceState_restoreSelectedIndexAndExpandState() {
+ final int expectedDailyIndex = 1;
+ final int expectedHourlyIndex = 2;
+ final boolean isExpanded = true;
+ final Bundle bundle = new Bundle();
+ mBatteryChartPreferenceController.mDailyChartIndex = expectedDailyIndex;
+ mBatteryChartPreferenceController.mHourlyChartIndex = expectedHourlyIndex;
+ mBatteryChartPreferenceController.mIsExpanded = isExpanded;
+ mBatteryChartPreferenceController.onSaveInstanceState(bundle);
+ // Replaces the original controller with other values.
+ mBatteryChartPreferenceController.mDailyChartIndex = -1;
+ mBatteryChartPreferenceController.mHourlyChartIndex = -1;
+ mBatteryChartPreferenceController.mIsExpanded = false;
+
+ mBatteryChartPreferenceController.onCreate(bundle);
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(25));
+
+ assertThat(mBatteryChartPreferenceController.mDailyChartIndex)
+ .isEqualTo(expectedDailyIndex);
+ assertThat(mBatteryChartPreferenceController.mHourlyChartIndex)
+ .isEqualTo(expectedHourlyIndex);
+ assertThat(mBatteryChartPreferenceController.mIsExpanded).isTrue();
+ }
+
+ @Test
+ public void isValidToShowSummary_returnExpectedResult() {
+ assertThat(mBatteryChartPreferenceController
+ .isValidToShowSummary("com.google.android.apps.scone"))
+ .isTrue();
+
+ // Verifies the item which is defined in the array list.
+ assertThat(mBatteryChartPreferenceController
+ .isValidToShowSummary("com.android.googlequicksearchbox"))
+ .isFalse();
+ }
+
+ private static Long generateTimestamp(int index) {
+ // "2021-04-23 07:00:00 UTC" + index hours
+ return 1619247600000L + index * DateUtils.HOUR_IN_MILLIS;
+ }
+
+ private static Map<Long, Map<String, BatteryHistEntry>> createBatteryHistoryMap(
+ int numOfHours) {
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
+ for (int index = 0; index < numOfHours; index++) {
+ final ContentValues values = new ContentValues();
+ values.put("batteryLevel", Integer.valueOf(100 - index));
+ values.put("consumePower", Integer.valueOf(100 - index));
+ final BatteryHistEntry entry = new BatteryHistEntry(values);
+ final Map<String, BatteryHistEntry> entryMap = new HashMap<>();
+ entryMap.put("fake_entry_key" + index, entry);
+ batteryHistoryMap.put(generateTimestamp(index), entryMap);
+ }
+ return batteryHistoryMap;
+ }
+
+ private Map<Integer, Map<Integer, BatteryDiffData>> createBatteryUsageMap() {
+ final int selectedAll = BatteryChartViewModel.SELECTED_INDEX_ALL;
+ return Map.of(
+ selectedAll, Map.of(
+ selectedAll, new BatteryDiffData(
+ Arrays.asList(mBatteryDiffEntry),
+ Arrays.asList(mBatteryDiffEntry))),
+ 0, Map.of(
+ selectedAll, new BatteryDiffData(
+ Arrays.asList(mBatteryDiffEntry),
+ Arrays.asList(mBatteryDiffEntry)),
+ 0, new BatteryDiffData(
+ Arrays.asList(mBatteryDiffEntry),
+ Arrays.asList(mBatteryDiffEntry))));
+ }
+
+ private BatteryDiffEntry createBatteryDiffEntry(
+ long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) {
+ return new BatteryDiffEntry(
+ mContext, foregroundUsageTimeInMs, backgroundUsageTimeInMs,
+ /*consumePower=*/ 0, mBatteryHistEntry);
+ }
+
+ private BatteryChartPreferenceController createController() {
+ final BatteryChartPreferenceController controller =
+ new BatteryChartPreferenceController(
+ mContext, "app_list", /*lifecycle=*/ null,
+ mSettingsActivity, mFragment);
+ controller.mPrefContext = mContext;
+ return controller;
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewTest.java
new file mode 100644
index 0000000..8a43087
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewTest.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.fuelgauge.batteryusage;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+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.accessibilityservice.AccessibilityServiceInfo;
+import android.content.Context;
+import android.os.LocaleList;
+import android.view.View;
+import android.view.accessibility.AccessibilityManager;
+
+import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+@RunWith(RobolectricTestRunner.class)
+public final class BatteryChartViewTest {
+
+ private Context mContext;
+ private BatteryChartView mBatteryChartView;
+ private FakeFeatureFactory mFeatureFactory;
+ private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
+
+ @Mock
+ private AccessibilityServiceInfo mMockAccessibilityServiceInfo;
+ @Mock
+ private AccessibilityManager mMockAccessibilityManager;
+ @Mock
+ private View mMockView;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
+ mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
+ mContext = spy(RuntimeEnvironment.application);
+ mContext.getResources().getConfiguration().setLocales(
+ new LocaleList(new Locale("en_US")));
+ mBatteryChartView = new BatteryChartView(mContext);
+ doReturn(mMockAccessibilityManager).when(mContext)
+ .getSystemService(AccessibilityManager.class);
+ doReturn("TalkBackService").when(mMockAccessibilityServiceInfo).getId();
+ doReturn(Arrays.asList(mMockAccessibilityServiceInfo))
+ .when(mMockAccessibilityManager)
+ .getEnabledAccessibilityServiceList(anyInt());
+ }
+
+ @Test
+ public void isAccessibilityEnabled_disable_returnFalse() {
+ doReturn(false).when(mMockAccessibilityManager).isEnabled();
+ assertThat(BatteryChartView.isAccessibilityEnabled(mContext)).isFalse();
+ }
+
+ @Test
+ public void isAccessibilityEnabled_emptyInfo_returnFalse() {
+ doReturn(true).when(mMockAccessibilityManager).isEnabled();
+ doReturn(new ArrayList<AccessibilityServiceInfo>())
+ .when(mMockAccessibilityManager)
+ .getEnabledAccessibilityServiceList(anyInt());
+
+ assertThat(BatteryChartView.isAccessibilityEnabled(mContext)).isFalse();
+ }
+
+ @Test
+ public void isAccessibilityEnabled_validServiceId_returnTrue() {
+ doReturn(true).when(mMockAccessibilityManager).isEnabled();
+ assertThat(BatteryChartView.isAccessibilityEnabled(mContext)).isTrue();
+ }
+
+ @Test
+ public void onClick_invokesCallback() {
+ final int originalSelectedIndex = 2;
+ BatteryChartViewModel batteryChartViewModel = new BatteryChartViewModel(
+ List.of(90, 80, 70, 60), List.of("", "", "", ""),
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS);
+ batteryChartViewModel.setSelectedIndex(originalSelectedIndex);
+ mBatteryChartView.setViewModel(batteryChartViewModel);
+ for (int i = 0; i < mBatteryChartView.mTrapezoidSlots.length; i++) {
+ mBatteryChartView.mTrapezoidSlots[i] = new BatteryChartView.TrapezoidSlot();
+ mBatteryChartView.mTrapezoidSlots[i].mLeft = i;
+ mBatteryChartView.mTrapezoidSlots[i].mRight = i + 0.5f;
+ }
+ final int[] selectedIndex = new int[1];
+ mBatteryChartView.setOnSelectListener(
+ trapezoidIndex -> {
+ selectedIndex[0] = trapezoidIndex;
+ });
+
+ // Verify onClick() a different index 1.
+ mBatteryChartView.mTouchUpEventX = 1;
+ selectedIndex[0] = Integer.MIN_VALUE;
+ mBatteryChartView.onClick(mMockView);
+ assertThat(selectedIndex[0]).isEqualTo(1);
+
+ // Verify onClick() the same index 2.
+ mBatteryChartView.mTouchUpEventX = 2;
+ selectedIndex[0] = Integer.MIN_VALUE;
+ mBatteryChartView.onClick(mMockView);
+ assertThat(selectedIndex[0]).isEqualTo(BatteryChartViewModel.SELECTED_INDEX_ALL);
+ }
+
+ @Test
+ public void clickable_isChartGraphSlotsEnabledIsFalse_notClickable() {
+ mBatteryChartView.setClickableForce(true);
+ when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
+ .thenReturn(false);
+
+ mBatteryChartView.onAttachedToWindow();
+
+ assertThat(mBatteryChartView.isClickable()).isFalse();
+ assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNotNull();
+ }
+
+ @Test
+ public void clickable_accessibilityIsDisabled_clickable() {
+ mBatteryChartView.setClickableForce(true);
+ when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
+ .thenReturn(true);
+ doReturn(false).when(mMockAccessibilityManager).isEnabled();
+
+ mBatteryChartView.onAttachedToWindow();
+
+ assertThat(mBatteryChartView.isClickable()).isTrue();
+ assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNull();
+ }
+
+ @Test
+ public void clickable_accessibilityIsEnabledWithoutValidId_clickable() {
+ mBatteryChartView.setClickableForce(true);
+ when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
+ .thenReturn(true);
+ doReturn(true).when(mMockAccessibilityManager).isEnabled();
+ doReturn(new ArrayList<AccessibilityServiceInfo>())
+ .when(mMockAccessibilityManager)
+ .getEnabledAccessibilityServiceList(anyInt());
+
+ mBatteryChartView.onAttachedToWindow();
+
+ assertThat(mBatteryChartView.isClickable()).isTrue();
+ assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNull();
+ }
+
+ @Test
+ public void clickable_accessibilityIsEnabledWithValidId_notClickable() {
+ mBatteryChartView.setClickableForce(true);
+ when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
+ .thenReturn(true);
+ doReturn(true).when(mMockAccessibilityManager).isEnabled();
+
+ mBatteryChartView.onAttachedToWindow();
+
+ assertThat(mBatteryChartView.isClickable()).isFalse();
+ assertThat(mBatteryChartView.mTrapezoidCurvePaint).isNotNull();
+ }
+
+ @Test
+ public void clickable_restoreFromNonClickableState() {
+ final List<Integer> levels = new ArrayList<Integer>();
+ final List<String> texts = new ArrayList<String>();
+ for (int index = 0; index < 13; index++) {
+ levels.add(index + 1);
+ texts.add("");
+ }
+ mBatteryChartView.setViewModel(new BatteryChartViewModel(levels, texts,
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+ mBatteryChartView.setClickableForce(true);
+ when(mPowerUsageFeatureProvider.isChartGraphSlotsEnabled(mContext))
+ .thenReturn(true);
+ doReturn(true).when(mMockAccessibilityManager).isEnabled();
+ mBatteryChartView.onAttachedToWindow();
+ // Ensures the testing environment is correct.
+ assertThat(mBatteryChartView.isClickable()).isFalse();
+ // Turns off accessibility service.
+ doReturn(false).when(mMockAccessibilityManager).isEnabled();
+
+ mBatteryChartView.onAttachedToWindow();
+
+ assertThat(mBatteryChartView.isClickable()).isTrue();
+ }
+
+ @Test
+ public void onAttachedToWindow_addAccessibilityStateChangeListener() {
+ mBatteryChartView.onAttachedToWindow();
+ verify(mMockAccessibilityManager)
+ .addAccessibilityStateChangeListener(mBatteryChartView);
+ }
+
+ @Test
+ public void onDetachedFromWindow_removeAccessibilityStateChangeListener() {
+ mBatteryChartView.onAttachedToWindow();
+ mBatteryChartView.mHandler.postDelayed(
+ mBatteryChartView.mUpdateClickableStateRun, 1000);
+
+ mBatteryChartView.onDetachedFromWindow();
+
+ verify(mMockAccessibilityManager)
+ .removeAccessibilityStateChangeListener(mBatteryChartView);
+ assertThat(mBatteryChartView.mHandler.hasCallbacks(
+ mBatteryChartView.mUpdateClickableStateRun))
+ .isFalse();
+ }
+
+ @Test
+ public void onAccessibilityStateChanged_postUpdateStateRunnable() {
+ mBatteryChartView.mHandler = spy(mBatteryChartView.mHandler);
+ mBatteryChartView.onAccessibilityStateChanged(/*enabled=*/ true);
+
+ verify(mBatteryChartView.mHandler)
+ .removeCallbacks(mBatteryChartView.mUpdateClickableStateRun);
+ verify(mBatteryChartView.mHandler)
+ .postDelayed(mBatteryChartView.mUpdateClickableStateRun, 500L);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java
similarity index 63%
rename from tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java
index 6ea1390..683f0fd 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryDiffEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.google.common.truth.Truth.assertThat;
@@ -35,6 +35,7 @@
import android.os.UserManager;
import com.android.settings.R;
+import com.android.settings.fuelgauge.BatteryUtils;
import org.junit.Before;
import org.junit.Test;
@@ -59,15 +60,24 @@
private Context mContext;
- @Mock private ApplicationInfo mockAppInfo;
- @Mock private PackageManager mockPackageManager;
- @Mock private UserManager mockUserManager;
- @Mock private Drawable mockDrawable;
- @Mock private Drawable mockDrawable2;
- @Mock private Drawable mockBadgedDrawable;
- @Mock private BatteryHistEntry mBatteryHistEntry;
- @Mock private PackageInfo mockPackageInfo;
- @Mock private ConstantState mockConstantState;
+ @Mock
+ private ApplicationInfo mMockAppInfo;
+ @Mock
+ private PackageManager mMockPackageManager;
+ @Mock
+ private UserManager mMockUserManager;
+ @Mock
+ private Drawable mMockDrawable;
+ @Mock
+ private Drawable mMockDrawable2;
+ @Mock
+ private Drawable mMockBadgedDrawable;
+ @Mock
+ private BatteryHistEntry mBatteryHistEntry;
+ @Mock
+ private PackageInfo mMockPackageInfo;
+ @Mock
+ private ConstantState mMockConstantState;
@Before
public void setUp() {
@@ -75,20 +85,20 @@
ShadowUserHandle.reset();
mContext = spy(RuntimeEnvironment.application);
doReturn(mContext).when(mContext).getApplicationContext();
- doReturn(mockUserManager).when(mContext).getSystemService(UserManager.class);
- doReturn(mockPackageManager).when(mContext).getPackageManager();
+ doReturn(mMockUserManager).when(mContext).getSystemService(UserManager.class);
+ doReturn(mMockPackageManager).when(mContext).getPackageManager();
BatteryDiffEntry.clearCache();
}
@Test
public void testSetTotalConsumePower_returnExpectedResult() {
final BatteryDiffEntry entry =
- new BatteryDiffEntry(
- mContext,
- /*foregroundUsageTimeInMs=*/ 10001L,
- /*backgroundUsageTimeInMs=*/ 20002L,
- /*consumePower=*/ 22.0,
- /*batteryHistEntry=*/ null);
+ new BatteryDiffEntry(
+ mContext,
+ /*foregroundUsageTimeInMs=*/ 10001L,
+ /*backgroundUsageTimeInMs=*/ 20002L,
+ /*consumePower=*/ 22.0,
+ /*batteryHistEntry=*/ null);
entry.setTotalConsumePower(100.0);
assertThat(entry.getPercentOfTotal()).isEqualTo(22.0);
@@ -97,12 +107,12 @@
@Test
public void testSetTotalConsumePower_setZeroValue_returnsZeroValue() {
final BatteryDiffEntry entry =
- new BatteryDiffEntry(
- mContext,
- /*foregroundUsageTimeInMs=*/ 10001L,
- /*backgroundUsageTimeInMs=*/ 20002L,
- /*consumePower=*/ 22.0,
- /*batteryHistEntry=*/ null);
+ new BatteryDiffEntry(
+ mContext,
+ /*foregroundUsageTimeInMs=*/ 10001L,
+ /*backgroundUsageTimeInMs=*/ 20002L,
+ /*consumePower=*/ 22.0,
+ /*batteryHistEntry=*/ null);
entry.setTotalConsumePower(0);
assertThat(entry.getPercentOfTotal()).isEqualTo(0);
@@ -127,9 +137,9 @@
final String expectedName = "Ambient display";
// Generates fake testing data.
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
- values.put("drainType",
- Integer.valueOf(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY));
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
+ values.put(BatteryHistEntry.KEY_DRAIN_TYPE,
+ Integer.valueOf(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY));
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);
@@ -139,7 +149,7 @@
assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
// Verifies the app label in the cache.
final BatteryEntry.NameAndIcon nameAndIcon =
- BatteryDiffEntry.sResourceCache.get(entry.getKey());
+ BatteryDiffEntry.sResourceCache.get(entry.getKey());
assertThat(nameAndIcon.mName).isEqualTo(expectedName);
assertThat(nameAndIcon.mIconId).isEqualTo(R.drawable.ic_settings_aod);
// Verifies the restrictable flag in the cache.
@@ -150,11 +160,11 @@
@Test
public void testLoadLabelAndIcon_forUserBattery_returnExpectedResult() {
final String expectedName = "Removed user";
- doReturn(null).when(mockUserManager).getUserInfo(1001);
+ doReturn(null).when(mMockUserManager).getUserInfo(1001);
// Generates fake testing data.
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
- values.put("userId", Integer.valueOf(1001));
+ ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
+ values.put(BatteryHistEntry.KEY_USER_ID, Integer.valueOf(1001));
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);
@@ -165,7 +175,7 @@
assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
// Verifies the app label in the cache.
final BatteryEntry.NameAndIcon nameAndIcon =
- BatteryDiffEntry.sResourceCache.get(entry.getKey());
+ BatteryDiffEntry.sResourceCache.get(entry.getKey());
assertThat(nameAndIcon.mName).isEqualTo(expectedName);
assertThat(nameAndIcon.mIconId).isEqualTo(0);
// Verifies the restrictable flag in the cache.
@@ -178,13 +188,13 @@
final String expectedAppLabel = "fake app label";
final String fakePackageName = "com.fake.google.com";
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
- values.put("uid", /*invalid uid*/ 10001);
- values.put("packageName", fakePackageName);
- doReturn(mockAppInfo).when(mockPackageManager)
- .getApplicationInfo(fakePackageName, 0);
- doReturn(expectedAppLabel).when(mockPackageManager)
- .getApplicationLabel(mockAppInfo);
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ values.put(BatteryHistEntry.KEY_UID, /*invalid uid*/ 10001);
+ values.put(BatteryHistEntry.KEY_PACKAGE_NAME, fakePackageName);
+ doReturn(mMockAppInfo).when(mMockPackageManager)
+ .getApplicationInfo(fakePackageName, 0);
+ doReturn(expectedAppLabel).when(mMockPackageManager)
+ .getApplicationLabel(mMockAppInfo);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);
@@ -194,7 +204,7 @@
assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
// Verifies the app label in the cache.
final BatteryEntry.NameAndIcon nameAndIcon =
- BatteryDiffEntry.sResourceCache.get(entry.getKey());
+ BatteryDiffEntry.sResourceCache.get(entry.getKey());
assertThat(nameAndIcon.mName).isEqualTo(expectedAppLabel);
// Verifies the restrictable flag in the cache.
assertThat(entry.mValidForRestriction).isFalse();
@@ -205,7 +215,7 @@
public void testGetAppLabel_loadDataFromPreDefinedNameAndUid() {
final String expectedAppLabel = "Android OS";
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);
@@ -214,7 +224,7 @@
assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
// Verifies the app label in the cache.
final BatteryEntry.NameAndIcon nameAndIcon =
- BatteryDiffEntry.sResourceCache.get(entry.getKey());
+ BatteryDiffEntry.sResourceCache.get(entry.getKey());
assertThat(nameAndIcon.mName).isEqualTo(expectedAppLabel);
}
@@ -222,8 +232,8 @@
public void testGetAppLabel_nullAppLabel_returnAppLabelInBatteryHistEntry() {
final String expectedAppLabel = "fake app label";
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
- values.put("appLabel", expectedAppLabel);
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ values.put(BatteryHistEntry.KEY_APP_LABEL, expectedAppLabel);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);
@@ -236,15 +246,15 @@
@Test
public void testGetAppIcon_nonUidConsumer_returnAppIconInBatteryDiffEntry() {
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
- mockConstantState(mockDrawable);
+ mockConstantState(mMockDrawable);
final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);
entry.mIsLoaded = true;
- entry.mAppIcon = mockDrawable;
- assertThat(entry.getAppIcon()).isEqualTo(mockDrawable);
+ entry.mAppIcon = mMockDrawable;
+ assertThat(entry.getAppIcon()).isEqualTo(mMockDrawable);
assertThat(BatteryDiffEntry.sResourceCache).isEmpty();
}
@@ -252,38 +262,38 @@
public void testGetAppIcon_uidConsumerForNonOwner_returnDefaultActivityIconWithBadge()
throws Exception {
ShadowUserHandle.setUid(10);
- final BatteryDiffEntry entry = createBatteryDiffEntry(mockDrawable);
- mockConstantState(mockDrawable);
- mockConstantState(mockBadgedDrawable);
- doReturn(mockBadgedDrawable).when(mockUserManager)
- .getBadgedIconForUser(eq(mockDrawable), any());
+ final BatteryDiffEntry entry = createBatteryDiffEntry(mMockDrawable);
+ mockConstantState(mMockDrawable);
+ mockConstantState(mMockBadgedDrawable);
+ doReturn(mMockBadgedDrawable).when(mMockUserManager)
+ .getBadgedIconForUser(eq(mMockDrawable), any());
entry.mAppIcon = null;
- assertThat(entry.getAppIcon()).isEqualTo(mockBadgedDrawable);
+ assertThat(entry.getAppIcon()).isEqualTo(mMockBadgedDrawable);
}
@Test
public void testGetAppIcon_uidConsumerWithNullIcon_returnDefaultActivityIcon()
throws Exception {
- final BatteryDiffEntry entry = createBatteryDiffEntry(mockDrawable);
- mockConstantState(mockDrawable);
+ final BatteryDiffEntry entry = createBatteryDiffEntry(mMockDrawable);
+ mockConstantState(mMockDrawable);
entry.mAppIcon = null;
- assertThat(entry.getAppIcon()).isEqualTo(mockDrawable);
+ assertThat(entry.getAppIcon()).isEqualTo(mMockDrawable);
assertThat(BatteryDiffEntry.sResourceCache).hasSize(1);
// Verifies the app label in the cache.
final BatteryEntry.NameAndIcon nameAndIcon =
- BatteryDiffEntry.sResourceCache.get(entry.getKey());
- assertThat(nameAndIcon.mIcon).isEqualTo(mockDrawable);
+ BatteryDiffEntry.sResourceCache.get(entry.getKey());
+ assertThat(nameAndIcon.mIcon).isEqualTo(mMockDrawable);
}
@Test
public void testClearCache_clearDataForResourcesAndFlags() {
BatteryDiffEntry.sResourceCache.put(
- "fake application key",
- new BatteryEntry.NameAndIcon("app label", null, /*iconId=*/ 0));
+ "fake application key",
+ new BatteryEntry.NameAndIcon("app label", null, /*iconId=*/ 0));
BatteryDiffEntry.sValidForRestriction.put(
- "fake application key", Boolean.valueOf(false));
+ "fake application key", Boolean.valueOf(false));
BatteryDiffEntry.clearCache();
@@ -295,83 +305,83 @@
public void testClearCache_switchLocale_clearCacheIconAndLabel() throws Exception {
final int userId = UserHandle.getUserId(1001);
Locale.setDefault(new Locale("en_US"));
- final BatteryDiffEntry entry1 = createBatteryDiffEntry(mockDrawable);
- mockConstantState(mockDrawable);
- assertThat(entry1.getAppIcon()).isEqualTo(mockDrawable);
+ final BatteryDiffEntry entry1 = createBatteryDiffEntry(mMockDrawable);
+ mockConstantState(mMockDrawable);
+ assertThat(entry1.getAppIcon()).isEqualTo(mMockDrawable);
// Switch the locale into another one.
Locale.setDefault(new Locale("zh_TW"));
- final BatteryDiffEntry entry2 = createBatteryDiffEntry(mockDrawable2);
+ final BatteryDiffEntry entry2 = createBatteryDiffEntry(mMockDrawable2);
// We should get new drawable without caching.
- mockConstantState(mockDrawable2);
- assertThat(entry2.getAppIcon()).isEqualTo(mockDrawable2);
+ mockConstantState(mMockDrawable2);
+ assertThat(entry2.getAppIcon()).isEqualTo(mMockDrawable2);
// Verifies the cache is updated into the new drawable.
final BatteryEntry.NameAndIcon nameAndIcon =
- BatteryDiffEntry.sResourceCache.get(entry2.getKey());
- assertThat(nameAndIcon.mIcon).isEqualTo(mockDrawable2);
+ BatteryDiffEntry.sResourceCache.get(entry2.getKey());
+ assertThat(nameAndIcon.mIcon).isEqualTo(mMockDrawable2);
}
@Test
public void testIsSystemEntry_userBattery_returnTrue() {
final BatteryDiffEntry entry =
- createBatteryDiffEntry(
- ConvertUtils.CONSUMER_TYPE_USER_BATTERY,
- /*uid=*/ 0, /*isHidden=*/ false);
+ createBatteryDiffEntry(
+ ConvertUtils.CONSUMER_TYPE_USER_BATTERY,
+ /*uid=*/ 0, /*isHidden=*/ false);
assertThat(entry.isSystemEntry()).isTrue();
}
@Test
public void testIsSystemEntry_systemBattery_returnTrue() {
final BatteryDiffEntry entry =
- createBatteryDiffEntry(
- ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY,
- /*uid=*/ 0, /*isHidden=*/ false);
+ createBatteryDiffEntry(
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY,
+ /*uid=*/ 0, /*isHidden=*/ false);
assertThat(entry.isSystemEntry()).isTrue();
}
@Test
public void testIsSystemEntry_uidBattery_returnFalse() {
final BatteryDiffEntry entry =
- createBatteryDiffEntry(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
- /*uid=*/ 123, /*isHidden=*/ false);
+ createBatteryDiffEntry(
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*uid=*/ 123, /*isHidden=*/ false);
assertThat(entry.isSystemEntry()).isFalse();
}
@Test
public void testIsSystemEntry_uidBatteryWithHiddenState_returnTrue() {
final BatteryDiffEntry entry =
- createBatteryDiffEntry(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
- /*uid=*/ 123, /*isHidden=*/ true);
+ createBatteryDiffEntry(
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*uid=*/ 123, /*isHidden=*/ true);
assertThat(entry.isSystemEntry()).isTrue();
}
@Test
public void testIsSystemEntry_uidBatteryWithSystemProcess_returnFalse() {
final BatteryDiffEntry entry =
- createBatteryDiffEntry(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
- /*uid=*/ 1230, /*isHidden=*/ false);
+ createBatteryDiffEntry(
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*uid=*/ 1230, /*isHidden=*/ false);
assertThat(entry.isSystemEntry()).isFalse();
}
@Test
public void testIsSystemEntry_uidBatteryWithTetheringProcess_returnTrue() {
final BatteryDiffEntry entry =
- createBatteryDiffEntry(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
- /*uid=*/ BatteryUtils.UID_TETHERING, /*isHidden=*/ false);
+ createBatteryDiffEntry(
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*uid=*/ BatteryUtils.UID_TETHERING, /*isHidden=*/ false);
assertThat(entry.isSystemEntry()).isTrue();
}
@Test
public void testIsSystemEntry_uidBatteryWithRemovedAppsProcess_returnTrue() {
final BatteryDiffEntry entry =
- createBatteryDiffEntry(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
- /*uid=*/ BatteryUtils.UID_REMOVED_APPS, /*isHidden=*/ false);
+ createBatteryDiffEntry(
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*uid=*/ BatteryUtils.UID_REMOVED_APPS, /*isHidden=*/ false);
assertThat(entry.isSystemEntry()).isTrue();
}
@@ -380,30 +390,30 @@
final String expectedAppLabel = "fake app label";
final String fakePackageName = "com.fake.google.com";
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
- values.put("uid", /*invalid uid*/ 10001);
- values.put("packageName", fakePackageName);
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ values.put(BatteryHistEntry.KEY_UID, /*invalid uid*/ 10001);
+ values.put(BatteryHistEntry.KEY_PACKAGE_NAME, fakePackageName);
final BatteryDiffEntry entry =
- createBatteryDiffEntry(10, new BatteryHistEntry(values));
+ createBatteryDiffEntry(10, new BatteryHistEntry(values));
entry.updateRestrictionFlagState();
// Sets false if the app entry cannot be found.
assertThat(entry.mValidForRestriction).isFalse();
- doReturn(BatteryUtils.UID_NULL).when(mockPackageManager).getPackageUid(
- entry.getPackageName(), PackageManager.GET_META_DATA);
+ doReturn(BatteryUtils.UID_NULL).when(mMockPackageManager).getPackageUid(
+ entry.getPackageName(), PackageManager.GET_META_DATA);
entry.updateRestrictionFlagState();
// Sets false if the app is invalid package name.
assertThat(entry.mValidForRestriction).isFalse();
- doReturn(1000).when(mockPackageManager).getPackageUid(
- entry.getPackageName(), PackageManager.GET_META_DATA);
+ doReturn(1000).when(mMockPackageManager).getPackageUid(
+ entry.getPackageName(), PackageManager.GET_META_DATA);
entry.updateRestrictionFlagState();
// Sets false if the app PackageInfo cannot be found.
assertThat(entry.mValidForRestriction).isFalse();
- doReturn(mockPackageInfo).when(mockPackageManager).getPackageInfo(
- eq(entry.getPackageName()), anyInt());
+ doReturn(mMockPackageInfo).when(mMockPackageManager).getPackageInfo(
+ eq(entry.getPackageName()), anyInt());
entry.updateRestrictionFlagState();
// Sets true if package is valid and PackageInfo can be found.
assertThat(entry.mValidForRestriction).isTrue();
@@ -413,10 +423,10 @@
public void testGetPackageName_returnExpectedResult() {
final String expectedPackageName = "com.fake.google.com";
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
- values.put("packageName", expectedPackageName);
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ values.put(BatteryHistEntry.KEY_PACKAGE_NAME, expectedPackageName);
final BatteryDiffEntry entry =
- createBatteryDiffEntry(10, new BatteryHistEntry(values));
+ createBatteryDiffEntry(10, new BatteryHistEntry(values));
assertThat(entry.getPackageName()).isEqualTo(expectedPackageName);
}
@@ -425,63 +435,76 @@
public void testGetPackageName_withProcessName_returnExpectedResult() {
final String expectedPackageName = "com.fake.google.com";
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
values.put(
- "packageName",
- expectedPackageName + ":privileged_process0");
+ BatteryHistEntry.KEY_PACKAGE_NAME,
+ expectedPackageName + ":privileged_process0");
final BatteryDiffEntry entry =
- createBatteryDiffEntry(10, new BatteryHistEntry(values));
+ createBatteryDiffEntry(10, new BatteryHistEntry(values));
assertThat(entry.getPackageName()).isEqualTo(expectedPackageName);
}
+ @Test
+ public void getAppLabel_withOtherUsersUid_returnExpectedLabel() {
+ final ContentValues values = getContentValuesWithType(
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ values.put(BatteryHistEntry.KEY_UID, BatteryUtils.UID_OTHER_USERS);
+
+ final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry(
+ /*consumePower=*/ 0, new BatteryHistEntry(values));
+
+ assertThat(batteryDiffEntry.getAppLabel())
+ .isEqualTo(mContext.getString(R.string.battery_usage_other_users));
+ }
+
private BatteryDiffEntry createBatteryDiffEntry(
int consumerType, long uid, boolean isHidden) {
final ContentValues values = getContentValuesWithType(consumerType);
- values.put("isHidden", isHidden);
- values.put("uid", uid);
+ values.put(BatteryHistEntry.KEY_IS_HIDDEN, isHidden);
+ values.put(BatteryHistEntry.KEY_UID, uid);
return new BatteryDiffEntry(
- mContext,
- /*foregroundUsageTimeInMs=*/ 0,
- /*backgroundUsageTimeInMs=*/ 0,
- /*consumePower=*/ 0,
- new BatteryHistEntry(values));
+ mContext,
+ /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ 0,
+ /*consumePower=*/ 0,
+ new BatteryHistEntry(values));
}
private BatteryDiffEntry createBatteryDiffEntry(
- double consumePower, BatteryHistEntry batteryHistEntry) {
+ double consumePower, BatteryHistEntry batteryHistEntry) {
final BatteryDiffEntry entry = new BatteryDiffEntry(
- mContext,
- /*foregroundUsageTimeInMs=*/ 0,
- /*backgroundUsageTimeInMs=*/ 0,
- consumePower,
- batteryHistEntry);
+ mContext,
+ /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ 0,
+ consumePower,
+ batteryHistEntry);
entry.setTotalConsumePower(100.0);
return entry;
}
private static ContentValues getContentValuesWithType(int consumerType) {
final ContentValues values = new ContentValues();
- values.put("consumerType", Integer.valueOf(consumerType));
+ values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, Integer.valueOf(consumerType));
return values;
}
private BatteryDiffEntry createBatteryDiffEntry(Drawable drawable) throws Exception {
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
- values.put("uid", 1001);
- values.put("packageName", "com.a.b.c");
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ values.put(BatteryHistEntry.KEY_UID, 1001);
+ values.put(BatteryHistEntry.KEY_PACKAGE_NAME, "com.a.b.c");
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
- doReturn(drawable).when(mockPackageManager).getDefaultActivityIcon();
- doReturn(null).when(mockPackageManager).getApplicationInfo("com.a.b.c", 0);
- doReturn(new String[] {"com.a.b.c"}).when(mockPackageManager)
- .getPackagesForUid(1001);
+ doReturn(drawable).when(mMockPackageManager).getDefaultActivityIcon();
+ doReturn(null).when(mMockPackageManager).getApplicationInfo("com.a.b.c", 0);
+ doReturn(new String[]{"com.a.b.c"}).when(mMockPackageManager)
+ .getPackagesForUid(1001);
return createBatteryDiffEntry(10, batteryHistEntry);
}
private void mockConstantState(Drawable drawable) {
- doReturn(mockConstantState).when(drawable).getConstantState();
- doReturn(drawable).when(mockConstantState).newDrawable();
+ doReturn(mMockConstantState).when(drawable).getConstantState();
+ doReturn(drawable).when(mMockConstantState).newDrawable();
}
@Implements(UserHandle.class)
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java
similarity index 88%
rename from tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java
index 707a658..5ca3aca 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryEntryTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.google.common.truth.Truth.assertThat;
@@ -37,7 +37,8 @@
import android.os.UserManager;
import com.android.settings.R;
-import com.android.settings.fuelgauge.BatteryEntry.NameAndIcon;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.batteryusage.BatteryEntry.NameAndIcon;
import org.junit.Before;
import org.junit.Rule;
@@ -62,31 +63,36 @@
private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen";
private static final String ANDROID_PACKAGE = "android";
- @Rule public MockitoRule mocks = MockitoJUnit.rule();
+ @Rule
+ public MockitoRule mocks = MockitoJUnit.rule();
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Context mMockContext;
private Context mContext;
- @Mock private Handler mockHandler;
- @Mock private PackageManager mockPackageManager;
- @Mock private UserManager mockUserManager;
- @Mock private UidBatteryConsumer mUidBatteryConsumer;
+ @Mock
+ private Handler mMockHandler;
+ @Mock
+ private PackageManager mMockPackageManager;
+ @Mock
+ private UserManager mMockUserManager;
+ @Mock
+ private UidBatteryConsumer mUidBatteryConsumer;
@Before
public void stubContextToReturnMockPackageManager() {
mContext = spy(RuntimeEnvironment.application);
- when(mMockContext.getPackageManager()).thenReturn(mockPackageManager);
+ when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);
}
@Before
public void stubPackageManagerToReturnAppPackageAndName() throws NameNotFoundException {
- when(mockPackageManager.getApplicationInfo(anyString(), eq(0) /* no flags */))
+ when(mMockPackageManager.getApplicationInfo(anyString(), eq(0) /* no flags */))
.thenAnswer(invocation -> {
ApplicationInfo info = new ApplicationInfo();
info.packageName = invocation.getArgument(0);
return info;
});
- when(mockPackageManager.getApplicationLabel(any(ApplicationInfo.class)))
+ when(mMockPackageManager.getApplicationLabel(any(ApplicationInfo.class)))
.thenAnswer(invocation -> LABEL_PREFIX
+ ((ApplicationInfo) invocation.getArgument(0)).packageName);
}
@@ -96,7 +102,7 @@
UidBatteryConsumer consumer = mock(UidBatteryConsumer.class);
when(consumer.getUid()).thenReturn(APP_UID);
when(consumer.getPackageWithHighestDrain()).thenReturn(highDrainPackage);
- return new BatteryEntry(mMockContext, mockHandler, mockUserManager,
+ return new BatteryEntry(mMockContext, mMockHandler, mMockUserManager,
consumer, false, APP_UID, packages, packageName);
}
@@ -111,7 +117,7 @@
private BatteryEntry createUserBatteryConsumer(int userId) {
UserBatteryConsumer consumer = mock(UserBatteryConsumer.class);
when(consumer.getUserId()).thenReturn(userId);
- return new BatteryEntry(mMockContext, mockHandler, mockUserManager,
+ return new BatteryEntry(mMockContext, mMockHandler, mMockUserManager,
consumer, false, 0, null, null);
}
@@ -127,7 +133,7 @@
@Test
public void batteryEntryForApp_shouldSetLabelAsPackageName_whenPackageCannotBeFound()
throws Exception {
- when(mockPackageManager.getApplicationInfo(APP_DEFAULT_PACKAGE_NAME, 0 /* no flags */))
+ when(mMockPackageManager.getApplicationInfo(APP_DEFAULT_PACKAGE_NAME, 0 /* no flags */))
.thenThrow(new NameNotFoundException());
BatteryEntry entry = createBatteryEntryForApp(null, APP_DEFAULT_PACKAGE_NAME, null);
@@ -137,7 +143,7 @@
@Test
public void batteryEntryForApp_shouldSetHighestDrainPackage_whenPackagesCannotBeFoundForUid() {
- when(mockPackageManager.getPackagesForUid(APP_UID)).thenReturn(null);
+ when(mMockPackageManager.getPackagesForUid(APP_UID)).thenReturn(null);
BatteryEntry entry = createBatteryEntryForApp(null, null, HIGH_DRAIN_PACKAGE);
@@ -147,7 +153,7 @@
@Test
public void batteryEntryForApp_shouldSetHighestDrainPackage_whenMultiplePackagesFoundForUid() {
BatteryEntry entry = createBatteryEntryForApp(
- new String[] {APP_DEFAULT_PACKAGE_NAME, "package2", "package3"}, null,
+ new String[]{APP_DEFAULT_PACKAGE_NAME, "package2", "package3"}, null,
HIGH_DRAIN_PACKAGE);
assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + HIGH_DRAIN_PACKAGE);
@@ -176,8 +182,8 @@
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND))
.thenReturn(100L);
- final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, mockHandler,
- mockUserManager, mUidBatteryConsumer, false, 0, null, null);
+ final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, mMockHandler,
+ mMockUserManager, mUidBatteryConsumer, false, 0, null, null);
assertThat(entry.getTimeInForegroundMs()).isEqualTo(100L);
}
@@ -195,8 +201,8 @@
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
.thenReturn(100L);
- final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, mockHandler,
- mockUserManager, mUidBatteryConsumer, false, 0, null, null);
+ final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, mMockHandler,
+ mMockUserManager, mUidBatteryConsumer, false, 0, null, null);
assertThat(entry.getTimeInBackgroundMs()).isEqualTo(100L);
}
@@ -247,7 +253,7 @@
@Test
public void getKey_UserBatteryConsumer_returnUserId() {
- doReturn(mockUserManager).when(mMockContext).getSystemService(UserManager.class);
+ doReturn(mMockUserManager).when(mMockContext).getSystemService(UserManager.class);
final BatteryEntry entry = createUserBatteryConsumer(2);
final String key = entry.getKey();
assertThat(key).isEqualTo("U|2");
@@ -256,8 +262,8 @@
@Test
public void getNameAndIconFromUserId_nullUserInfo_returnDefaultNameAndIcon() {
final int userId = 1001;
- doReturn(mockUserManager).when(mContext).getSystemService(UserManager.class);
- doReturn(null).when(mockUserManager).getUserInfo(userId);
+ doReturn(mMockUserManager).when(mContext).getSystemService(UserManager.class);
+ doReturn(null).when(mMockUserManager).getUserInfo(userId);
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUserId(
mContext, userId);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryHistEntryTest.java
similarity index 65%
rename from tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryHistEntryTest.java
index 3acb8f3..553c089 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryHistEntryTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.google.common.truth.Truth.assertThat;
@@ -38,7 +38,7 @@
public final class BatteryHistEntryTest {
@Mock
- private BatteryEntry mockBatteryEntry;
+ private BatteryEntry mMockBatteryEntry;
@Mock
private BatteryUsageStats mBatteryUsageStats;
@@ -50,33 +50,33 @@
@Test
public void testConstructor_contentValues_returnsExpectedResult() {
final int expectedType = 3;
- when(mockBatteryEntry.getUid()).thenReturn(1001);
- when(mockBatteryEntry.getLabel()).thenReturn("Settings");
- when(mockBatteryEntry.getDefaultPackageName())
- .thenReturn("com.google.android.settings.battery");
- when(mockBatteryEntry.isHidden()).thenReturn(true);
+ when(mMockBatteryEntry.getUid()).thenReturn(1001);
+ when(mMockBatteryEntry.getLabel()).thenReturn("Settings");
+ when(mMockBatteryEntry.getDefaultPackageName())
+ .thenReturn("com.google.android.settings.battery");
+ when(mMockBatteryEntry.isHidden()).thenReturn(true);
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
- when(mockBatteryEntry.getConsumedPower()).thenReturn(1.1);
- mockBatteryEntry.mPercent = 0.3;
- when(mockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
- when(mockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
- when(mockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
- when(mockBatteryEntry.getConsumerType())
- .thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
+ when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
+ mMockBatteryEntry.mPercent = 0.3;
+ when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
+ when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
+ when(mMockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
+ when(mMockBatteryEntry.getConsumerType())
+ .thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
final ContentValues values =
- ConvertUtils.convert(
- mockBatteryEntry,
- mBatteryUsageStats,
- /*batteryLevel=*/ 12,
- /*batteryStatus=*/ BatteryManager.BATTERY_STATUS_FULL,
- /*batteryHealth=*/ BatteryManager.BATTERY_HEALTH_COLD,
- /*bootTimestamp=*/ 101L,
- /*timestamp=*/ 10001L);
+ ConvertUtils.convert(
+ mMockBatteryEntry,
+ mBatteryUsageStats,
+ /*batteryLevel=*/ 12,
+ /*batteryStatus=*/ BatteryManager.BATTERY_STATUS_FULL,
+ /*batteryHealth=*/ BatteryManager.BATTERY_HEALTH_COLD,
+ /*bootTimestamp=*/ 101L,
+ /*timestamp=*/ 10001L);
assertBatteryHistEntry(
- new BatteryHistEntry(values),
- /*drainType=*/ expectedType,
- /*percentOfTotal=*/ mockBatteryEntry.mPercent);
+ new BatteryHistEntry(values),
+ /*drainType=*/ expectedType,
+ /*percentOfTotal=*/ mMockBatteryEntry.mPercent);
}
@Test
@@ -88,22 +88,22 @@
@Test
public void testConstructor_cursor_returnsExpectedResult() {
assertBatteryHistEntry(
- createBatteryHistEntry(
- /*bootTimestamp=*/ 101L,
- /*timestamp=*/ 10001L,
- /*totalPower=*/ 5.1,
- /*consumePower=*/ 1.1,
- /*foregroundUsageTimeInMs=*/ 1234L,
- /*backgroundUsageTimeInMs=*/ 5689L,
- /*batteryLevel=*/ 12),
- /*drainType=*/ 3,
- /*percentOfTotal=*/ 0.3);
+ createBatteryHistEntry(
+ /*bootTimestamp=*/ 101L,
+ /*timestamp=*/ 10001L,
+ /*totalPower=*/ 5.1,
+ /*consumePower=*/ 1.1,
+ /*foregroundUsageTimeInMs=*/ 1234L,
+ /*backgroundUsageTimeInMs=*/ 5689L,
+ /*batteryLevel=*/ 12),
+ /*drainType=*/ 3,
+ /*percentOfTotal=*/ 0.3);
}
@Test
public void testGetKey_consumerUidType_returnExpectedString() {
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
values.put(BatteryHistEntry.KEY_UID, 3);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
@@ -113,7 +113,7 @@
@Test
public void testGetKey_consumerUserType_returnExpectedString() {
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
+ ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
values.put(BatteryHistEntry.KEY_USER_ID, 2);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
@@ -123,7 +123,7 @@
@Test
public void testGetKey_consumerSystemType_returnExpectedString() {
final ContentValues values = getContentValuesWithType(
- ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
values.put(BatteryHistEntry.KEY_DRAIN_TYPE, 1);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
@@ -133,31 +133,31 @@
@Test
public void testIsAppEntry_returnExpectedResult() {
assertThat(createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).isAppEntry())
- .isFalse();
+ .isFalse();
assertThat(createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).isAppEntry())
- .isFalse();
+ .isFalse();
assertThat(createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).isAppEntry())
- .isTrue();
+ .isTrue();
}
@Test
public void testIsUserEntry_returnExpectedResult() {
assertThat(createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).isUserEntry())
- .isFalse();
+ .isFalse();
assertThat(createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).isUserEntry())
- .isTrue();
+ .isTrue();
assertThat(createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).isUserEntry())
- .isFalse();
+ .isFalse();
}
@Test
public void testIsSystemEntry_returnExpectedResult() {
assertThat(createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).isSystemEntry())
- .isTrue();
+ .isTrue();
assertThat(createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).isSystemEntry())
- .isFalse();
+ .isFalse();
assertThat(createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).isSystemEntry())
- .isFalse();
+ .isFalse();
}
@Test
@@ -167,39 +167,39 @@
final long lowerTimestamp = 100L;
final double ratio = 0.5;
final BatteryHistEntry lowerHistEntry = createBatteryHistEntry(
- /*bootTimestamp=*/ 1000L,
- lowerTimestamp,
- /*totalPower=*/ 50,
- /*consumePower=*/ 10,
- /*foregroundUsageTimeInMs=*/ 100,
- /*backgroundUsageTimeInMs=*/ 200,
- /*batteryLevel=*/ 90);
+ /*bootTimestamp=*/ 1000L,
+ lowerTimestamp,
+ /*totalPower=*/ 50,
+ /*consumePower=*/ 10,
+ /*foregroundUsageTimeInMs=*/ 100,
+ /*backgroundUsageTimeInMs=*/ 200,
+ /*batteryLevel=*/ 90);
final BatteryHistEntry upperHistEntry = createBatteryHistEntry(
- /*bootTimestamp=*/ 1200L,
- upperTimestamp,
- /*totalPower=*/ 80,
- /*consumePower=*/ 20,
- /*foregroundUsageTimeInMs=*/ 200,
- /*backgroundUsageTimeInMs=*/ 300,
- /*batteryLevel=*/ 80);
+ /*bootTimestamp=*/ 1200L,
+ upperTimestamp,
+ /*totalPower=*/ 80,
+ /*consumePower=*/ 20,
+ /*foregroundUsageTimeInMs=*/ 200,
+ /*backgroundUsageTimeInMs=*/ 300,
+ /*batteryLevel=*/ 80);
final BatteryHistEntry newEntry =
- BatteryHistEntry.interpolate(
- slotTimestamp,
- upperTimestamp,
- ratio,
- lowerHistEntry,
- upperHistEntry);
+ BatteryHistEntry.interpolate(
+ slotTimestamp,
+ upperTimestamp,
+ ratio,
+ lowerHistEntry,
+ upperHistEntry);
assertBatteryHistEntry(
- newEntry, 3, upperHistEntry.mPercentOfTotal,
- /*bootTimestamp=*/ 1200 - 100,
- /*timestamp=*/ slotTimestamp,
- /*totalPower=*/ 50 + 0.5 * (80 - 50),
- /*consumePower=*/ 10 + 0.5 * (20 - 10),
- /*foregroundUsageTimeInMs=*/ Math.round(100 + 0.5 * (200 - 100)),
- /*backgroundUsageTimeInMs=*/ Math.round(200 + 0.5 * (300 - 200)),
- /*batteryLevel=*/ (int) Math.round(90 + 0.5 * (80 - 90)));
+ newEntry, 3, upperHistEntry.mPercentOfTotal,
+ /*bootTimestamp=*/ 1200 - 100,
+ /*timestamp=*/ slotTimestamp,
+ /*totalPower=*/ 50 + 0.5 * (80 - 50),
+ /*consumePower=*/ 10 + 0.5 * (20 - 10),
+ /*foregroundUsageTimeInMs=*/ Math.round(100 + 0.5 * (200 - 100)),
+ /*backgroundUsageTimeInMs=*/ Math.round(200 + 0.5 * (300 - 200)),
+ /*batteryLevel=*/ (int) Math.round(90 + 0.5 * (80 - 90)));
}
@Test
@@ -209,31 +209,31 @@
final long lowerTimestamp = 100L;
final double ratio = 0.5;
final BatteryHistEntry upperHistEntry = createBatteryHistEntry(
- /*bootTimestamp=*/ 1200L,
- upperTimestamp,
- /*totalPower=*/ 80,
- /*consumePower=*/ 20,
- /*foregroundUsageTimeInMs=*/ 200,
- /*backgroundUsageTimeInMs=*/ 300,
- /*batteryLevel=*/ 80);
+ /*bootTimestamp=*/ 1200L,
+ upperTimestamp,
+ /*totalPower=*/ 80,
+ /*consumePower=*/ 20,
+ /*foregroundUsageTimeInMs=*/ 200,
+ /*backgroundUsageTimeInMs=*/ 300,
+ /*batteryLevel=*/ 80);
final BatteryHistEntry newEntry =
- BatteryHistEntry.interpolate(
- slotTimestamp,
- upperTimestamp,
- ratio,
- /*lowerHistEntry=*/ null,
- upperHistEntry);
+ BatteryHistEntry.interpolate(
+ slotTimestamp,
+ upperTimestamp,
+ ratio,
+ /*lowerHistEntry=*/ null,
+ upperHistEntry);
assertBatteryHistEntry(
- newEntry, 3, upperHistEntry.mPercentOfTotal,
- /*bootTimestamp=*/ 1200 - 100,
- /*timestamp=*/ slotTimestamp,
- /*totalPower=*/ 0.5 * 80,
- /*consumePower=*/ 0.5 * 20,
- /*foregroundUsageTimeInMs=*/ Math.round(0.5 * 200),
- /*backgroundUsageTimeInMs=*/ Math.round(0.5 * 300),
- /*batteryLevel=*/ upperHistEntry.mBatteryLevel);
+ newEntry, 3, upperHistEntry.mPercentOfTotal,
+ /*bootTimestamp=*/ 1200 - 100,
+ /*timestamp=*/ slotTimestamp,
+ /*totalPower=*/ 0.5 * 80,
+ /*consumePower=*/ 0.5 * 20,
+ /*foregroundUsageTimeInMs=*/ Math.round(0.5 * 200),
+ /*backgroundUsageTimeInMs=*/ Math.round(0.5 * 300),
+ /*batteryLevel=*/ upperHistEntry.mBatteryLevel);
}
private static BatteryHistEntry createEntry(int consumerType) {
@@ -243,21 +243,21 @@
private static ContentValues getContentValuesWithType(int consumerType) {
final ContentValues values = new ContentValues();
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE,
- Integer.valueOf(consumerType));
+ Integer.valueOf(consumerType));
return values;
}
private void assertBatteryHistEntry(
BatteryHistEntry entry, int drainType, double percentOfTotal) {
assertBatteryHistEntry(
- entry, drainType, percentOfTotal,
- /*bootTimestamp=*/ 101L,
- /*timestamp=*/ 10001L,
- /*totalPower=*/ 5.1,
- /*consumePower=*/ 1.1,
- /*foregroundUsageTimeInMs=*/ 1234L,
- /*backgroundUsageTimeInMs=*/ 5689L,
- /*batteryLevel=*/ 12);
+ entry, drainType, percentOfTotal,
+ /*bootTimestamp=*/ 101L,
+ /*timestamp=*/ 10001L,
+ /*totalPower=*/ 5.1,
+ /*consumePower=*/ 1.1,
+ /*foregroundUsageTimeInMs=*/ 1234L,
+ /*backgroundUsageTimeInMs=*/ 5689L,
+ /*batteryLevel=*/ 12);
}
private void assertBatteryHistEntry(
@@ -276,7 +276,7 @@
assertThat(entry.mUserId).isEqualTo(UserHandle.getUserId(1001));
assertThat(entry.mAppLabel).isEqualTo("Settings");
assertThat(entry.mPackageName)
- .isEqualTo("com.google.android.settings.battery");
+ .isEqualTo("com.google.android.settings.battery");
assertThat(entry.mIsHidden).isTrue();
assertThat(entry.mBootTimestamp).isEqualTo(bootTimestamp);
assertThat(entry.mTimestamp).isEqualTo(timestamp);
@@ -288,12 +288,12 @@
assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
assertThat(entry.mDrainType).isEqualTo(drainType);
assertThat(entry.mConsumerType)
- .isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
+ .isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
assertThat(entry.mBatteryLevel).isEqualTo(batteryLevel);
assertThat(entry.mBatteryStatus)
- .isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
+ .isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
assertThat(entry.mBatteryHealth)
- .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
+ .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
}
private BatteryHistEntry createBatteryHistEntry(
@@ -305,7 +305,7 @@
long backgroundUsageTimeInMs,
int batteryLevel) {
final MatrixCursor cursor = new MatrixCursor(
- new String[] {
+ new String[]{
BatteryHistEntry.KEY_UID,
BatteryHistEntry.KEY_USER_ID,
BatteryHistEntry.KEY_APP_LABEL,
@@ -325,7 +325,7 @@
BatteryHistEntry.KEY_BATTERY_STATUS,
BatteryHistEntry.KEY_BATTERY_HEALTH});
cursor.addRow(
- new Object[] {
+ new Object[]{
Long.valueOf(1001),
Long.valueOf(UserHandle.getUserId(1001)),
"Settings",
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryLoaderTest.java
similarity index 91%
rename from tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryLoaderTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryLoaderTest.java
index a0fd5fd..5717857 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryLoaderTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,18 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.doReturn;
import android.content.Context;
import com.android.settings.testutils.FakeFeatureFactory;
-import java.util.HashMap;
-import java.util.Map;
-
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -32,6 +30,9 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import java.util.HashMap;
+import java.util.Map;
+
@RunWith(RobolectricTestRunner.class)
public final class BatteryHistoryLoaderTest {
@@ -52,7 +53,7 @@
public void testLoadIBackground_returnsMapFromPowerFeatureProvider() {
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
doReturn(batteryHistoryMap).when(mFeatureFactory.powerUsageFeatureProvider)
- .getBatteryHistory(mContext);
+ .getBatteryHistorySinceLastFullCharge(mContext);
assertThat(mBatteryHistoryLoader.loadInBackground())
.isSameInstanceAs(batteryHistoryMap);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryPreferenceTest.java
similarity index 95%
rename from tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryPreferenceTest.java
index 83fcbae..7017c43 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHistoryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryHistoryPreferenceTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.google.common.truth.Truth.assertThat;
@@ -31,6 +31,7 @@
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
+import com.android.settings.fuelgauge.BatteryInfo;
import com.android.settings.widget.UsageView;
import org.junit.Before;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUsageStatsLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageStatsLoaderTest.java
similarity index 96%
rename from tests/robotests/src/com/android/settings/fuelgauge/BatteryUsageStatsLoaderTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageStatsLoaderTest.java
index 8c47ff6..1d0bca4 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUsageStatsLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageStatsLoaderTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.google.common.truth.Truth.assertThat;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java
similarity index 60%
rename from tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java
index 42483d0..c9bac03 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/ConvertUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.google.common.truth.Truth.assertThat;
@@ -26,7 +26,10 @@
import android.os.BatteryUsageStats;
import android.os.LocaleList;
import android.os.UserHandle;
+import android.text.format.DateUtils;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
@@ -54,7 +57,7 @@
@Mock
private BatteryUsageStats mBatteryUsageStats;
@Mock
- private BatteryEntry mockBatteryEntry;
+ private BatteryEntry mMockBatteryEntry;
private FakeFeatureFactory mFeatureFactory;
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
@@ -70,115 +73,117 @@
@Test
public void convert_returnsExpectedContentValues() {
final int expectedType = 3;
- when(mockBatteryEntry.getUid()).thenReturn(1001);
- when(mockBatteryEntry.getLabel()).thenReturn("Settings");
- when(mockBatteryEntry.getDefaultPackageName())
- .thenReturn("com.google.android.settings.battery");
- when(mockBatteryEntry.isHidden()).thenReturn(true);
+ when(mMockBatteryEntry.getUid()).thenReturn(1001);
+ when(mMockBatteryEntry.getLabel()).thenReturn("Settings");
+ when(mMockBatteryEntry.getDefaultPackageName())
+ .thenReturn("com.google.android.settings.battery");
+ when(mMockBatteryEntry.isHidden()).thenReturn(true);
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
- when(mockBatteryEntry.getConsumedPower()).thenReturn(1.1);
- mockBatteryEntry.mPercent = 0.3;
- when(mockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
- when(mockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
- when(mockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
- when(mockBatteryEntry.getConsumerType())
- .thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
+ when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
+ mMockBatteryEntry.mPercent = 0.3;
+ when(mMockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
+ when(mMockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
+ when(mMockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
+ when(mMockBatteryEntry.getConsumerType())
+ .thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
final ContentValues values =
- ConvertUtils.convert(
- mockBatteryEntry,
- mBatteryUsageStats,
- /*batteryLevel=*/ 12,
- /*batteryStatus=*/ BatteryManager.BATTERY_STATUS_FULL,
- /*batteryHealth=*/ BatteryManager.BATTERY_HEALTH_COLD,
- /*bootTimestamp=*/ 101L,
- /*timestamp=*/ 10001L);
+ ConvertUtils.convert(
+ mMockBatteryEntry,
+ mBatteryUsageStats,
+ /*batteryLevel=*/ 12,
+ /*batteryStatus=*/ BatteryManager.BATTERY_STATUS_FULL,
+ /*batteryHealth=*/ BatteryManager.BATTERY_HEALTH_COLD,
+ /*bootTimestamp=*/ 101L,
+ /*timestamp=*/ 10001L);
assertThat(values.getAsLong(BatteryHistEntry.KEY_UID)).isEqualTo(1001L);
assertThat(values.getAsLong(BatteryHistEntry.KEY_USER_ID))
- .isEqualTo(UserHandle.getUserId(1001));
+ .isEqualTo(UserHandle.getUserId(1001));
assertThat(values.getAsString(BatteryHistEntry.KEY_APP_LABEL))
- .isEqualTo("Settings");
+ .isEqualTo("Settings");
assertThat(values.getAsString(BatteryHistEntry.KEY_PACKAGE_NAME))
- .isEqualTo("com.google.android.settings.battery");
+ .isEqualTo("com.google.android.settings.battery");
assertThat(values.getAsBoolean(BatteryHistEntry.KEY_IS_HIDDEN)).isTrue();
assertThat(values.getAsLong(BatteryHistEntry.KEY_BOOT_TIMESTAMP))
- .isEqualTo(101L);
+ .isEqualTo(101L);
assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP)).isEqualTo(10001L);
assertThat(values.getAsString(BatteryHistEntry.KEY_ZONE_ID))
- .isEqualTo(TimeZone.getDefault().getID());
+ .isEqualTo(TimeZone.getDefault().getID());
assertThat(values.getAsDouble(BatteryHistEntry.KEY_TOTAL_POWER)).isEqualTo(5.1);
assertThat(values.getAsDouble(BatteryHistEntry.KEY_CONSUME_POWER)).isEqualTo(1.1);
assertThat(values.getAsDouble(BatteryHistEntry.KEY_PERCENT_OF_TOTAL)).isEqualTo(0.3);
assertThat(values.getAsLong(BatteryHistEntry.KEY_FOREGROUND_USAGE_TIME))
- .isEqualTo(1234L);
+ .isEqualTo(1234L);
assertThat(values.getAsLong(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME))
- .isEqualTo(5689L);
+ .isEqualTo(5689L);
assertThat(values.getAsInteger(BatteryHistEntry.KEY_DRAIN_TYPE)).isEqualTo(expectedType);
assertThat(values.getAsInteger(BatteryHistEntry.KEY_CONSUMER_TYPE))
- .isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
+ .isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_LEVEL)).isEqualTo(12);
assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_STATUS))
- .isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
+ .isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_HEALTH))
- .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
+ .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
}
@Test
public void convert_nullBatteryEntry_returnsExpectedContentValues() {
final ContentValues values =
- ConvertUtils.convert(
- /*entry=*/ null,
- /*batteryUsageStats=*/ null,
- /*batteryLevel=*/ 12,
- /*batteryStatus=*/ BatteryManager.BATTERY_STATUS_FULL,
- /*batteryHealth=*/ BatteryManager.BATTERY_HEALTH_COLD,
- /*bootTimestamp=*/ 101L,
- /*timestamp=*/ 10001L);
+ ConvertUtils.convert(
+ /*entry=*/ null,
+ /*batteryUsageStats=*/ null,
+ /*batteryLevel=*/ 12,
+ /*batteryStatus=*/ BatteryManager.BATTERY_STATUS_FULL,
+ /*batteryHealth=*/ BatteryManager.BATTERY_HEALTH_COLD,
+ /*bootTimestamp=*/ 101L,
+ /*timestamp=*/ 10001L);
assertThat(values.getAsLong(BatteryHistEntry.KEY_BOOT_TIMESTAMP))
- .isEqualTo(101L);
+ .isEqualTo(101L);
assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP))
- .isEqualTo(10001L);
+ .isEqualTo(10001L);
assertThat(values.getAsString(BatteryHistEntry.KEY_ZONE_ID))
- .isEqualTo(TimeZone.getDefault().getID());
+ .isEqualTo(TimeZone.getDefault().getID());
assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_LEVEL)).isEqualTo(12);
assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_STATUS))
- .isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
+ .isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
assertThat(values.getAsInteger(BatteryHistEntry.KEY_BATTERY_HEALTH))
- .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
+ .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
assertThat(values.getAsString(BatteryHistEntry.KEY_PACKAGE_NAME))
- .isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
+ .isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
}
@Test
public void getIndexedUsageMap_nullOrEmptyHistoryMap_returnEmptyCollection() {
final int timeSlotSize = 2;
- final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L, 104L, 105L};
+ final long[] batteryHistoryKeys = new long[]{101L, 102L, 103L, 104L, 105L};
assertThat(ConvertUtils.getIndexedUsageMap(
mContext, timeSlotSize, batteryHistoryKeys,
/*batteryHistoryMap=*/ null, /*purgeLowPercentageAndFakeData=*/ true))
- .isEmpty();
+ .isEmpty();
assertThat(ConvertUtils.getIndexedUsageMap(
mContext, timeSlotSize, batteryHistoryKeys,
new HashMap<Long, Map<String, BatteryHistEntry>>(),
/*purgeLowPercentageAndFakeData=*/ true))
- .isEmpty();
+ .isEmpty();
}
+
@Test
public void getIndexedUsageMap_returnsExpectedResult() {
// Creates the fake testing data.
final int timeSlotSize = 2;
- final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L, 104L, 105L};
+ final long[] batteryHistoryKeys = new long[]{generateTimestamp(0), generateTimestamp(1),
+ generateTimestamp(2), generateTimestamp(3), generateTimestamp(4)};
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
- new HashMap<>();
+ new HashMap<>();
final BatteryHistEntry fakeEntry = createBatteryHistEntry(
- ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", 0, 0L, 0L, 0L);
+ ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", 0, 0L, 0L, 0L);
// Adds the index = 0 data.
Map<String, BatteryHistEntry> entryMap = new HashMap<>();
BatteryHistEntry entry = createBatteryHistEntry(
- "package1", "label1", 5.0, 1L, 10L, 20L);
+ "package1", "label1", 5.0, 1L, 10L, 20L);
entryMap.put(entry.getKey(), entry);
entryMap.put(fakeEntry.getKey(), fakeEntry);
batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[0]), entryMap);
@@ -189,38 +194,38 @@
// Adds the index = 2 data.
entryMap = new HashMap<>();
entry = createBatteryHistEntry(
- "package2", "label2", 10.0, 2L, 15L, 25L);
+ "package2", "label2", 10.0, 2L, 15L, 25L);
entryMap.put(entry.getKey(), entry);
entryMap.put(fakeEntry.getKey(), fakeEntry);
batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[2]), entryMap);
// Adds the index = 3 data.
entryMap = new HashMap<>();
entry = createBatteryHistEntry(
- "package2", "label2", 15.0, 2L, 25L, 35L);
+ "package2", "label2", 15.0, 2L, 25L, 35L);
entryMap.put(entry.getKey(), entry);
entry = createBatteryHistEntry(
- "package3", "label3", 5.0, 3L, 5L, 5L);
+ "package3", "label3", 5.0, 3L, 5L, 5L);
entryMap.put(entry.getKey(), entry);
entryMap.put(fakeEntry.getKey(), fakeEntry);
batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[3]), entryMap);
// Adds the index = 4 data.
entryMap = new HashMap<>();
entry = createBatteryHistEntry(
- "package2", "label2", 30.0, 2L, 30L, 40L);
+ "package2", "label2", 30.0, 2L, 30L, 40L);
entryMap.put(entry.getKey(), entry);
entry = createBatteryHistEntry(
- "package2", "label2", 75.0, 4L, 40L, 50L);
+ "package2", "label2", 75.0, 4L, 40L, 50L);
entryMap.put(entry.getKey(), entry);
entry = createBatteryHistEntry(
- "package3", "label3", 5.0, 3L, 5L, 5L);
+ "package3", "label3", 5.0, 3L, 5L, 5L);
entryMap.put(entry.getKey(), entry);
entryMap.put(fakeEntry.getKey(), fakeEntry);
batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[4]), entryMap);
final Map<Integer, List<BatteryDiffEntry>> resultMap =
- ConvertUtils.getIndexedUsageMap(
- mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
- /*purgeLowPercentageAndFakeData=*/ false);
+ ConvertUtils.getIndexedUsageMap(
+ mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
+ /*purgeLowPercentageAndFakeData=*/ false);
assertThat(resultMap).hasSize(3);
// Verifies the first timestamp result.
@@ -243,9 +248,9 @@
// Test getIndexedUsageMap() with purged data.
ConvertUtils.PERCENTAGE_OF_TOTAL_THRESHOLD = 50;
final Map<Integer, List<BatteryDiffEntry>> purgedResultMap =
- ConvertUtils.getIndexedUsageMap(
- mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
- /*purgeLowPercentageAndFakeData=*/ true);
+ ConvertUtils.getIndexedUsageMap(
+ mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
+ /*purgeLowPercentageAndFakeData=*/ true);
assertThat(purgedResultMap).hasSize(3);
// Verifies the first timestamp result.
@@ -260,18 +265,18 @@
assertThat(entryList).hasSize(1);
// Verifies the fake data is cleared out.
assertThat(entryList.get(0).getPackageName())
- .isNotEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
+ .isNotEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
// Adds lacked data into the battery history map.
final int remainingSize = 25 - batteryHistoryKeys.length;
for (int index = 0; index < remainingSize; index++) {
batteryHistoryMap.put(105L + index + 1, new HashMap<>());
}
- when(mPowerUsageFeatureProvider.getBatteryHistory(mContext))
- .thenReturn(batteryHistoryMap);
+ when(mPowerUsageFeatureProvider.getBatteryHistorySinceLastFullCharge(mContext))
+ .thenReturn(batteryHistoryMap);
final List<BatteryDiffEntry> batteryDiffEntryList =
- BatteryChartPreferenceController.getBatteryLast24HrUsageData(mContext);
+ BatteryChartPreferenceController.getAppBatteryUsageData(mContext);
assertThat(batteryDiffEntryList).isNotEmpty();
final BatteryDiffEntry resultEntry = batteryDiffEntryList.get(0);
@@ -281,11 +286,11 @@
@Test
public void getIndexedUsageMap_usageTimeExceed_returnsExpectedResult() {
final int timeSlotSize = 1;
- final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L};
+ final long[] batteryHistoryKeys = new long[]{101L, 102L, 103L};
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
- new HashMap<>();
+ new HashMap<>();
final BatteryHistEntry fakeEntry = createBatteryHistEntry(
- ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", 0, 0L, 0L, 0L);
+ ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", 0, 0L, 0L, 0L);
// Adds the index = 0 data.
Map<String, BatteryHistEntry> entryMap = new HashMap<>();
entryMap.put(fakeEntry.getKey(), fakeEntry);
@@ -297,14 +302,14 @@
// Adds the index = 2 data.
entryMap = new HashMap<>();
final BatteryHistEntry entry = createBatteryHistEntry(
- "package3", "label3", 500, 5L, 3600000L, 7200000L);
+ "package3", "label3", 500, 5L, 3600000L, 7200000L);
entryMap.put(entry.getKey(), entry);
batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[2]), entryMap);
final Map<Integer, List<BatteryDiffEntry>> purgedResultMap =
- ConvertUtils.getIndexedUsageMap(
- mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
- /*purgeLowPercentageAndFakeData=*/ true);
+ ConvertUtils.getIndexedUsageMap(
+ mContext, timeSlotSize, batteryHistoryKeys, batteryHistoryMap,
+ /*purgeLowPercentageAndFakeData=*/ true);
assertThat(purgedResultMap).hasSize(2);
final List<BatteryDiffEntry> entryList = purgedResultMap.get(0);
@@ -313,19 +318,19 @@
final float ratio = (float) (7200) / (float) (3600 + 7200);
final BatteryDiffEntry resultEntry = entryList.get(0);
assertThat(resultEntry.mForegroundUsageTimeInMs)
- .isEqualTo(Math.round(entry.mForegroundUsageTimeInMs * ratio));
+ .isEqualTo(Math.round(entry.mForegroundUsageTimeInMs * ratio));
assertThat(resultEntry.mBackgroundUsageTimeInMs)
- .isEqualTo(Math.round(entry.mBackgroundUsageTimeInMs * ratio));
+ .isEqualTo(Math.round(entry.mBackgroundUsageTimeInMs * ratio));
assertThat(resultEntry.mConsumePower)
- .isEqualTo(entry.mConsumePower * ratio);
+ .isEqualTo(entry.mConsumePower * ratio);
}
@Test
public void getIndexedUsageMap_hideBackgroundUsageTime_returnsExpectedResult() {
- final long[] batteryHistoryKeys = new long[] {101L, 102L, 103L};
+ final long[] batteryHistoryKeys = new long[]{101L, 102L, 103L};
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
final BatteryHistEntry fakeEntry = createBatteryHistEntry(
- ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", 0, 0L, 0L, 0L);
+ ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", 0, 0L, 0L, 0L);
// Adds the index = 0 data.
Map<String, BatteryHistEntry> entryMap = new HashMap<>();
entryMap.put(fakeEntry.getKey(), fakeEntry);
@@ -337,16 +342,16 @@
// Adds the index = 2 data.
entryMap = new HashMap<>();
final BatteryHistEntry entry = createBatteryHistEntry(
- "package3", "label3", 500, 5L, 3600000L, 7200000L);
+ "package3", "label3", 500, 5L, 3600000L, 7200000L);
entryMap.put(entry.getKey(), entry);
batteryHistoryMap.put(Long.valueOf(batteryHistoryKeys[2]), entryMap);
when(mPowerUsageFeatureProvider.getHideBackgroundUsageTimeSet(mContext))
- .thenReturn(new HashSet(Arrays.asList((CharSequence) "package3")));
+ .thenReturn(new HashSet(Arrays.asList((CharSequence) "package3")));
final Map<Integer, List<BatteryDiffEntry>> purgedResultMap =
- ConvertUtils.getIndexedUsageMap(
- mContext, /*timeSlotSize=*/ 1, batteryHistoryKeys, batteryHistoryMap,
- /*purgeLowPercentageAndFakeData=*/ true);
+ ConvertUtils.getIndexedUsageMap(
+ mContext, /*timeSlotSize=*/ 1, batteryHistoryKeys, batteryHistoryMap,
+ /*purgeLowPercentageAndFakeData=*/ true);
final BatteryDiffEntry resultEntry = purgedResultMap.get(0).get(0);
assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(0);
@@ -355,7 +360,7 @@
@Test
public void getLocale_nullContext_returnDefaultLocale() {
assertThat(ConvertUtils.getLocale(/*context=*/ null))
- .isEqualTo(Locale.getDefault());
+ .isEqualTo(Locale.getDefault());
}
@Test
@@ -370,6 +375,71 @@
assertThat(ConvertUtils.getLocale(mContext)).isEqualTo(Locale.getDefault());
}
+ @Test
+ public void resolveMultiUsersData_replaceOtherUsersItemWithExpectedEntry() {
+ final int currentUserId = mContext.getUserId();
+ final Map<Integer, List<BatteryDiffEntry>> entryMap = new HashMap<>();
+ // Without other users time slot.
+ entryMap.put(0, Arrays.asList(
+ createBatteryDiffEntry(
+ currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*consumePercentage=*/ 50)));
+ // With other users time slot.
+ final List<BatteryDiffEntry> withOtherUsersList = new ArrayList<>();
+ entryMap.put(1, withOtherUsersList);
+ withOtherUsersList.add(
+ createBatteryDiffEntry(
+ currentUserId + 1,
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY,
+ /*consumePercentage=*/ 20));
+ withOtherUsersList.add(
+ createBatteryDiffEntry(
+ currentUserId + 2,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*consumePercentage=*/ 30));
+ withOtherUsersList.add(
+ createBatteryDiffEntry(
+ currentUserId + 3,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*consumePercentage=*/ 40));
+
+ ConvertUtils.resolveMultiUsersData(mContext, entryMap);
+
+ assertThat(entryMap.get(0).get(0).getPercentOfTotal()).isEqualTo(50);
+ // Asserts with other users items.
+ final List<BatteryDiffEntry> entryList = entryMap.get(1);
+ assertThat(entryList).hasSize(2);
+ assertBatteryDiffEntry(
+ entryList.get(0),
+ currentUserId + 1,
+ /*uid=*/ 0,
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY,
+ /*consumePercentage=*/ 20);
+ assertBatteryDiffEntry(
+ entryList.get(1),
+ BatteryUtils.UID_OTHER_USERS,
+ BatteryUtils.UID_OTHER_USERS,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*consumePercentage=*/ 70);
+ }
+
+ private BatteryDiffEntry createBatteryDiffEntry(
+ long userId, int counsumerType, double consumePercentage) {
+ final ContentValues values = new ContentValues();
+ values.put(BatteryHistEntry.KEY_USER_ID, userId);
+ values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, counsumerType);
+ final BatteryDiffEntry batteryDiffEntry =
+ new BatteryDiffEntry(
+ mContext,
+ /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ 0,
+ /*consumePower=*/ consumePercentage,
+ new BatteryHistEntry(values));
+ batteryDiffEntry.setTotalConsumePower(100f);
+ return batteryDiffEntry;
+ }
+
private static BatteryHistEntry createBatteryHistEntry(
String packageName, String appLabel, double consumePower,
long uid, long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) {
@@ -379,20 +449,34 @@
values.put(BatteryHistEntry.KEY_APP_LABEL, appLabel);
values.put(BatteryHistEntry.KEY_UID, Long.valueOf(uid));
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE,
- Integer.valueOf(ConvertUtils.CONSUMER_TYPE_UID_BATTERY));
+ Integer.valueOf(ConvertUtils.CONSUMER_TYPE_UID_BATTERY));
values.put(BatteryHistEntry.KEY_CONSUME_POWER, consumePower);
values.put(BatteryHistEntry.KEY_FOREGROUND_USAGE_TIME,
- Long.valueOf(foregroundUsageTimeInMs));
+ Long.valueOf(foregroundUsageTimeInMs));
values.put(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME,
- Long.valueOf(backgroundUsageTimeInMs));
+ Long.valueOf(backgroundUsageTimeInMs));
return new BatteryHistEntry(values);
}
private static void assertBatteryDiffEntry(
+ BatteryDiffEntry entry, long userId, long uid, int counsumerType,
+ double consumePercentage) {
+ assertThat(entry.mBatteryHistEntry.mUid).isEqualTo(uid);
+ assertThat(entry.mBatteryHistEntry.mUserId).isEqualTo(userId);
+ assertThat(entry.mBatteryHistEntry.mConsumerType).isEqualTo(counsumerType);
+ assertThat(entry.getPercentOfTotal()).isEqualTo(consumePercentage);
+ }
+
+ private static void assertBatteryDiffEntry(
BatteryDiffEntry entry, int percentOfTotal,
long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) {
assertThat((int) entry.getPercentOfTotal()).isEqualTo(percentOfTotal);
assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs);
assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
}
+
+ private static Long generateTimestamp(int index) {
+ // "2021-04-23 07:00:00 UTC" + index hours
+ return 1619247600000L + index * DateUtils.HOUR_IN_MILLIS;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
new file mode 100644
index 0000000..883b0e7
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
@@ -0,0 +1,950 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge.batteryusage;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.text.format.DateUtils;
+
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+
+@RunWith(RobolectricTestRunner.class)
+public class DataProcessorTest {
+ private static final String FAKE_ENTRY_KEY = "fake_entry_key";
+
+ private Context mContext;
+
+ private FakeFeatureFactory mFeatureFactory;
+ private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
+
+ mContext = spy(RuntimeEnvironment.application);
+ mFeatureFactory = FakeFeatureFactory.setupForTest();
+ mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
+ }
+
+ @Test
+ public void getBatteryLevelData_emptyHistoryMap_returnNull() {
+ assertThat(DataProcessor.getBatteryLevelData(
+ mContext,
+ /*handler=*/ null,
+ /*batteryHistoryMap=*/ null,
+ /*asyncResponseDelegate=*/ null))
+ .isNull();
+ assertThat(DataProcessor.getBatteryLevelData(
+ mContext, /*handler=*/ null, new HashMap<>(), /*asyncResponseDelegate=*/ null))
+ .isNull();
+ }
+
+ @Test
+ public void getBatteryLevelData_notEnoughData_returnNull() {
+ // The timestamps are within 1 hour.
+ final long[] timestamps = {1000000L, 2000000L, 3000000L};
+ final int[] levels = {100, 99, 98};
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
+ createHistoryMap(timestamps, levels);
+
+ assertThat(DataProcessor.getBatteryLevelData(
+ mContext, /*handler=*/ null, batteryHistoryMap, /*asyncResponseDelegate=*/ null))
+ .isNull();
+ }
+
+ @Test
+ public void getBatteryLevelData_returnExpectedResult() {
+ // Timezone GMT+8: 2022-01-01 00:00:00, 2022-01-01 01:00:00, 2022-01-01 02:00:00
+ final long[] timestamps = {1640966400000L, 1640970000000L, 1640973600000L};
+ final int[] levels = {100, 99, 98};
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
+ createHistoryMap(timestamps, levels);
+
+ final BatteryLevelData resultData =
+ DataProcessor.getBatteryLevelData(
+ mContext,
+ /*handler=*/ null,
+ batteryHistoryMap,
+ /*asyncResponseDelegate=*/ null);
+
+ final List<Long> expectedDailyTimestamps = List.of(timestamps[0], timestamps[2]);
+ final List<Integer> expectedDailyLevels = List.of(levels[0], levels[2]);
+ final List<List<Long>> expectedHourlyTimestamps = List.of(expectedDailyTimestamps);
+ final List<List<Integer>> expectedHourlyLevels = List.of(expectedDailyLevels);
+ verifyExpectedBatteryLevelData(
+ resultData,
+ expectedDailyTimestamps,
+ expectedDailyLevels,
+ expectedHourlyTimestamps,
+ expectedHourlyLevels);
+ }
+
+ @Test
+ public void getHistoryMapWithExpectedTimestamps_emptyHistoryMap_returnEmptyMap() {
+ assertThat(DataProcessor
+ .getHistoryMapWithExpectedTimestamps(mContext, new HashMap<>()))
+ .isEmpty();
+ }
+
+ @Test
+ public void getHistoryMapWithExpectedTimestamps_returnExpectedMap() {
+ // Timezone GMT+8
+ final long[] timestamps = {
+ 1640966700000L, // 2022-01-01 00:05:00
+ 1640970180000L, // 2022-01-01 01:03:00
+ 1640973840000L, // 2022-01-01 02:04:00
+ 1640978100000L, // 2022-01-01 03:15:00
+ 1640981400000L // 2022-01-01 04:10:00
+ };
+ final int[] levels = {100, 94, 90, 82, 50};
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
+ createHistoryMap(timestamps, levels);
+
+ final Map<Long, Map<String, BatteryHistEntry>> resultMap =
+ DataProcessor.getHistoryMapWithExpectedTimestamps(mContext, batteryHistoryMap);
+
+ // Timezone GMT+8
+ final long[] expectedTimestamps = {
+ 1640966400000L, // 2022-01-01 00:00:00
+ 1640970000000L, // 2022-01-01 01:00:00
+ 1640973600000L, // 2022-01-01 02:00:00
+ 1640977200000L, // 2022-01-01 03:00:00
+ 1640980800000L // 2022-01-01 04:00:00
+ };
+ final int[] expectedLevels = {100, 94, 90, 84, 56};
+ assertThat(resultMap).hasSize(expectedLevels.length);
+ for (int index = 0; index < expectedLevels.length; index++) {
+ assertThat(resultMap.get(expectedTimestamps[index]).get(FAKE_ENTRY_KEY).mBatteryLevel)
+ .isEqualTo(expectedLevels[index]);
+ }
+ }
+
+ @Test
+ public void getLevelDataThroughProcessedHistoryMap_notEnoughData_returnNull() {
+ final long[] timestamps = {100L};
+ final int[] levels = {100};
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
+ createHistoryMap(timestamps, levels);
+
+ assertThat(
+ DataProcessor.getLevelDataThroughProcessedHistoryMap(mContext, batteryHistoryMap))
+ .isNull();
+ }
+
+ @Test
+ public void getLevelDataThroughProcessedHistoryMap_OneDayData_returnExpectedResult() {
+ // Timezone GMT+8
+ final long[] timestamps = {
+ 1640966400000L, // 2022-01-01 00:00:00
+ 1640970000000L, // 2022-01-01 01:00:00
+ 1640973600000L, // 2022-01-01 02:00:00
+ 1640977200000L, // 2022-01-01 03:00:00
+ 1640980800000L // 2022-01-01 04:00:00
+ };
+ final int[] levels = {100, 94, 90, 82, 50};
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
+ createHistoryMap(timestamps, levels);
+
+ final BatteryLevelData resultData =
+ DataProcessor.getLevelDataThroughProcessedHistoryMap(mContext, batteryHistoryMap);
+
+ final List<Long> expectedDailyTimestamps = List.of(timestamps[0], timestamps[4]);
+ final List<Integer> expectedDailyLevels = List.of(levels[0], levels[4]);
+ final List<List<Long>> expectedHourlyTimestamps = List.of(
+ List.of(timestamps[0], timestamps[2], timestamps[4])
+ );
+ final List<List<Integer>> expectedHourlyLevels = List.of(
+ List.of(levels[0], levels[2], levels[4])
+ );
+ verifyExpectedBatteryLevelData(
+ resultData,
+ expectedDailyTimestamps,
+ expectedDailyLevels,
+ expectedHourlyTimestamps,
+ expectedHourlyLevels);
+ }
+
+ @Test
+ public void getLevelDataThroughProcessedHistoryMap_MultipleDaysData_returnExpectedResult() {
+ // Timezone GMT+8
+ final long[] timestamps = {
+ 1641038400000L, // 2022-01-01 20:00:00
+ 1641060000000L, // 2022-01-02 02:00:00
+ 1641067200000L, // 2022-01-02 04:00:00
+ 1641081600000L, // 2022-01-02 08:00:00
+ };
+ final int[] levels = {100, 94, 90, 82};
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
+ createHistoryMap(timestamps, levels);
+
+ final BatteryLevelData resultData =
+ DataProcessor.getLevelDataThroughProcessedHistoryMap(mContext, batteryHistoryMap);
+
+ final List<Long> expectedDailyTimestamps = List.of(
+ 1641038400000L, // 2022-01-01 20:00:00
+ 1641052800000L, // 2022-01-02 00:00:00
+ 1641081600000L // 2022-01-02 08:00:00
+ );
+ final List<Integer> expectedDailyLevels = new ArrayList<>();
+ expectedDailyLevels.add(100);
+ expectedDailyLevels.add(null);
+ expectedDailyLevels.add(82);
+ final List<List<Long>> expectedHourlyTimestamps = List.of(
+ List.of(
+ 1641038400000L, // 2022-01-01 20:00:00
+ 1641045600000L, // 2022-01-01 22:00:00
+ 1641052800000L // 2022-01-02 00:00:00
+ ),
+ List.of(
+ 1641052800000L, // 2022-01-02 00:00:00
+ 1641060000000L, // 2022-01-02 02:00:00
+ 1641067200000L, // 2022-01-02 04:00:00
+ 1641074400000L, // 2022-01-02 06:00:00
+ 1641081600000L // 2022-01-02 08:00:00
+ )
+ );
+ final List<Integer> expectedHourlyLevels1 = new ArrayList<>();
+ expectedHourlyLevels1.add(100);
+ expectedHourlyLevels1.add(null);
+ expectedHourlyLevels1.add(null);
+ final List<Integer> expectedHourlyLevels2 = new ArrayList<>();
+ expectedHourlyLevels2.add(null);
+ expectedHourlyLevels2.add(94);
+ expectedHourlyLevels2.add(90);
+ expectedHourlyLevels2.add(null);
+ expectedHourlyLevels2.add(82);
+ final List<List<Integer>> expectedHourlyLevels = List.of(
+ expectedHourlyLevels1,
+ expectedHourlyLevels2
+ );
+ verifyExpectedBatteryLevelData(
+ resultData,
+ expectedDailyTimestamps,
+ expectedDailyLevels,
+ expectedHourlyTimestamps,
+ expectedHourlyLevels);
+ }
+
+ @Test
+ public void getTimestampSlots_emptyRawList_returnEmptyList() {
+ final List<Long> resultList =
+ DataProcessor.getTimestampSlots(new ArrayList<>());
+ assertThat(resultList).isEmpty();
+ }
+
+ @Test
+ public void getTimestampSlots_startWithEvenHour_returnExpectedResult() {
+ final Calendar startCalendar = Calendar.getInstance();
+ startCalendar.set(2022, 6, 5, 6, 30, 50); // 2022-07-05 06:30:50
+ final Calendar endCalendar = Calendar.getInstance();
+ endCalendar.set(2022, 6, 5, 22, 30, 50); // 2022-07-05 22:30:50
+
+ final Calendar expectedStartCalendar = Calendar.getInstance();
+ expectedStartCalendar.set(2022, 6, 5, 6, 0, 0); // 2022-07-05 06:00:00
+ final Calendar expectedEndCalendar = Calendar.getInstance();
+ expectedEndCalendar.set(2022, 6, 5, 22, 0, 0); // 2022-07-05 22:00:00
+ verifyExpectedTimestampSlots(
+ startCalendar, endCalendar, expectedStartCalendar, expectedEndCalendar);
+ }
+
+ @Test
+ public void getTimestampSlots_startWithOddHour_returnExpectedResult() {
+ final Calendar startCalendar = Calendar.getInstance();
+ startCalendar.set(2022, 6, 5, 5, 0, 50); // 2022-07-05 05:00:50
+ final Calendar endCalendar = Calendar.getInstance();
+ endCalendar.set(2022, 6, 6, 21, 00, 50); // 2022-07-06 21:00:50
+
+ final Calendar expectedStartCalendar = Calendar.getInstance();
+ expectedStartCalendar.set(2022, 6, 5, 6, 00, 00); // 2022-07-05 06:00:00
+ final Calendar expectedEndCalendar = Calendar.getInstance();
+ expectedEndCalendar.set(2022, 6, 6, 20, 00, 00); // 2022-07-06 20:00:00
+ verifyExpectedTimestampSlots(
+ startCalendar, endCalendar, expectedStartCalendar, expectedEndCalendar);
+ }
+
+ @Test
+ public void getDailyTimestamps_notEnoughData_returnEmptyList() {
+ assertThat(DataProcessor.getDailyTimestamps(new ArrayList<>())).isEmpty();
+ assertThat(DataProcessor.getDailyTimestamps(List.of(100L))).isEmpty();
+ }
+
+ @Test
+ public void getDailyTimestamps_OneDayData_returnExpectedList() {
+ // Timezone GMT+8
+ final List<Long> timestamps = List.of(
+ 1640966400000L, // 2022-01-01 00:00:00
+ 1640970000000L, // 2022-01-01 01:00:00
+ 1640973600000L, // 2022-01-01 02:00:00
+ 1640977200000L, // 2022-01-01 03:00:00
+ 1640980800000L // 2022-01-01 04:00:00
+ );
+
+ final List<Long> expectedTimestamps = List.of(
+ 1640966400000L, // 2022-01-01 00:00:00
+ 1640980800000L // 2022-01-01 04:00:00
+ );
+ assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
+ }
+
+ @Test
+ public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
+ // Timezone GMT+8
+ final List<Long> timestamps = List.of(
+ 1640988000000L, // 2022-01-01 06:00:00
+ 1641060000000L, // 2022-01-02 02:00:00
+ 1641160800000L, // 2022-01-03 06:00:00
+ 1641254400000L // 2022-01-04 08:00:00
+ );
+
+ final List<Long> expectedTimestamps = List.of(
+ 1640988000000L, // 2022-01-01 06:00:00
+ 1641052800000L, // 2022-01-02 00:00:00
+ 1641139200000L, // 2022-01-03 00:00:00
+ 1641225600000L, // 2022-01-04 00:00:00
+ 1641254400000L // 2022-01-04 08:00:00
+ );
+ assertThat(DataProcessor.getDailyTimestamps(timestamps)).isEqualTo(expectedTimestamps);
+ }
+
+ @Test
+ public void isFromFullCharge_emptyData_returnFalse() {
+ assertThat(DataProcessor.isFromFullCharge(null)).isFalse();
+ assertThat(DataProcessor.isFromFullCharge(new HashMap<>())).isFalse();
+ }
+
+ @Test
+ public void isFromFullCharge_notChargedData_returnFalse() {
+ final Map<String, BatteryHistEntry> entryMap = new HashMap<>();
+ final ContentValues values = new ContentValues();
+ values.put("batteryLevel", 98);
+ final BatteryHistEntry entry = new BatteryHistEntry(values);
+ entryMap.put(FAKE_ENTRY_KEY, entry);
+
+ assertThat(DataProcessor.isFromFullCharge(entryMap)).isFalse();
+ }
+
+ @Test
+ public void isFromFullCharge_chargedData_returnTrue() {
+ final Map<String, BatteryHistEntry> entryMap = new HashMap<>();
+ final ContentValues values = new ContentValues();
+ values.put("batteryLevel", 100);
+ final BatteryHistEntry entry = new BatteryHistEntry(values);
+ entryMap.put(FAKE_ENTRY_KEY, entry);
+
+ assertThat(DataProcessor.isFromFullCharge(entryMap)).isTrue();
+ }
+
+ @Test
+ public void findNearestTimestamp_returnExpectedResult() {
+ long[] results = DataProcessor.findNearestTimestamp(
+ Arrays.asList(10L, 20L, 30L, 40L), /*target=*/ 15L);
+ assertThat(results).isEqualTo(new long[] {10L, 20L});
+
+ results = DataProcessor.findNearestTimestamp(
+ Arrays.asList(10L, 20L, 30L, 40L), /*target=*/ 10L);
+ assertThat(results).isEqualTo(new long[] {10L, 10L});
+
+ results = DataProcessor.findNearestTimestamp(
+ Arrays.asList(10L, 20L, 30L, 40L), /*target=*/ 5L);
+ assertThat(results).isEqualTo(new long[] {0L, 10L});
+
+ results = DataProcessor.findNearestTimestamp(
+ Arrays.asList(10L, 20L, 30L, 40L), /*target=*/ 50L);
+ assertThat(results).isEqualTo(new long[] {40L, 0L});
+ }
+
+ @Test
+ public void getTimestampOfNextDay_returnExpectedResult() {
+ // 2021-02-28 06:00:00 => 2021-03-01 00:00:00
+ assertThat(DataProcessor.getTimestampOfNextDay(1614463200000L))
+ .isEqualTo(1614528000000L);
+ // 2021-12-31 16:00:00 => 2022-01-01 00:00:00
+ assertThat(DataProcessor.getTimestampOfNextDay(1640937600000L))
+ .isEqualTo(1640966400000L);
+ }
+
+ @Test
+ public void isForDailyChart_returnExpectedResult() {
+ assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ true, 0L)).isTrue();
+ // 2022-01-01 00:00:00
+ assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ false, 1640966400000L))
+ .isTrue();
+ // 2022-01-01 01:00:05
+ assertThat(DataProcessor.isForDailyChart(/*isStartOrEnd=*/ false, 1640970005000L))
+ .isFalse();
+ }
+
+ @Test
+ public void getBatteryUsageMap_emptyHistoryMap_returnNull() {
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay =
+ new ArrayList<>();
+ hourlyBatteryLevelsPerDay.add(
+ new BatteryLevelData.PeriodBatteryLevelData(new ArrayList<>(), new ArrayList<>()));
+
+ assertThat(DataProcessor.getBatteryUsageMap(
+ mContext, hourlyBatteryLevelsPerDay, new HashMap<>())).isNull();
+ }
+
+ @Test
+ public void getBatteryUsageMap_returnsExpectedResult() {
+ final long[] batteryHistoryKeys = new long[]{
+ 1641045600000L, // 2022-01-01 22:00:00
+ 1641049200000L, // 2022-01-01 23:00:00
+ 1641052800000L, // 2022-01-02 00:00:00
+ 1641056400000L, // 2022-01-02 01:00:00
+ 1641060000000L, // 2022-01-02 02:00:00
+ };
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
+ final int currentUserId = mContext.getUserId();
+ final BatteryHistEntry fakeEntry = createBatteryHistEntry(
+ ConvertUtils.FAKE_PACKAGE_NAME, "fake_label", /*consumePower=*/ 0, /*uid=*/ 0L,
+ currentUserId, ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*foregroundUsageTimeInMs=*/ 0L, /*backgroundUsageTimeInMs=*/ 0L);
+ // Adds the index = 0 data.
+ Map<String, BatteryHistEntry> entryMap = new HashMap<>();
+ BatteryHistEntry entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 5.0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 10L,
+ /*backgroundUsageTimeInMs=*/ 20L);
+ entryMap.put(entry.getKey(), entry);
+ entryMap.put(fakeEntry.getKey(), fakeEntry);
+ batteryHistoryMap.put(batteryHistoryKeys[0], entryMap);
+ // Adds the index = 1 data.
+ entryMap = new HashMap<>();
+ entryMap.put(fakeEntry.getKey(), fakeEntry);
+ batteryHistoryMap.put(batteryHistoryKeys[1], entryMap);
+ // Adds the index = 2 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 20.0, /*uid=*/ 2L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 15L,
+ 25L);
+ entryMap.put(entry.getKey(), entry);
+ entryMap.put(fakeEntry.getKey(), fakeEntry);
+ batteryHistoryMap.put(batteryHistoryKeys[2], entryMap);
+ // Adds the index = 3 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 40.0, /*uid=*/ 2L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 25L,
+ /*backgroundUsageTimeInMs=*/ 35L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 10.0, /*uid=*/ 3L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*foregroundUsageTimeInMs=*/ 40L,
+ /*backgroundUsageTimeInMs=*/ 50L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package3", "label3", /*consumePower=*/ 15.0, /*uid=*/ 4L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 5L,
+ /*backgroundUsageTimeInMs=*/ 5L);
+ entryMap.put(entry.getKey(), entry);
+ entryMap.put(fakeEntry.getKey(), fakeEntry);
+ batteryHistoryMap.put(batteryHistoryKeys[3], entryMap);
+ // Adds the index = 4 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 40.0, /*uid=*/ 2L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 30L,
+ /*backgroundUsageTimeInMs=*/ 40L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 20.0, /*uid=*/ 3L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*foregroundUsageTimeInMs=*/ 50L,
+ /*backgroundUsageTimeInMs=*/ 60L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package3", "label3", /*consumePower=*/ 40.0, /*uid=*/ 4L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 5L,
+ /*backgroundUsageTimeInMs=*/ 5L);
+ entryMap.put(entry.getKey(), entry);
+ entryMap.put(fakeEntry.getKey(), fakeEntry);
+ batteryHistoryMap.put(batteryHistoryKeys[4], entryMap);
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay =
+ new ArrayList<>();
+ // Adds the day 1 data.
+ List<Long> timestamps =
+ List.of(batteryHistoryKeys[0], batteryHistoryKeys[2]);
+ final List<Integer> levels = List.of(100, 100);
+ hourlyBatteryLevelsPerDay.add(
+ new BatteryLevelData.PeriodBatteryLevelData(timestamps, levels));
+ // Adds the day 2 data.
+ timestamps = List.of(batteryHistoryKeys[2], batteryHistoryKeys[4]);
+ hourlyBatteryLevelsPerDay.add(
+ new BatteryLevelData.PeriodBatteryLevelData(timestamps, levels));
+
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap =
+ DataProcessor.getBatteryUsageMap(
+ mContext, hourlyBatteryLevelsPerDay, batteryHistoryMap);
+
+ BatteryDiffData resultDiffData =
+ resultMap
+ .get(DataProcessor.SELECTED_INDEX_ALL)
+ .get(DataProcessor.SELECTED_INDEX_ALL);
+ assertBatteryDiffEntry(
+ resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 2L,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 40.0,
+ /*foregroundUsageTimeInMs=*/ 30, /*backgroundUsageTimeInMs=*/ 40);
+ assertBatteryDiffEntry(
+ resultDiffData.getAppDiffEntryList().get(1), currentUserId, /*uid=*/ 4L,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 40.0,
+ /*foregroundUsageTimeInMs=*/ 5, /*backgroundUsageTimeInMs=*/ 5);
+ assertBatteryDiffEntry(
+ resultDiffData.getSystemDiffEntryList().get(0), currentUserId, /*uid=*/ 3L,
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 20.0,
+ /*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60);
+ resultDiffData = resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL);
+ assertBatteryDiffEntry(
+ resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 2L,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 100.0,
+ /*foregroundUsageTimeInMs=*/ 15, /*backgroundUsageTimeInMs=*/ 25);
+ resultDiffData = resultMap.get(1).get(DataProcessor.SELECTED_INDEX_ALL);
+ assertBatteryDiffEntry(
+ resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 4L,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0,
+ /*foregroundUsageTimeInMs=*/ 5, /*backgroundUsageTimeInMs=*/ 5);
+ assertBatteryDiffEntry(
+ resultDiffData.getAppDiffEntryList().get(1), currentUserId, /*uid=*/ 2L,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 25.0,
+ /*foregroundUsageTimeInMs=*/ 15, /*backgroundUsageTimeInMs=*/ 15);
+ assertBatteryDiffEntry(
+ resultDiffData.getSystemDiffEntryList().get(0), currentUserId, /*uid=*/ 3L,
+ ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY, /*consumePercentage=*/ 25.0,
+ /*foregroundUsageTimeInMs=*/ 50, /*backgroundUsageTimeInMs=*/ 60);
+ }
+
+ @Test
+ public void getBatteryUsageMap_multipleUsers_returnsExpectedResult() {
+ final long[] batteryHistoryKeys = new long[]{
+ 1641052800000L, // 2022-01-02 00:00:00
+ 1641056400000L, // 2022-01-02 01:00:00
+ 1641060000000L // 2022-01-02 02:00:00
+ };
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
+ final int currentUserId = mContext.getUserId();
+ // Adds the index = 0 data.
+ Map<String, BatteryHistEntry> entryMap = new HashMap<>();
+ BatteryHistEntry entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 5.0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 10L,
+ /*backgroundUsageTimeInMs=*/ 20L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 10.0, /*uid=*/ 2L, currentUserId + 1,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 10L,
+ /*backgroundUsageTimeInMs=*/ 20L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 5.0, /*uid=*/ 3L, currentUserId + 2,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 20L,
+ /*backgroundUsageTimeInMs=*/ 30L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[0], entryMap);
+ // Adds the index = 1 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 15.0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 20L,
+ /*backgroundUsageTimeInMs=*/ 30L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 30.0, /*uid=*/ 2L, currentUserId + 1,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 10L,
+ /*backgroundUsageTimeInMs=*/ 20L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 15.0, /*uid=*/ 3L, currentUserId + 2,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 30L,
+ /*backgroundUsageTimeInMs=*/ 30L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[1], entryMap);
+ // Adds the index = 2 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 25.0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 20L,
+ /*backgroundUsageTimeInMs=*/ 30L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 50.0, /*uid=*/ 2L, currentUserId + 1,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 20L,
+ /*backgroundUsageTimeInMs=*/ 20L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 25.0, /*uid=*/ 3L, currentUserId + 2,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 30L,
+ /*backgroundUsageTimeInMs=*/ 30L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[2], entryMap);
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay =
+ new ArrayList<>();
+ List<Long> timestamps = List.of(batteryHistoryKeys[0], batteryHistoryKeys[2]);
+ final List<Integer> levels = List.of(100, 100);
+ hourlyBatteryLevelsPerDay.add(
+ new BatteryLevelData.PeriodBatteryLevelData(timestamps, levels));
+
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap =
+ DataProcessor.getBatteryUsageMap(
+ mContext, hourlyBatteryLevelsPerDay, batteryHistoryMap);
+
+ final BatteryDiffData resultDiffData =
+ resultMap
+ .get(DataProcessor.SELECTED_INDEX_ALL)
+ .get(DataProcessor.SELECTED_INDEX_ALL);
+ assertBatteryDiffEntry(
+ resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 1L,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 25.0,
+ /*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 10);
+ assertBatteryDiffEntry(
+ resultDiffData.getSystemDiffEntryList().get(0), BatteryUtils.UID_OTHER_USERS,
+ /*uid=*/ BatteryUtils.UID_OTHER_USERS, ConvertUtils.CONSUMER_TYPE_UID_BATTERY,
+ /*consumePercentage=*/ 75.0, /*foregroundUsageTimeInMs=*/ 0,
+ /*backgroundUsageTimeInMs=*/ 0);
+ assertThat(resultMap.get(0).get(0)).isNotNull();
+ assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull();
+ }
+
+ @Test
+ public void getBatteryUsageMap_usageTimeExceed_returnsExpectedResult() {
+ final long[] batteryHistoryKeys = new long[]{
+ 1641052800000L, // 2022-01-02 00:00:00
+ 1641056400000L, // 2022-01-02 01:00:00
+ 1641060000000L // 2022-01-02 02:00:00
+ };
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
+ final int currentUserId = mContext.getUserId();
+ // Adds the index = 0 data.
+ Map<String, BatteryHistEntry> entryMap = new HashMap<>();
+ BatteryHistEntry entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[0], entryMap);
+ // Adds the index = 1 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[1], entryMap);
+ // Adds the index = 2 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 500.0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 3600000L,
+ /*backgroundUsageTimeInMs=*/ 7200000L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[2], entryMap);
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay =
+ new ArrayList<>();
+ List<Long> timestamps = List.of(batteryHistoryKeys[0], batteryHistoryKeys[2]);
+ final List<Integer> levels = List.of(100, 100);
+ hourlyBatteryLevelsPerDay.add(
+ new BatteryLevelData.PeriodBatteryLevelData(timestamps, levels));
+
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap =
+ DataProcessor.getBatteryUsageMap(
+ mContext, hourlyBatteryLevelsPerDay, batteryHistoryMap);
+
+ final BatteryDiffData resultDiffData =
+ resultMap
+ .get(DataProcessor.SELECTED_INDEX_ALL)
+ .get(DataProcessor.SELECTED_INDEX_ALL);
+ // Verifies the clipped usage time.
+ final float ratio = (float) (7200) / (float) (3600 + 7200);
+ final BatteryDiffEntry resultEntry = resultDiffData.getAppDiffEntryList().get(0);
+ assertThat(resultEntry.mForegroundUsageTimeInMs)
+ .isEqualTo(Math.round(entry.mForegroundUsageTimeInMs * ratio));
+ assertThat(resultEntry.mBackgroundUsageTimeInMs)
+ .isEqualTo(Math.round(entry.mBackgroundUsageTimeInMs * ratio));
+ assertThat(resultEntry.mConsumePower)
+ .isEqualTo(entry.mConsumePower * ratio);
+ assertThat(resultMap.get(0).get(0)).isNotNull();
+ assertThat(resultMap.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isNotNull();
+ }
+
+ @Test
+ public void getBatteryUsageMap_hideApplicationEntries_returnsExpectedResult() {
+ final long[] batteryHistoryKeys = new long[]{
+ 1641052800000L, // 2022-01-02 00:00:00
+ 1641056400000L, // 2022-01-02 01:00:00
+ 1641060000000L // 2022-01-02 02:00:00
+ };
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
+ final int currentUserId = mContext.getUserId();
+ // Adds the index = 0 data.
+ Map<String, BatteryHistEntry> entryMap = new HashMap<>();
+ BatteryHistEntry entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 0, /*uid=*/ 2L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[0], entryMap);
+ // Adds the index = 1 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 0, /*uid=*/ 2L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[1], entryMap);
+ // Adds the index = 2 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 10.0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 10L,
+ /*backgroundUsageTimeInMs=*/ 20L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 10.0, /*uid=*/ 2L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 10L,
+ /*backgroundUsageTimeInMs=*/ 20L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[2], entryMap);
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay =
+ new ArrayList<>();
+ List<Long> timestamps = List.of(batteryHistoryKeys[0], batteryHistoryKeys[2]);
+ final List<Integer> levels = List.of(100, 100);
+ hourlyBatteryLevelsPerDay.add(
+ new BatteryLevelData.PeriodBatteryLevelData(timestamps, levels));
+ when(mPowerUsageFeatureProvider.getHideApplicationEntries(mContext))
+ .thenReturn(new CharSequence[]{"package1"});
+
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap =
+ DataProcessor.getBatteryUsageMap(
+ mContext, hourlyBatteryLevelsPerDay, batteryHistoryMap);
+
+ final BatteryDiffData resultDiffData =
+ resultMap
+ .get(DataProcessor.SELECTED_INDEX_ALL)
+ .get(DataProcessor.SELECTED_INDEX_ALL);
+ assertBatteryDiffEntry(
+ resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 2L,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0,
+ /*foregroundUsageTimeInMs=*/ 10, /*backgroundUsageTimeInMs=*/ 20);
+ }
+
+ @Test
+ public void getBatteryUsageMap_hideBackgroundUsageTime_returnsExpectedResult() {
+ final long[] batteryHistoryKeys = new long[]{
+ 1641052800000L, // 2022-01-02 00:00:00
+ 1641056400000L, // 2022-01-02 01:00:00
+ 1641060000000L // 2022-01-02 02:00:00
+ };
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
+ final int currentUserId = mContext.getUserId();
+ // Adds the index = 0 data.
+ Map<String, BatteryHistEntry> entryMap = new HashMap<>();
+ BatteryHistEntry entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 0, /*uid=*/ 2L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[0], entryMap);
+ // Adds the index = 1 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 0, /*uid=*/ 2L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 0L,
+ /*backgroundUsageTimeInMs=*/ 0L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[1], entryMap);
+ // Adds the index = 2 data.
+ entryMap = new HashMap<>();
+ entry = createBatteryHistEntry(
+ "package1", "label1", /*consumePower=*/ 10.0, /*uid=*/ 1L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 10L,
+ /*backgroundUsageTimeInMs=*/ 20L);
+ entryMap.put(entry.getKey(), entry);
+ entry = createBatteryHistEntry(
+ "package2", "label2", /*consumePower=*/ 10.0, /*uid=*/ 2L, currentUserId,
+ ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*foregroundUsageTimeInMs=*/ 10L,
+ /*backgroundUsageTimeInMs=*/ 20L);
+ entryMap.put(entry.getKey(), entry);
+ batteryHistoryMap.put(batteryHistoryKeys[2], entryMap);
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay =
+ new ArrayList<>();
+ List<Long> timestamps = List.of(batteryHistoryKeys[0], batteryHistoryKeys[2]);
+ final List<Integer> levels = List.of(100, 100);
+ hourlyBatteryLevelsPerDay.add(
+ new BatteryLevelData.PeriodBatteryLevelData(timestamps, levels));
+ when(mPowerUsageFeatureProvider.getHideBackgroundUsageTimeSet(mContext))
+ .thenReturn(new HashSet(Arrays.asList((CharSequence) "package2")));
+
+ final Map<Integer, Map<Integer, BatteryDiffData>> resultMap =
+ DataProcessor.getBatteryUsageMap(
+ mContext, hourlyBatteryLevelsPerDay, batteryHistoryMap);
+
+ final BatteryDiffData resultDiffData =
+ resultMap
+ .get(DataProcessor.SELECTED_INDEX_ALL)
+ .get(DataProcessor.SELECTED_INDEX_ALL);
+ BatteryDiffEntry resultEntry = resultDiffData.getAppDiffEntryList().get(0);
+ assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(20);
+ resultEntry = resultDiffData.getAppDiffEntryList().get(1);
+ assertThat(resultEntry.mBackgroundUsageTimeInMs).isEqualTo(0);
+ }
+
+ private static Map<Long, Map<String, BatteryHistEntry>> createHistoryMap(
+ final long[] timestamps, final int[] levels) {
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap = new HashMap<>();
+ for (int index = 0; index < timestamps.length; index++) {
+ final Map<String, BatteryHistEntry> entryMap = new HashMap<>();
+ final ContentValues values = new ContentValues();
+ values.put(BatteryHistEntry.KEY_BATTERY_LEVEL, levels[index]);
+ final BatteryHistEntry entry = new BatteryHistEntry(values);
+ entryMap.put(FAKE_ENTRY_KEY, entry);
+ batteryHistoryMap.put(timestamps[index], entryMap);
+ }
+ return batteryHistoryMap;
+ }
+
+ private static BatteryHistEntry createBatteryHistEntry(
+ final String packageName, final String appLabel, final double consumePower,
+ final long uid, final long userId, final int consumerType,
+ final long foregroundUsageTimeInMs, final long backgroundUsageTimeInMs) {
+ // Only insert required fields.
+ final ContentValues values = new ContentValues();
+ values.put(BatteryHistEntry.KEY_PACKAGE_NAME, packageName);
+ values.put(BatteryHistEntry.KEY_APP_LABEL, appLabel);
+ values.put(BatteryHistEntry.KEY_UID, uid);
+ values.put(BatteryHistEntry.KEY_USER_ID, userId);
+ values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, consumerType);
+ values.put(BatteryHistEntry.KEY_CONSUME_POWER, consumePower);
+ values.put(BatteryHistEntry.KEY_FOREGROUND_USAGE_TIME, foregroundUsageTimeInMs);
+ values.put(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME, backgroundUsageTimeInMs);
+ return new BatteryHistEntry(values);
+ }
+
+ private static void verifyExpectedBatteryLevelData(
+ final BatteryLevelData resultData,
+ final List<Long> expectedDailyTimestamps,
+ final List<Integer> expectedDailyLevels,
+ final List<List<Long>> expectedHourlyTimestamps,
+ final List<List<Integer>> expectedHourlyLevels) {
+ final BatteryLevelData.PeriodBatteryLevelData dailyResultData =
+ resultData.getDailyBatteryLevels();
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyResultData =
+ resultData.getHourlyBatteryLevelsPerDay();
+ verifyExpectedDailyBatteryLevelData(
+ dailyResultData, expectedDailyTimestamps, expectedDailyLevels);
+ verifyExpectedHourlyBatteryLevelData(
+ hourlyResultData, expectedHourlyTimestamps, expectedHourlyLevels);
+ }
+
+ private static void verifyExpectedDailyBatteryLevelData(
+ final BatteryLevelData.PeriodBatteryLevelData dailyResultData,
+ final List<Long> expectedDailyTimestamps,
+ final List<Integer> expectedDailyLevels) {
+ assertThat(dailyResultData.getTimestamps()).isEqualTo(expectedDailyTimestamps);
+ assertThat(dailyResultData.getLevels()).isEqualTo(expectedDailyLevels);
+ }
+
+ private static void verifyExpectedHourlyBatteryLevelData(
+ final List<BatteryLevelData.PeriodBatteryLevelData> hourlyResultData,
+ final List<List<Long>> expectedHourlyTimestamps,
+ final List<List<Integer>> expectedHourlyLevels) {
+ final int expectedHourlySize = expectedHourlyTimestamps.size();
+ assertThat(hourlyResultData).hasSize(expectedHourlySize);
+ for (int dailyIndex = 0; dailyIndex < expectedHourlySize; dailyIndex++) {
+ assertThat(hourlyResultData.get(dailyIndex).getTimestamps())
+ .isEqualTo(expectedHourlyTimestamps.get(dailyIndex));
+ assertThat(hourlyResultData.get(dailyIndex).getLevels())
+ .isEqualTo(expectedHourlyLevels.get(dailyIndex));
+ }
+ }
+
+ private static void verifyExpectedTimestampSlots(
+ final Calendar start,
+ final Calendar end,
+ final Calendar expectedStart,
+ final Calendar expectedEnd) {
+ expectedStart.set(Calendar.MILLISECOND, 0);
+ expectedEnd.set(Calendar.MILLISECOND, 0);
+ final ArrayList<Long> timestampSlots = new ArrayList<>();
+ timestampSlots.add(start.getTimeInMillis());
+ timestampSlots.add(end.getTimeInMillis());
+ final List<Long> resultList =
+ DataProcessor.getTimestampSlots(timestampSlots);
+
+ for (int index = 0; index < resultList.size(); index++) {
+ final long expectedTimestamp =
+ expectedStart.getTimeInMillis() + index * DateUtils.HOUR_IN_MILLIS;
+ assertThat(resultList.get(index)).isEqualTo(expectedTimestamp);
+ }
+ assertThat(resultList.get(resultList.size() - 1))
+ .isEqualTo(expectedEnd.getTimeInMillis());
+ }
+
+ private static void assertBatteryDiffEntry(
+ final BatteryDiffEntry entry, final long userId, final long uid,
+ final int consumerType, final double consumePercentage,
+ final long foregroundUsageTimeInMs, final long backgroundUsageTimeInMs) {
+ assertThat(entry.mBatteryHistEntry.mUserId).isEqualTo(userId);
+ assertThat(entry.mBatteryHistEntry.mUid).isEqualTo(uid);
+ assertThat(entry.mBatteryHistEntry.mConsumerType).isEqualTo(consumerType);
+ assertThat(entry.getPercentOfTotal()).isEqualTo(consumePercentage);
+ assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs);
+ assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ExpandDividerPreferenceTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ExpandDividerPreferenceTest.java
index 9e32da4..e36f948 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/ExpandDividerPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ExpandDividerPreferenceTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2021 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,14 +14,13 @@
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
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.widget.ImageView;
@@ -74,7 +73,7 @@
@Test
public void testOnClick_switchExpandStateAndInvokeCallback() {
- final boolean[] isExpandedArray = new boolean[] {false};
+ final boolean[] isExpandedArray = new boolean[]{false};
mExpandDividerPreference.mImageView = mImageView;
mExpandDividerPreference.setOnExpandListener(
isExpanded -> isExpandedArray[0] = isExpanded);
@@ -94,7 +93,7 @@
@Test
public void testSetIsExpanded_updateStateButNotInvokeCallback() {
- final boolean[] isExpandedArray = new boolean[] {false};
+ final boolean[] isExpandedArray = new boolean[]{false};
mExpandDividerPreference.mImageView = mImageView;
mExpandDividerPreference.setOnExpandListener(
isExpanded -> isExpandedArray[0] = isExpanded);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerGaugePreferenceTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
similarity index 94%
rename from tests/robotests/src/com/android/settings/fuelgauge/PowerGaugePreferenceTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
index 10b89a6..5d599fe 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerGaugePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerGaugePreferenceTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static com.google.common.truth.Truth.assertThat;
@@ -55,7 +55,7 @@
mContext = RuntimeEnvironment.application;
mRootView = LayoutInflater.from(mContext).inflate(R.layout.preference_app, null);
mWidgetView =
- LayoutInflater.from(mContext).inflate(R.layout.preference_widget_summary, null);
+ LayoutInflater.from(mContext).inflate(R.layout.preference_widget_summary, null);
final LinearLayout widgetFrame = mRootView.findViewById(android.R.id.widget_frame);
assertThat(widgetFrame).isNotNull();
widgetFrame.addView(mWidgetView);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageBaseTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageBaseTest.java
similarity index 95%
rename from tests/robotests/src/com/android/settings/fuelgauge/PowerUsageBaseTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageBaseTest.java
index 451e605..2700930 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageBaseTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageBaseTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
similarity index 91%
rename from tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
rename to tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
index 843cc99..c049497 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -13,11 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.fuelgauge;
+package com.android.settings.fuelgauge.batteryusage;
-import static com.android.settings.fuelgauge.PowerUsageSummary.BATTERY_INFO_LOADER;
-import static com.android.settings.fuelgauge.PowerUsageSummary.KEY_BATTERY_ERROR;
-import static com.android.settings.fuelgauge.PowerUsageSummary.KEY_BATTERY_USAGE;
+import static com.android.settings.fuelgauge.batteryusage.PowerUsageSummary.BATTERY_INFO_LOADER;
+import static com.android.settings.fuelgauge.batteryusage.PowerUsageSummary.KEY_BATTERY_ERROR;
+import static com.android.settings.fuelgauge.batteryusage.PowerUsageSummary.KEY_BATTERY_USAGE;
import static com.google.common.truth.Truth.assertThat;
@@ -44,6 +44,8 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
+import com.android.settings.fuelgauge.BatteryBroadcastReceiver;
+import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.XmlTestUtils;
@@ -55,6 +57,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -74,6 +77,7 @@
public static void beforeClass() {
sAdditionalBatteryInfoIntent = new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
}
+
@Mock
private SettingsActivity mSettingsActivity;
@Mock
@@ -111,7 +115,7 @@
.thenReturn(sAdditionalBatteryInfoIntent);
when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mRealContext))
.thenReturn(true);
- mFragment.mBatteryUtils = spy(new BatteryUtils(mRealContext));
+ mFragment.mBatteryUtils = Mockito.spy(new BatteryUtils(mRealContext));
ReflectionHelpers.setField(mFragment, "mVisibilityLoggerMixin", mVisibilityLoggerMixin);
ReflectionHelpers.setField(mFragment, "mBatteryBroadcastReceiver",
mBatteryBroadcastReceiver);
@@ -135,17 +139,7 @@
}
@Test
- public void initPreference_chartGraphEnabled_hasCorrectSummary() {
- mFragment.initPreference();
-
- verify(mBatteryUsagePreference).setSummary("View usage for past 24 hours");
- }
-
- @Test
- public void initPreference_chartGraphDisabled_hasCorrectSummary() {
- when(mFeatureFactory.powerUsageFeatureProvider.isChartGraphEnabled(mRealContext))
- .thenReturn(false);
-
+ public void initPreference_hasCorrectSummary() {
mFragment.initPreference();
verify(mBatteryUsagePreference).setSummary("View usage from last full charge");
diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java
deleted file mode 100644
index 5637e96..0000000
--- a/tests/robotests/src/com/android/settings/gestures/LongPressPowerButtonPreferenceControllerTest.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.gestures;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.app.Application;
-import android.content.res.Resources;
-import android.provider.Settings;
-
-import androidx.annotation.StringRes;
-import androidx.preference.Preference;
-import androidx.test.core.app.ApplicationProvider;
-
-import com.android.settings.R;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.MockitoAnnotations;
-import org.mockito.stubbing.Answer;
-import org.robolectric.RobolectricTestRunner;
-
-@RunWith(RobolectricTestRunner.class)
-public class LongPressPowerButtonPreferenceControllerTest {
-
- private static final String KEY_LONG_PRESS_POWER_BUTTON =
- "gesture_power_menu_long_press_for_assist";
-
- private Application mContext;
- private Resources mResources;
- private LongPressPowerButtonPreferenceController mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = spy(ApplicationProvider.getApplicationContext());
- mResources = mock(Resources.class);
- when(mContext.getResources()).thenReturn(mResources);
- when(mResources.getString(anyInt())).thenAnswer((Answer<String>) invocation -> {
- int id = invocation.getArgument(0);
- return getString(id);
- });
- when(mResources.getBoolean(
- com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
- .thenReturn(true);
- mController = new LongPressPowerButtonPreferenceController(mContext,
- KEY_LONG_PRESS_POWER_BUTTON);
- mController.mAssistSwitch = mock(Preference.class);
- mController.mFooterHint = mock(Preference.class);
- }
-
- @Test
- public void isAvailable_configIsTrue_shouldReturnTrue() {
- when(mResources.getBoolean(
- com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
- .thenReturn(true);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void isAvailable_configIsFalse_shouldReturnFalse() {
- when(mResources.getBoolean(
- com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
- .thenReturn(false);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void preferenceChecked_powerMenuHintTextShown() {
- mController.onPreferenceChange(null, true);
-
- verify(mController.mFooterHint).setSummary(
- getString(
- R.string.power_menu_power_volume_up_hint));
- verify(mController.mFooterHint).setVisible(true);
- }
-
-
- @Test
- public void preferenceUnchecked_keyChordEnabled_powerMenuHintTextShown() {
- when(mResources.getInteger(
- com.android.internal.R.integer.config_keyChordPowerVolumeUp))
- .thenReturn(
- LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
-
- mController.onPreferenceChange(null, false);
-
- verify(mController.mFooterHint).setSummary(
- getString(
- R.string.power_menu_power_volume_up_hint));
- verify(mController.mFooterHint).setVisible(true);
- }
-
- @Test
- public void preferenceChecked_hushGestureEnabled_powerMenuHintTextIncludesHushHint() {
- when(mResources.getBoolean(
- com.android.internal.R.bool.config_volumeHushGestureEnabled))
- .thenReturn(true);
-
- mController.onPreferenceChange(null, true);
-
- verify(mController.mFooterHint).setSummary(
- getString(
- R.string.power_menu_power_volume_up_hint) + "\n\n"
- + getString(
- R.string.power_menu_power_prevent_ringing_hint));
- verify(mController.mFooterHint).setVisible(true);
- }
-
-
- @Test
- public void preferenceUnchecked_keyChordDisabled_powerMenuHintTextHidden() {
- mController.onPreferenceChange(null, false);
- when(mResources.getInteger(
- com.android.internal.R.integer.config_keyChordPowerVolumeUp))
- .thenReturn(
- LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
-
- verify(mController.mFooterHint).setVisible(false);
- }
-
- @Test
- public void preferenceChecked_longPressPowerSettingSetToAssistant() {
- mController.onPreferenceChange(null, true);
-
- assertThat(Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
- PowerMenuSettingsUtils.LONG_PRESS_POWER_ASSISTANT_VALUE);
- assertThat(Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
- LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_GLOBAL_ACTIONS);
- }
-
- @Test
- public void preferenceUnchecked_longPressPowerSettingSetToDefaultValue() {
- when(mResources.getInteger(
- com.android.internal.R.integer.config_longPressOnPowerBehavior))
- .thenReturn(
- PowerMenuSettingsUtils.LONG_PRESS_POWER_GLOBAL_ACTIONS);
-
- mController.onPreferenceChange(null, false);
-
- assertThat(Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
- PowerMenuSettingsUtils.LONG_PRESS_POWER_GLOBAL_ACTIONS);
- assertThat(Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
- LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
- verify(mController.mAssistSwitch).setSummary(
- getString(
- R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu));
- }
-
- @Test
- public void preferenceUnchecked_muteChordDefault_longPressPowerSettingSetToDefaultValue() {
- // Value out of range chosen deliberately.
- when(mResources.getInteger(
- com.android.internal.R.integer.config_longPressOnPowerBehavior))
- .thenReturn(8);
- when(mResources.getInteger(
- com.android.internal.R.integer.config_keyChordPowerVolumeUp))
- .thenReturn(
- LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE);
-
- mController.onPreferenceChange(null, false);
-
- assertThat(Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(8);
- assertThat(Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
- LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_MUTE_TOGGLE);
- }
-
- @Test
- public void preferenceUnchecked_assistDefault_setNoAction() {
- // Ensure that the Assistant is the default behavior for LPP.
- when(mResources.getInteger(
- com.android.internal.R.integer.config_longPressOnPowerBehavior))
- .thenReturn(
- PowerMenuSettingsUtils.LONG_PRESS_POWER_ASSISTANT_VALUE);
-
- mController.onPreferenceChange(null, false);
-
- assertThat(Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(
- PowerMenuSettingsUtils.LONG_PRESS_POWER_GLOBAL_ACTIONS);
- assertThat(Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(
- LongPressPowerButtonPreferenceController.KEY_CHORD_POWER_VOLUME_UP_NO_ACTION);
- verify(mController.mAssistSwitch).setSummary(getString(
- R.string.power_menu_summary_long_press_for_assist_disabled_with_power_menu));
- }
-
- private String getString(@StringRes int id) {
- return ApplicationProvider.getApplicationContext().getString(id);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerFooterPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerFooterPreferenceControllerTest.java
new file mode 100644
index 0000000..e1cd53e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/gestures/LongPressPowerFooterPreferenceControllerTest.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.gestures;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.Application;
+import android.content.res.Resources;
+import android.text.TextUtils;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settingslib.widget.FooterPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class LongPressPowerFooterPreferenceControllerTest {
+
+ private Application mContext;
+ private Resources mResources;
+ private Preference mPreference;
+ private LongPressPowerFooterPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mResources = spy(mContext.getResources());
+ when(mContext.getResources()).thenReturn(mResources);
+ mPreference = new FooterPreference(mContext);
+ mController = new LongPressPowerFooterPreferenceController(mContext, "test_key");
+
+ PreferenceScreen mScreen = mock(PreferenceScreen.class);
+ when(mScreen.findPreference("test_key")).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void updateState_longPressPowerForPowerMenu_hidesPreference() {
+ PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isVisible()).isFalse();
+ }
+
+ @Test
+ public void updateState_longPressPowerForAssistant_showsPreference() {
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isVisible()).isTrue();
+ }
+
+ @Test
+ public void updateState_notEligible_showsPreference() {
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isVisible()).isTrue();
+ }
+
+ @Test
+ public void updateState_hushGestureEnabled_includesPreventRingingHint() {
+ when(mResources.getBoolean(com.android.internal.R.bool.config_volumeHushGestureEnabled))
+ .thenReturn(true);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getSummary().toString())
+ .isEqualTo(
+ TextUtils.concat(
+ mContext.getString(R.string.power_menu_power_volume_up_hint),
+ "\n\n",
+ mContext.getString(
+ R.string.power_menu_power_prevent_ringing_hint)));
+ }
+
+ @Test
+ public void updateState_hushGestureDisabled_doesNotIncludePreventRingingHint() {
+ when(mResources.getBoolean(com.android.internal.R.bool.config_volumeHushGestureEnabled))
+ .thenReturn(false);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getSummary().toString())
+ .isEqualTo(mContext.getString(R.string.power_menu_power_volume_up_hint));
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerForAssistantPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerForAssistantPreferenceControllerTest.java
new file mode 100644
index 0000000..e210077
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/gestures/LongPressPowerForAssistantPreferenceControllerTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.gestures;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.Application;
+import android.content.res.Resources;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class LongPressPowerForAssistantPreferenceControllerTest {
+
+ private Application mContext;
+ private Resources mResources;
+ private SelectorWithWidgetPreference mPreference;
+ private LongPressPowerForAssistantPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mResources = spy(mContext.getResources());
+ mPreference = new SelectorWithWidgetPreference(mContext);
+ mController = new LongPressPowerForAssistantPreferenceController(mContext, "test_key");
+
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(5); // Default to Assistant
+
+ PreferenceScreen mScreen = mock(PreferenceScreen.class);
+ when(mScreen.findPreference("test_key")).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ mController.onStart();
+ }
+
+ @Test
+ public void initialState_longPressPowerForPowerMenu_preferenceNotChecked() {
+ PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isChecked()).isFalse();
+ }
+
+ @Test
+ public void initialState_longPressPowerForAssistant_preferenceChecked() {
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isChecked()).isTrue();
+ }
+
+ @Test
+ public void getAvailabilityStatus_longPressPowerSettingAvailable_returnsAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_longPressPowerSettingNotAvailable_returnsNotAvailable() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(false);
+
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void onClick_updatesSettingsValue_checksPreference() {
+ // Initial state: preference not checked
+ PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
+ mController.updateState(mPreference);
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)).isFalse();
+ assertThat(mPreference.isChecked()).isFalse();
+
+ mPreference.performClick();
+
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)).isTrue();
+ assertThat(mPreference.isChecked()).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerForPowerMenuPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerForPowerMenuPreferenceControllerTest.java
new file mode 100644
index 0000000..ea6557b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/gestures/LongPressPowerForPowerMenuPreferenceControllerTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.gestures;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.app.Application;
+import android.content.res.Resources;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class LongPressPowerForPowerMenuPreferenceControllerTest {
+
+ private Application mContext;
+ private Resources mResources;
+ private SelectorWithWidgetPreference mPreference;
+ private LongPressPowerForPowerMenuPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mResources = spy(mContext.getResources());
+ mPreference = new SelectorWithWidgetPreference(mContext);
+ mController = new LongPressPowerForPowerMenuPreferenceController(mContext, "test_key");
+
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(5); // Default to Assistant
+
+ PreferenceScreen mScreen = mock(PreferenceScreen.class);
+ when(mScreen.findPreference("test_key")).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ mController.onStart();
+ }
+
+ @Test
+ public void initialState_longPressPowerForPowerMenu_preferenceChecked() {
+ PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isChecked()).isTrue();
+ }
+
+ @Test
+ public void initialState_longPressPowerForAssistant_preferenceNotChecked() {
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isChecked()).isFalse();
+ }
+
+ @Test
+ public void getAvailabilityStatus_longPressPowerSettingAvailable_returnsAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_longPressPowerSettingNotAvailable_returnsNotAvailable() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(false);
+
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void onClick_updatesSettingsValue_checksPreference() {
+ // Initial state: preference not checked
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+ mController.updateState(mPreference);
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)).isTrue();
+ assertThat(mPreference.isChecked()).isFalse();
+
+ mPreference.performClick();
+
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)).isFalse();
+ assertThat(mPreference.isChecked()).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerIllustrationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerIllustrationPreferenceControllerTest.java
new file mode 100644
index 0000000..37a4c0b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/gestures/LongPressPowerIllustrationPreferenceControllerTest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.gestures;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.app.Application;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settingslib.widget.IllustrationPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class LongPressPowerIllustrationPreferenceControllerTest {
+
+ private Application mContext;
+ private IllustrationPreference mPreference;
+ private LongPressPowerIllustrationPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContext = ApplicationProvider.getApplicationContext();
+ mPreference = new IllustrationPreference(mContext);
+ mController = new LongPressPowerIllustrationPreferenceController(mContext, "test_key");
+
+ PreferenceScreen mScreen = mock(PreferenceScreen.class);
+ when(mScreen.findPreference("test_key")).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void updateState_longPressPowerForPowerMenu_showsPowerMenuAnimation() {
+ PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getLottieAnimationResId())
+ .isEqualTo(R.raw.lottie_long_press_power_for_power_menu);
+ }
+
+ @Test
+ public void updateState_longPressPowerForAssistant_showsAssistantAnimation() {
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.getLottieAnimationResId())
+ .isEqualTo(R.raw.lottie_long_press_power_for_assistant);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/gestures/LongPressPowerSensitivityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/LongPressPowerSensitivityPreferenceControllerTest.java
index 9c99092..d1c0922 100644
--- a/tests/robotests/src/com/android/settings/gestures/LongPressPowerSensitivityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/LongPressPowerSensitivityPreferenceControllerTest.java
@@ -26,14 +26,20 @@
import android.content.res.Resources;
import android.provider.Settings;
+import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
+import com.android.settings.widget.LabeledSeekBarPreference;
+import com.android.settingslib.testutils.shadow.ShadowInteractionJankMonitor;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowInteractionJankMonitor.class})
public class LongPressPowerSensitivityPreferenceControllerTest {
private static final String KEY_LONG_PRESS_SENSITIVITY =
@@ -43,7 +49,9 @@
private Application mContext;
private Resources mResources;
+ private LabeledSeekBarPreference mPreference;
private LongPressPowerSensitivityPreferenceController mController;
+ private PreferenceScreen mScreen;
@Before
public void setUp() {
@@ -52,11 +60,22 @@
when(mContext.getResources()).thenReturn(mResources);
when(mResources.getIntArray(
- com.android.internal.R.array.config_longPressOnPowerDurationSettings))
+ com.android.internal.R.array.config_longPressOnPowerDurationSettings))
.thenReturn(SENSITIVITY_VALUES);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(5); // Default to Assistant
+ mPreference = new LabeledSeekBarPreference(mContext, null);
mController = new LongPressPowerSensitivityPreferenceController(mContext,
KEY_LONG_PRESS_SENSITIVITY);
+
+ mScreen = mock(PreferenceScreen.class);
+ when(mScreen.findPreference(KEY_LONG_PRESS_SENSITIVITY)).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
}
@Test
@@ -98,46 +117,64 @@
}
@Test
- public void longPressForAssistEnabled_isAvailable() {
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.POWER_BUTTON_LONG_PRESS,
- PowerMenuSettingsUtils.LONG_PRESS_POWER_ASSISTANT_VALUE);
+ public void longPressForAssistant_isVisible() {
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
- assertThat(mController.getAvailabilityStatus()).isEqualTo(
- LongPressPowerSensitivityPreferenceController.AVAILABLE);
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isVisible()).isTrue();
}
@Test
- public void longPressForAssistDisabled_isNotAvailableDueToDependentSetting() {
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.POWER_BUTTON_LONG_PRESS,
- PowerMenuSettingsUtils.LONG_PRESS_POWER_NO_ACTION);
+ public void longPressForPowerMenu_isHidden() {
+ PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
- assertThat(mController.getAvailabilityStatus()).isEqualTo(
- LongPressPowerSensitivityPreferenceController.DISABLED_DEPENDENT_SETTING);
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isVisible()).isFalse();
}
@Test
- public void sensitivityValuesAreNull_notAvailable() {
+ public void longPressPowerSettingNotAvailable_notAvailable_isHidden() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(false);
+
+ mController.updateState(mPreference);
+
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(LongPressPowerSensitivityPreferenceController.UNSUPPORTED_ON_DEVICE);
+ assertThat(mPreference.isVisible()).isFalse();
+ }
+
+ @Test
+ public void sensitivityValuesAreNull_notAvailable_isHidden() {
when(mResources.getIntArray(
com.android.internal.R.array.config_longPressOnPowerDurationSettings))
.thenReturn(null);
mController = new LongPressPowerSensitivityPreferenceController(mContext,
KEY_LONG_PRESS_SENSITIVITY);
+ mController.displayPreference(mScreen);
+ mController.updateState(mPreference);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
LongPressPowerSensitivityPreferenceController.UNSUPPORTED_ON_DEVICE);
+ assertThat(mPreference.isVisible()).isFalse();
}
@Test
- public void sensitivityValuesArrayTooShort_notAvailable() {
+ public void sensitivityValuesArrayTooShort_notAvailable_isHidden() {
when(mResources.getIntArray(
com.android.internal.R.array.config_longPressOnPowerDurationSettings))
.thenReturn(new int[]{200});
mController = new LongPressPowerSensitivityPreferenceController(mContext,
KEY_LONG_PRESS_SENSITIVITY);
+ mController.displayPreference(mScreen);
+ mController.updateState(mPreference);
assertThat(mController.getAvailabilityStatus()).isEqualTo(
LongPressPowerSensitivityPreferenceController.UNSUPPORTED_ON_DEVICE);
+ assertThat(mPreference.isVisible()).isFalse();
}
}
diff --git a/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java
index 1a82a13..0dc16cc 100644
--- a/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PowerMenuPreferenceControllerTest.java
@@ -18,20 +18,21 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.content.res.Resources;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class PowerMenuPreferenceControllerTest {
@@ -41,35 +42,75 @@
private static final String KEY_GESTURE_POWER_MENU = "gesture_power_menu";
-
@Before
public void setUp() {
- mContext = spy(RuntimeEnvironment.application);
- mResources = mock(Resources.class);
- when(mResources.getBoolean(
- com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
- .thenReturn(true);
- when(mContext.getResources()).thenReturn(mResources);
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mResources = spy(mContext.getResources());
mController = new PowerMenuPreferenceController(mContext, KEY_GESTURE_POWER_MENU);
+
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(1); // Default to power menu
}
@Test
- public void getAvailabilityStatus_assistAvailable_available() {
+ public void getAvailabilityStatus_settingsAvailable_returnsAvailable() {
when(mResources.getBoolean(
- com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
- .thenReturn(true);
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(1); // Default to power menu
- assertThat(mController.getAvailabilityStatus()).isEqualTo(
- BasePreferenceController.AVAILABLE);
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
}
@Test
- public void getAvailabilityStatus_assistUnavailable_unavailable() {
+ public void getAvailabilityStatus_settingsNotAvailable_returnsNotAvailable() {
when(mResources.getBoolean(
- com.android.internal.R.bool.config_longPressOnPowerForAssistantSettingAvailable))
- .thenReturn(false);
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(false);
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(1); // Default to power menu
- assertThat(mController.getAvailabilityStatus()).isEqualTo(
- BasePreferenceController.UNSUPPORTED_ON_DEVICE);
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_longPressPowerSettingNotAvailable_returnsNotAvailable() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(3); // Default to power off (unsupported setup)
+
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
+ public void getSummary_longPressPowerToAssistant_returnsNotAvailable() {
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+
+ assertThat(mController.getSummary().toString())
+ .isEqualTo(
+ mContext.getString(R.string.power_menu_summary_long_press_for_assistant));
+ }
+
+ @Test
+ public void getSummary_longPressPowerToPowerMenu_returnsNotAvailable() {
+ PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
+
+ assertThat(mController.getSummary().toString())
+ .isEqualTo(
+ mContext.getString(R.string.power_menu_summary_long_press_for_power_menu));
}
}
diff --git a/tests/robotests/src/com/android/settings/gestures/PowerMenuSettingsUtilsTest.java b/tests/robotests/src/com/android/settings/gestures/PowerMenuSettingsUtilsTest.java
index 25f0320..3f16b63 100644
--- a/tests/robotests/src/com/android/settings/gestures/PowerMenuSettingsUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PowerMenuSettingsUtilsTest.java
@@ -44,48 +44,123 @@
mContext = spy(ApplicationProvider.getApplicationContext());
mResources = mock(Resources.class);
when(mContext.getResources()).thenReturn(mResources);
+
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(true);
}
@Test
- public void longPressBehaviourValuePresent_returnsValue() {
- when(mResources.getInteger(
- com.android.internal.R.integer.config_longPressOnPowerBehavior))
- .thenReturn(0);
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.POWER_BUTTON_LONG_PRESS, 1);
-
- assertThat(PowerMenuSettingsUtils.getPowerButtonSettingValue(mContext)).isEqualTo(1);
+ public void isLongPressPowerForAssistantEnabled_valueSetToAssistant_returnsTrue() {
+ Settings.Global.putInt(
+ mContext.getContentResolver(), Settings.Global.POWER_BUTTON_LONG_PRESS, 5);
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)).isTrue();
}
@Test
- public void longPressBehaviourValueNotPresent_returnsDefault() {
- when(mResources.getInteger(
- com.android.internal.R.integer.config_longPressOnPowerBehavior))
- .thenReturn(2);
-
- assertThat(PowerMenuSettingsUtils.getPowerButtonSettingValue(mContext)).isEqualTo(2);
+ public void isLongPressPowerForAssistantEnabled_valueNotSetToAssistant_returnsFalse() {
+ Settings.Global.putInt(
+ mContext.getContentResolver(), Settings.Global.POWER_BUTTON_LONG_PRESS, 3);
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)).isFalse();
}
@Test
- public void longPressBehaviourValueSetToAssistant_isAssistEnabledReturnsTrue() {
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.POWER_BUTTON_LONG_PRESS, 5);
- assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistEnabled(mContext)).isTrue();
+ public void isLongPressPowerForAssistantEnabled_valueNotSet_defaultToAssistant_returnsTrue() {
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(5);
+
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)).isTrue();
}
@Test
- public void longPressBehaviourValueNotSetToAssistant_isAssistEnabledReturnsFalse() {
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.POWER_BUTTON_LONG_PRESS, 3);
- assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistEnabled(mContext)).isFalse();
+ public void isLongPressPowerForAssistantEnabled_valueNotSet_defaultToPowerMenu_returnsFalse() {
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(1);
+
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistantEnabled(mContext)).isFalse();
}
@Test
- public void longPressBehaviourDefaultSetToAssistant_isAssistEnabledReturnsFalse() {
- when(mResources.getInteger(
- com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ public void isLongPressPowerSettingAvailable_defaultToAssistant_returnsTrue() {
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(5);
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerSettingAvailable(mContext)).isTrue();
+ }
+
+ @Test
+ public void isLongPressPowerSettingAvailable_defaultToPowerMenu_returnsTrue() {
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(1);
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerSettingAvailable(mContext)).isTrue();
+ }
+
+ @Test
+ public void isLongPressPowerSettingAvailable_defaultToPowerOff_returnsFalse() {
+ // Power off is the unsupported option in long press power settings
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
.thenReturn(3);
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerSettingAvailable(mContext)).isFalse();
+ }
- assertThat(PowerMenuSettingsUtils.isLongPressPowerForAssistEnabled(mContext)).isFalse();
+ @Test
+ public void isLongPressPowerSettingAvailable_settingDisabled_returnsFalse() {
+ // Disable the setting
+ when(mResources.getBoolean(
+ com.android.internal.R.bool
+ .config_longPressOnPowerForAssistantSettingAvailable))
+ .thenReturn(false);
+ when(mResources.getInteger(com.android.internal.R.integer.config_longPressOnPowerBehavior))
+ .thenReturn(1);
+
+ assertThat(PowerMenuSettingsUtils.isLongPressPowerSettingAvailable(mContext)).isFalse();
+ }
+
+ @Test
+ public void setLongPressPowerForAssistant_updatesValue() throws Exception {
+ boolean result = PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+
+ assertThat(result).isTrue();
+ assertThat(
+ Settings.Global.getInt(
+ mContext.getContentResolver(),
+ Settings.Global.POWER_BUTTON_LONG_PRESS))
+ .isEqualTo(5);
+ }
+
+ @Test
+ public void setLongPressPowerForAssistant_updatesKeyChordValueToPowerMenu() throws Exception {
+ PowerMenuSettingsUtils.setLongPressPowerForAssistant(mContext);
+ assertThat(
+ Settings.Global.getInt(
+ mContext.getContentResolver(),
+ Settings.Global.KEY_CHORD_POWER_VOLUME_UP))
+ .isEqualTo(2);
+ }
+
+ @Test
+ public void setLongPressPowerForPowerMenu_updatesValue() throws Exception {
+ boolean result = PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
+
+ assertThat(result).isTrue();
+ assertThat(
+ Settings.Global.getInt(
+ mContext.getContentResolver(),
+ Settings.Global.POWER_BUTTON_LONG_PRESS))
+ .isEqualTo(1);
+ }
+
+ @Test
+ public void setLongPressPowerForPowerMenu_updatesKeyChordValueToDefault() throws Exception {
+ when(mResources.getInteger(com.android.internal.R.integer.config_keyChordPowerVolumeUp))
+ .thenReturn(1);
+
+ PowerMenuSettingsUtils.setLongPressPowerForPowerMenu(mContext);
+
+ assertThat(
+ Settings.Global.getInt(
+ mContext.getContentResolver(),
+ Settings.Global.KEY_CHORD_POWER_VOLUME_UP))
+ .isEqualTo(1);
}
}
diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java
index e4fc9fa..78541db 100644
--- a/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java
+++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/slices/BatteryFixSliceTest.java
@@ -31,13 +31,13 @@
import androidx.slice.widget.SliceLiveData;
import com.android.settings.R;
-import com.android.settings.fuelgauge.BatteryUsageStatsLoader;
import com.android.settings.fuelgauge.batterytip.AppInfo;
import com.android.settings.fuelgauge.batterytip.BatteryTipLoader;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.EarlyWarningTip;
import com.android.settings.fuelgauge.batterytip.tips.HighUsageTip;
import com.android.settings.fuelgauge.batterytip.tips.LowBatteryTip;
+import com.android.settings.fuelgauge.batteryusage.BatteryUsageStatsLoader;
import com.android.settings.slices.SliceBackgroundWorker;
import org.junit.After;
diff --git a/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java
index 7cfcaff..56e83bb 100644
--- a/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/MediaVolumePreferenceControllerTest.java
@@ -16,29 +16,71 @@
package com.android.settings.notification;
+import static com.android.settings.slices.CustomSliceRegistry.VOLUME_MEDIA_URI;
+
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.when;
+
+import android.app.PendingIntent;
import android.content.Context;
+import android.content.Intent;
import android.media.AudioManager;
+import android.media.session.MediaController;
+import android.net.Uri;
+
+import androidx.slice.builders.SliceAction;
+
+import com.android.settings.media.MediaOutputIndicatorWorker;
+import com.android.settings.slices.SliceBackgroundWorker;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.media.BluetoothMediaDevice;
+import com.android.settingslib.media.MediaDevice;
+import com.android.settingslib.media.MediaOutputConstants;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = MediaVolumePreferenceControllerTest.ShadowSliceBackgroundWorker.class)
public class MediaVolumePreferenceControllerTest {
+ private static final String ACTION_LAUNCH_BROADCAST_DIALOG =
+ "android.settings.MEDIA_BROADCAST_DIALOG";
+ private static MediaOutputIndicatorWorker sMediaOutputIndicatorWorker;
+
private MediaVolumePreferenceController mController;
private Context mContext;
+ @Mock
+ private MediaController mMediaController;
+ @Mock
+ private MediaDevice mDevice1;
+ @Mock
+ private MediaDevice mDevice2;
+
@Before
public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
mContext = RuntimeEnvironment.application;
mController = new MediaVolumePreferenceController(mContext);
+ sMediaOutputIndicatorWorker = spy(
+ new MediaOutputIndicatorWorker(mContext, VOLUME_MEDIA_URI));
+ when(mDevice1.isBLEDevice()).thenReturn(true);
+ when(mDevice2.isBLEDevice()).thenReturn(false);
}
@Test
@@ -68,4 +110,83 @@
public void isPublicSlice_returnTrue() {
assertThat(mController.isPublicSlice()).isTrue();
}
+
+ @Test
+ public void isSupportEndItem_withBleDevice_returnsTrue() {
+ doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
+
+ assertThat(mController.isSupportEndItem()).isTrue();
+ }
+
+ @Test
+ public void isSupportEndItem_withNonBleDevice_returnsFalse() {
+ doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
+
+ assertThat(mController.isSupportEndItem()).isFalse();
+ }
+
+ @Test
+ public void getSliceEndItem_NotSupportEndItem_getsNullSliceAction() {
+ doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
+
+ final SliceAction sliceAction = mController.getSliceEndItem(mContext);
+
+ assertThat(sliceAction).isNull();
+ }
+
+ @Test
+ public void getSliceEndItem_deviceIsBroadcasting_getsBroadcastIntent() {
+ doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
+ doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
+ doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
+ .getActiveLocalMediaController();
+
+ final SliceAction sliceAction = mController.getSliceEndItem(mContext);
+
+ final PendingIntent endItemPendingIntent = sliceAction.getAction();
+ final PendingIntent expectedToggleIntent = getBroadcastIntent(
+ MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG);
+ assertThat(endItemPendingIntent).isEqualTo(expectedToggleIntent);
+ }
+
+ @Test
+ public void getSliceEndItem_deviceIsNotBroadcasting_getsActivityIntent() {
+ final MediaDevice device = mock(BluetoothMediaDevice.class);
+ final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
+ when(((BluetoothMediaDevice) device).getCachedDevice()).thenReturn(cachedDevice);
+ when(device.isBLEDevice()).thenReturn(true);
+ doReturn(device).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
+ doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
+ doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
+ .getActiveLocalMediaController();
+
+ final SliceAction sliceAction = mController.getSliceEndItem(mContext);
+
+ final PendingIntent endItemPendingIntent = sliceAction.getAction();
+ final PendingIntent expectedPendingIntent =
+ getActivityIntent(ACTION_LAUNCH_BROADCAST_DIALOG);
+ assertThat(endItemPendingIntent).isEqualTo(expectedPendingIntent);
+ }
+
+ @Implements(SliceBackgroundWorker.class)
+ public static class ShadowSliceBackgroundWorker {
+
+ @Implementation
+ public static SliceBackgroundWorker getInstance(Uri uri) {
+ return sMediaOutputIndicatorWorker;
+ }
+ }
+
+ private PendingIntent getBroadcastIntent(String action) {
+ final Intent intent = new Intent(action);
+ intent.setPackage(MediaOutputConstants.SYSTEMUI_PACKAGE_NAME);
+ return PendingIntent.getBroadcast(mContext, 0 /* requestCode */, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
+ }
+
+ private PendingIntent getActivityIntent(String action) {
+ final Intent intent = new Intent(action);
+ return PendingIntent.getActivity(mContext, 0 /* requestCode */, intent,
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_MUTABLE);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java
index b2f1673..bf529e6 100644
--- a/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/NotificationPreferenceControllerTest.java
@@ -426,7 +426,7 @@
private final class TestPreferenceController extends NotificationPreferenceController {
private TestPreferenceController(Context context, NotificationBackend backend) {
- super(context, backend);
+ super(context, backend, "key");
}
@Override
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
index 3c50c6b..43a49a1 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPasswordTest.java
@@ -27,6 +27,7 @@
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX;
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
import static com.android.internal.widget.LockPatternUtils.PASSWORD_TYPE_KEY;
import static com.android.settings.password.ChooseLockGeneric.CONFIRM_CREDENTIALS;
@@ -159,6 +160,21 @@
}
@Test
+ public void activity_shouldHaveSecureFlag() {
+ PasswordPolicy policy = new PasswordPolicy();
+ policy.quality = PASSWORD_QUALITY_ALPHABETIC;
+ policy.length = 10;
+
+ Intent intent = createIntentForPasswordValidation(
+ /* minMetrics */ policy.getMinMetrics(),
+ /* minComplexity= */ PASSWORD_COMPLEXITY_NONE,
+ /* passwordType= */ PASSWORD_QUALITY_ALPHABETIC);
+ ChooseLockPassword activity = buildChooseLockPasswordActivity(intent);
+ final int flags = activity.getWindow().getAttributes().flags;
+ assertThat(flags & FLAG_SECURE).isEqualTo(FLAG_SECURE);
+ }
+
+ @Test
public void processAndValidatePasswordRequirements_noMinPasswordComplexity() {
PasswordPolicy policy = new PasswordPolicy();
policy.quality = PASSWORD_QUALITY_ALPHABETIC;
diff --git a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
index f5cc394..1fc10fc 100644
--- a/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/ChooseLockPatternTest.java
@@ -16,6 +16,8 @@
package com.android.settings.password;
+import static android.view.WindowManager.LayoutParams.FLAG_SECURE;
+
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
@@ -107,6 +109,14 @@
assertThat(iconView.getVisibility()).isEqualTo(View.GONE);
}
+ @Test
+ public void activity_shouldHaveSecureFlag() {
+ final ChooseLockPattern activity = Robolectric.buildActivity(
+ ChooseLockPattern.class, new IntentBuilder(application).build()).setup().get();
+ final int flags = activity.getWindow().getAttributes().flags;
+ assertThat(flags & FLAG_SECURE).isEqualTo(FLAG_SECURE);
+ }
+
private ChooseLockPattern createActivity(boolean addFingerprintExtra) {
return Robolectric.buildActivity(
ChooseLockPattern.class,
diff --git a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
index 53e68d9..e01e023 100644
--- a/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/password/SetupChooseLockPatternTest.java
@@ -27,6 +27,7 @@
import android.os.UserHandle;
import android.view.View;
import android.widget.Button;
+import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
@@ -192,6 +193,18 @@
.isEqualTo(application.getString(R.string.lockpattern_retry_button_text));
}
+ @Test
+ public void createActivity_patternDescription_shouldBeShown() {
+ PartnerCustomizationLayout layout = mActivity.findViewById(R.id.setup_wizard_layout);
+
+ final TextView patternDescription =
+ layout.findViewById(R.id.sud_layout_subtitle);
+
+ assertThat(patternDescription.getVisibility()).isEqualTo(View.VISIBLE);
+ assertThat(patternDescription.getText()).isEqualTo(
+ application.getString(R.string.lockpassword_choose_your_pattern_description));
+ }
+
private ChooseLockPatternFragment findFragment(FragmentActivity activity) {
return (ChooseLockPatternFragment)
activity.getSupportFragmentManager().findFragmentById(R.id.main_content);
diff --git a/tests/robotests/src/com/android/settings/privacy/WorkPolicyInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/privacy/WorkPolicyInfoPreferenceControllerTest.java
index 82444aa..a983228 100644
--- a/tests/robotests/src/com/android/settings/privacy/WorkPolicyInfoPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/privacy/WorkPolicyInfoPreferenceControllerTest.java
@@ -21,6 +21,7 @@
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;
@@ -30,6 +31,7 @@
import androidx.preference.Preference;
import com.android.settings.enterprise.EnterprisePrivacyFeatureProvider;
+import com.android.settings.safetycenter.SafetyCenterManagerWrapper;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before;
@@ -52,6 +54,7 @@
mContext = RuntimeEnvironment.application;
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
mEnterpriseProvider = mFakeFeatureFactory.getEnterprisePrivacyFeatureProvider(mContext);
+ SafetyCenterManagerWrapper.sInstance = mock(SafetyCenterManagerWrapper.class);
}
@Test
@@ -73,6 +76,15 @@
}
@Test
+ public void getAvailabilityStatus_safetyCenterEnabled_shouldReturnUnsupported() {
+ when(SafetyCenterManagerWrapper.get().isEnabled(mContext)).thenReturn(true);
+ WorkPolicyInfoPreferenceController controller =
+ new WorkPolicyInfoPreferenceController(mContext, "test_key");
+
+ assertThat(controller.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+ }
+
+ @Test
public void handlePreferenceTreeClick_nonMatchingKey_shouldDoNothing() {
when(mEnterpriseProvider.hasWorkPolicyInfo()).thenReturn(true);
WorkPolicyInfoPreferenceController controller =
diff --git a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
index 518aee9..2f24832 100644
--- a/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/robotests/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -47,6 +47,7 @@
import com.android.settings.security.SecuritySettingsFeatureProvider;
import com.android.settings.slices.SlicesFeatureProvider;
import com.android.settings.users.UserFeatureProvider;
+import com.android.settings.vpn2.AdvancedVpnFeatureProvider;
import com.android.settings.wifi.WifiTrackerLibProvider;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -87,6 +88,7 @@
public SecuritySettingsFeatureProvider securitySettingsFeatureProvider;
public AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider;
public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
+ public AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider;
/**
* Call this in {@code @Before} method of the test class to use fake factory.
@@ -136,6 +138,7 @@
securitySettingsFeatureProvider = mock(SecuritySettingsFeatureProvider.class);
mAccessibilitySearchFeatureProvider = mock(AccessibilitySearchFeatureProvider.class);
mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class);
+ mAdvancedVpnFeatureProvider = mock(AdvancedVpnFeatureProvider.class);
}
@Override
@@ -272,4 +275,9 @@
public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() {
return mAccessibilityMetricsFeatureProvider;
}
+
+ @Override
+ public AdvancedVpnFeatureProvider getAdvancedVpnFeatureProvider() {
+ return mAdvancedVpnFeatureProvider;
+ }
}
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 ea51370..b865ea6 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
@@ -226,4 +226,32 @@
return new UserInfo(PRIMARY_USER_ID, null, null,
UserInfo.FLAG_INITIALIZED | UserInfo.FLAG_ADMIN | UserInfo.FLAG_PRIMARY);
}
+
+ protected boolean setUserEphemeral(@UserIdInt int userId, boolean enableEphemeral) {
+ UserInfo userInfo = mUserProfileInfos.stream()
+ .filter(user -> user.id == userId)
+ .findFirst()
+ .orElse(super.getUserInfo(userId));
+
+ boolean isSuccess = false;
+ boolean isEphemeralUser =
+ (userInfo.flags & UserInfo.FLAG_EPHEMERAL) != 0;
+ boolean isEphemeralOnCreateUser =
+ (userInfo.flags & UserInfo.FLAG_EPHEMERAL_ON_CREATE)
+ != 0;
+ // when user is created in ephemeral mode via FLAG_EPHEMERAL
+ // its state cannot be changed.
+ // FLAG_EPHEMERAL_ON_CREATE is used to keep track of this state
+ if (!isEphemeralOnCreateUser) {
+ isSuccess = true;
+ if (isEphemeralUser != enableEphemeral) {
+ if (enableEphemeral) {
+ userInfo.flags |= UserInfo.FLAG_EPHEMERAL;
+ } else {
+ userInfo.flags &= ~UserInfo.FLAG_EPHEMERAL;
+ }
+ }
+ }
+ return isSuccess;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
index bb7dd75..d1192c1 100644
--- a/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/users/UserSettingsTest.java
@@ -56,6 +56,7 @@
import android.view.MenuItem;
import androidx.fragment.app.FragmentActivity;
+import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
@@ -152,6 +153,8 @@
ReflectionHelpers.setField(mFragment, "mDefaultIconDrawable", mDefaultIconDrawable);
ReflectionHelpers.setField(mFragment, "mAddingUser", false);
ReflectionHelpers.setField(mFragment, "mMetricsFeatureProvider", mMetricsFeatureProvider);
+ ReflectionHelpers.setField(mFragment, "mRemoveGuestOnExitPreferenceController",
+ mock(RemoveGuestOnExitPreferenceController.class));
doReturn(mUserManager).when(mActivity).getSystemService(UserManager.class);
doReturn(mPackageManager).when(mActivity).getPackageManager();
@@ -178,6 +181,10 @@
mFragment.mAddSupervisedUser = mAddSupervisedUserPreference;
mFragment.mAddGuest = mAddGuestPreference;
mFragment.mUserListCategory = mock(PreferenceCategory.class);
+ mFragment.mGuestUserCategory = mock(PreferenceCategory.class);
+ mFragment.mGuestCategory = mock(PreferenceCategory.class);
+ mFragment.mGuestResetPreference = mock(Preference.class);
+ mFragment.mGuestExitPreference = mock(Preference.class);
}
@After
@@ -219,7 +226,7 @@
@Test
public void testExitGuest_ShouldLogAction() {
mUserCapabilities.mIsGuest = true;
- mFragment.exitGuest();
+ mFragment.clearAndExitGuest();
verify(mMetricsFeatureProvider).action(any(),
eq(SettingsEnums.ACTION_USER_GUEST_EXIT_CONFIRMED));
}
@@ -227,7 +234,7 @@
@Test
public void testExitGuestWhenNotGuest_ShouldNotLogAction() {
mUserCapabilities.mIsGuest = false;
- mFragment.exitGuest();
+ mFragment.clearAndExitGuest();
verify(mMetricsFeatureProvider, never()).action(any(),
eq(SettingsEnums.ACTION_USER_GUEST_EXIT_CONFIRMED));
}
@@ -323,7 +330,6 @@
verify(mAddGuestPreference).setVisible(true);
verify(mAddGuestPreference).setEnabled(true);
- verify(mAddGuestPreference).setIcon(any(Drawable.class));
verify(mAddGuestPreference).setSelectable(true);
}
@@ -371,7 +377,6 @@
verify(mAddGuestPreference).setVisible(true);
verify(mAddGuestPreference).setEnabled(false);
- verify(mAddGuestPreference).setIcon(any(Drawable.class));
verify(mAddGuestPreference).setSelectable(true);
}
@@ -473,9 +478,9 @@
mFragment.updateUserList();
ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class);
- verify(mFragment.mUserListCategory, times(2))
+ verify(mFragment.mGuestUserCategory, times(1))
.addPreference(captor.capture());
- UserPreference guestPref = captor.getAllValues().get(1);
+ UserPreference guestPref = captor.getAllValues().get(0);
assertThat(guestPref.getUserId()).isEqualTo(INACTIVE_GUEST_USER_ID);
assertThat(guestPref.getTitle()).isEqualTo("Guest");
assertThat(guestPref.getIcon()).isNotNull();
@@ -595,9 +600,9 @@
mFragment.updateUserList();
ArgumentCaptor<UserPreference> captor = ArgumentCaptor.forClass(UserPreference.class);
- verify(mFragment.mUserListCategory, times(2))
+ verify(mFragment.mGuestUserCategory, times(1))
.addPreference(captor.capture());
- UserPreference userPref = captor.getAllValues().get(1);
+ UserPreference userPref = captor.getAllValues().get(0);
assertThat(userPref.getUserId()).isEqualTo(INACTIVE_GUEST_USER_ID);
assertThat(userPref.getSummary()).isNull();
}
diff --git a/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java
index 85ab609..eba447b 100644
--- a/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/CardPreferenceTest.java
@@ -16,9 +16,18 @@
package com.android.settings.widget;
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+
import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
import android.content.Context;
+import android.view.View;
+import android.widget.Button;
+
+import androidx.preference.PreferenceViewHolder;
+import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
@@ -26,23 +35,301 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class CardPreferenceTest {
- private Context mContext;
private CardPreference mCardPreference;
+ private PreferenceViewHolder mHolder;
@Before
public void setUp() {
- mContext = RuntimeEnvironment.application;
- mContext.setTheme(R.style.SettingsPreferenceTheme);
- mCardPreference = new CardPreference(mContext);
+ Context context = ApplicationProvider.getApplicationContext();
+ context.setTheme(R.style.Theme_Settings);
+ mCardPreference = new CardPreference(context);
+
+ View rootView = View.inflate(context, R.layout.card_preference_layout, /* parent= */ null);
+ mHolder = PreferenceViewHolder.createInstanceForTests(rootView);
}
@Test
- public void getLayoutResource() {
- assertThat(mCardPreference.getLayoutResource()).isEqualTo(R.layout.card_preference_layout);
+ public void newACardPreference_layoutResourceShouldBeCardPreferenceLayout() {
+ Context context = ApplicationProvider.getApplicationContext();
+ context.setTheme(R.style.SettingsPreferenceTheme);
+
+ CardPreference cardPreference = new CardPreference(context);
+
+ assertThat(cardPreference.getLayoutResource()).isEqualTo(R.layout.card_preference_layout);
+ }
+
+ @Test
+ public void onBindViewHolder_noButtonVisible_buttonsLayoutShouldBeGone() {
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
+ }
+
+ @Test
+ public void onBindViewHolder_setPrimaryButtonVisibility_buttonsLayoutShouldBeVisible() {
+ mCardPreference.setPrimaryButtonVisible(true);
+
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(VISIBLE);
+ }
+
+ @Test
+ public void onBindViewHolder_setPrimaryButtonVisibility_shouldApplyToPrimaryButton() {
+ mCardPreference.setPrimaryButtonVisible(true);
+
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getPrimaryButton().getVisibility()).isEqualTo(VISIBLE);
+ }
+
+ @Test
+ public void onBindViewHolder_setSecondaryButtonVisibility_buttonsLayoutShouldBeVisible() {
+ mCardPreference.setSecondaryButtonVisible(true);
+
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(VISIBLE);
+ }
+
+ @Test
+ public void onBindViewHolder_setSecondaryButtonVisibility_shouldApplyToSecondaryButton() {
+ mCardPreference.setSecondaryButtonVisible(true);
+
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getSecondaryButton().getVisibility()).isEqualTo(VISIBLE);
+ }
+
+ @Test
+ public void onBindViewHolder_setPrimaryButtonText_shouldApplyToPrimaryButton() {
+ String expectedText = "primary-button";
+ mCardPreference.setPrimaryButtonText(expectedText);
+
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getPrimaryButton().getText().toString()).isEqualTo(expectedText);
+ }
+
+ @Test
+ public void onBindViewHolder_setSecondaryButtonText_shouldApplyToSecondaryButton() {
+ String expectedText = "secondary-button";
+ mCardPreference.setSecondaryButtonText(expectedText);
+
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getSecondaryButton().getText().toString()).isEqualTo(expectedText);
+ }
+
+ @Test
+ public void onBindViewHolder_initialTextForPrimaryButtonShouldBeEmpty() {
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getPrimaryButton().getText().toString()).isEqualTo("");
+ }
+
+ @Test
+ public void onBindViewHolder_initialTextForSecondaryButtonShouldBeEmpty() {
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getSecondaryButton().getText().toString()).isEqualTo("");
+ }
+
+ @Test
+ public void performClickOnPrimaryButton_shouldCalledClickListener() {
+ final boolean[] hasCalled = {false};
+ View.OnClickListener clickListener = v -> hasCalled[0] = true;
+ mCardPreference.setPrimaryButtonClickListener(clickListener);
+
+ mCardPreference.onBindViewHolder(mHolder);
+ getPrimaryButton().performClick();
+
+ assertThat(hasCalled[0]).isTrue();
+ }
+
+ @Test
+ public void performClickOnSecondaryButton_shouldCalledClickListener() {
+ final boolean[] hasCalled = {false};
+ View.OnClickListener clickListener = v -> hasCalled[0] = true;
+ mCardPreference.setSecondaryButtonClickListener(clickListener);
+
+ mCardPreference.onBindViewHolder(mHolder);
+ getSecondaryButton().performClick();
+
+ assertThat(hasCalled[0]).isTrue();
+ }
+
+ @Test
+ public void onBindViewHolder_primaryButtonDefaultIsGone() {
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getPrimaryButton().getVisibility()).isEqualTo(GONE);
+ }
+
+ @Test
+ public void onBindViewHolder_secondaryButtonDefaultIsGone() {
+ mCardPreference.onBindViewHolder(mHolder);
+
+ assertThat(getSecondaryButton().getVisibility()).isEqualTo(GONE);
+ }
+
+ @Test
+ public void setPrimaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible() {
+ mCardPreference.setPrimaryButtonVisible(false);
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setPrimaryButtonVisible(true);
+
+ assertThat(getPrimaryButton().getVisibility()).isEqualTo(VISIBLE);
+ }
+
+ @Test
+ public void setPrimaryButtonText_setAfterBindViewHolder_setOnUi() {
+ String expectedText = "123456";
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setPrimaryButtonText(expectedText);
+
+ assertThat(getPrimaryButton().getText().toString()).isEqualTo(expectedText);
+ }
+
+ @Test
+ public void setPrimaryButtonText_setNull_shouldBeEmptyText() {
+ final String emptyString = "";
+ mCardPreference.setPrimaryButtonText("1234");
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setPrimaryButtonText(null);
+
+ assertThat(getPrimaryButton().getText().toString()).isEqualTo(emptyString);
+ }
+
+ @Test
+ public void setPrimaryButtonClickListener_setAfterOnBindViewHolder() {
+ final String[] hasCalled = {""};
+ String expectedClickedResult = "was called";
+ View.OnClickListener clickListener = v -> hasCalled[0] = expectedClickedResult;
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setPrimaryButtonClickListener(clickListener);
+ getPrimaryButton().performClick();
+
+ assertThat(hasCalled[0]).isEqualTo(expectedClickedResult);
+ }
+
+ @Test
+ public void setPrimaryButtonClickListener_setNull_shouldClearTheOnClickListener() {
+ final String[] hasCalled = {"not called"};
+ View.OnClickListener clickListener = v -> hasCalled[0] = "called once";
+ mCardPreference.setPrimaryButtonClickListener(clickListener);
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setPrimaryButtonClickListener(null);
+ getPrimaryButton().performClick();
+
+ assertThat(hasCalled[0]).isEqualTo("not called");
+ }
+
+ @Test
+ public void setSecondaryButtonVisibility_setTrueAfterBindViewHolder_shouldBeVisible() {
+ mCardPreference.setSecondaryButtonVisible(false);
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setSecondaryButtonVisible(true);
+
+ assertThat(getSecondaryButton().getVisibility()).isEqualTo(VISIBLE);
+ }
+
+ @Test
+ public void setSecondaryButtonText_setAfterBindViewHolder_setOnUi() {
+ String expectedText = "10101010";
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setSecondaryButtonText(expectedText);
+
+ assertThat(getSecondaryButton().getText().toString()).isEqualTo(expectedText);
+ }
+
+ @Test
+ public void setSecondaryButtonText_setNull_shouldBeEmptyText() {
+ String emptyString = "";
+ mCardPreference.setSecondaryButtonText("1234");
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setSecondaryButtonText(null);
+
+ assertThat(getSecondaryButton().getText().toString()).isEqualTo(emptyString);
+ }
+
+ @Test
+ public void setSecondaryButtonClickListener_setAfterOnBindViewHolder() {
+ final String[] hasCalled = {""};
+ String expectedClickedResult = "2nd was called";
+ View.OnClickListener clickListener = v -> hasCalled[0] = expectedClickedResult;
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setSecondaryButtonClickListener(clickListener);
+ getSecondaryButton().performClick();
+
+ assertThat(hasCalled[0]).isEqualTo(expectedClickedResult);
+ }
+
+ @Test
+ public void setSecondaryButtonClickListener_setNull_shouldClearTheOnClickListener() {
+ final String[] hasCalled = {"not called"};
+ View.OnClickListener clickListener = v -> hasCalled[0] = "called once";
+ mCardPreference.setSecondaryButtonClickListener(clickListener);
+ mCardPreference.onBindViewHolder(mHolder);
+
+ mCardPreference.setSecondaryButtonClickListener(null);
+ getSecondaryButton().performClick();
+
+ assertThat(hasCalled[0]).isEqualTo("not called");
+ }
+
+ @Test
+ public void
+ setPrimaryButtonVisibility_onlyPrimaryButtonVisible_setGone_buttonGroupShouldBeGone() {
+ mCardPreference.setPrimaryButtonVisible(true);
+ mCardPreference.setSecondaryButtonVisible(false);
+ mCardPreference.onBindViewHolder(mHolder);
+ assertWithMessage("PreCondition: buttonsView should be Visible")
+ .that(getCardPreferenceButtonsView().getVisibility())
+ .isEqualTo(VISIBLE);
+
+ mCardPreference.setPrimaryButtonVisible(false);
+
+ assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
+ }
+
+ @Test
+ public void
+ setSecondaryButtonVisibility_only2ndButtonVisible_setGone_buttonGroupShouldBeGone() {
+ mCardPreference.setPrimaryButtonVisible(false);
+ mCardPreference.setSecondaryButtonVisible(true);
+ mCardPreference.onBindViewHolder(mHolder);
+ assertWithMessage("PreCondition: buttonsView should be Visible")
+ .that(getCardPreferenceButtonsView().getVisibility())
+ .isEqualTo(VISIBLE);
+
+ mCardPreference.setSecondaryButtonVisible(false);
+
+ assertThat(getCardPreferenceButtonsView().getVisibility()).isEqualTo(GONE);
+ }
+
+ private View getCardPreferenceButtonsView() {
+ return mHolder.findViewById(R.id.card_preference_buttons);
+ }
+
+ private Button getPrimaryButton() {
+ return (Button) mHolder.findViewById(android.R.id.button1);
+ }
+
+ private Button getSecondaryButton() {
+ return (Button) mHolder.findViewById(android.R.id.button2);
}
}
diff --git a/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
index 89df035..5e3d715 100644
--- a/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/ConfigureWifiSettingsTest.java
@@ -1,41 +1,180 @@
package com.android.settings.wifi;
+import static com.android.settings.wifi.ConfigureWifiSettings.KEY_INSTALL_CREDENTIALS;
+
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+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.annotation.Nullable;
import android.content.Context;
+import android.net.wifi.WifiManager;
+import android.os.Bundle;
+import android.os.UserManager;
+import android.view.View;
+import android.widget.TextView;
+import androidx.fragment.app.FragmentActivity;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.testutils.XmlTestUtils;
+import com.android.settingslib.core.AbstractPreferenceController;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
public class ConfigureWifiSettingsTest {
- private Context mContext;
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Spy
+ Context mContext = ApplicationProvider.getApplicationContext();
+ @Mock
+ UserManager mUserManager;
+ @Mock
+ WifiManager mWifiManager;
+ @Mock
+ FragmentActivity mActivity;
+ @Mock
+ WifiWakeupPreferenceController mWifiWakeupPreferenceController;
+ @Mock
+ Preference mInstallCredentialsPref;
+ @Mock
+ PreferenceScreen mPreferenceScreen;
+ @Mock
+ TextView mEmptyView;
+
+ TestConfigureWifiSettings mSettings;
@Before
public void setUp() {
- mContext = spy(RuntimeEnvironment.application);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mUserManager.isGuestUser()).thenReturn(false);
+ when(mActivity.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
+
+ mSettings = spy(new TestConfigureWifiSettings());
+ when(mSettings.getContext()).thenReturn(mContext);
+ when(mSettings.getActivity()).thenReturn(mActivity);
+ when(mSettings.use(WifiWakeupPreferenceController.class))
+ .thenReturn(mWifiWakeupPreferenceController);
+ when(mSettings.findPreference(KEY_INSTALL_CREDENTIALS)).thenReturn(mInstallCredentialsPref);
+ }
+
+ @Test
+ public void onAttach_isNotGuestUser_setupController() {
+ when(mUserManager.isGuestUser()).thenReturn(false);
+
+ mSettings.onAttach(mContext);
+
+ verify(mWifiWakeupPreferenceController).setFragment(any());
+ }
+
+ @Test
+ public void onAttach_isGuestUser_doNotSetupController() {
+ when(mUserManager.isGuestUser()).thenReturn(true);
+
+ mSettings.onAttach(mContext);
+
+ verify(mWifiWakeupPreferenceController, never()).setFragment(any());
+ }
+
+ @Test
+ @Config(shadows = ShadowDashboardFragment.class)
+ public void onCreate_isNotGuestUser_setupPreference() {
+ when(mUserManager.isGuestUser()).thenReturn(false);
+
+ mSettings.onCreate(null);
+
+ verify(mInstallCredentialsPref).setOnPreferenceClickListener(any());
+ }
+
+ @Test
+ @Config(shadows = ShadowDashboardFragment.class)
+ public void onCreate_isGuestUser_doNotSetupPreference() {
+ when(mUserManager.isGuestUser()).thenReturn(true);
+
+ mSettings.onCreate(null);
+
+ verify(mInstallCredentialsPref, never()).setOnPreferenceClickListener(any());
+ }
+
+ @Test
+ @Config(shadows = ShadowDashboardFragment.class)
+ public void onViewCreated_isNotGuestUser_doNotRestrictUi() {
+ when(mUserManager.isGuestUser()).thenReturn(false);
+ when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView);
+ doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen();
+
+ mSettings.onViewCreated(mock(View.class), null);
+
+ verify(mEmptyView, never()).setVisibility(View.VISIBLE);
+ verify(mPreferenceScreen, never()).removeAll();
+ }
+
+ @Test
+ @Config(shadows = ShadowDashboardFragment.class)
+ public void onViewCreated_isGuestUser_restrictUi() {
+ when(mUserManager.isGuestUser()).thenReturn(true);
+ when(mActivity.findViewById(android.R.id.empty)).thenReturn(mEmptyView);
+ doReturn(mPreferenceScreen).when(mSettings).getPreferenceScreen();
+
+ mSettings.onViewCreated(mock(View.class), null);
+
+ verify(mEmptyView).setVisibility(View.VISIBLE);
+ verify(mPreferenceScreen).removeAll();
}
@Test
@Config(qualifiers = "mcc999")
- public void testNonIndexableKeys_ifPageDisabled_shouldNotIndexResource() {
+ public void getNonIndexableKeys_ifPageDisabled_shouldNotIndexResource() {
final List<String> niks =
ConfigureWifiSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(mContext);
- final int xmlId = new ConfigureWifiSettings().getPreferenceScreenResId();
+ final int xmlId = mSettings.getPreferenceScreenResId();
final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext, xmlId);
assertThat(keys).isNotNull();
assertThat(niks).containsAtLeastElementsIn(keys);
}
+
+ public static class TestConfigureWifiSettings extends ConfigureWifiSettings {
+ @Override
+ public <T extends AbstractPreferenceController> T use(Class<T> clazz) {
+ return super.use(clazz);
+ }
+ }
+
+ @Implements(DashboardFragment.class)
+ public static class ShadowDashboardFragment {
+ @Implementation
+ public void onCreate(Bundle icicle) {
+ // do nothing
+ }
+
+ @Implementation
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ // do nothing
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java
index 5d568fe..9139a28 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigController2Test.java
@@ -16,6 +16,8 @@
package com.android.settings.wifi;
+import static com.android.settings.wifi.WifiConfigController2.WIFI_EAP_METHOD_SIM;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -86,6 +88,8 @@
private AndroidKeystoreAliasLoader mAndroidKeystoreAliasLoader;
@Mock
private WifiManager mWifiManager;
+ @Mock
+ Spinner mEapMethodSimSpinner;
private View mView;
private Spinner mHiddenSettingsSpinner;
private Spinner mEapCaCertSpinner;
@@ -141,6 +145,7 @@
mContext.getString(R.string.wifi_do_not_provide_eap_user_cert);
ipSettingsSpinner.setSelection(DHCP);
mShadowSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class));
+ when(mEapMethodSimSpinner.getSelectedItemPosition()).thenReturn(WIFI_EAP_METHOD_SIM);
mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry,
WifiConfigUiBase2.MODE_CONNECT);
@@ -813,10 +818,7 @@
when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP);
mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry,
WifiConfigUiBase2.MODE_CONNECT);
- final Spinner eapMethodSpinner = mock(Spinner.class);
- when(eapMethodSpinner.getSelectedItemPosition()).thenReturn(
- WifiConfigController2.WIFI_EAP_METHOD_SIM);
- mController.mEapMethodSpinner = eapMethodSpinner;
+ mController.mEapMethodSpinner = mEapMethodSimSpinner;
mController.loadSims();
@@ -837,10 +839,7 @@
mShadowSubscriptionManager.setActiveSubscriptionInfoList(Arrays.asList(subscriptionInfo));
mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry,
WifiConfigUiBase2.MODE_CONNECT);
- final Spinner eapMethodSpinner = mock(Spinner.class);
- when(eapMethodSpinner.getSelectedItemPosition()).thenReturn(
- WifiConfigController2.WIFI_EAP_METHOD_SIM);
- mController.mEapMethodSpinner = eapMethodSpinner;
+ mController.mEapMethodSpinner = mEapMethodSimSpinner;
mController.loadSims();
@@ -849,6 +848,48 @@
}
@Test
+ public void loadSims_twoSimsWithDifferentCarrierId_showTwoSims() {
+ SubscriptionInfo sub1 = createMockSubscription(1, "sub1", 8888);
+ SubscriptionInfo sub2 = createMockSubscription(2, "sub2", 9999);
+ SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+ mShadowSubscriptionManager.setActiveSubscriptionInfoList(Arrays.asList(sub1, sub2));
+ when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP);
+ mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry,
+ WifiConfigUiBase2.MODE_CONNECT);
+ mController.mEapMethodSpinner = mEapMethodSimSpinner;
+ ShadowSubscriptionManager.setDefaultDataSubscriptionId(1);
+
+ mController.loadSims();
+
+ assertThat(mController.mEapSimSpinner.getAdapter().getCount()).isEqualTo(2);
+ }
+
+ @Test
+ public void loadSims_twoSimsWithSameCarrierId_showOneDefaultDataSim() {
+ SubscriptionInfo sub1 = createMockSubscription(1, "sub1", 9999);
+ SubscriptionInfo sub2 = createMockSubscription(2, "sub2", 9999);
+ SubscriptionUtil.setAvailableSubscriptionsForTesting(Arrays.asList(sub1, sub2));
+ mShadowSubscriptionManager.setActiveSubscriptionInfoList(Arrays.asList(sub1, sub2));
+ when(mWifiEntry.getSecurity()).thenReturn(WifiEntry.SECURITY_EAP);
+ mController = new TestWifiConfigController2(mConfigUiBase, mView, mWifiEntry,
+ WifiConfigUiBase2.MODE_CONNECT);
+ mController.mEapMethodSpinner = mEapMethodSimSpinner;
+ ShadowSubscriptionManager.setDefaultDataSubscriptionId(1);
+
+ mController.loadSims();
+
+ assertThat(mController.mEapSimSpinner.getAdapter().getCount()).isEqualTo(1);
+ assertThat(mController.mEapSimSpinner.getSelectedItem().toString()).isEqualTo("sub1");
+
+ ShadowSubscriptionManager.setDefaultDataSubscriptionId(2);
+
+ mController.loadSims();
+
+ assertThat(mController.mEapSimSpinner.getAdapter().getCount()).isEqualTo(1);
+ assertThat(mController.mEapSimSpinner.getSelectedItem().toString()).isEqualTo("sub2");
+ }
+
+ @Test
public void loadCaCertificateValue_shouldPersistentAsDefault() {
setUpModifyingSavedCertificateConfigController(null, null);
@@ -940,4 +981,12 @@
// certificates are covered by mController.onItemSelected after showSecurityFields end.
mController.mEapMethodSpinner.setSelection(Eap.TLS);
}
+
+ private SubscriptionInfo createMockSubscription(int subId, String displayName, int carrierId) {
+ SubscriptionInfo sub = mock(SubscriptionInfo.class);
+ when(sub.getSubscriptionId()).thenReturn(subId);
+ when(sub.getDisplayName()).thenReturn(displayName);
+ when(sub.getCarrierId()).thenReturn(carrierId);
+ return sub;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
index 4ceb1e3..c9cc02e 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
@@ -18,6 +18,7 @@
import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
+import static android.os.UserManager.DISALLOW_CONFIG_WIFI;
import static com.android.settings.wifi.WifiDialogActivity.REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER;
import static com.android.settings.wifi.WifiDialogActivity.RESULT_CONNECTED;
@@ -32,10 +33,12 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.KeyguardManager;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
+import android.os.UserManager;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settingslib.wifi.AccessPoint;
@@ -58,6 +61,8 @@
static final int REQUEST_CODE = REQUEST_CODE_WIFI_DPP_ENROLLEE_QR_CODE_SCANNER;
@Mock
+ UserManager mUserManager;
+ @Mock
PackageManager mPackageManager;
@Mock
WifiManager mWifiManager;
@@ -77,6 +82,8 @@
Intent mResultData;
@Mock
WifiConfigController mController;
+ @Mock
+ KeyguardManager mKeyguardManager;
WifiDialogActivity mActivity;
@@ -92,7 +99,9 @@
FakeFeatureFactory.setupForTest();
mActivity = spy(Robolectric.setupActivity(WifiDialogActivity.class));
+ when(mActivity.getSystemService(UserManager.class)).thenReturn(mUserManager);
when(mActivity.getSystemService(WifiManager.class)).thenReturn(mWifiManager);
+ when(mActivity.getSystemService(KeyguardManager.class)).thenReturn(mKeyguardManager);
}
@Test
@@ -212,6 +221,20 @@
}
@Test
+ public void isConfigWifiAllowed_hasNoUserRestriction_returnTrue() {
+ when(mUserManager.hasUserRestriction(DISALLOW_CONFIG_WIFI)).thenReturn(false);
+
+ assertThat(mActivity.isConfigWifiAllowed()).isTrue();
+ }
+
+ @Test
+ public void isConfigWifiAllowed_hasUserRestriction_returnFalse() {
+ when(mUserManager.hasUserRestriction(DISALLOW_CONFIG_WIFI)).thenReturn(true);
+
+ assertThat(mActivity.isConfigWifiAllowed()).isFalse();
+ }
+
+ @Test
public void hasPermissionForResult_noCallingPackage_returnFalse() {
when(mActivity.getCallingPackage()).thenReturn(null);
@@ -274,4 +297,35 @@
assertThat(result).isTrue();
}
+
+ @Test
+ public void dismissDialog_hasDialog_dialogDismiss() {
+ mActivity.mDialog = mWifiDialog;
+ mActivity.mDialog2 = mWifiDialog2;
+
+ mActivity.dismissDialog();
+
+ verify(mWifiDialog).dismiss();
+ verify(mWifiDialog2).dismiss();
+ }
+
+ @Test
+ public void onKeyguardLockedStateChanged_keyguardIsNotLocked_doNotDismissDialog() {
+ WifiDialogActivity.LockScreenMonitor lockScreenMonitor =
+ new WifiDialogActivity.LockScreenMonitor(mActivity);
+
+ lockScreenMonitor.onKeyguardLockedStateChanged(false /* isKeyguardLocked */);
+
+ verify(mActivity, never()).dismissDialog();
+ }
+
+ @Test
+ public void onKeyguardLockedStateChanged_keyguardIsLocked_dismissDialog() {
+ WifiDialogActivity.LockScreenMonitor lockScreenMonitor =
+ new WifiDialogActivity.LockScreenMonitor(mActivity);
+
+ lockScreenMonitor.onKeyguardLockedStateChanged(true /* isKeyguardLocked */);
+
+ verify(mActivity).dismissDialog();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiScanModeActivityTest.java b/tests/robotests/src/com/android/settings/wifi/WifiScanModeActivityTest.java
index 1e3afdb..5937997 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiScanModeActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiScanModeActivityTest.java
@@ -18,11 +18,17 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.Context;
+import android.os.UserManager;
import android.text.TextUtils;
+import androidx.test.core.app.ApplicationProvider;
+
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.wifi.WifiPermissionChecker;
@@ -32,6 +38,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.Robolectric;
@@ -47,6 +54,10 @@
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Spy
+ Context mContext = ApplicationProvider.getApplicationContext();
+ @Mock
+ UserManager mUserManager;
@Mock
WifiPermissionChecker mWifiPermissionChecker;
@@ -54,7 +65,11 @@
@Before
public void setUp() {
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mUserManager.isGuestUser()).thenReturn(false);
+
mActivity = spy(Robolectric.setupActivity(WifiScanModeActivity.class));
+ when(mActivity.getApplicationContext()).thenReturn(mContext);
mActivity.mWifiPermissionChecker = mWifiPermissionChecker;
}
@@ -87,4 +102,22 @@
assertThat(mActivity.mApp).isEqualTo(APP_LABEL);
}
+
+ @Test
+ public void createDialog_isNotGuestUser_shouldNotFinishDialog() {
+ when(mUserManager.isGuestUser()).thenReturn(false);
+
+ mActivity.createDialog();
+
+ verify(mActivity, never()).finish();
+ }
+
+ @Test
+ public void createDialog_isGuestUser_shouldFinishDialog() {
+ when(mUserManager.isGuestUser()).thenReturn(true);
+
+ mActivity.createDialog();
+
+ verify(mActivity).finish();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java
index 8391b8a..dccd023 100644
--- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksActivityTest.java
@@ -18,24 +18,38 @@
import static com.google.common.truth.Truth.assertThat;
-import android.annotation.Nullable;
-import android.app.IActivityManager;
-import android.os.RemoteException;
-
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
+import android.annotation.Nullable;
+import android.app.IActivityManager;
+import android.content.Context;
+import android.os.RemoteException;
+import android.os.UserManager;
+
+import androidx.test.core.app.ApplicationProvider;
+
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public class AddAppNetworksActivityTest {
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Spy
+ Context mContext = ApplicationProvider.getApplicationContext();
+ @Mock
+ UserManager mUserManager;
@Mock
private IActivityManager mIActivityManager;
@@ -43,10 +57,13 @@
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mUserManager.isGuestUser()).thenReturn(false);
- mActivity = Robolectric.buildActivity(FakeAddAppNetworksActivity.class).create().get();
+ mActivity = spy(Robolectric.buildActivity(FakeAddAppNetworksActivity.class).create().get());
+ when(mActivity.getApplicationContext()).thenReturn(mContext);
mActivity.mActivityManager = mIActivityManager;
+ fakeCallingPackage("com.android.settings");
}
@Test
@@ -84,6 +101,20 @@
assertThat(mActivity.showAddNetworksFragment()).isFalse();
}
+ @Test
+ public void showAddNetworksFragment_isGuestUser_returnFalse() {
+ when(mUserManager.isGuestUser()).thenReturn(true);
+
+ assertThat(mActivity.showAddNetworksFragment()).isFalse();
+ }
+
+ @Test
+ public void showAddNetworksFragment_notGuestUser_returnTrue() {
+ when(mUserManager.isGuestUser()).thenReturn(false);
+
+ assertThat(mActivity.showAddNetworksFragment()).isTrue();
+ }
+
private void fakeCallingPackage(@Nullable String packageName) {
try {
when(mIActivityManager.getLaunchedFromPackage(any())).thenReturn(packageName);
diff --git a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java
index 24d4c47..8248789 100644
--- a/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/addappnetworks/AddAppNetworksFragmentTest.java
@@ -455,6 +455,36 @@
AddAppNetworksFragment.MESSAGE_SHOW_SAVE_FAILED)).isTrue();
}
+ @Test
+ public void uiConfigurationItem_putCrToDisplayedSsid_shouldRemoveCr() {
+ String testSsid = "\r" + FAKE_NEW_WPA_SSID + "\r";
+
+ AddAppNetworksFragment.UiConfigurationItem item =
+ new AddAppNetworksFragment.UiConfigurationItem(testSsid, null, 0, 0);
+
+ assertThat(item.mDisplayedSsid).isEqualTo(FAKE_NEW_WPA_SSID);
+ }
+
+ @Test
+ public void uiConfigurationItem_putLfToDisplayedSsid_shouldRemoveLf() {
+ String testSsid = "\n" + FAKE_NEW_WPA_SSID + "\n";
+
+ AddAppNetworksFragment.UiConfigurationItem item =
+ new AddAppNetworksFragment.UiConfigurationItem(testSsid, null, 0, 0);
+
+ assertThat(item.mDisplayedSsid).isEqualTo(FAKE_NEW_WPA_SSID);
+ }
+
+ @Test
+ public void uiConfigurationItem_putCrLfToDisplayedSsid_shouldRemoveCrLf() {
+ String testSsid = "\r\n" + FAKE_NEW_WPA_SSID + "\r\n";
+
+ AddAppNetworksFragment.UiConfigurationItem item =
+ new AddAppNetworksFragment.UiConfigurationItem(testSsid, null, 0, 0);
+
+ assertThat(item.mDisplayedSsid).isEqualTo(FAKE_NEW_WPA_SSID);
+ }
+
private void setUpOneScannedNetworkWithScanedLevel4() {
final ArrayList list = new ArrayList<>();
list.add(mWifiEntry);
diff --git a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
index 08bcd2a..274ac16 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
@@ -58,6 +58,7 @@
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.provider.Settings;
+import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.View.OnClickListener;
@@ -108,6 +109,7 @@
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.Arrays;
+import java.util.List;
import java.util.stream.Collectors;
// TODO(b/143326832): Should add test cases for connect button.
@@ -1791,4 +1793,74 @@
return pref;
}
+
+ @Test
+ public void fineSubscriptionInfo_noMatchedCarrierId_returnNull() {
+ setUpSpyController();
+ SubscriptionInfo sub1 = mockSubscriptionInfo(1, "sim1", 1111);
+ SubscriptionInfo sub2 = mockSubscriptionInfo(2, "sim2", 2222);
+ List<SubscriptionInfo> activeSubInfos = Arrays.asList(sub1, sub2);
+
+ SubscriptionInfo info = mController.fineSubscriptionInfo(3333, activeSubInfos, 1);
+
+ assertThat(info).isNull();
+
+ info = mController.fineSubscriptionInfo(3333, activeSubInfos, 2);
+
+ assertThat(info).isNull();
+ }
+
+ @Test
+ public void fineSubscriptionInfo_diffCarrierId_returnMatchedOne() {
+ setUpSpyController();
+ SubscriptionInfo sub1 = mockSubscriptionInfo(1, "sim1", 1111);
+ SubscriptionInfo sub2 = mockSubscriptionInfo(2, "sim2", 2222);
+ List<SubscriptionInfo> activeSubInfos = Arrays.asList(sub1, sub2);
+
+ SubscriptionInfo info = mController.fineSubscriptionInfo(1111, activeSubInfos, 1);
+
+ assertThat(info).isNotNull();
+ assertThat(info.getDisplayName().toString()).isEqualTo("sim1");
+
+ info = mController.fineSubscriptionInfo(1111, activeSubInfos, 2);
+
+ assertThat(info).isNotNull();
+ assertThat(info.getDisplayName().toString()).isEqualTo("sim1");
+
+ info = mController.fineSubscriptionInfo(2222, activeSubInfos, 1);
+
+ assertThat(info).isNotNull();
+ assertThat(info.getDisplayName().toString()).isEqualTo("sim2");
+
+ info = mController.fineSubscriptionInfo(2222, activeSubInfos, 2);
+
+ assertThat(info).isNotNull();
+ assertThat(info.getDisplayName().toString()).isEqualTo("sim2");
+ }
+
+ @Test
+ public void fineSubscriptionInfo_sameCarrierId_returnDefaultDataOne() {
+ setUpSpyController();
+ SubscriptionInfo sub1 = mockSubscriptionInfo(1, "sim1", 1111);
+ SubscriptionInfo sub2 = mockSubscriptionInfo(2, "sim2", 1111);
+ List<SubscriptionInfo> activeSubInfos = Arrays.asList(sub1, sub2);
+
+ SubscriptionInfo info = mController.fineSubscriptionInfo(1111, activeSubInfos, 1);
+
+ assertThat(info).isNotNull();
+ assertThat(info.getDisplayName().toString()).isEqualTo("sim1");
+
+ info = mController.fineSubscriptionInfo(1111, activeSubInfos, 2);
+
+ assertThat(info).isNotNull();
+ assertThat(info.getDisplayName().toString()).isEqualTo("sim2");
+ }
+
+ private SubscriptionInfo mockSubscriptionInfo(int subId, String displayName, int carrierId) {
+ SubscriptionInfo info = mock(SubscriptionInfo.class);
+ when(info.getSubscriptionId()).thenReturn(subId);
+ when(info.getDisplayName()).thenReturn(displayName);
+ when(info.getCarrierId()).thenReturn(carrierId);
+ return info;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java
index 0c9bf37..d8605de 100644
--- a/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/dpp/WifiDppConfiguratorActivityTest.java
@@ -16,16 +16,78 @@
package com.android.settings.wifi.dpp;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.UserManager;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class)
public class WifiDppConfiguratorActivityTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Spy
+ Context mContext = ApplicationProvider.getApplicationContext();
+ @Mock
+ UserManager mUserManager;
+
+ WifiDppConfiguratorActivity mActivity;
+ Intent mIntent;
+
+ @Before
+ public void setUp() {
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mUserManager.isGuestUser()).thenReturn(false);
+
+ mIntent = new Intent(WifiDppConfiguratorActivity.ACTION_CONFIGURATOR_QR_CODE_SCANNER);
+ mIntent.putExtra(WifiDppUtils.EXTRA_WIFI_SSID, "GoogleGuest");
+ mIntent.putExtra(WifiDppUtils.EXTRA_WIFI_SECURITY, "WPA");
+ mIntent.putExtra(WifiDppUtils.EXTRA_WIFI_PRE_SHARED_KEY, "\\012345678,");
+
+ mActivity = spy(Robolectric.setupActivity(WifiDppConfiguratorActivity.class));
+ when(mActivity.getApplicationContext()).thenReturn(mContext);
+ }
+
@Test
public void launchActivity_noIntentAction_shouldNotFatalException() {
WifiDppConfiguratorActivity wifiDppConfiguratorActivity =
Robolectric.setupActivity(WifiDppConfiguratorActivity.class);
}
+
+ @Test
+ public void handleIntent_isGuestUser_shouldFinish() {
+ when(mUserManager.isGuestUser()).thenReturn(true);
+
+ mActivity.handleIntent(mIntent);
+
+ verify(mActivity).finish();
+ }
+
+ @Test
+ public void handleIntent_notGuestUser_shouldNotFinish() {
+ when(mUserManager.isGuestUser()).thenReturn(false);
+ doNothing().when(mActivity).showQrCodeScannerFragment();
+
+ mActivity.handleIntent(mIntent);
+
+ verify(mActivity, never()).finish();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
index 67ab7b4..5ed2e8b 100644
--- a/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/slice/WifiSliceTest.java
@@ -33,6 +33,7 @@
import android.content.pm.PackageManager;
import android.net.Uri;
import android.net.wifi.WifiManager;
+import android.os.UserManager;
import androidx.slice.Slice;
import androidx.slice.SliceItem;
@@ -84,6 +85,8 @@
@Spy
Context mContext = ApplicationProvider.getApplicationContext();
@Mock
+ private UserManager mUserManager;
+ @Mock
private WifiManager mWifiManager;
@Mock
private PackageManager mPackageManager;
@@ -98,6 +101,8 @@
@Before
public void setUp() {
doReturn(mResolver).when(mContext).getContentResolver();
+ doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
+ doReturn(false).when(mUserManager).isGuestUser();
doReturn(mWifiManager).when(mContext).getSystemService(WifiManager.class);
doReturn(WifiManager.WIFI_STATE_ENABLED).when(mWifiManager).getWifiState();
when(mContext.getPackageManager()).thenReturn(mPackageManager);
@@ -115,6 +120,33 @@
}
@Test
+ public void getWifiSlice_isGuestUser_shouldReturnNoToggle() {
+ doReturn(true).when(mUserManager).isGuestUser();
+
+ final Slice wifiSlice = mWifiSlice.getSlice();
+ final SliceMetadata metadata = SliceMetadata.from(mContext, wifiSlice);
+ final List<SliceAction> toggles = metadata.getToggles();
+ assertThat(toggles).hasSize(0);
+
+ final int rows = SliceQuery.findAll(wifiSlice, FORMAT_SLICE, HINT_LIST_ITEM,
+ null /* nonHints */).size();
+ // Title row
+ assertThat(rows).isEqualTo(1);
+ }
+
+ @Test
+ public void getWifiSlice_isNotGuestUser_shouldHaveTitleAndToggle() {
+ doReturn(false).when(mUserManager).isGuestUser();
+
+ final Slice wifiSlice = mWifiSlice.getSlice();
+ assertThat(wifiSlice).isNotNull();
+
+ final SliceMetadata metadata = SliceMetadata.from(mContext, wifiSlice);
+ final List<SliceAction> toggles = metadata.getToggles();
+ assertThat(toggles).hasSize(1);
+ }
+
+ @Test
public void getWifiSlice_fromSIPackage_shouldHaveTitleAndToggle() {
when(mPackageManager.getPackagesForUid(USER_ID)).thenReturn(new String[]{mSIPackageName});
when(mPackageManager.getNameForUid(USER_ID)).thenReturn(mSIPackageName);
diff --git a/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/BridgedAppsLinkPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/BridgedAppsLinkPreferenceControllerTest.java
index c594131..8799879 100644
--- a/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/BridgedAppsLinkPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/applications/specialaccess/notificationaccess/BridgedAppsLinkPreferenceControllerTest.java
@@ -31,6 +31,7 @@
import android.os.Build;
import android.service.notification.NotificationListenerFilter;
+import androidx.preference.Preference;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -68,6 +69,11 @@
mController.setTargetSdk(Build.VERSION_CODES.CUR_DEVELOPMENT + 1);
assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
+
+ // disables field
+ Preference p = new Preference(mContext);
+ mController.updateState(p);
+ assertThat(p.isEnabled()).isFalse();
}
@Test
@@ -77,6 +83,11 @@
when(mNm.getListenerFilter(mCn, 0)).thenReturn(new NotificationListenerFilter());
assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
+
+ // disables field
+ Preference p = new Preference(mContext);
+ mController.updateState(p);
+ assertThat(p.isEnabled()).isFalse();
}
@Test
@@ -88,6 +99,11 @@
when(mNm.getListenerFilter(mCn, 0)).thenReturn(nlf);
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+
+ // enables field
+ Preference p = new Preference(mContext);
+ mController.updateState(p);
+ assertThat(p.isEnabled()).isTrue();
}
@Test
@@ -97,5 +113,10 @@
when(mNm.getListenerFilter(mCn, 0)).thenReturn(new NotificationListenerFilter());
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+
+ // enables field
+ Preference p = new Preference(mContext);
+ mController.updateState(p);
+ assertThat(p.isEnabled()).isTrue();
}
}
diff --git a/tests/unit/src/com/android/settings/bluetooth/QrCodeScanModeActivityTest.java b/tests/unit/src/com/android/settings/bluetooth/QrCodeScanModeActivityTest.java
new file mode 100644
index 0000000..56764e3
--- /dev/null
+++ b/tests/unit/src/com/android/settings/bluetooth/QrCodeScanModeActivityTest.java
@@ -0,0 +1,72 @@
+/**
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.bluetooth;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Intent;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.settingslib.bluetooth.BluetoothBroadcastUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+
+@RunWith(AndroidJUnit4.class)
+public class QrCodeScanModeActivityTest {
+
+ @Mock
+ private Intent mIntent;
+ private QrCodeScanModeActivity mActivity;
+
+ @Before
+ public void setUp() {
+ mIntent = new Intent(BluetoothBroadcastUtils.ACTION_BLUETOOTH_LE_AUDIO_QR_CODE_SCANNER);
+ InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
+ try {
+ mActivity =
+ spy((QrCodeScanModeActivity) InstrumentationRegistry
+ .getInstrumentation().newActivity(
+ getClass().getClassLoader(),
+ QrCodeScanModeActivity.class.getName(), mIntent));
+ } catch (Exception e) {
+ throw new RuntimeException(e); // nothing to do
+ }
+ });
+ }
+
+ @Test
+ public void handleIntent_noIntentAction_shouldFinish() {
+ mIntent = new Intent();
+ mActivity.handleIntent(mIntent);
+ verify(mActivity).finish();
+ }
+
+ @Test
+ public void handleIntent_hasIntentExtra_shouldShowFragment() {
+ doNothing().when(mActivity).showQrCodeScannerFragment(mIntent);
+ mActivity.handleIntent(mIntent);
+ verify(mActivity).showQrCodeScannerFragment(mIntent);
+ }
+
+}
diff --git a/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java
index 8bd9b01..d347f91 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/VolumeOptionMenuControllerTest.java
@@ -55,7 +55,6 @@
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Menu mMenu;
@Mock private PackageManager mPackageManager;
- @Mock private StorageManager mStorageManager;
@Mock private VolumeInfo mExternalVolumeInfo;
@Mock private VolumeInfo mInternalVolumeInfo;
@@ -68,7 +67,6 @@
mContext = spy(ApplicationProvider.getApplicationContext());
when(mContext.getPackageManager()).thenReturn(mPackageManager);
- when(mContext.getSystemService(StorageManager.class)).thenReturn(mStorageManager);
when(mInternalVolumeInfo.getId()).thenReturn(INTERNAL_VOLUME_ID);
when(mInternalVolumeInfo.getType()).thenReturn(VolumeInfo.TYPE_PRIVATE);
@@ -173,17 +171,16 @@
when(mExternalVolumeInfo.getState()).thenReturn(VolumeInfo.STATE_MOUNTED);
when(mExternalVolumeInfo.getDiskId()).thenReturn(DISK_ID);
final DiskInfo externalDiskInfo = mock(DiskInfo.class);
- when(mStorageManager.findDiskById(DISK_ID)).thenReturn(externalDiskInfo);
mController.setSelectedStorageEntry(new StorageEntry(mContext, mExternalVolumeInfo));
mController.onPrepareOptionsMenu(mMenu);
verify(mController.mRename, atLeastOnce()).setVisible(true);
verify(mController.mUnmount, atLeastOnce()).setVisible(true);
- verify(mController.mFormat, atLeastOnce()).setVisible(true);
- verify(mController.mMount, never()).setVisible(true);
+ verify(mController.mFormatAsInternal, atLeastOnce()).setVisible(true);
verify(mController.mFormatAsPortable, never()).setVisible(true);
- verify(mController.mFormatAsInternal, never()).setVisible(true);
+ verify(mController.mFormat, never()).setVisible(true);
+ verify(mController.mMount, never()).setVisible(true);
verify(mController.mFree, never()).setVisible(true);
verify(mController.mForget, never()).setVisible(true);
}
diff --git a/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java b/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java
new file mode 100644
index 0000000..3319e2a
--- /dev/null
+++ b/tests/unit/src/com/android/settings/display/ScreenSaverPreferenceControllerTest.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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 org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.os.UserManager;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.Spy;
+
+@RunWith(AndroidJUnit4.class)
+public class ScreenSaverPreferenceControllerTest {
+ @Spy
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ @Spy
+ private final Resources mResources = mContext.getResources();
+ @Mock
+ private UserManager mUserManager;
+
+ private ScreenSaverPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+
+ mController = new ScreenSaverPreferenceController(mContext);
+
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ }
+
+ @Test
+ public void isAvailable_dreamsEnabledForAllUsers_shouldBeTrueForSystemUser() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsSupported)).thenReturn(true);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser))
+ .thenReturn(false);
+ when(mUserManager.isSystemUser()).thenReturn(true);
+ assertTrue(mController.isAvailable());
+ }
+
+ @Test
+ public void isAvailable_dreamsEnabledForAllUsers_shouldBeTrueForNonSystemUser() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsSupported)).thenReturn(true);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser))
+ .thenReturn(false);
+ when(mUserManager.isSystemUser()).thenReturn(false);
+ assertTrue(mController.isAvailable());
+ }
+
+ @Test
+ public void isAvailable_dreamsDisabled_shouldBeFalseForSystemUser() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsSupported)).thenReturn(false);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser))
+ .thenReturn(false);
+ when(mUserManager.isSystemUser()).thenReturn(true);
+ assertFalse(mController.isAvailable());
+ }
+
+ @Test
+ public void isAvailable_dreamsOnlyEnabledForSystemUser_shouldBeTrueForSystemUser() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsSupported)).thenReturn(true);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser))
+ .thenReturn(true);
+ when(mUserManager.isSystemUser()).thenReturn(true);
+ assertTrue(mController.isAvailable());
+ }
+
+ @Test
+ public void isAvailable_dreamsOnlyEnabledForSystemUser_shouldBeFalseForNonSystemUser() {
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsSupported)).thenReturn(true);
+ when(mResources.getBoolean(
+ com.android.internal.R.bool.config_dreamsOnlyEnabledForSystemUser))
+ .thenReturn(true);
+ when(mUserManager.isSystemUser()).thenReturn(false);
+ assertFalse(mController.isAvailable());
+ }
+}
diff --git a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java
index 66247d3..345631c 100644
--- a/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java
+++ b/tests/unit/src/com/android/settings/network/ProviderModelSliceTest.java
@@ -42,6 +42,7 @@
import android.net.ConnectivityManager;
import android.net.Uri;
import android.net.wifi.WifiManager;
+import android.os.UserManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -87,6 +88,8 @@
private MockNetworkProviderWorker mMockNetworkProviderWorker;
@Mock
+ private UserManager mUserManager;
+ @Mock
private SubscriptionManager mSubscriptionManager;
@Mock
private ConnectivityManager mConnectivityManager;
@@ -122,6 +125,8 @@
any(), any(), any(), any(), any(), anyLong(), anyLong(), any()))
.thenReturn(mWifiPickerTracker);
+ when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
+ when(mUserManager.isGuestUser()).thenReturn(false);
when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager);
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
@@ -164,6 +169,17 @@
@Test
@UiThreadTest
+ public void getSlice_isGuestUser_shouldNotAddRow() {
+ when(mUserManager.isGuestUser()).thenReturn(true);
+
+ final Slice slice = mMockProviderModelSlice.getSlice();
+
+ assertThat(slice).isNotNull();
+ verify(mListBuilder, never()).addRow(any());
+ }
+
+ @Test
+ @UiThreadTest
public void getSlice_noWifiAndHasCarrierNoData_oneCarrier() {
mWifiList.clear();
mMockNetworkProviderWorker.updateSelfResults(null);
@@ -320,6 +336,21 @@
}
@Test
+ public void getBackgroundWorkerClass_isGuestUser_returnNull() {
+ when(mUserManager.isGuestUser()).thenReturn(true);
+
+ assertThat(mMockProviderModelSlice.getBackgroundWorkerClass()).isNull();
+ }
+
+ @Test
+ public void getBackgroundWorkerClass_notGuestUser_returnWorkerClass() {
+ when(mUserManager.isGuestUser()).thenReturn(false);
+
+ assertThat(mMockProviderModelSlice.getBackgroundWorkerClass())
+ .isEqualTo(NetworkProviderWorker.class);
+ }
+
+ @Test
public void providerModelSlice_hasCorrectUri() {
assertThat(mMockProviderModelSlice.getUri()).isEqualTo(PROVIDER_MODEL_SLICE_URI);
}
diff --git a/tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java b/tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java
index e7ce002..9dc39da 100644
--- a/tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java
+++ b/tests/unit/src/com/android/settings/safetycenter/LockScreenSafetySourceTest.java
@@ -55,8 +55,10 @@
public class LockScreenSafetySourceTest {
private static final String SUMMARY = "summary";
- private static final String FAKE_ACTION_CHOOSE_LOCK_GENERIC_FRAGMENT = "choose_lock_generic";
- private static final String FAKE_ACTION_SCREEN_LOCK_SETTINGS = "screen_lock_settings";
+ private static final String FAKE_ACTION_OPEN_SUB_SETTING = "open_sub_setting";
+ private static final String EXTRA_DESTINATION = "destination";
+ private static final String FAKE_CHOOSE_LOCK_GENERIC_FRAGMENT = "choose_lock_generic";
+ private static final String FAKE_SCREEN_LOCK_SETTINGS = "screen_lock_settings";
private static final SafetyEvent EVENT_SOURCE_STATE_CHANGED =
new SafetyEvent.Builder(SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build();
@@ -157,7 +159,10 @@
.isEqualTo(SUMMARY);
assertThat(safetySourceStatus.getPendingIntent().getIntent()).isNotNull();
assertThat(safetySourceStatus.getPendingIntent().getIntent().getAction())
- .isEqualTo(FAKE_ACTION_CHOOSE_LOCK_GENERIC_FRAGMENT);
+ .isEqualTo(FAKE_ACTION_OPEN_SUB_SETTING);
+ assertThat(
+ safetySourceStatus.getPendingIntent().getIntent().getStringExtra(EXTRA_DESTINATION))
+ .isEqualTo(FAKE_CHOOSE_LOCK_GENERIC_FRAGMENT);
}
@Test
@@ -300,7 +305,9 @@
ResourcesUtils.getResourcesString(mApplicationContext,
"no_screen_lock_issue_action_label"));
assertThat(action.getPendingIntent().getIntent().getAction())
- .isEqualTo(FAKE_ACTION_CHOOSE_LOCK_GENERIC_FRAGMENT);
+ .isEqualTo(FAKE_ACTION_OPEN_SUB_SETTING);
+ assertThat(action.getPendingIntent().getIntent().getStringExtra(EXTRA_DESTINATION))
+ .isEqualTo(FAKE_CHOOSE_LOCK_GENERIC_FRAGMENT);
}
@Test
@@ -383,9 +390,6 @@
public void setSafetySourceData_whenShouldShowGearMenu_setGearMenuActionIcon() {
whenScreenLockIsEnabled();
when(mSafetyCenterManagerWrapper.isEnabled(mApplicationContext)).thenReturn(true);
- final Intent launchScreenLockSettings = new Intent(FAKE_ACTION_SCREEN_LOCK_SETTINGS);
- when(mScreenLockPreferenceDetailsUtils.getLaunchScreenLockSettingsIntent(anyInt()))
- .thenReturn(launchScreenLockSettings);
when(mScreenLockPreferenceDetailsUtils.shouldShowGearMenu()).thenReturn(true);
LockScreenSafetySource.setSafetySourceData(mApplicationContext,
@@ -399,7 +403,10 @@
assertThat(iconAction.getIconType()).isEqualTo(IconAction.ICON_TYPE_GEAR);
assertThat(iconAction.getPendingIntent().getIntent().getAction())
- .isEqualTo(FAKE_ACTION_SCREEN_LOCK_SETTINGS);
+ .isEqualTo(FAKE_ACTION_OPEN_SUB_SETTING);
+ assertThat(
+ iconAction.getPendingIntent().getIntent().getStringExtra(EXTRA_DESTINATION))
+ .isEqualTo(FAKE_SCREEN_LOCK_SETTINGS);
}
@Test
@@ -448,9 +455,15 @@
when(mScreenLockPreferenceDetailsUtils.isAvailable()).thenReturn(true);
when(mScreenLockPreferenceDetailsUtils.getSummary(anyInt())).thenReturn(SUMMARY);
- Intent launchChooseLockGenericFragment = new Intent(
- FAKE_ACTION_CHOOSE_LOCK_GENERIC_FRAGMENT);
+ Intent launchChooseLockGenericFragment = new Intent(FAKE_ACTION_OPEN_SUB_SETTING);
+ launchChooseLockGenericFragment.putExtra(EXTRA_DESTINATION,
+ FAKE_CHOOSE_LOCK_GENERIC_FRAGMENT);
when(mScreenLockPreferenceDetailsUtils.getLaunchChooseLockGenericFragmentIntent(anyInt()))
.thenReturn(launchChooseLockGenericFragment);
+
+ Intent launchScreenLockSettings = new Intent(FAKE_ACTION_OPEN_SUB_SETTING);
+ launchScreenLockSettings.putExtra(EXTRA_DESTINATION, FAKE_SCREEN_LOCK_SETTINGS);
+ when(mScreenLockPreferenceDetailsUtils.getLaunchScreenLockSettingsIntent(anyInt()))
+ .thenReturn(launchScreenLockSettings);
}
}
diff --git a/tests/unit/src/com/android/settings/search/CustomSiteMapRegistryTest.java b/tests/unit/src/com/android/settings/search/CustomSiteMapRegistryTest.java
index 5eb3b33..a3090c6 100644
--- a/tests/unit/src/com/android/settings/search/CustomSiteMapRegistryTest.java
+++ b/tests/unit/src/com/android/settings/search/CustomSiteMapRegistryTest.java
@@ -23,8 +23,8 @@
import com.android.settings.backup.UserBackupSettingsActivity;
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
import com.android.settings.connecteddevice.usb.UsbDetailsFragment;
-import com.android.settings.fuelgauge.PowerUsageAdvanced;
-import com.android.settings.fuelgauge.PowerUsageSummary;
+import com.android.settings.fuelgauge.batteryusage.PowerUsageAdvanced;
+import com.android.settings.fuelgauge.batteryusage.PowerUsageSummary;
import com.android.settings.gestures.GestureNavigationSettingsFragment;
import com.android.settings.gestures.SystemNavigationGestureSettings;
import com.android.settings.location.LocationSettings;
diff --git a/tests/unit/src/com/android/settings/security/SecuritySettingsTest.java b/tests/unit/src/com/android/settings/security/SecuritySettingsTest.java
index c50d993..272c840 100644
--- a/tests/unit/src/com/android/settings/security/SecuritySettingsTest.java
+++ b/tests/unit/src/com/android/settings/security/SecuritySettingsTest.java
@@ -16,26 +16,42 @@
package com.android.settings.security;
+import static android.content.Context.FACE_SERVICE;
+import static android.content.Context.FINGERPRINT_SERVICE;
+import static android.content.pm.PackageManager.FEATURE_FACE;
+import static android.content.pm.PackageManager.FEATURE_FINGERPRINT;
+
import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_KEY;
import static com.android.settings.core.PreferenceXmlParserUtils.MetadataFlag.FLAG_INCLUDE_PREF_SCREEN;
import static com.android.settings.core.PreferenceXmlParserUtils.MetadataFlag.FLAG_NEED_KEY;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.annotation.XmlRes;
import android.content.Context;
+import android.content.pm.PackageManager;
+import android.hardware.face.FaceManager;
+import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
+import android.os.Looper;
import android.provider.SearchIndexableResource;
+import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import com.android.settings.biometrics.combination.CombinedBiometricStatusPreferenceController;
+import com.android.settings.biometrics.face.FaceStatusPreferenceController;
+import com.android.settings.biometrics.fingerprint.FingerprintStatusPreferenceController;
import com.android.settings.core.PreferenceXmlParserUtils;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.security.trustagent.TrustAgentManager;
import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.core.AbstractPreferenceController;
import org.junit.Before;
import org.junit.Test;
@@ -52,26 +68,44 @@
private Context mContext;
private SecuritySettingsFeatureProvider mSecuritySettingsFeatureProvider;
+ private SecuritySettings mSecuritySettings;
@Mock
private TrustAgentManager mTrustAgentManager;
+ @Mock
+ private FaceManager mFaceManager;
+ @Mock
+ private FingerprintManager mFingerprintManager;
+ @Mock
+ private PackageManager mPackageManager;
@Before
+ @UiThreadTest
public void setup() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+
MockitoAnnotations.initMocks(this);
- mContext = ApplicationProvider.getApplicationContext();
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.hasSystemFeature(FEATURE_FACE)).thenReturn(true);
+ when(mPackageManager.hasSystemFeature(FEATURE_FINGERPRINT)).thenReturn(true);
+ doReturn(mFaceManager).when(mContext).getSystemService(FACE_SERVICE);
+ doReturn(mFingerprintManager).when(mContext).getSystemService(FINGERPRINT_SERVICE);
FakeFeatureFactory mFeatureFactory = FakeFeatureFactory.setupForTest();
- mSecuritySettingsFeatureProvider = mFeatureFactory.getSecuritySettingsFeatureProvider();
SecurityFeatureProvider mSecurityFeatureProvider =
mFeatureFactory.getSecurityFeatureProvider();
when(mSecurityFeatureProvider.getTrustAgentManager()).thenReturn(mTrustAgentManager);
+ mSecuritySettingsFeatureProvider = mFeatureFactory.getSecuritySettingsFeatureProvider();
+ mSecuritySettings = new SecuritySettings();
}
@Test
public void noAlternativeFragmentAvailable_pageIndexIncluded() throws Exception {
- when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
- .thenReturn(false);
+ when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment()).thenReturn(
+ false);
BaseSearchIndexProvider indexProvider = SecuritySettings.SEARCH_INDEX_DATA_PROVIDER;
List<String> allXmlKeys = getAllXmlKeys(indexProvider);
@@ -83,8 +117,8 @@
@Test
public void alternativeFragmentAvailable_pageIndexExcluded() throws Exception {
- when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
- .thenReturn(true);
+ when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment()).thenReturn(
+ true);
BaseSearchIndexProvider indexProvider = SecuritySettings.SEARCH_INDEX_DATA_PROVIDER;
List<String> allXmlKeys = getAllXmlKeys(indexProvider);
@@ -94,6 +128,45 @@
assertThat(allXmlKeys).isEmpty();
}
+ @Test
+ @UiThreadTest
+ public void preferenceController_containsFaceWhenAvailable() {
+ when(mFaceManager.isHardwareDetected()).thenReturn(true);
+ when(mFingerprintManager.isHardwareDetected()).thenReturn(false);
+ final List<AbstractPreferenceController> controllers =
+ mSecuritySettings.createPreferenceControllers(mContext);
+
+ assertThat(isFacePrefAvailable(controllers)).isTrue();
+ assertThat(isFingerprintPrefAvailable(controllers)).isFalse();
+ assertThat(isCombinedPrefAvailable(controllers)).isFalse();
+ }
+
+ @Test
+ @UiThreadTest
+ public void preferenceController_containsFingerprintWhenAvailable() {
+ when(mFaceManager.isHardwareDetected()).thenReturn(false);
+ when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
+ final List<AbstractPreferenceController> controllers =
+ mSecuritySettings.createPreferenceControllers(mContext);
+
+ assertThat(isFacePrefAvailable(controllers)).isFalse();
+ assertThat(isFingerprintPrefAvailable(controllers)).isTrue();
+ assertThat(isCombinedPrefAvailable(controllers)).isFalse();
+ }
+
+ @Test
+ @UiThreadTest
+ public void preferenceController_containsCombinedBiometricWhenAvailable() {
+ when(mFaceManager.isHardwareDetected()).thenReturn(true);
+ when(mFingerprintManager.isHardwareDetected()).thenReturn(true);
+ final List<AbstractPreferenceController> controllers =
+ mSecuritySettings.createPreferenceControllers(mContext);
+
+ assertThat(isFacePrefAvailable(controllers)).isFalse();
+ assertThat(isFingerprintPrefAvailable(controllers)).isFalse();
+ assertThat(isCombinedPrefAvailable(controllers)).isTrue();
+ }
+
private List<String> getAllXmlKeys(BaseSearchIndexProvider indexProvider) throws Exception {
final List<SearchIndexableResource> resources = indexProvider.getXmlResourcesToIndex(
mContext, true /* not used*/);
@@ -109,11 +182,29 @@
private List<String> getKeysFromXml(@XmlRes int xmlResId) throws Exception {
final List<String> keys = new ArrayList<>();
- final List<Bundle> metadata = PreferenceXmlParserUtils
- .extractMetadata(mContext, xmlResId, FLAG_NEED_KEY | FLAG_INCLUDE_PREF_SCREEN);
+ final List<Bundle> metadata = PreferenceXmlParserUtils.extractMetadata(mContext, xmlResId,
+ FLAG_NEED_KEY | FLAG_INCLUDE_PREF_SCREEN);
for (Bundle bundle : metadata) {
keys.add(bundle.getString(METADATA_KEY));
}
return keys;
}
+
+ boolean isFacePrefAvailable(List<AbstractPreferenceController> controllers) {
+ return controllers.stream().filter(
+ controller -> controller instanceof FaceStatusPreferenceController
+ && controller.isAvailable()).count() == 1;
+ }
+
+ boolean isFingerprintPrefAvailable(List<AbstractPreferenceController> controllers) {
+ return controllers.stream().filter(
+ controller -> controller instanceof FingerprintStatusPreferenceController
+ && controller.isAvailable()).count() == 1;
+ }
+
+ boolean isCombinedPrefAvailable(List<AbstractPreferenceController> controllers) {
+ return controllers.stream().filter(
+ controller -> controller instanceof CombinedBiometricStatusPreferenceController
+ && controller.isAvailable()).count() == 1;
+ }
}
diff --git a/tests/unit/src/com/android/settings/sound/MediaControlsLockScreenPreferenceControllerTest.java b/tests/unit/src/com/android/settings/sound/MediaControlsLockScreenPreferenceControllerTest.java
new file mode 100644
index 0000000..6c1aede
--- /dev/null
+++ b/tests/unit/src/com/android/settings/sound/MediaControlsLockScreenPreferenceControllerTest.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.sound;
+
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class MediaControlsLockScreenPreferenceControllerTest {
+
+ private static final String KEY = "media_controls_lockscreen";
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+
+ private int mOriginalPreference;
+ private ContentResolver mContentResolver;
+ private MediaControlsLockScreenPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mContentResolver = mContext.getContentResolver();
+ mOriginalPreference = Settings.Secure.getInt(mContentResolver,
+ Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, 1);
+ mController = new MediaControlsLockScreenPreferenceController(mContext, KEY);
+ }
+
+ @After
+ public void tearDown() {
+ Settings.Secure.putInt(mContentResolver, Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN,
+ mOriginalPreference);
+ }
+
+ @Test
+ public void getAvailability_returnAvailable() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void setChecked_disable_shouldTurnOff() {
+ Settings.Secure.putInt(mContentResolver,
+ Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, 1);
+
+ assertThat(mController.isChecked()).isTrue();
+
+ mController.setChecked(false);
+
+ assertThat(Settings.Secure.getInt(mContentResolver,
+ Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, -1)).isEqualTo(0);
+ }
+
+ @Test
+ public void setChecked_enable_shouldTurnOn() {
+ Settings.Secure.putInt(mContentResolver,
+ Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, 0);
+
+ assertThat(mController.isChecked()).isFalse();
+
+ mController.setChecked(true);
+
+ assertThat(Settings.Secure.getInt(mContentResolver,
+ Settings.Secure.MEDIA_CONTROLS_LOCK_SCREEN, -1)).isEqualTo(1);
+ }
+}
diff --git a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
index 717de79..f565075 100644
--- a/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
+++ b/tests/unit/src/com/android/settings/testutils/FakeFeatureFactory.java
@@ -45,6 +45,7 @@
import com.android.settings.security.SecuritySettingsFeatureProvider;
import com.android.settings.slices.SlicesFeatureProvider;
import com.android.settings.users.UserFeatureProvider;
+import com.android.settings.vpn2.AdvancedVpnFeatureProvider;
import com.android.settings.wifi.WifiTrackerLibProvider;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -82,6 +83,7 @@
public SecuritySettingsFeatureProvider securitySettingsFeatureProvider;
public AccessibilitySearchFeatureProvider mAccessibilitySearchFeatureProvider;
public AccessibilityMetricsFeatureProvider mAccessibilityMetricsFeatureProvider;
+ public AdvancedVpnFeatureProvider mAdvancedVpnFeatureProvider;
/**
* Call this in {@code @Before} method of the test class to use fake factory.
@@ -122,6 +124,7 @@
securitySettingsFeatureProvider = mock(SecuritySettingsFeatureProvider.class);
mAccessibilitySearchFeatureProvider = mock(AccessibilitySearchFeatureProvider.class);
mAccessibilityMetricsFeatureProvider = mock(AccessibilityMetricsFeatureProvider.class);
+ mAdvancedVpnFeatureProvider = mock(AdvancedVpnFeatureProvider.class);
}
@Override
@@ -258,4 +261,9 @@
public AccessibilityMetricsFeatureProvider getAccessibilityMetricsFeatureProvider() {
return mAccessibilityMetricsFeatureProvider;
}
+
+ @Override
+ public AdvancedVpnFeatureProvider getAdvancedVpnFeatureProvider() {
+ return mAdvancedVpnFeatureProvider;
+ }
}
diff --git a/tests/unit/src/com/android/settings/vpn2/AppManagementFragmentTest.java b/tests/unit/src/com/android/settings/vpn2/AppManagementFragmentTest.java
new file mode 100644
index 0000000..80bb393
--- /dev/null
+++ b/tests/unit/src/com/android/settings/vpn2/AppManagementFragmentTest.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.vpn2;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.Looper;
+
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settingslib.RestrictedPreference;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+@RunWith(AndroidJUnit4.class)
+public class AppManagementFragmentTest {
+ private static final String FAKE_PACKAGE_NAME = "com.fake.package.name";
+ private static final String ADVANCED_VPN_GROUP_PACKAGE_NAME = "com.advanced.package.name";
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+ private AppManagementFragment mFragment;
+ private Context mContext;
+ private FakeFeatureFactory mFakeFeatureFactory;
+ private RestrictedPreference mPreferenceForget;
+
+ @Before
+ @UiThreadTest
+ public void setUp() {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+
+ mFragment = spy(new AppManagementFragment());
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mPreferenceForget = new RestrictedPreference(mContext);
+
+ mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
+ mFragment.init(ADVANCED_VPN_GROUP_PACKAGE_NAME,
+ mFakeFeatureFactory.getAdvancedVpnFeatureProvider(), mPreferenceForget);
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.getAdvancedVpnPackageName())
+ .thenReturn(ADVANCED_VPN_GROUP_PACKAGE_NAME);
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isAdvancedVpnSupported(any()))
+ .thenReturn(true);
+ }
+
+ @Test
+ public void updateRestrictedViews_isAdvancedVpn_hidesForgetPreference() {
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isAdvancedVpnRemovable())
+ .thenReturn(false);
+ mFragment.updateRestrictedViews();
+ assertThat(mPreferenceForget.isVisible()).isFalse();
+ }
+
+ @Test
+ public void updateRestrictedViews_isNotAdvancedVpn_showsForgetPreference() {
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isAdvancedVpnRemovable())
+ .thenReturn(false);
+ mFragment.init(FAKE_PACKAGE_NAME,
+ mFakeFeatureFactory.getAdvancedVpnFeatureProvider(), mPreferenceForget);
+ mFragment.updateRestrictedViews();
+ assertThat(mPreferenceForget.isVisible()).isTrue();
+ }
+
+ @Test
+ public void updateRestrictedViews_isAdvancedVpnRemovable_showsForgetPreference() {
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isAdvancedVpnRemovable())
+ .thenReturn(true);
+ mFragment.init(FAKE_PACKAGE_NAME,
+ mFakeFeatureFactory.getAdvancedVpnFeatureProvider(), mPreferenceForget);
+ mFragment.updateRestrictedViews();
+ assertThat(mPreferenceForget.isVisible()).isTrue();
+ }
+}
diff --git a/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java b/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
new file mode 100644
index 0000000..953a524
--- /dev/null
+++ b/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT 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.vpn2;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.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.app.AppOpsManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.os.Looper;
+import android.os.UserHandle;
+import android.text.TextUtils;
+import android.util.ArraySet;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceGroup;
+import androidx.preference.PreferenceManager;
+import androidx.preference.PreferenceScreen;
+import androidx.test.annotation.UiThreadTest;
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.settings.testutils.FakeFeatureFactory;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+@RunWith(AndroidJUnit4.class)
+public class VpnSettingsTest {
+ private static final int USER_ID_1 = UserHandle.USER_NULL;
+ private static final String VPN_GROUP_KEY = "vpn_group";
+ private static final String VPN_GROUP_TITLE = "vpn_group_title";
+ private static final String VPN_PACKAGE_NAME = "vpn.package.name";
+ private static final String VPN_LAUNCH_INTENT = "vpn.action";
+ private static final String ADVANCED_VPN_GROUP_KEY = "advanced_vpn_group";
+ private static final String ADVANCED_VPN_GROUP_TITLE = "advanced_vpn_group_title";
+ private static final String ADVANCED_VPN_PACKAGE_NAME = "advanced.vpn.package.name";
+ private static final String ADVANCED_VPN_LAUNCH_INTENT = "advanced.vpn.action";
+
+ private final Intent mVpnIntent = new Intent().setAction(VPN_LAUNCH_INTENT);
+ private final Intent mAdvancedVpnIntent = new Intent().setAction(ADVANCED_VPN_LAUNCH_INTENT);
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+ @Mock
+ private AppOpsManager mAppOpsManager;
+ @Mock
+ private PackageManager mPackageManager;
+
+ private VpnSettings mVpnSettings;
+ private Context mContext;
+ private PreferenceManager mPreferenceManager;
+ private PreferenceScreen mPreferenceScreen;
+ private PreferenceGroup mAdvancedVpnGroup;
+ private PreferenceGroup mVpnGroup;
+ private FakeFeatureFactory mFakeFeatureFactory;
+
+ @Before
+ @UiThreadTest
+ public void setUp() throws PackageManager.NameNotFoundException {
+ if (Looper.myLooper() == null) {
+ Looper.prepare();
+ }
+
+ mVpnSettings = spy(new VpnSettings());
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ mAdvancedVpnGroup = spy(new PreferenceCategory(mContext));
+ mVpnGroup = spy(new PreferenceCategory(mContext));
+ mAdvancedVpnGroup.setKey(ADVANCED_VPN_GROUP_KEY);
+ mVpnGroup.setKey(VPN_GROUP_KEY);
+ mPreferenceManager = new PreferenceManager(mContext);
+ mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
+ mPreferenceScreen.addPreference(mAdvancedVpnGroup);
+ mPreferenceScreen.addPreference(mVpnGroup);
+ mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
+ mVpnSettings.init(mPreferenceScreen, mFakeFeatureFactory.getAdvancedVpnFeatureProvider());
+
+ when(mVpnSettings.getContext()).thenReturn(mContext);
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider
+ .getAdvancedVpnPreferenceGroupTitle(mContext)).thenReturn(ADVANCED_VPN_GROUP_TITLE);
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.getVpnPreferenceGroupTitle(mContext))
+ .thenReturn(VPN_GROUP_TITLE);
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.getAdvancedVpnPackageName())
+ .thenReturn(ADVANCED_VPN_PACKAGE_NAME);
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isAdvancedVpnSupported(any()))
+ .thenReturn(true);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ doReturn(mContext).when(mContext).createContextAsUser(any(), anyInt());
+ doReturn(mContext).when(mContext).createPackageContextAsUser(any(), anyInt(), any());
+ doReturn(mPreferenceManager).when(mVpnGroup).getPreferenceManager();
+ doReturn(mPreferenceManager).when(mAdvancedVpnGroup).getPreferenceManager();
+ }
+
+ @Test
+ public void setShownAdvancedPreferences_hasGeneralVpn_returnsVpnCountAs1() {
+ Set<Preference> updates = new ArraySet<>();
+ AppPreference pref =
+ spy(new AppPreference(mContext, USER_ID_1, VPN_PACKAGE_NAME));
+ updates.add(pref);
+
+ mVpnSettings.setShownAdvancedPreferences(updates);
+
+ assertThat(mVpnGroup.getPreferenceCount()).isEqualTo(1);
+ assertThat(mVpnGroup.isVisible()).isTrue();
+ assertThat(mAdvancedVpnGroup.isVisible()).isFalse();
+ }
+
+ @Test
+ public void setShownAdvancedPreferences_hasAdvancedVpn_returnsAdvancedVpnCountAs1() {
+ Set<Preference> updates = new ArraySet<>();
+ AppPreference pref =
+ spy(new AppPreference(mContext, USER_ID_1, ADVANCED_VPN_PACKAGE_NAME));
+ updates.add(pref);
+
+ mVpnSettings.setShownAdvancedPreferences(updates);
+
+ assertThat(mAdvancedVpnGroup.getPreferenceCount()).isEqualTo(1);
+ assertThat(mAdvancedVpnGroup.isVisible()).isTrue();
+ assertThat(mVpnGroup.isVisible()).isFalse();
+ }
+
+ @Test
+ public void setShownAdvancedPreferences_noVpn_returnsEmpty() {
+ Set<Preference> updates = new ArraySet<>();
+
+ mVpnSettings.setShownAdvancedPreferences(updates);
+
+ assertThat(mAdvancedVpnGroup.getPreferenceCount()).isEqualTo(0);
+ assertThat(mVpnGroup.getPreferenceCount()).isEqualTo(0);
+ assertThat(mAdvancedVpnGroup.isVisible()).isFalse();
+ assertThat(mVpnGroup.isVisible()).isFalse();
+ }
+
+ @Test
+ public void getVpnApps_isAdvancedVpn_returnsOne() throws Exception {
+ ApplicationInfo info = new ApplicationInfo();
+ info.uid = 1111;
+ when(mPackageManager.getApplicationInfo(anyString(), anyInt())).thenReturn(info);
+
+ assertThat(VpnSettings.getVpnApps(mContext, /* includeProfiles= */ false,
+ mFakeFeatureFactory.getAdvancedVpnFeatureProvider(),
+ mAppOpsManager).size()).isEqualTo(1);
+ }
+
+ @Test
+ public void getVpnApps_isNotAdvancedVpn_returnsEmpty() {
+ int uid = 1111;
+ List<AppOpsManager.OpEntry> opEntries = new ArrayList<>();
+ List<AppOpsManager.PackageOps> apps = new ArrayList<>();
+ AppOpsManager.PackageOps packageOps =
+ new AppOpsManager.PackageOps(VPN_PACKAGE_NAME, uid, opEntries);
+ apps.add(packageOps);
+ when(mAppOpsManager.getPackagesForOps((int[]) any())).thenReturn(apps);
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isAdvancedVpnSupported(any()))
+ .thenReturn(false);
+
+ assertThat(VpnSettings.getVpnApps(mContext, /* includeProfiles= */ false,
+ mFakeFeatureFactory.getAdvancedVpnFeatureProvider(),
+ mAppOpsManager)).isEmpty();
+ }
+
+ @Test
+ public void clickVpn_VpnConnected_doesNotStartVpnLaunchIntent()
+ throws PackageManager.NameNotFoundException {
+ Set<Preference> updates = new ArraySet<>();
+ AppPreference pref = spy(new AppPreference(mContext, USER_ID_1, VPN_PACKAGE_NAME));
+ pref.setState(AppPreference.STATE_CONNECTED);
+ updates.add(pref);
+ when(mContext.createPackageContextAsUser(any(), anyInt(), any())).thenReturn(mContext);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.getLaunchIntentForPackage(any())).thenReturn(mVpnIntent);
+ ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+ doNothing().when(mContext).startActivityAsUser(captor.capture(), any());
+ mVpnSettings.setShownPreferences(updates);
+
+ mVpnSettings.onPreferenceClick(pref);
+
+ verify(mContext, never()).startActivityAsUser(any(), any());
+ }
+
+ @Test
+ public void clickVpn_VpnDisconnected_startsVpnLaunchIntent()
+ throws PackageManager.NameNotFoundException {
+ Set<Preference> updates = new ArraySet<>();
+ AppPreference pref = spy(new AppPreference(mContext, USER_ID_1, VPN_PACKAGE_NAME));
+ pref.setState(AppPreference.STATE_DISCONNECTED);
+ updates.add(pref);
+ when(mContext.createPackageContextAsUser(any(), anyInt(), any())).thenReturn(mContext);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.getLaunchIntentForPackage(any())).thenReturn(mVpnIntent);
+ ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+ doNothing().when(mContext).startActivityAsUser(captor.capture(), any());
+ mVpnSettings.setShownPreferences(updates);
+
+ mVpnSettings.onPreferenceClick(pref);
+
+ verify(mContext).startActivityAsUser(captor.capture(), any());
+ assertThat(TextUtils.equals(captor.getValue().getAction(),
+ VPN_LAUNCH_INTENT)).isTrue();
+ }
+
+ @Test
+ public void clickAdvancedVpn_VpnConnectedDisconnectDialogDisabled_startsAppLaunchIntent()
+ throws PackageManager.NameNotFoundException {
+ Set<Preference> updates = new ArraySet<>();
+ AppPreference pref =
+ spy(new AppPreference(mContext, USER_ID_1, ADVANCED_VPN_PACKAGE_NAME));
+ pref.setState(AppPreference.STATE_CONNECTED);
+ updates.add(pref);
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isDisconnectDialogEnabled())
+ .thenReturn(false);
+ when(mContext.createPackageContextAsUser(any(), anyInt(), any())).thenReturn(mContext);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.getLaunchIntentForPackage(any())).thenReturn(mAdvancedVpnIntent);
+ ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+ doNothing().when(mContext).startActivityAsUser(captor.capture(), any());
+ mVpnSettings.setShownAdvancedPreferences(updates);
+
+ mVpnSettings.onPreferenceClick(pref);
+
+ verify(mContext).startActivityAsUser(captor.capture(), any());
+ assertThat(TextUtils.equals(captor.getValue().getAction(),
+ ADVANCED_VPN_LAUNCH_INTENT)).isTrue();
+ }
+
+ @Test
+ public void clickAdvancedVpn_VpnConnectedDisconnectDialogEnabled_doesNotStartAppLaunchIntent()
+ throws PackageManager.NameNotFoundException {
+ Set<Preference> updates = new ArraySet<>();
+ AppPreference pref =
+ spy(new AppPreference(mContext, USER_ID_1, ADVANCED_VPN_PACKAGE_NAME));
+ pref.setState(AppPreference.STATE_CONNECTED);
+ updates.add(pref);
+ when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.isDisconnectDialogEnabled())
+ .thenReturn(true);
+ when(mContext.createPackageContextAsUser(any(), anyInt(), any())).thenReturn(mContext);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.getLaunchIntentForPackage(any())).thenReturn(mAdvancedVpnIntent);
+ ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+ doNothing().when(mContext).startActivityAsUser(captor.capture(), any());
+ mVpnSettings.setShownAdvancedPreferences(updates);
+
+ mVpnSettings.onPreferenceClick(pref);
+
+ verify(mContext, never()).startActivityAsUser(any(), any());
+ }
+}