Merge "Add Apps > Battery optimization page implementation."
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 938e33d..784a94b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,6 +16,7 @@
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.DEVICE_POWER" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
+ <uses-permission android:name="android.permission.CONTROL_UI_TRACING" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
@@ -132,7 +133,8 @@
android:defaultToDeviceProtectedStorage="true"
android:directBootAware="true"
android:appComponentFactory="androidx.core.app.CoreComponentFactory"
- android:gwpAsanMode="always">
+ android:gwpAsanMode="always"
+ android:enableOnBackInvokedCallback="true">
<uses-library android:name="org.apache.http.legacy" />
@@ -2108,7 +2110,7 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.accessibility.CaptionPropertiesFragment" />
+ android:value="com.android.settings.accessibility.CaptioningPropertiesFragment" />
<meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
android:value="@string/menu_key_accessibility"/>
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
@@ -2484,33 +2486,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 -->
@@ -4387,14 +4397,6 @@
</receiver>
<receiver
- android:name=".sim.receivers.SuwFinishReceiver"
- android:exported="true">
- <intent-filter>
- <action android:name="com.google.android.setupwizard.SETUP_WIZARD_FINISHED" />
- </intent-filter>
- </receiver>
-
- <receiver
android:name=".sim.receivers.SimCompleteBootReceiver"
android:exported="true">
<intent-filter>
diff --git a/res/drawable-nodpi/gesture_ambient_wake_lock_screen b/res/drawable-nodpi/gesture_ambient_wake_lock_screen
deleted file mode 100644
index e69de29..0000000
--- a/res/drawable-nodpi/gesture_ambient_wake_lock_screen
+++ /dev/null
diff --git a/res/drawable-nodpi/system_nav_2_button.png b/res/drawable-nodpi/system_nav_2_button.png
deleted file mode 100644
index a041f9b..0000000
--- a/res/drawable-nodpi/system_nav_2_button.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/system_nav_3_button.png b/res/drawable-nodpi/system_nav_3_button.png
deleted file mode 100644
index e78fc8b..0000000
--- a/res/drawable-nodpi/system_nav_3_button.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/system_nav_fully_gestural.png b/res/drawable-nodpi/system_nav_fully_gestural.png
deleted file mode 100644
index b301608..0000000
--- a/res/drawable-nodpi/system_nav_fully_gestural.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/accessibility_captions_banner.xml b/res/drawable/accessibility_captioning_banner.xml
similarity index 100%
rename from res/drawable/accessibility_captions_banner.xml
rename to res/drawable/accessibility_captioning_banner.xml
diff --git a/res/drawable/color_bar_progress.xml b/res/drawable/color_bar_progress.xml
index d277467..9f3a199 100644
--- a/res/drawable/color_bar_progress.xml
+++ b/res/drawable/color_bar_progress.xml
@@ -21,7 +21,7 @@
<size android:height="10dp" />
<solid android:color="@*android:color/white_disabled_material" />
</shape>
- </item>r
+ </item>
<item android:id="@android:id/secondaryProgress">
<scale android:scaleWidth="100%">
<shape android:shape="rectangle"
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/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/battery_header.xml b/res/layout/battery_header.xml
index 574d7d4..486f594 100644
--- a/res/layout/battery_header.xml
+++ b/res/layout/battery_header.xml
@@ -47,7 +47,6 @@
android:layout_marginTop="8dp"
android:minLines="3"
android:textAppearance="@android:style/TextAppearance.DeviceDefault.Small"/>
- android:textColor="?android:attr/textColorPrimary"/>
</LinearLayout>
@@ -57,4 +56,4 @@
android:layout_height="@dimen/battery_meter_height"
android:layout_gravity="center"/>
-</LinearLayout>
\ No newline at end of file
+</LinearLayout>
diff --git a/res/layout/enable_accessibility_service_dialog_content.xml b/res/layout/enable_accessibility_service_dialog_content.xml
index 3fe932c..0286d57 100644
--- a/res/layout/enable_accessibility_service_dialog_content.xml
+++ b/res/layout/enable_accessibility_service_dialog_content.xml
@@ -23,7 +23,6 @@
android:gravity="top">
<LinearLayout
- android:theme="@style/Theme.AlertDialog"
style="@style/AccessibilityDialog">
<LinearLayout
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/face_enroll_introduction.xml b/res/layout/face_enroll_introduction.xml
index c497015..8b03529 100644
--- a/res/layout/face_enroll_introduction.xml
+++ b/res/layout/face_enroll_introduction.xml
@@ -48,7 +48,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@null"
- android:src="@drawable/face_enroll_intro_illustration"/>
+ android:src="@drawable/face_enroll_intro_illustration"
+ android:layout_marginBottom="@dimen/face_enroll_intro_illustration_margin_bottom"/>
</FrameLayout>
diff --git a/res/layout/main_clear.xml b/res/layout/main_clear.xml
index a2464e2..7abebaf 100644
--- a/res/layout/main_clear.xml
+++ b/res/layout/main_clear.xml
@@ -39,7 +39,7 @@
<TextView
style="@style/TextAppearance.PreferenceTitle.SettingsLib"
- android:id="@+id/sud_layout_description"
+ android:id="@+id/sud_layout_subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/main_clear_desc"/>
diff --git a/res/layout/main_clear_confirm.xml b/res/layout/main_clear_confirm.xml
index c5601c7..6027d18 100644
--- a/res/layout/main_clear_confirm.xml
+++ b/res/layout/main_clear_confirm.xml
@@ -30,7 +30,7 @@
android:orientation="vertical">
<TextView
- android:id="@+id/sud_layout_description"
+ android:id="@+id/sud_layout_subtitle"
style="@style/TextAppearance.PreferenceTitle.SettingsLib"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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/tutorial_dialog_launch_by_gesture_navigation_settings.xml b/res/layout/tutorial_dialog_launch_by_gesture_navigation_settings.xml
index b494e93..86c6b3a 100644
--- a/res/layout/tutorial_dialog_launch_by_gesture_navigation_settings.xml
+++ b/res/layout/tutorial_dialog_launch_by_gesture_navigation_settings.xml
@@ -23,7 +23,6 @@
android:scrollbarStyle="outsideOverlay">
<LinearLayout
- android:theme="@style/Theme.AlertDialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
diff --git a/res/layout/tutorial_dialog_launch_service_by_accessibility_button.xml b/res/layout/tutorial_dialog_launch_service_by_accessibility_button.xml
index ecbccab..117db7d 100644
--- a/res/layout/tutorial_dialog_launch_service_by_accessibility_button.xml
+++ b/res/layout/tutorial_dialog_launch_service_by_accessibility_button.xml
@@ -23,7 +23,6 @@
android:scrollbarStyle="outsideOverlay">
<LinearLayout
- android:theme="@style/Theme.AlertDialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
diff --git a/res/layout/tutorial_dialog_launch_service_by_gesture_navigation.xml b/res/layout/tutorial_dialog_launch_service_by_gesture_navigation.xml
index 2557737..340c738 100644
--- a/res/layout/tutorial_dialog_launch_service_by_gesture_navigation.xml
+++ b/res/layout/tutorial_dialog_launch_service_by_gesture_navigation.xml
@@ -23,7 +23,6 @@
android:scrollbarStyle="outsideOverlay">
<LinearLayout
- android:theme="@style/Theme.AlertDialog"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
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/face_settings.mp4 b/res/raw/face_settings.mp4
deleted file mode 100644
index e69de29..0000000
--- a/res/raw/face_settings.mp4
+++ /dev/null
diff --git a/res/raw/gesture_ambient_wake_lock_screen.mp4 b/res/raw/gesture_ambient_wake_lock_screen.mp4
deleted file mode 100644
index e69de29..0000000
--- a/res/raw/gesture_ambient_wake_lock_screen.mp4
+++ /dev/null
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/raw/system_nav_2_button.mp4 b/res/raw/system_nav_2_button.mp4
deleted file mode 100644
index 2f65292..0000000
--- a/res/raw/system_nav_2_button.mp4
+++ /dev/null
Binary files differ
diff --git a/res/raw/system_nav_3_button.mp4 b/res/raw/system_nav_3_button.mp4
deleted file mode 100644
index 86fb236..0000000
--- a/res/raw/system_nav_3_button.mp4
+++ /dev/null
Binary files differ
diff --git a/res/raw/system_nav_fully_gestural.mp4 b/res/raw/system_nav_fully_gestural.mp4
deleted file mode 100644
index ae9c6d7..0000000
--- a/res/raw/system_nav_fully_gestural.mp4
+++ /dev/null
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 9698695..c88a1f4 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Stel datum en tyd"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Stel datum, tyd, tydsones en formaat"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Stel tyd outomaties"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Stel tydsone outomaties"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Stel outomaties"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Gebruik verstek vir locale"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-uur-formaat"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Gebruik 24-uur-formaat"</string>
@@ -413,7 +413,7 @@
<string name="security_settings_face_settings_require_confirmation_details" msgid="3498729789625461914">"Vereis altyd bevestigingstap as Gesigslot in programme gebruik word"</string>
<string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"Vee gesigmodel uit"</string>
<string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Stel Gesigslot op"</string>
- <string name="security_settings_face_settings_footer" msgid="625696606490947189">"Gebruik jou gesig om jou foon te ontsluit of vir stawing in programme, soos wanneer jy aanmeld of \'n aankoop goedkeur.\n\nHou in gedagte:\nJy kan slegs een gesig op \'n slag gestel hê. Om nog \'n gesig by te voeg, moet jy die huidige een uitvee.\n\nAs jy na die foon kyk, kan dit ontsluit word wanneer jy nie bedoel om dit te doen nie.\n\nIemand anders kan jou foon ontsluit as dit voor jou gesig gehou word.\n\nIemand ander wat baie soos jy lyk, soos \'n identiese broer of suster, kan jou foon ontsluit."</string>
+ <string name="security_settings_face_settings_footer" msgid="625696606490947189">"Gebruik jou gesig om jou foon te ontsluit of vir stawing in programme, soos wanneer jy aanmeld of \'n aankoop goedkeur.\n\nHou in gedagte:\nJy kan slegs een gesig op \'n slag gestel hê. Om nog \'n gesig by te voeg, moet jy die huidige een uitvee.\n\nAs jy na die foon kyk, kan dit ontsluit word wanneer jy nie bedoel om dit te doen nie.\n\nIemand anders kan jou foon ontsluit as dit voor jou gesig gehou word.\n\nIemand anders wat baie soos jy lyk, soos \'n identiese broer of suster, kan jou foon ontsluit."</string>
<string name="security_settings_face_settings_footer_attention_not_supported" msgid="2071065435536235622">"Gebruik jou gesig om jou foon te ontsluit of vir stawing in programme, soos wanneer jy aanmeld of \'n aankoop goedkeur.\n\nHou in gedagte:\nJy kan slegs een gesig op \'n slag gestel hê. Om nog \'n gesig by te voeg, moet jy die huidige een uitvee.\n\nAs jy na die foon kyk, kan dit ontsluit word wanneer jy nie bedoel om dit te doen nie.\n\nIemand anders kan jou foon ontsluit as dit voor jou gesig gehou word, selfs as jou oë toe is.\n\nIemand ander wat baie soos jy lyk, soos \'n identiese broer of suster, kan jou foon ontsluit."</string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Vee gesigmodel uit?"</string>
<string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Jou gesigmodel sal permanent en veilig uitgevee word. \n\nNadat dit uitgevee is, sal jy jou PIN, patroon of wagwoord nodig hê om jou foon te ontsluit of vir stawing in programme."</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Liggingdienste"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Liggingdienste"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Liggingdienste vir werk"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Gebruik ligging om tydsone te stel"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Gebruik ligging"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Toestelligging word benodig"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"As jy jou ligging wil gebruik om die tydsone te stel, moet jy ligging aanskakel en dan tydsone-instellings opdateer"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Ligginginstellings"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Liggingtydsonebespeuring is gedeaktiveer"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Liggingtydsonebespeuring word nie gesteun nie"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Veranderings aan liggingtydsonebespeuring word nie toegelaat nie"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Ligging kan gebruik word om tydsone te stel"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi- en mobielenetwerk-ligging"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Laat programme Google se liggingsdiens gebruik om jou ligging vinniger te beraam. Anonieme liggingsdata sal ingesamel word en aan Google gestuur word."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Ligging deur Wi-Fi vasgestel"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, gevorderde oproepe, 5g-oproepe"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"voeg taal by, voeg \'n taal by"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"teksgrootte, grootdruk, groot lettertipe, groot teks, swak sig, maak teks groter, teksvergroter, lettertipevergroting"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"altyd-aan-skerm, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Verstekgeluid"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Lui- en kennisgewingvolume is op <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibrasie, Moenie Steur Nie"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Nooit"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Toestel- en programkennisgewings"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Beheer watter programme en toestelle kennisgewings kan lees"</string>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 2fb95c6..d6a4292 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"ቀን እና ሰዓት አዘጋጅ"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"ቀን፣ ሰዓት፣ የጊዜ ሰቅ& ቅርፀቶች አዘጋጅ"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ጊዜን በራስ-ሰር ያቀናብሩ"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"የሰዓት ሰቅ በራስ-ሰር ያቀናብሩ"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"በራስ-ሰር አቀናብር"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"የቋንቋ ነባሪ ይጠቀሙ"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"የ24‑ሰዓት ቅርጸት"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 ሰዓት ቅርፀት ተጠቀም"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"የአካባቢ አገልግሎቶች"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"የአካባቢ አገልግሎቶች"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"የአካባቢ አገልግሎቶች ለስራ"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"የሰዓት ሰቅን ለማቀናበር አካባቢን ይጠቀሙ"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"አካባቢን ተጠቀም"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"የመሣሪያ አካባቢ ያስፈልጋል"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"አካባቢዎን በመጠቀም የሰዓት ሰቅ ለማቀናበር አካባቢውን ያብሩና ከዚያ የሰዓት ሰቅ ቅንብሮችን ያዘምኑ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"የአካባቢ ቅንብሮች"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"የአካባቢ የሰዓት ሰቅ ማወቂያ ተሰናክሏል"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"የአካባቢ የሰዓት ሰቅ ማወቂያ አይደገፍም"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"የአካባቢ የሰዓት ሰቅ ማወቂያ ለውጦች አይፈቀዱም"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"የሰዓት ሰቅን ለማቀናበር አካባቢ ስራ ላይ ሊውል ይችላል"</string>
<string name="location_network_based" msgid="5247042890080021887">"የWi-Fi እና የተንቀሳቃሽ ስልክ አውታረ መረብ አካባቢ"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"መተግበሪያዎች አካባቢዎትን በበለጠ ፍጥነት እንዲገምቱ የGoogle የአካባቢ አገልግሎትን ይጠቀሙ። ስም አልባ የአካባቢ ውሂብ ተሰብስቦ ወደ Google ይላካል።"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"አካባቢ በWi-Fi ይታወቃል"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2418,8 +2421,8 @@
<string name="accessibility_button_fade_title" msgid="8081993897680588829">"ጥቅም ላይ በማይውልበት ጊዜ ይደበዝዛል"</string>
<string name="accessibility_button_fade_summary" msgid="7865950833524973709">"ከጥቂት ሰከንዶች በኋላ ይደበዝዛል ስለዚህ ማያ ገጽዎን ማየት ይበልጥ ቀላል ነው"</string>
<string name="accessibility_button_opacity_title" msgid="4727355657530362289">"ጥቅም ላይ በማይውልበት ጊዜ ግልፅነት"</string>
- <string name="accessibility_button_low_label" msgid="4193015407828927741">"ግልጽ"</string>
- <string name="accessibility_button_high_label" msgid="9138077512008190896">"ግልጽ አይደልም"</string>
+ <string name="accessibility_button_low_label" msgid="4193015407828927741">"ግልፅ"</string>
+ <string name="accessibility_button_high_label" msgid="9138077512008190896">"ግልፅ አይደልም"</string>
<string name="accessibility_toggle_high_text_contrast_preference_title" msgid="1830189632458752698">"ከፍተኛ ንጽጽር ጽሁፍ"</string>
<string name="accessibility_toggle_high_text_contrast_preference_summary" msgid="5286411556836346180">"የጽሑፍ ቀለም ወደ ጥቁር ወይም ነጭ ይቀይሩ። ከዳራ ንፅፅርን ከፍ ያደርገዋል።"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="4987009529235165664">"ማጉላትን በራስ-አዘምን"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g፣ vonr፣ የላቀ ጥሪ፣ 5ጂ ጥሪ"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ቋንቋ ያክሉ፣ አንድ ቋንቋ ያክሉ"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"የጽሑፍ መጠን፣ ትልቅ ህትመት፣ ትልቅ ቅርጸ-ቁምፊ፣ ትልቅ ጽሑፍ፣ ዝቅተኛ-ዕይታ፣ ጽሑፍን ያተልቁ መጠን፣ ትልቅ ህትመት፣ ትልቅ ቅርጸ-ቁምፊ፣ ትልቅ ጽሑፍ፣ ዝቅተኛ-ዕይታ፣ ጽሑፍን ያተልቁ፣ ቅርጸ-ቁምፊ ማተለቂያ፣ ቅርጸ-ቁምፊ ማተለቅ"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ሁልጊዜ የሚበራ ማሳያ፣ ኤኦዲ"</string>
<string name="default_sound" msgid="6604374495015245195">"ነባሪ ድምፅ"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"የጥሪ ድምጽ እና ማሳወቂያ ድምጽ መጠን <xliff:g id="PERCENTAGE">%1$s</xliff:g> ላይ"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ድምፅ፣ ንዝረት፣ አትረብሽ"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"በጭራሽ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"መሣሪያ እና የመተግበሪያ ማሳወቂያዎች"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"የትኛዎቹ መተግበሪያዎች እና መሣሪያዎች ማሳወቂያዎችን ማንበብ እንደሚችሉ ይቆጣጠሩ"</string>
@@ -4603,7 +4603,7 @@
<string name="allow_overlay_description" msgid="1607235723669496298">"ይህን መተግበሪያ እየተጠቀሙ ባሉ ሌሎች መተግበሪያዎች ላይ እንዲያሳይ ይፍቀዱለት። ይህ መተግበሪያ የት መታ እንደሚያደርጉ ማየት ወይም በማያ ገጽ ላይ የሚታየውን ነገር መቀየር ይችላል።"</string>
<string name="manage_external_storage_title" msgid="8024521099838816100">"የሁሉም ፋይሎች መዳረሻ"</string>
<string name="permit_manage_external_storage" msgid="6928847280689401761">"ሁሉንም ፋይሎች ለማስተዳደር መዳረሻ ፍቀድ"</string>
- <string name="allow_manage_external_storage_description" msgid="5707948153603253225">"ይህ መተግበሪያ በዚህ መሣሪያ ላይ ወይም በማናቸውም የተገናኙ የማከማቻ መጠኖች ላይ ሁሉንም ፋይሎች እንዲያነብ፣ እንዲያሻሽል እና እንዲሰርዝ ይፍቀዱ። ፈቃድ ከተሰጠ፣ መተግበሪያ ያለ የእርስዎ ግልጽ የሆነ ዕውቀት ፋይሎችን መድረስ ይችላል።"</string>
+ <string name="allow_manage_external_storage_description" msgid="5707948153603253225">"ይህ መተግበሪያ በዚህ መሣሪያ ላይ ወይም በማናቸውም የተገናኙ የማከማቻ መጠኖች ላይ ሁሉንም ፋይሎች እንዲያነብ፣ እንዲያሻሽል እና እንዲሰርዝ ይፍቀዱ። ፈቃድ ከተሰጠ፣ መተግበሪያ ያለ የእርስዎ ግልፅ የሆነ ዕውቀት ፋይሎችን መድረስ ይችላል።"</string>
<string name="filter_manage_external_storage" msgid="6751640571715343804">"ሁሉንም ፋይሎች መድረስ ይችላል"</string>
<string name="media_management_apps_title" msgid="8222942355578724582">"የሚዲያ አስተዳደር መተግበሪያዎች"</string>
<string name="media_management_apps_toggle_label" msgid="166724270857067456">"መተግበሪያው ሚዲያን እንዲያቀናብር ፍቀድ"</string>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 0f1c371..09b0626 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -279,7 +279,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"ضبط التاريخ والوقت"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"ضبط التاريخ والوقت والمنطقة الزمنية والتنسيقات"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ضبط الوقت تلقائيًا"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ضبط المنطقة الزمنية تلقائيًا"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ضبط إعدادات التاريخ والوقت تلقائيًا"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"استخدام التنسيق التلقائي المحلي"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"تنسيق ٢٤ ساعة"</string>
<string name="date_time_24hour" msgid="286679379105653406">"استخدام تنسيق ٢٤ ساعة"</string>
@@ -404,7 +404,7 @@
<string name="face_add_max" msgid="4578405795494514876">"يمكنك إضافة ما يصل إلى <xliff:g id="COUNT">%d</xliff:g> وجه."</string>
<string name="face_intro_error_max" msgid="2474735057709291626">"لقد أضفت الحد الأقصى لعدد الأوجه"</string>
<string name="face_intro_error_unknown" msgid="1626057493054989995">"لا يمكن إضافة مزيد من الأوجه"</string>
- <string name="security_settings_face_enroll_error_dialog_title" msgid="2460820099922775936">"لم يكتمل المسح"</string>
+ <string name="security_settings_face_enroll_error_dialog_title" msgid="2460820099922775936">"لم يكتمل التسجيل"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1674650455786434426">"حسنًا"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="7768349698547951750">"تم بلوغ الحد الأقصى لزمن مسح الوجه. يُرجى إعادة المحاولة."</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="3186810411630091490">"تعذّر مسح الوجه."</string>
@@ -1976,7 +1976,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"خدمات الموقع الجغرافي"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"خدمات الموقع الجغرافي"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"خدمات الموقع الجغرافي للعمل"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"استخدام الموقع الجغرافي لضبط المنطقة الزمنية"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"استخدام الموقع الجغرافي"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"الموقع الجغرافي للجهاز مطلوب"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"لضبط المنطقة الزمنية باستخدام موقعك الجغرافي، فعِّل ميزة \"الموقع الجغرافي\" ثم عدِّل إعدادات المنطقة الزمنية."</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"إعدادات الموقع الجغرافي"</string>
@@ -1985,6 +1985,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"تم إيقاف ميزة رصد المنطقة الزمنية للموقع الجغرافي"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"ميزة رصد المنطقة الزمنية للموقع الجغرافي غير متاحة."</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"غير مسموح بتغييرات رصد المنطقة الزمنية للموقع الجغرافي."</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"قد يتم استخدام الموقع الجغرافي لضبط المنطقة الزمنية."</string>
<string name="location_network_based" msgid="5247042890080021887">"شبكة Wi-Fi وموقع شبكة الجوّال"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"دع التطبيقات تستخدم خدمة الموقع من Google لتقييم موقعك بشكل أسرع. سيتم جمع بيانات الموقع غير محددة الهوية وإرسالها إلى Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"الموقع الذي تم تحديده بواسطة Wi-Fi"</string>
@@ -2030,6 +2031,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -3075,6 +3078,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>
@@ -3164,6 +3168,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>
@@ -3861,8 +3868,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g، vonr، الاتصال المتقدّم، الاتصال عبر شبكة الجيل الخامس"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"إضافة اللغة، إضافة لغة"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"حجم النص، طباعة كبيرة، خط كبير، نص كبير، ضعف في النظر، تكبير النص، أداة تكبير الخط، تكبير الخط"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"عرض دائم، AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"الصوت التلقائي"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"تم ضبط مستوى صوت الرنين والإشعار على <xliff:g id="PERCENTAGE">%1$s</xliff:g>."</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"مستوى الصوت والاهتزاز ووضع\"عدم الإزعاج\""</string>
@@ -4177,22 +4183,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"أبدًا"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"إشعارات التطبيقات والأجهزة"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"تحديد التطبيقات والأجهزة التي يمكنها قراءة الإشعارات"</string>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 13ff6a3..77bd1ec 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -100,7 +100,7 @@
<string name="bluetooth_show_received_files" msgid="685424727760622632">"প্ৰাপ্ত ফাইলসমূহ"</string>
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"ব্লুটুথ অফ আছে"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"এইটো অন কৰিবলৈ টিপক"</string>
- <string name="device_picker" msgid="2427027896389445414">"ব্লুটুথ ডিভাইচ বাছক"</string>
+ <string name="device_picker" msgid="2427027896389445414">"ব্লুটুথ ডিভাইচ বাছনি কৰক"</string>
<string name="bluetooth_ask_enablement" msgid="1529030199895339199">"<xliff:g id="APP_NAME">%1$s</xliff:g>এ ব্লুটুথ অন কৰিব বিচাৰিছে"</string>
<string name="bluetooth_ask_disablement" msgid="1879788777942714761">"<xliff:g id="APP_NAME">%1$s</xliff:g> ব্লুটুথ অফ কৰিব বিচাৰিছে"</string>
<string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"এটা এপে ব্লুটুথ অন কৰিব বিচাৰিছে"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"তাৰিখ আৰু সময় নিৰ্ধাৰণ কৰক"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"তাৰিখ, সময়, সময় মণ্ডল আৰু ফৰমেটসমূহ ছেট কৰক"</string>
<string name="date_time_auto" msgid="4239202185055225869">"স্বয়ংক্ৰিয়ভাৱে সময় ছেট কৰক"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"স্বয়ংক্ৰিয়ভাৱে সময় মণ্ডল ছেট কৰক"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"স্বয়ংক্ৰিয়ভাৱে ছেট কৰক"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"স্থানীয় ডিফ’ল্ট ব্যৱহাৰ কৰক"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"২৪ ঘণ্টীয়া সজ্জা"</string>
<string name="date_time_24hour" msgid="286679379105653406">"২৪ ঘণ্টীয়া সজ্জা ব্যৱহাৰ কৰক"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"অৱস্থান সেৱা"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"অৱস্থান সেৱা"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"কৰ্মস্থানৰ বাবে অৱস্থান সেৱা"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"সময় মণ্ডল ছেট কৰিবলৈ অৱস্থান ব্যৱহাৰ কৰক"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"অৱস্থান ব্যৱহাৰ কৰক"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"ডিভাইচৰ অৱস্থানৰ প্ৰয়োজন"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"আপোনাৰ অৱস্থান ব্যৱহাৰ কৰি সময় মণ্ডল ছেট কৰিবলৈ প্ৰথমে অৱস্থান অন কৰক আৰু তাৰ পাছত সময় মণ্ডলৰ ছেটিং আপডে’ট কৰক"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"অৱস্থানৰ ছেটিং"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"অৱস্থানৰ সময় মণ্ডল চিনাক্তকৰণৰ সুবিধাটো অক্ষম কৰা হৈছে"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"অৱস্থানৰ সময় মণ্ডল চিনাক্তকৰণৰ সুবিধাটো সমৰ্থিত নহয়"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"অৱস্থানৰ সময় মণ্ডল চিনাক্তকৰণৰ সালসলনিৰ অনুমতি দিয়া নহয়"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"সময় মণ্ডল ছেট কৰিবলৈ অৱস্থান ব্যৱহাৰ কৰা হ’ব পাৰে"</string>
<string name="location_network_based" msgid="5247042890080021887">"ৱাই-ফাই আৰু ম’বাইল নেটৱৰ্কৰ স্থান"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"আপোনাৰ অৱস্থান দ্ৰুতভাৱে নিৰ্ণয় কৰিবলৈ এপসমূহক Googleৰ অৱস্থান সেৱা ব্যৱহাৰ কৰিবলৈ দিয়ক। অৱস্থান তথ্য নামবিহীনভাৱে সংগ্ৰহ কৰা হ\'ব আৰু Googleলৈ প্ৰেৰণ কৰা হ\'ব।"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"ৱাই-ফাইএ অৱস্থান নিৰ্ণয় কৰিছে"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, উচ্চখাপৰ কলিং, 5g কলিং"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ভাষা যোগ কৰক, এটা ভাষা যোগ কৰক"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"পাঠৰ আকাৰ, ডাঙৰ প্ৰিণ্ট, ডাঙৰ ফণ্ট, ডাঙৰ পাঠ, কম দৃষ্টিশক্তি, পাঠৰ আকাৰ ডাঙৰ কৰক, ফণ্ট প্ৰসাৰিত কৰোঁতা, ফণ্টৰ প্ৰসাৰণ"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"সদায় সক্ৰিয় ডিছপ্লে’, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ডিফ\'ল্ট ধ্বনি"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"ৰিং আৰু জাননীৰ ভলিউম <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ভলিউম, কম্পন, অসুবিধা নিদিব"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"কেতিয়াও পঠোৱা নহয়"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ডিভাইচ আৰু এপৰ জাননী"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"কোনসমূহ এপ আৰু ডিভাইচে জাননী পঢ়িব পাৰে সেইয়া নিয়ন্ত্ৰণ কৰক"</string>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 9d89159..e79ca3e 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Tarix və vaxt ayarlayın"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Tarix, vaxt, vaxt zonası və formatları ayarlayın"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Vaxt avtomatik ayarlansın"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Saat qurşağı avtomatik ayarlansın"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Avtomatik olaraq ayarlayın"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Regional defolt ayarlar tətbiq olunsun"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑saat formatı"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 saat formatından istifadə et"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Məkan xidmətləri"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Məkan xidmətləri"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"İş üçün məkan xidmətləri"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Saat qurşağı məkana əsasən müəyyən edilsin"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Məkandan istifadə edin"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Cihaz məkanı lazımdır"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Məkanınızdan istifadə etməklə saat qurşağı ayarlamaq üçün məkanı yandırın, sonra saat qurşağı ayarlarını güncəlləyin"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Məkan ayarları"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Məkan üzrə saat qurşağının aşkarlanması deaktiv edilib"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Məkan üzrə saat qurşağının aşkarlanması dəstəklənmir"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Məkan üzrə saat qurşağının aşkarlanması dəyişikliklərinə icazə verilmir"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Məkan saat qurşağını təyin etmək üçün istifadə edilə bilər"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi və mobil şəbəkə yerləşməsi"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Yerləşmənizi daha tez tapmaq üçün tətbiqlərə Google\'un yerləşmə xidmətindən istifadə etməyə icazə verin."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi‑Fi ilə müəyyən olunmuş yer"</string>
@@ -1942,6 +1943,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>
@@ -2923,6 +2925,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>
@@ -3012,6 +3015,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>
@@ -3689,8 +3695,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, qabaqcıl zəng, 5g zəngi"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"dil əlavə edin, bir dil əlavə edin"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"mətn ölçüsü, böyük çap, böyük şrift, böyük mətn, zəif görmə, mətni daha böyük et, şrift böyüdücü, şrift böyütmə"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"həmişə aktiv displey, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Defolt səs"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Zəng və bildiriş səs həcmi <xliff:g id="PERCENTAGE">%1$s</xliff:g> faizdir"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Səs, vibrasiya, \"Narahat etməyin\" rejimi"</string>
@@ -4001,13 +4006,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>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 4e31656..64ed0bd 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -273,7 +273,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Podešavanje datuma i vremena"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Podešavanje datuma, vremena, vremenske zone i formata"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Podesi vreme automatski"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Podesi vremensku zonu automatski"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Podesi automatski"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Koristi podrazumevanu vrednost za lokalitet"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-časovni format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Koristi 24-časovni format"</string>
@@ -1910,7 +1910,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Usluge lokacije"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Usluge lokacije"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Usluge lokacije za posao"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Koristi lokaciju za podešavanje vremenske zone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Koristi lokaciju"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Potrebna je lokacija uređaja"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Da biste podesili vremensku zonu pomoću lokacije, uključite lokaciju, pa ažurirajte podešavanja vremenske zone"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Podešavanja lokacije"</string>
@@ -1919,6 +1919,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Otkrivanje vremenske zone lokacije je onemogućeno"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Otkrivanje vremenske zone lokacije nije podržano"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Promene otkrivanja vremenske zone lokacije nisu dozvoljene"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Lokacija može da se koristi za podešavanje vremenske zone"</string>
<string name="location_network_based" msgid="5247042890080021887">"Lokac. na osnovu WiFi i mob. mreže"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Neka apl. koriste Google-ovu uslugu lociranja za brže određivanje lokacije. Anonimni podaci o lokaciji prikupljaće se i slati Google-u."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Lokacija se određuje pomoću WiFi-a"</string>
@@ -1964,6 +1965,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2961,6 +2964,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>
@@ -3050,6 +3054,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>
@@ -3732,8 +3739,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, napredno pozivanje, 5g pozivanje"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"dodaj jezik, dodajte jezik"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"veličina teksta, velika slova, velik font, velik tekst, slabovidost, povećanje teksta, uvećavanje fonta, povećanje fonta"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"uvek uključen ekran, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Podrazumevani zvuk"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Jačina zvuka za zvono i obaveštenja je na <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Jačina zvuka, vibracija, Ne uznemiravaj"</string>
@@ -4045,16 +4051,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Kontrolišite koje aplikacije i uređaji mogu da čitaju obaveštenja"</string>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 05a994e..1b247db 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -275,7 +275,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Усталяваць дату і час"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Задаць дату, час, гадзiнны пояс і фарматы"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Задаваць час аўтаматычна"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Задаваць часавы пояс аўтаматычна"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Вызначаць аўтаматычна"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Выкарыстоўваць стандартныя рэгіянальныя налады"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑гадзінны фармат"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Выкарыстоўваць 24-гадзінны фармат"</string>
@@ -1934,7 +1934,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Службы геалакацыі"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Службы геалакацыі"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Службы геалакацыі для працы"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Выкарыстоўваць даныя геалакацыі, каб вызначаць часавы пояс"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Выкарыстоўваць геалакацыю"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Патрабуюцца даныя пра месцазнаходжанне прылады"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Каб задаць часавы пояс на падставе даных пра месцазнаходжанне, уключыце геалакацыю, а потым абнавіце налады часавага пояса"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Налады месцазнаходжання"</string>
@@ -1943,6 +1943,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Вызначэнне часавага пояса месцазнаходжання выключана"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Вызначэнне часавага пояса месцазнаходжання не падтрымліваецца"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Не дазволена змяняць вызначэнне часавага пояса месцазнаходжання"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Даныя пра месцазнаходжанне могуць выкарыстоўвацца для вызначэння часавых паясоў"</string>
<string name="location_network_based" msgid="5247042890080021887">"Месцазнаходжанне Wi-Fi і мабiльнай сеткi"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Дазв. дадаткам выкар. службу вызнач. месцазн., каб знах. вас хутчэй. Ананiмныя даныя пра месцазн. будуць збiр. i адпр. у Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Месцазнаходжанне вызначаецца праз Wi-Fi"</string>
@@ -1988,6 +1989,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -3001,6 +3004,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>
@@ -3090,6 +3094,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>
@@ -3777,8 +3784,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, палепшаныя выклікі, выклікі 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"дадаць мову, дадаць мову"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"памер тэксту, вялікі шрыфт, буйны шрыфт, павялічаны тэкст, слабы зрок, павялічыць тэкст, праграма для павелічэння шрыфту, павелічэнне шрыфту"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"заўсёды ўключаны дысплэй"</string>
<string name="default_sound" msgid="6604374495015245195">"Стандартная мелодыя"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Гучнасць званкоў і апавяшчэнняў: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Гучнасць, вібрацыя, рэжым \"Не турбаваць\""</string>
@@ -4091,18 +4097,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Ніколі"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Апавяшчэнні прылад і праграм"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Вызначыце праграмы і прылады, якія змогуць мець доступ да апавяшчэнняў"</string>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 6b895ed..b6eee04 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Задаване на дата и час"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Задаване на дата, час, часова зона и формати"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Автоматично задаване на часа"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Автоматично задаване на часовата зона"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Автоматично задаване"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Използване на стандартния формат за локала"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-часов формат"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-часов формат"</string>
@@ -942,15 +942,15 @@
<string name="nfc_quick_toggle_summary" product="tablet" msgid="3622326550467939809">"Разрешаване на обмен на данни, когато таблетът се докосва до устройство с NFC"</string>
<string name="nfc_quick_toggle_summary" product="default" msgid="1460871052409162980">"Разрешаване на обмен на данни, когато телефонът се докосва до устройство с NFC"</string>
<string name="nfc_disclaimer_title" msgid="3696580694485048039">"Включване на NFC"</string>
- <string name="nfc_disclaimer_content" msgid="8256675597551036207">"Чрез КБП се обменят данни между това устройство и други в близост или целеви такива, като например терминали за плащане, четци за достъп и интерактивни реклами или маркери."</string>
+ <string name="nfc_disclaimer_content" msgid="8256675597551036207">"Чрез NFC се обменят данни между това устройство и други в близост или целеви такива, като например терминали за плащане, четци за достъп и интерактивни реклами или маркери."</string>
<string name="nfc_secure_settings_title" msgid="4906958426927741485">"Изискване за отключване на устройството за NFC"</string>
<string name="nfc_secure_toggle_summary" product="default" msgid="407654335737959071">"Разрешаване на използването на NFC само при отключен екран"</string>
<string name="android_beam_settings_title" msgid="2797963824490671295">"Android Beam"</string>
- <string name="android_beam_on_summary" msgid="6067720758437490896">"В готовност за предаване на съдържание на приложения чрез КБП"</string>
+ <string name="android_beam_on_summary" msgid="6067720758437490896">"В готовност за предаване на съдържание на приложения чрез NFC"</string>
<string name="android_beam_off_summary" msgid="5693961375631325042">"Изключено"</string>
<string name="nfc_disabled_summary" msgid="8737797364522502351">"Не е налице, защото функцията за NFC е изключена"</string>
<string name="android_beam_label" msgid="7168565080321110094">"Android Beam"</string>
- <string name="android_beam_explained" msgid="5684416131846701256">"Когато тази функция е включена, можете да излъчвате съдържание от приложенията до друго устройство с поддръжка за КБП, като държите устройствата близо едно до друго. Например можете да излъчвате уеб страници, видеоклипове от YouTube, контакти и др.\n\nТрябва само да поставите устройствата едно до друго (обикновено задните им страни), след което да докоснете екрана си. Приложението определя какво се излъчва."</string>
+ <string name="android_beam_explained" msgid="5684416131846701256">"Когато тази функция е включена, можете да излъчвате съдържание от приложенията до друго устройство с поддръжка за NFC, като държите устройствата близо едно до друго. Например можете да излъчвате уеб страници, видеоклипове от YouTube, контакти и др.\n\nТрябва само да поставите устройствата едно до друго (обикновено задните им страни), след което да докоснете екрана си. Приложението определя какво се излъчва."</string>
<string name="wifi_quick_toggle_title" msgid="2737097538432862807">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="4957267477820468553">"Включване на Wi‑Fi"</string>
<string name="wifi_settings" msgid="8313301946393559700">"Wi‑Fi"</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Услуги за местоположение"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Услуги за местоположение"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Услуги за местоположение за служебни цели"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Използване на местоположението с цел задаване на часова зона"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Използване на местоположението"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Необходимо е местоположението на устройството"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Включете местоположението и актуализирайте настройките за часовата зона, за да бъде зададена чрез него"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Настройки за местоположението"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Установяването на часовата зона чрез местоположението е деактивирано"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Установяването на часовата зона чрез местоположението не се поддържа"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Не се разрешават промени в установяването на часовата зона чрез местоположението"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Местоположението може да се използва с цел задаване на часова зона"</string>
<string name="location_network_based" msgid="5247042890080021887">"Mестоп. от Wi‑Fi и моб. мрежа"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Прилож. да ползват услугата ни за местоп., за да прогнозират по-бързо вашето. Анонимни данни за местоп. ще се събират и изпращат на Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Местоположението се определя чрез Wi‑Fi"</string>
@@ -1944,6 +1945,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2925,6 +2928,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>
@@ -3014,6 +3018,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>
@@ -3515,7 +3522,7 @@
<string name="restriction_bluetooth_config_title" msgid="220586273589093821">"Bluetooth"</string>
<string name="restriction_bluetooth_config_summary" msgid="7558879931011271603">"Разрешаване на промяна на сдвояванията и настройките на Bluetooth"</string>
<string name="restriction_nfc_enable_title" msgid="525512312298242911">"NFC"</string>
- <string name="restriction_nfc_enable_summary_config" msgid="8065688740509581028">"Разрешаване на обмен на данни, когато <xliff:g id="DEVICE_NAME">%1$s</xliff:g> докосне друго устройство с КБП"</string>
+ <string name="restriction_nfc_enable_summary_config" msgid="8065688740509581028">"Разрешаване на обмен на данни, когато <xliff:g id="DEVICE_NAME">%1$s</xliff:g> докосне друго устройство с NFC"</string>
<string name="restriction_nfc_enable_summary" product="tablet" msgid="6397567147629410131">"Разрешаване на обмен на данни, когато таблетът докосва друго устройство"</string>
<string name="restriction_nfc_enable_summary" product="default" msgid="3331800894734678808">"Разрешаване на обмен на данни, когато телефонът докосва друго устройство"</string>
<string name="restriction_location_enable_title" msgid="4872281754836538066">"Местоположение"</string>
@@ -3576,9 +3583,9 @@
<string name="network_dashboard_summary_no_mobile" msgid="4022575916334910790">"Wi‑Fi, точка за достъп"</string>
<string name="connected_devices_dashboard_title" msgid="19868275519754895">"Свързани устройства"</string>
<string name="connected_devices_dashboard_default_summary" msgid="7211769956193710397">"Bluetooth, сдвояване"</string>
- <string name="connected_devices_dashboard_summary" msgid="6927727617078296491">"Bluetooth, режим за шофиране, КБП"</string>
+ <string name="connected_devices_dashboard_summary" msgid="6927727617078296491">"Bluetooth, режим за шофиране, NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="8424794257586524040">"Bluetooth, режим за шофиране"</string>
- <string name="connected_devices_dashboard_no_driving_mode_summary" msgid="7155882619333726331">"Bluetooth, КБП"</string>
+ <string name="connected_devices_dashboard_no_driving_mode_summary" msgid="7155882619333726331">"Bluetooth, NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="1175254057213044560">"Bluetooth"</string>
<string name="connected_devices_dashboard_android_auto_summary" msgid="8179090809275818804">"Bluetooth, Android Auto, режим за шофиране, NFC"</string>
<string name="connected_devices_dashboard_android_auto_no_nfc_summary" msgid="2532811870469405527">"Bluetooth, Android Auto, режим за шофиране"</string>
@@ -3691,8 +3698,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, разширени обаждания, обаждане през 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"добавяне на език, език: добавяне"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"размер на текста, едър шрифт, голям шрифт, големи знаци, слабо зрение, уголемяване на знаците, инструмент за уголемяване на шрифта, уголемяване на шрифта"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"винаги включен дисплей (AOD)"</string>
<string name="default_sound" msgid="6604374495015245195">"Стандартен звук"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Силата на звука за звъненето и известията е зададена на <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Сила на звука, вибриране, „Не безпокойте“"</string>
@@ -4003,14 +4009,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Никога"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Известия в приложенията и на устройствата"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Управление на приложенията и устройствата, които могат да четат известията"</string>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 2cb4b28..8f0595b 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"তারিখ এবং সময় সেট করুন"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"তারিখ, সময়, সময় অঞ্চল ও ফর্ম্যাট সেট করুন"</string>
<string name="date_time_auto" msgid="4239202185055225869">"সময় অটোমেটিক সেট করুন"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"টাইম জোন অটোমেটিক সেট করুন"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"অটোমেটিক সেট করুন"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"লোকেল ডিফল্ট ব্যবহার করুন"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"২৪-ঘণ্টা বিন্যাস"</string>
<string name="date_time_24hour" msgid="286679379105653406">"২৪ ঘন্টার ফর্ম্যাট ব্যবহার করুন"</string>
@@ -339,7 +339,7 @@
<string name="safety_center_title" msgid="7732397372178774777">"নিরাপত্তা এবং গোপনীয়তা"</string>
<string name="safety_center_summary" msgid="3554867379951053869">"অ্যাপের নিরাপত্তা, ডিভাইস লক, অনুমতি"</string>
<string name="security_settings_face_preference_summary" msgid="6675126437396914838">"ফেস যোগ করা হয়েছে"</string>
- <string name="security_settings_face_preference_summary_none" msgid="5952752252122581846">"মুখ সেট আপ করতে ট্যাপ করুন"</string>
+ <string name="security_settings_face_preference_summary_none" msgid="5952752252122581846">"ফেস সেট আপ করতে ট্যাপ করুন"</string>
<string name="security_settings_face_preference_title" msgid="2126625155005348417">"ফেস আনলক"</string>
<string name="security_settings_face_profile_preference_title" msgid="7519527436266375005">"অফিসের জন্য \'ফেস আনলক\'"</string>
<string name="security_settings_face_enroll_education_title" msgid="6448806884597691208">"\'ফেস আনলক\' কীভাবে সেট আপ করবেন"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"লোকেশন-ভিত্তিক পরিষেবা"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"লোকেশন ভিত্তিক পরিষেবা"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"কাজের জন্য অবস্থান ভিত্তিক পরিষেবা"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"টাইম জোন সেট করার জন্য লোকেশন ব্যবহার করুন"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"লোকেশন ব্যবহার করুন"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"ডিভাইস লোকেশন সম্পর্কিত তথ্য চালু করতে হবে"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"আপনার লোকেশন ব্যবহার করে টাইম জোন সেট করতে লোকেশন চালু করুন এবং তারপর টাইম জোন সেটিংস আপডেট করুন"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"লোকেশন সেটিংস"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"লোকেশনের টাইম জোন শনাক্ত করার বিকল্প বন্ধ করা আছে"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"লোকেশনের টাইম জোন শনাক্ত করার বিকল্প কাজ করছে না"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"লোকেশনের টাইম জোন শনাক্ত করার বিকল্প পরিবর্তনের অনুমতি নেই"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"টাইম জোন সেট করতে লোকেশন ব্যবহার করা হতে পারে"</string>
<string name="location_network_based" msgid="5247042890080021887">"ওয়াই-ফাই ও মোবাইল নেটওয়ার্ক লোকেশন"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"দ্রুত আপনার লোকেশন নির্ধারণ করতে অ্যাপগুলিকে Google লোকেশন পরিষেবা ব্যবহার করতে দিন। বেনামী লোকেশন ডেটা সংগ্রহ করা হবে এবং Google এ পাঠানো হবে।"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"ওয়াই-ফাই দ্বারা লোকেশন নির্ণয় করা হয়েছে"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, উন্নত কলিং, 5g কলিং"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ভাষা যোগ করুন, কোনও একটি ভাষা যোগ করুন"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"টেক্সটের সাইজ, বড় প্রিন্ট, বড় ফন্ট, বড় টেক্সট, কম দৃষ্টি, টেক্সট আরও বড় করুন, ফন্ট বড় করার টুল, ফন্ট বড় করা"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ডিসপ্লে সবসময় চালু, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ডিফল্ট সাউন্ড"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"রিং ও বিজ্ঞপ্তির ভলিউম <xliff:g id="PERCENTAGE">%1$s</xliff:g>-এ সেট করা আছে"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ভলিউম, ভাইব্রেশন, বিরক্ত করবে না"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"কখনও না"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ডিভাইস এবং অ্যাপ বিজ্ঞপ্তি"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"কোন অ্যাপ ও ডিভাইস বিজ্ঞপ্তি পড়তে পারবে তা নিয়ন্ত্রণ করুন"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index fe1c209..2e1f895 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -101,7 +101,7 @@
<string name="bluetooth_show_received_files" msgid="685424727760622632">"Primljeni fajlovi"</string>
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"Bluetooth je isključen"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"Dodirnite da ga uključite"</string>
- <string name="device_picker" msgid="2427027896389445414">"Odaberi Bluetooth uređaj"</string>
+ <string name="device_picker" msgid="2427027896389445414">"Odaberite Bluetooth uređaj"</string>
<string name="bluetooth_ask_enablement" msgid="1529030199895339199">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi uključiti Bluetooth"</string>
<string name="bluetooth_ask_disablement" msgid="1879788777942714761">"<xliff:g id="APP_NAME">%1$s</xliff:g> želi uključiti Bluetooth"</string>
<string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"Aplikacija želi uključiti Bluetooth"</string>
@@ -273,7 +273,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Postavljanje datuma i vremena"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Postavljanje datuma, vremena, vremenske zone i formata"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Automatski postavi vrijeme"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Automatski postavi vremensku zonu"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Postavi automatski"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Koristi zadani format jezika/zemlje"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-satni format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Koristi 24-satni format"</string>
@@ -1910,7 +1910,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Usluge lokacije"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Usluge lokacije"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Usluge lokacije za posao"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Koristi lokaciju za postavljanje vremenske zone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Koristi lokaciju"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Potrebna je lokacija uređaja"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Da postavite vremensku zonu pomoću lokacije, uključite lokaciju, a zatim ažurirajte postavke vremenske zone"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Postavke lokacije"</string>
@@ -1919,6 +1919,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Otkrivanje vremenske zone pomoću lokacije je onemogućeno"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Otkrivanje vremenske zone pomoću lokacije nije podržano"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Promjene otkrivanja vremenske zone pomoću lokacije nisu dozvoljene"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Lokacija se može iskoristiti za postavljanje vremenske zone."</string>
<string name="location_network_based" msgid="5247042890080021887">"Lokacija WiFi i mobilne mreže"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Omogućava da aplikacije koriste Googleovu uslugu lokacije kako bi brže procijenile vašu lokaciju. Anonimni podaci o lokaciji se prikupljaju i šalju Googleu."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Lokacija utvrđena putem WiFi mreže"</string>
@@ -1964,6 +1965,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2961,6 +2964,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>
@@ -3050,6 +3054,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>
@@ -3097,7 +3104,7 @@
<string name="certificate_warning_install_anyway" msgid="4633118283407228740">"Ipak instaliraj"</string>
<string name="cert_not_installed" msgid="6725137773549974522">"Potvrda nije instalirana"</string>
<string name="request_manage_credentials_title" msgid="596805634568013413">"Dozvoliti aplikaciji "<b>"<xliff:g id="APP_NAME">^1</xliff:g>"</b>" da instalira certifikate na ovaj uređaj?"</string>
- <string name="request_manage_credentials_description" msgid="8044839857171509619">"Ti certifikati će potvrditi vaš identitet dijeljenjem jedinstvenog ID-ja vašeg uređaja s aplikacijama i URL-ovima u nastavku"</string>
+ <string name="request_manage_credentials_description" msgid="8044839857171509619">"Ti certifikati će potvrditi vaš identitet dijeljenjem jedinstvenog ID-a vašeg uređaja s aplikacijama i URL-ovima u nastavku"</string>
<string name="request_manage_credentials_dont_allow" msgid="3630610197644877809">"Nemoj dozvoliti"</string>
<string name="request_manage_credentials_allow" msgid="4910940118408348245">"Dozvoli"</string>
<string name="request_manage_credentials_more" msgid="6101210283534101582">"Prikaži više"</string>
@@ -3732,8 +3739,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, napredno pozivanje, pozivanje putem 5g mreže"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"dodavanje jezika, dodaj jezik"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"veličina teksta, velika slova, veliki font, veliki tekst, slabi vid, povećavanje teksta, povećalo fonta, povećavanje fonta"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"uvijek uključen ekran (always on display, AOD)"</string>
<string name="default_sound" msgid="6604374495015245195">"Podrazumijevani zvuk"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Zvuk zvona i obavještenja postavljen je na <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Jačina zvuka, vibracija, Ne ometaj"</string>
@@ -4045,16 +4051,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Nikada"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Obavještenja uređaja i aplikacija"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Kontrolirajte koje aplikacije i uređaji mogu čitati obavještenja"</string>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 256d953..afadefd 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Estableix la data i l\'hora"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Defineix la data, l\'hora, la zona horària i els formats"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Defineix l\'hora automàticament"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Defineix la zona horària automàticament"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Defineix automàticament"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Utilitza la configuració regional predeterminada"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Format de 24 hores"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Format de 24 hores"</string>
@@ -433,7 +433,7 @@
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="7931650601996313070">"Configura l\'empremta digital"</string>
<string name="security_settings_fingerprint_enroll_consent_introduction_title" msgid="2278592030102282364">"Permet desbloqueig amb empremta"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="1911710308293783998">"Utilitzar l\'empremta digital"</string>
- <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="tablet" msgid="1533352560544756928">"Utilitza l\'empremta digital per desbloquejar la tauleta o verificar la teva identitat, com ara quan inicies la sessió en aplicacions o aproves una compra."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="tablet" msgid="1533352560544756928">"Utilitza l\'empremta digital per desbloquejar la tauleta o verificar que ets tu, com ara quan inicies la sessió en aplicacions o aproves una compra."</string>
<string name="security_settings_fingerprint_enroll_introduction_v2_message" product="device" msgid="3570866595300511932">"Utilitza l\'empremta digital per desbloquejar el dispositiu o verificar la teva identitat, com ara quan inicies la sessió en aplicacions o aproves una compra."</string>
<string name="security_settings_fingerprint_enroll_introduction_v2_message" product="default" msgid="8539442240212670385">"Utilitza l\'empremta digital per desbloquejar el telèfon o verificar la teva identitat, com ara quan inicies la sessió en aplicacions o aproves una compra."</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" msgid="1833139688278350628">"Permet que el teu fill utilitzi l\'empremta digital per desbloquejar el telèfon o verificar la seva identitat. Ho podrà fer quan iniciï la sessió en aplicacions, aprovi una compra, etc."</string>
@@ -473,7 +473,7 @@
<string name="security_settings_fingerprint_v2_enroll_acquire_too_fast" msgid="5891227328100822018">"Aixeca el dit quan notis una vibració"</string>
<string name="security_settings_fingerprint_v2_enroll_acquire_too_bright" msgid="769646735950329315">"Ves a un lloc menys il·luminat i torna-ho a provar"</string>
<string name="security_settings_fingerprint_v2_enroll_error_max_attempts" msgid="1464972470750764128">"Has arribat al nombre màxim d\'intents"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Utilitza l\'empremta digital per desbloquejar la tauleta o verificar la teva identitat, com quan inicies la sessió en aplicacions"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Utilitza l\'empremta digital per desbloquejar la tauleta o verificar que ets tu, com quan inicies la sessió en aplicacions"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Utilitza l\'empremta digital per desbloquejar el dispositiu o verificar la teva identitat, com quan inicies la sessió en aplicacions"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Utilitza l\'empremta digital per desbloquejar el telèfon o verificar la teva identitat, com quan inicies la sessió en aplicacions"</string>
<string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Desbloqueig facial i amb empremta digital"</string>
@@ -529,7 +529,7 @@
<string name="security_settings_udfps_enroll_repeat_a11y_message" msgid="2785464357615568197">"Això ajuda a capturar millor l\'empremta digital"</string>
<string name="security_settings_udfps_enroll_progress_a11y_message" msgid="6183535114682369699">"Registre de l\'empremta digital <xliff:g id="PERCENTAGE">%d</xliff:g> per cent"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="3606325177406951457">"S\'ha afegit l\'empremta digital"</string>
- <string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet" msgid="5918110416185820480">"La funció Desbloqueig amb empremta digital millora com més la utilitzes per desbloquejar la tauleta o verificar la teva identitat en aplicacions"</string>
+ <string name="security_settings_fingerprint_enroll_finish_v2_message" product="tablet" msgid="5918110416185820480">"La funció Desbloqueig amb empremta digital millora com més la utilitzes per desbloquejar la tauleta o verificar que ets tu en aplicacions"</string>
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="device" msgid="2989276789236025675">"La funció Desbloqueig amb empremta digital millora com més la utilitzes per desbloquejar el dispositiu o verificar la teva identitat en aplicacions"</string>
<string name="security_settings_fingerprint_enroll_finish_v2_message" product="default" msgid="6506437402392739879">"La funció Desbloqueig amb empremta digital millora com més la utilitzes per desbloquejar el telèfon o verificar la teva identitat en aplicacions"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="3004786457919122854">"Fes-ho més tard"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Serveis d\'ubicació"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Serveis d\'ubicació"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Serveis d\'ubicació per a la feina"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Utilitza la ubicació per definir la zona horària"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Utilitza la ubicació"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Es necessita la ubicació del dispositiu"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Per configurar la zona horària utilitzant la teva ubicació, primer activa la ubicació i, després, actualitza la configuració de la zona horària"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Configuració d\'ubicació"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"La detecció de la zona horària de la ubicació està desactivada"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"No s\'admet la detecció de la zona horària de la ubicació"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"No es permeten canvis en la detecció de la zona horària de la ubicació"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Pot ser que la ubicació s\'utilitzi per definir la zona horària"</string>
<string name="location_network_based" msgid="5247042890080021887">"Ubicació p. Wi-Fi i xarxa mòb."</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Permet que les aplicacions utilitzin el servei d\'ubicació de Google per calcular la teva ubicació més ràpidament. Es recopilaran dades d\'ubicació anònimes i s\'enviaran a Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Ubicació determinada per Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3363,7 +3370,7 @@
<item quantity="one">Confia en el certificat o suprimeix-lo</item>
</plurals>
<string name="ssl_ca_cert_info_message_device_owner" msgid="7528581447864707873">"{numberOfCertificates,plural, =1{{orgName} ha instal·lat una autoritat de certificació al teu dispositiu, que pot permetre-li supervisar l\'activitat a la xarxa del dispositiu, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nPer obtenir més informació sobre aquest certificat, contacta amb el teu administrador.}other{{orgName} ha instal·lat unes autoritats de certificació al teu dispositiu, que pot permetre-li supervisar l\'activitat a la xarxa del dispositiu, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nPer obtenir més informació sobre aquests certificats, contacta amb el teu administrador.}}"</string>
- <string name="ssl_ca_cert_info_message" msgid="3111724430981667845">"{numberOfCertificates,plural, =1{{orgName} ha instal·lat una autoritat de certificació per al teu perfil de treball, que pot permetre-li supervisar l\'activitat a la xarxa del perfil de treball, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nPer obtenir més informació sobre aquest certificat, contacta amb el teu administrador.}other{{orgName} ha instal·lat unes autoritats de certificació per al teu perfil de treball, de manera que podrà supervisar l\'activitat a la xarxa del perfil de treball, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nPer obtenir més informació sobre aquests certificats, contacta amb el teu administrador.}}"</string>
+ <string name="ssl_ca_cert_info_message" msgid="3111724430981667845">"{numberOfCertificates,plural, =1{{orgName} ha instal·lat una autoritat de certificació per al teu perfil de treball, que pot permetre-li supervisar l\'activitat a la xarxa del perfil de treball, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nPer obtenir més informació sobre aquest certificat, contacta amb el teu administrador.}other{{orgName} ha instal·lat unes autoritats de certificació per al teu perfil de treball, que pot permetre-li supervisar l\'activitat a la xarxa del perfil de treball, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nPer obtenir més informació sobre aquests certificats, contacta amb el teu administrador.}}"</string>
<string name="ssl_ca_cert_warning_message" msgid="4374052724815563051">"Un tercer pot supervisar la teva activitat de xarxa, inclosos els correus electrònics, les aplicacions i els llocs web segurs.\n\nHi ha una credencial de confiança instal·lada al teu dispositiu que ho fa possible."</string>
<plurals name="ssl_ca_cert_settings_button" formatted="false" msgid="125941406175485894">
<item quantity="other">Comprova els certificats</item>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, trucades avançades, trucades 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"afegir idioma, afegir un idioma"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"mida del text, impressió gran, lletra gran, text gran, poca visió, fer el text més gran, ampliador de font, ampliació de font"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"pantalla sempre activa, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"So predeterminat"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"El volum de les trucades i notificacions està establert al <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volum, vibració, No molestis"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Mai"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificacions del dispositiu i d\'aplicacions"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Controla quines aplicacions i quins dispositius poden llegir notificacions"</string>
@@ -5143,7 +5143,7 @@
<item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contrasenya</item>
</plurals>
<string name="autofill_keywords" msgid="8598763328489346438">"automàtic, emplenament, emplenament automàtic, contrasenya"</string>
- <string name="autofill_confirmation_message" msgid="4888767934273494272">"<b>Assegura\'t que confies en aquesta aplicació</b> <br/> <br/> <xliff:g id=app_name example=Emplenament automàtic de Google>%1$s</xliff:g> utilitza el contingut que es mostra a la pantalla per determinar què es pot emplenar automàticament."</string>
+ <string name="autofill_confirmation_message" msgid="4888767934273494272">"<b>Assegura\'t que confies en aquesta aplicació</b> <br/> <br/> <xliff:g id=app_name example=Emplenament automàtic amb Google>%1$s</xliff:g> utilitza el contingut que es mostra a la pantalla per determinar què es pot emplenar automàticament."</string>
<string name="debug_autofill_category" msgid="5998163555428196185">"Emplenament automàtic"</string>
<string name="autofill_logging_level_title" msgid="3733958845861098307">"Nivell de registre"</string>
<string name="autofill_max_partitions" msgid="7342195529574406366">"Màxim de sol·licituds per sessió"</string>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index c5a4cef..e765cb7 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -275,7 +275,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Nastavit datum a čas"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Umožňuje nastavit datum, čas, časové pásmo a formát"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Nastavit čas automaticky"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Nastavit časové pásmo automaticky"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Nastavit automaticky"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Používat výchozí nastavení jazyka"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24hodinový formát"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Používat 24hodinový formát"</string>
@@ -1932,7 +1932,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Služby určování polohy"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Služby určování polohy"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Služby určování polohy pro práci"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Nastavit časové pásmo pomocí polohy"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Používat polohu"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Je požadována poloha zařízení"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Pokud chcete nastavit časové pásmo podle své polohy, zapněte určování polohy a poté aktualizujte nastavení časového pásma"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Nastavení polohy"</string>
@@ -1941,6 +1941,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Zjišťování časového pásma je deaktivováno"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Zjišťování časového pásma není podporováno"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Změny zjišťování časového pásma nejsou povoleny"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Časové pásmo se může nastavit podle polohy"</string>
<string name="location_network_based" msgid="5247042890080021887">"Poloha Wi-Fi a mobilní sítě"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Povolit aplikacím používat službu určování polohy Google a rychleji odhadovat vaši polohu. Anonymní data budou sbírána a odesílána Googlu."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Poloha určená sítí Wi-Fi"</string>
@@ -1986,6 +1987,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2015,7 +2018,7 @@
<string name="lockpassword_forgot_password" msgid="5730587692489737223">"Zapomněli jste heslo?"</string>
<string name="lockpassword_forgot_pattern" msgid="1196116549051927516">"Zapomněli jste gesto?"</string>
<string name="lockpassword_forgot_pin" msgid="7164232234705747672">"Zapomněli jste PIN?"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"Chcete-li pokračovat, zadejte gesto zařízení."</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"Jestliže chcete pokračovat, zadejte gesto zařízení"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="9206928587904701094">"Chcete-li pokračovat, zadejte PIN zařízení."</string>
<string name="lockpassword_confirm_your_password_generic" msgid="2616127423884477152">"Chcete-li pokračovat, zadejte heslo zařízení."</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="9110305410672321714">"Chcete-li pokračovat, zadejte pracovní gesto."</string>
@@ -2999,6 +3002,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>
@@ -3088,6 +3092,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>
@@ -3351,7 +3358,7 @@
<string name="vpn_mppe" msgid="7366657055055114239">"Šifrování PPP (MPPE)"</string>
<string name="vpn_l2tp_secret" msgid="2356744369959140121">"Tajný klíč L2TP"</string>
<string name="vpn_ipsec_identifier" msgid="8511842694369254801">"Identifikátor protokolu IPSec"</string>
- <string name="vpn_ipsec_secret" msgid="532007567355505963">"Předsdílený klíč IPSec"</string>
+ <string name="vpn_ipsec_secret" msgid="532007567355505963">"Předem sdílený klíč IPSec"</string>
<string name="vpn_ipsec_user_cert" msgid="2714372103705048405">"Uživatelský certifikát IPSec"</string>
<string name="vpn_ipsec_ca_cert" msgid="5558498943577474987">"Certifikát CA protokolu IPSec"</string>
<string name="vpn_ipsec_server_cert" msgid="1411390470454731396">"Certifikát serveru IPSec"</string>
@@ -3775,8 +3782,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, rozšířené volání, volání 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"přidat jazyk, přidání jazyka"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"velikost textu, velké písmo, velký text, slabozrakost, zvětšení textu, zvětšovač písma, zvětšení písma"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"vždy zapnutý displej"</string>
<string name="default_sound" msgid="6604374495015245195">"Výchozí zvuk"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Hlasitost vyzvánění a oznámení je na <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Hlasitost, vibrace, režim Nerušit"</string>
@@ -4089,18 +4095,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Ovládat, které aplikace a zařízení mohou číst oznámení"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 5c6d438..4dbf3da 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -77,7 +77,7 @@
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="6944790936166852428">"Enheden afbryder forbindelsen fra <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4173740094381092185">"Afbryd"</string>
<string name="bluetooth_empty_list_user_restricted" msgid="909734990821975673">"Du har ikke tilladelse til at ændre Bluetooth-indstillinger."</string>
- <string name="bluetooth_pairing_pref_title" msgid="3497193027590444598">"Par ny enhed"</string>
+ <string name="bluetooth_pairing_pref_title" msgid="3497193027590444598">"Par en ny enhed"</string>
<string name="keywords_add_bt_device" msgid="4533191164203174011">"bluetooth"</string>
<string name="bluetooth_pair_other_ear_dialog_title" msgid="3814943511999984012">"Par det andet høreapparat"</string>
<string name="bluetooth_pair_other_ear_dialog_left_ear_message" msgid="7936892941892347102">"Dit venstre høreapparat er tilsluttet.\n\nDu kan parre det højre ved at sørge for, at det er tændt og klar til at blive parret."</string>
@@ -137,7 +137,7 @@
<string name="bluetooth_device_name_summary" msgid="8678342689845439583">"Vises som \"<xliff:g id="DEVICE_NAME">^1</xliff:g>\" på andre enheder"</string>
<string name="bluetooth_off_footer" msgid="76578735660216295">"Aktivér Bluetooth for at oprette forbindelse til andre enheder."</string>
<string name="bluetooth_paired_device_title" msgid="3240639218362342026">"Dine enheder"</string>
- <string name="bluetooth_pairing_page_title" msgid="3403981358823707692">"Par ny enhed"</string>
+ <string name="bluetooth_pairing_page_title" msgid="3403981358823707692">"Par en ny enhed"</string>
<string name="bluetooth_pref_summary" product="tablet" msgid="3506962706611366830">"Tillad, at din tablet kommunikerer med Bluetooth-enheder i nærheden"</string>
<string name="bluetooth_pref_summary" product="device" msgid="2192027516577675587">"Tillad, at enheden kommunikerer med Bluetooth-enheder i nærheden"</string>
<string name="bluetooth_pref_summary" product="default" msgid="768958961865499804">"Tillad, at telefonen kommunikerer med Bluetooth-enheder i nærheden"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Angiv dato og klokkeslæt"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Angiv dato, klokkeslæt, tidszone og formater"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Indstil klokkeslættet automatisk"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Indstil tidszonen automatisk"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Indstil automatisk"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Brug landestandard"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-timersformat"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Brug 24-timers format"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Lokationstjenester"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Lokationstjenester"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Lokationstjenester til arbejdet"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Brug lokation til at indstille tidszone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Anvend placering"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Enhedens lokation skal aktiveres"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Hvis du vil angive tidszonen ved hjælp af din lokation, skal du aktivere lokation og derefter opdatere indstillingerne for tidszone"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Lokationsindstillinger"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Registrering af tidszone ved hjælp af lokation er deaktiveret"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Registrering af tidszone ved hjælp af lokation understøttes ikke"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Ændringer i forbindelse med registrering af tidszone ved hjælp af lokation er ikke tilladt"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Lokation kan anvendes til at angive tidszonen"</string>
<string name="location_network_based" msgid="5247042890080021887">"Lokation af Wi-Fi- og mobilnet."</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Tillad, at apps bruger Googles lokationstjeneste til at beregne din lokation hurtigere. Der indsamles anonyme lokationsdata, som sendes til Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Placeringen fastlægges af Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, avancerede opkald, 5g-opkald"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"tilføj sprog, tilføj et sprog"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tekststørrelse, stor skrifttype, store bogstaver, stor skrifttype, stor tekst, nedsat syn, gør teksten større, større skrifttype, forstørrelse af skrifttype"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"altid aktiv skærm"</string>
<string name="default_sound" msgid="6604374495015245195">"Standardlyd"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Lydstyrken for ringetone og notifikationer er på <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Lydstyrke, vibration, Forstyr ikke"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Aldrig"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Enheds- og appnotifikationer"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Styr, hvilke apps og enheder der må læse notifikationer"</string>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 74a4305..65f284e 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Datum und Uhrzeit einstellen"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Datum, Uhrzeit, Zeitzone und Formate festlegen"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Zeit automatisch einstellen"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Zeitzone automatisch einstellen"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Automatisch festlegen"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Standardformat für die gewählte Spracheinstellung verwenden"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-Stunden-Format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-Stunden-Format"</string>
@@ -413,7 +413,7 @@
<string name="security_settings_face_settings_require_confirmation_details" msgid="3498729789625461914">"Bei Gesichtsentsperrung in Apps immer Bestätigung anfordern"</string>
<string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"Gesichtsmodell löschen"</string>
<string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Gesichtsentsperrung einrichten"</string>
- <string name="security_settings_face_settings_footer" msgid="625696606490947189">"Du kannst die Entsperrung per Gesichtserkennung zum Entsperren deines Smartphones oder zur Authentifizierung in Apps verwenden, beispielsweise um dich anzumelden oder um Käufe zu autorisieren.\n\nHinweis:\nEs kann immer nur jeweils ein Gesicht eingerichtet sein. Wenn du ein anderes hinzufügen möchtest, lösche zuerst das aktuelle.\n\nEs kann passieren, dass das Smartphone unbeabsichtigt entsperrt wird, wenn du auf das Gerät blickst.\n\nEine andere Person kann dein Smartphone dadurch entsperren, dass sie es vor dein Gesicht hält.\n\nDein Smartphone kann eventuell auch von jemandem entsperrt werden, der dir sehr ähnlich sieht, beispielsweise von einem eineiigen Zwilling."</string>
+ <string name="security_settings_face_settings_footer" msgid="625696606490947189">"Du kannst die Entsperrung per Gesichtserkennung zum Entsperren deines Smartphones oder zur Authentifizierung in Apps verwenden, beispielsweise um dich anzumelden oder um Käufe zu autorisieren.\n\nHinweis:\nEs kann immer nur jeweils ein Gesicht eingerichtet sein. Wenn du ein anderes hinzufügen möchtest, lösche zuerst das aktuelle.\n\nEs kann passieren, dass das Smartphone unbeabsichtigt entsperrt wird, wenn du auf das Gerät blickst.\n\nEine andere Person kann dein Smartphone entsperren, indem sie es vor dein Gesicht hält.\n\nDein Smartphone kann eventuell auch von jemandem entsperrt werden, der dir sehr ähnlich sieht, beispielsweise von einem eineiigen Zwilling."</string>
<string name="security_settings_face_settings_footer_attention_not_supported" msgid="2071065435536235622">"Du kannst die Entsperrung per Gesichtserkennung zum Entsperren deines Smartphones oder zur Authentifizierung in Apps verwenden, beispielsweise um dich anzumelden oder um Käufe zu autorisieren.\n\nHinweis:\nEs kann immer nur jeweils ein Gesicht eingerichtet sein. Wenn du ein anderes hinzufügen möchtest, lösche zuerst das aktuelle.\n\nEs kann passieren, dass das Smartphone unbeabsichtigt entsperrt wird, wenn du auf das Gerät blickst.\n\nEine andere Person kann dein Smartphone dadurch entsperren, dass sie es vor dein Gesicht hält, auch wenn deine Augen geschlossen sind.\n\nDein Smartphone kann eventuell auch von jemandem entsperrt werden, der dir sehr ähnlich sieht, beispielsweise von einem eineiigen Zwilling."</string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Gesichtsmodell löschen?"</string>
<string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Dein Gesichtsmodell wird dauerhaft und sicher gelöscht.\n\nNach dem Löschen benötigst du deine PIN, dein Muster oder dein Passwort, um dein Smartphone zu entsperren und dich in Apps zu authentifizieren."</string>
@@ -434,8 +434,8 @@
<string name="security_settings_fingerprint_enroll_consent_introduction_title" msgid="2278592030102282364">"Fingerabdruck zulassen"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="1911710308293783998">"Fingerabdruck verwenden"</string>
<string name="security_settings_fingerprint_enroll_introduction_v2_message" product="tablet" msgid="1533352560544756928">"Du kannst deinen Fingerabdruck verwenden, um dein Tablet zu entsperren oder dich in Apps zu authentifizieren, beispielsweise um dich anzumelden oder einen Kauf zu autorisieren."</string>
- <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="device" msgid="3570866595300511932">"Du kannst deinen Fingerabdruck verwenden, um dein Gerät zu entsperren oder dich in Apps zu authentifizieren, beispielsweise um dich anzumelden oder einen Kauf zu autorisieren."</string>
- <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="default" msgid="8539442240212670385">"Du kannst deinen Fingerabdruck verwenden, um dein Smartphone zu entsperren oder dich in Apps zu authentifizieren, beispielsweise um dich anzumelden oder einen Kauf zu autorisieren."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="device" msgid="3570866595300511932">"Du kannst deinen Fingerabdruck verwenden, um dein Gerät zu entsperren oder deine Identität zu bestätigen, beispielsweise um dich in Apps anzumelden oder einen Kauf zu autorisieren."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="default" msgid="8539442240212670385">"Du kannst deinen Fingerabdruck verwenden, um dein Smartphone zu entsperren oder deine Identität zu bestätigen, beispielsweise um dich in Apps anzumelden oder einen Kauf zu autorisieren."</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" msgid="1833139688278350628">"Wenn du deinem Kind erlaubst, seinen Fingerabdruck zum Entsperren des Smartphones oder Bestätigen seiner Identität zu verwenden, kann es sich so z. B. in Apps anmelden oder Käufe autorisieren."</string>
<string name="security_settings_fingerprint_enroll_introduction_footer_title_1" msgid="6808124116419325722">"Du hast die Kontrolle"</string>
<string name="security_settings_fingerprint_enroll_introduction_footer_title_consent_1" msgid="1122676690472680734">"Du und dein Kind habt die Kontrolle"</string>
@@ -1891,7 +1891,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Standortdienste"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Standortdienste"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Standortdienste für die Arbeit"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Zeitzone anhand des Standorts festlegen"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Standort verwenden"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Gerätestandort erforderlich"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Damit du die Zeitzone anhand deines Standorts einstellen kannst, musst du den Standortzugriff aktivieren und die Zeitzoneneinstellungen aktualisieren"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Standorteinstellungen"</string>
@@ -1900,6 +1900,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Zeitzonenerkennung anhand des Standorts ist deaktiviert"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Zeitzonenerkennung anhand des Standorts wird nicht unterstützt"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Änderungen an den Einstellungen für die Zeitzonenerkennung sind nicht erlaubt"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Der Standort kann verwendet werden, um die Zeitzone festzulegen"</string>
<string name="location_network_based" msgid="5247042890080021887">"WLAN- & Mobilfunknetz-Standort"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Apps dürfen meinen Standort mit dem Google-Standortdienst schneller bestimmen. Anonyme Standortdaten werden erfasst und an Google gesendet."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Standort per WLAN ermittelt"</string>
@@ -1945,6 +1946,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2926,6 +2929,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>
@@ -3015,6 +3019,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>
@@ -3692,8 +3699,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5g, VoNR, erweiterte Anruffunktionen, 5G-Anrufe"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"Sprache hinzufügen, eine Sprache hinzufügen"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"Textgröße, Großdruck, Großschrift, großer Text, eingeschränktes Sehvermögen, Text vergrößern, Textvergrößerung"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"Always-On-Display, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Standardton"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Lautstärke bei Klingeln und Benachrichtigungseingang auf <xliff:g id="PERCENTAGE">%1$s</xliff:g> %% eingestellt"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Lautstärke, Vibration, Bitte nicht stören"</string>
@@ -4004,14 +4010,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Nie"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Geräte- und App-Benachrichtigungen"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Festlegen, welche Apps und Geräte Benachrichtigungen lesen dürfen"</string>
@@ -5139,7 +5139,7 @@
<string name="app_info_storage_title" msgid="4076977173803093808">"Belegter Speicherplatz"</string>
<string name="webview_uninstalled_for_user" msgid="627352948986275488">"(für Nutzer <xliff:g id="USER">%s</xliff:g> deinstalliert)"</string>
<string name="webview_disabled_for_user" msgid="5809886172032644498">"(für Nutzer <xliff:g id="USER">%s</xliff:g> deaktiviert)"</string>
- <string name="autofill_app" msgid="7595308061826307921">"Dienst für automatisches Ausfüllen"</string>
+ <string name="autofill_app" msgid="7595308061826307921">"Autofill-Service"</string>
<string name="autofill_passwords" msgid="6708057251459761083">"Passwörter"</string>
<plurals name="autofill_passwords_count" formatted="false" msgid="7715009165029452622">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> Passwörter</item>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index df5cf5a..9e4a615 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Ορισμός ημερομηνίας και ώρας"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Ορισμός ημερομηνίας, ώρας, ζώνης ώρας και μορφές"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Αυτόματος ορισμός ώρας"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Αυτόματος ορισμός ζώνης ώρας"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Αυτόματη ρύθμιση"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Χρήση προεπιλογής τοπικών ρυθμίσεων"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24ωρη μορφή"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Χρήση μορφής 24ώρου"</string>
@@ -476,7 +476,7 @@
<string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Χρησιμοποιήστε το δακτυλικό σας αποτύπωμα για να ξεκλειδώνετε το tablet σας ή να επαληθεύετε την ταυτότητά σας, για παράδειγμα, όταν συνδέεστε σε εφαρμογές"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Χρησιμοποιήστε το δακτυλικό σας αποτύπωμα για να ξεκλειδώνετε τη συσκευή σας ή να επαληθεύετε την ταυτότητά σας, για παράδειγμα, όταν συνδέεστε σε εφαρμογές"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Χρησιμοποιήστε το δακτυλικό σας αποτύπωμα για να ξεκλειδώνετε το τηλέφωνό σας ή να επαληθεύετε την ταυτότητά σας, για παράδειγμα, όταν συνδέεστε σε εφαρμογές"</string>
- <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Ξεκλείδωμα με το πρόσωπο και με δακτυλικό αποτύπωμα"</string>
+ <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Ξεκλείδωμα με πρόσωπο/δακτυλ. αποτύπωμα"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Πατήστε για ρύθμιση"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Προστέθηκε πρόσωπο και δακτυλικά αποτυπώματα"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Προστέθηκε πρόσωπο και δακτυλικό αποτύπωμα"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Υπηρεσίες τοποθεσίας"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Υπηρεσίες τοποθεσίας"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Οι υπηρεσίες τοποθεσίας δεν λειτουργούν"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Χρήση τοποθεσίας για ορισμό ζώνης ώρας"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Χρήση τοποθεσίας"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Απαιτείται τοποθεσία συσκευής"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Για να ορίσετε τη ζώνη ώρας χρησιμοποιώντας την τοποθεσία σας, ενεργοποιήστε την τοποθεσία και, στη συνέχεια, ενημερώστε τις ρυθμίσεις ζώνης ώρας"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Ρυθμίσεις τοποθεσίας"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Ο εντοπισμός ζώνης ώρας τοποθεσίας είναι απενεργοποιημένος"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Ο εντοπισμός ζώνης ώρας τοποθεσίας δεν υποστηρίζεται"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Δεν επιτρέπονται αλλαγές στον εντοπισμό ζώνης ώρας τοποθεσίας"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Μπορεί να χρησιμοποιηθεί η τοποθεσία για τον ορισμό της ζώνης ώρας"</string>
<string name="location_network_based" msgid="5247042890080021887">"Τοποθεσία Wi‑Fi και δικτύων κιν. τηλεφ."</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Να επιτρέπεται στις εφαρμογές να χρησιμοποιούν την υπηρεσία τοποθεσίας της Google για γρήγορη εκτίμηση της τοποθεσίας σας. Θα συλλεχθούν ανώνυμα δεδομένα και θα αποσταλούν στην Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Η τοποθεσία καθορίζεται από το Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, σύνθετες λειτουργίες κλήσης, κλήση 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"προσθήκη γλώσσας, προσθέστε μια γλώσσα"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"μέγεθος οθόνης, μεγάλη εκτύπωση, μεγάλη γραμματοσειρά, μεγάλο κείμενο, χαμηλή όραση, αύξηση μεγέθους κειμένου, εργαλείο αύξησης μεγέθους γραμματοσειράς, αύξηση μεγέθους γραμματοσειράς"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"πάντα ενεργή οθόνη, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Προεπιλεγμένος ήχος"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Ένταση ήχου κουδουνίσματος και ειδοποιήσεων στο <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Ένταση ήχου, δόνηση, λειτουργία \"Μην ενοχλείτε\""</string>
@@ -4001,13 +4007,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>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 880ea1b..73cd908 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Set date and time"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Set date, time, time zone, & formats"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Set time automatically"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Set time zone automatically"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Set automatically"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑hour format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
@@ -476,7 +476,7 @@
<string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Use your fingerprint to unlock your tablet or verify that it’s you, like when you sign in to apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Use your fingerprint to unlock your device or verify that it’s you, like when you sign in to apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Use your fingerprint to unlock your phone or verify that it’s you, like when you sign in to apps"</string>
- <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Face & Fingerprint Unlock"</string>
+ <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Face and Fingerprint Unlock"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Tap to set up"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Face and fingerprints added"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Face and fingerprint added"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Location Services"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Location Services"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Location services for work"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Use location to set time zone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Use location"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Device location needed"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"To set the time zone using your location, turn on location, then update time zone settings"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Location settings"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Location time zone detection is disabled"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Location time zone detection is not supported"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Location time zone detection changes are not allowed"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Location may be used to set time zone"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi & mobile network location"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Let apps use Google\'s location service to estimate your location faster. Anonymous location data will be collected and sent to Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Location determined by Wi‑Fi"</string>
@@ -1942,6 +1943,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>
@@ -2923,6 +2925,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>
@@ -3012,6 +3015,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>
@@ -3689,8 +3695,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, advanced calling, 5g calling"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"add language, add a language"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"text size, large print, large font, large text, low vision, make text bigger, font enlarger, font enlargement"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"always on display, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Default sound"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Ring and notification volume at <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibration, Do Not Disturb"</string>
@@ -4001,13 +4006,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>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index d96dc07..5887049 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Set date and time"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Set date, time, time zone, & formats"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Set time automatically"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Set time zone automatically"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Set automatically"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑hour format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
@@ -476,7 +476,7 @@
<string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Use your fingerprint to unlock your tablet or verify that it’s you, like when you sign in to apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Use your fingerprint to unlock your device or verify that it’s you, like when you sign in to apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Use your fingerprint to unlock your phone or verify that it’s you, like when you sign in to apps"</string>
- <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Face & Fingerprint Unlock"</string>
+ <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Face and Fingerprint Unlock"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Tap to set up"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Face and fingerprints added"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Face and fingerprint added"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Location Services"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Location Services"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Location services for work"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Use location to set time zone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Use location"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Device location needed"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"To set the time zone using your location, turn on location, then update time zone settings"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Location settings"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Location time zone detection is disabled"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Location time zone detection is not supported"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Location time zone detection changes are not allowed"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Location may be used to set time zone"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi & mobile network location"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Let apps use Google\'s location service to estimate your location faster. Anonymous location data will be collected and sent to Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Location determined by Wi‑Fi"</string>
@@ -1942,6 +1943,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>
@@ -2923,6 +2925,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>
@@ -3012,6 +3015,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>
@@ -3689,8 +3695,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, advanced calling, 5g calling"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"add language, add a language"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"text size, large print, large font, large text, low vision, make text bigger, font enlarger, font enlargement"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"always on display, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Default sound"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Ring and notification volume at <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibration, Do Not Disturb"</string>
@@ -4001,13 +4006,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>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index dda5397..54f832e 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Set date and time"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Set date, time, time zone, & formats"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Set time automatically"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Set time zone automatically"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Set automatically"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑hour format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
@@ -476,7 +476,7 @@
<string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Use your fingerprint to unlock your tablet or verify that it’s you, like when you sign in to apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Use your fingerprint to unlock your device or verify that it’s you, like when you sign in to apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Use your fingerprint to unlock your phone or verify that it’s you, like when you sign in to apps"</string>
- <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Face & Fingerprint Unlock"</string>
+ <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Face and Fingerprint Unlock"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Tap to set up"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Face and fingerprints added"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Face and fingerprint added"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Location Services"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Location Services"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Location services for work"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Use location to set time zone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Use location"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Device location needed"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"To set the time zone using your location, turn on location, then update time zone settings"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Location settings"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Location time zone detection is disabled"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Location time zone detection is not supported"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Location time zone detection changes are not allowed"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Location may be used to set time zone"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi & mobile network location"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Let apps use Google\'s location service to estimate your location faster. Anonymous location data will be collected and sent to Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Location determined by Wi‑Fi"</string>
@@ -1942,6 +1943,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>
@@ -2923,6 +2925,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>
@@ -3012,6 +3015,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>
@@ -3689,8 +3695,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, advanced calling, 5g calling"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"add language, add a language"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"text size, large print, large font, large text, low vision, make text bigger, font enlarger, font enlargement"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"always on display, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Default sound"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Ring and notification volume at <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibration, Do Not Disturb"</string>
@@ -4001,13 +4006,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>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 8c7d1b6..2006646 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Set date and time"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Set date, time, time zone, & formats"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Set time automatically"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Set time zone automatically"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Set automatically"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑hour format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
@@ -476,7 +476,7 @@
<string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Use your fingerprint to unlock your tablet or verify that it’s you, like when you sign in to apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Use your fingerprint to unlock your device or verify that it’s you, like when you sign in to apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Use your fingerprint to unlock your phone or verify that it’s you, like when you sign in to apps"</string>
- <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Face & Fingerprint Unlock"</string>
+ <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Face and Fingerprint Unlock"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Tap to set up"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Face and fingerprints added"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Face and fingerprint added"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Location Services"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Location Services"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Location services for work"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Use location to set time zone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Use location"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Device location needed"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"To set the time zone using your location, turn on location, then update time zone settings"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Location settings"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Location time zone detection is disabled"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Location time zone detection is not supported"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Location time zone detection changes are not allowed"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Location may be used to set time zone"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi & mobile network location"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Let apps use Google\'s location service to estimate your location faster. Anonymous location data will be collected and sent to Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Location determined by Wi‑Fi"</string>
@@ -1942,6 +1943,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>
@@ -2923,6 +2925,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>
@@ -3012,6 +3015,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>
@@ -3689,8 +3695,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, advanced calling, 5g calling"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"add language, add a language"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"text size, large print, large font, large text, low vision, make text bigger, font enlarger, font enlargement"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"always on display, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Default sound"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Ring and notification volume at <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibration, Do Not Disturb"</string>
@@ -4001,13 +4006,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>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 77d9e33..ea36cd8 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Set date and time"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Set date, time, time zone, & formats"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Set time automatically"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Set time zone automatically"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Set automatically"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑hour format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Location services"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Location services"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Location services for work"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Use location to set time zone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Use location"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Device location needed"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"To set the time zone using your location, turn on location, then update time zone settings"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Location settings"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Location time zone detection is disabled"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Location time zone detection is not supported"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Location time zone detection changes are not allowed"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Location may be used to set time zone"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi & mobile network location"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Let apps use Google’s location service to estimate your location faster. Anonymous location data will be collected and sent to Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Location determined by Wi‑Fi"</string>
@@ -1942,6 +1943,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>
@@ -2923,6 +2925,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>
@@ -3012,6 +3015,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>
@@ -4000,13 +4006,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>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index defc3a1..79cd30e 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -100,7 +100,7 @@
<string name="bluetooth_show_received_files" msgid="685424727760622632">"Archivos recibidos"</string>
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"Bluetooth desactivado"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"Presiona para activarlo"</string>
- <string name="device_picker" msgid="2427027896389445414">"Elegir dispositivo"</string>
+ <string name="device_picker" msgid="2427027896389445414">"Elegir dispositivo Bluetooth"</string>
<string name="bluetooth_ask_enablement" msgid="1529030199895339199">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere activar la conexión Bluetooth"</string>
<string name="bluetooth_ask_disablement" msgid="1879788777942714761">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere desactivar la conexión Bluetooth"</string>
<string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"Una app quiere activar la conexión Bluetooth"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Configurar fecha y hora"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Establecer fecha, hora, zona horaria y formatos"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Establecer la hora automáticamente"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Establecer la zona horaria automáticamente"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Establecer automáticamente"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar configuración regional predeterminada"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Formato de 24 horas"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Formato de 24 horas"</string>
@@ -473,10 +473,10 @@
<string name="security_settings_fingerprint_v2_enroll_acquire_too_fast" msgid="5891227328100822018">"Levanta el dedo cuando sientas una vibración"</string>
<string name="security_settings_fingerprint_v2_enroll_acquire_too_bright" msgid="769646735950329315">"Ve a un lugar donde la luz sea menos brillante y vuelve a intentarlo"</string>
<string name="security_settings_fingerprint_v2_enroll_error_max_attempts" msgid="1464972470750764128">"Alcanzaste la cantidad máxima de intentos"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Usa tu huella dactilar para desbloquear la tablet o verificar tu identidad, por ejemplo, cuando accedes a apps"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Usa tu huella dactilar para desbloquear la tablet o verificar tu identidad, por ejemplo, cuando accedes a apps."</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Usa tu huella dactilar para desbloquear el dispositivo o verificar tu identidad, por ejemplo, cuando accedes a apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Usa tu huella dactilar para desbloquear el teléfono o verificar tu identidad, como cuando accedes a apps"</string>
- <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Desbloqueo facial y con huellas dactilares"</string>
+ <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Desbloqueo facial y con huella dactilar"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Presionar para configurar"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Se agregaron huellas dactilares y el rostro"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Se agregaron el rostro y la huella dactilar"</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Servicios de ubicación"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Servicios de ubicación"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Servicios de ubicación para el trabajo"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Usa tu ubicación para configurar la zona horaria"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Usar ubicación"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Se necesita la ubicación del dispositivo"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Para configurar la zona horaria con tu ubicación, activa la ubicación y, luego, actualiza la configuración de zona horaria"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Configuración de la ubicación"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Se inhabilitó la detección de la zona horaria de la ubicación"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"La detección de la zona horaria de la ubicación no es compatible"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"No se permiten los cambios de detección de la zona horaria de la ubicación"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Se puede usar la ubicación para configurar la zona horaria"</string>
<string name="location_network_based" msgid="5247042890080021887">"Ubicación de Wi-Fi y red móvil"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Permitir que aplicaciones usen el servicio de ubicación de Google para calcular tu ubicación (se enviarán datos anónimos a Google)"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Ubicación determinada por Wi-Fi"</string>
@@ -1944,6 +1945,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2901,7 +2904,7 @@
<string name="battery_detail_since_full_charge" msgid="5650946565524184582">"Desglose desde la última carga completa"</string>
<string name="battery_last_full_charge" msgid="8308424441475063956">"Última carga completa"</string>
<string name="battery_full_charge_last" msgid="465146408601016923">"La carga completa dura aproximadamente"</string>
- <string name="battery_footer_summary" msgid="8221691063048377342">"Los datos sobre la duración de la batería son aproximados y pueden cambiar en función del uso."</string>
+ <string name="battery_footer_summary" msgid="8221691063048377342">"Los datos sobre el uso de batería son aproximados y pueden cambiar en función del uso."</string>
<string name="battery_detail_power_usage" msgid="1492926471397355477">"Uso de la batería"</string>
<string name="battery_detail_manage_title" msgid="7910805419446927887">"Administrar el uso de la batería"</string>
<string name="battery_total_and_bg_usage" msgid="8266478675516886819">"<xliff:g id="TIME_0">^1</xliff:g> en total • <xliff:g id="TIME_1">^2</xliff:g> en segundo plano\ndesde la última carga completa"</string>
@@ -2925,6 +2928,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>
@@ -2959,7 +2963,7 @@
<string name="battery_saver_turn_on_automatically_never" msgid="6194649389871448663">"Nunca"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="4294335680892392449">"con <xliff:g id="PERCENT">%1$s</xliff:g> de batería"</string>
<string name="battery_percentage" msgid="1779934245963043490">"Porcentaje de batería"</string>
- <string name="battery_percentage_description" msgid="2321465139126125541">"Mostrar el porcentaje de la batería en la barra de estado"</string>
+ <string name="battery_percentage_description" msgid="2321465139126125541">"Mostrar el porcentaje de batería en la barra de estado"</string>
<string name="battery_usage_chart_graph_hint" msgid="9182079098173323005">"Nivel de batería en las últimas 24 h"</string>
<string name="battery_app_usage_for_past_24" msgid="1234770810563940656">"Cuánta batería se consumió en las últimas 24 h por app"</string>
<string name="battery_system_usage_for_past_24" msgid="3341520273114616263">"Uso del sistema en las últimas 24 h"</string>
@@ -3014,6 +3018,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>
@@ -3691,8 +3698,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5G, VoNR, llamadas avanzadas, llamadas 5G"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"agregar idioma, agregar un idioma"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tamaño del texto, letra grande, fuente grande, texto grande, visión reducida, agrandar el texto, agrandar la fuente, agrandamiento de la fuente"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"pantalla siempre activa, PSA"</string>
<string name="default_sound" msgid="6604374495015245195">"Sonido predeterminado"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volumen de tono y notificaciones al <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volumen, vibración, No interrumpir"</string>
@@ -4003,14 +4009,8 @@
<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">
- <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">
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Nunca"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificaciones de la app y del dispositivo"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Controla qué apps y dispositivos pueden leer notificaciones"</string>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index b6fccd2..9620bcd 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -44,7 +44,7 @@
<string name="radioInfo_data_suspended" msgid="2001254415431299603">"Suspendido"</string>
<string name="radioInfo_unknown" msgid="2892562356748600367">"Desconocido"</string>
<string name="sdcard_unmount" product="nosdcard" msgid="1816306320988638382">"Desconectar USB"</string>
- <string name="sdcard_unmount" product="default" msgid="8078570285871053815">"Desconectar tarjeta SD"</string>
+ <string name="sdcard_unmount" product="default" msgid="8078570285871053815">"Desmontar tarjeta SD"</string>
<string name="sdcard_format" product="nosdcard" msgid="3248760426252305366">"Borrar almacenamiento USB"</string>
<string name="sdcard_format" product="default" msgid="3676635435136326182">"Borrar tarjeta SD"</string>
<string name="preview_pager_content_description" msgid="3762247188224576303">"Vista previa"</string>
@@ -100,7 +100,7 @@
<string name="bluetooth_show_received_files" msgid="685424727760622632">"Archivos recibidos"</string>
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"El Bluetooth está desactivado"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"Toca para activarlo"</string>
- <string name="device_picker" msgid="2427027896389445414">"Seleccionar dispositivo Bluetooth"</string>
+ <string name="device_picker" msgid="2427027896389445414">"Elige un dispositivo Bluetooth"</string>
<string name="bluetooth_ask_enablement" msgid="1529030199895339199">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere activar el Bluetooth"</string>
<string name="bluetooth_ask_disablement" msgid="1879788777942714761">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere desactivar el Bluetooth"</string>
<string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"Una aplicación quiere activar el Bluetooth"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Establecer fecha y hora"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Establecer fecha, hora, zona horaria y formatos"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Establecer hora automáticamente"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Establecer zona horaria automáticamente"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Definir automáticamente"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar configuración regional predeterminada"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Formato de 24 horas"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Usar formato de 24 horas"</string>
@@ -339,7 +339,7 @@
<string name="safety_center_title" msgid="7732397372178774777">"Seguridad y privacidad"</string>
<string name="safety_center_summary" msgid="3554867379951053869">"Seguridad de aplicaciones, bloqueo del dispositivo, permisos"</string>
<string name="security_settings_face_preference_summary" msgid="6675126437396914838">"Cara añadida"</string>
- <string name="security_settings_face_preference_summary_none" msgid="5952752252122581846">"Toca para configurar cara"</string>
+ <string name="security_settings_face_preference_summary_none" msgid="5952752252122581846">"Toca para configurar la cara"</string>
<string name="security_settings_face_preference_title" msgid="2126625155005348417">"Desbloqueo facial"</string>
<string name="security_settings_face_profile_preference_title" msgid="7519527436266375005">"Desbloqueo facial para el trabajo"</string>
<string name="security_settings_face_enroll_education_title" msgid="6448806884597691208">"Cómo configurar Desbloqueo facial"</string>
@@ -483,7 +483,7 @@
<string name="biometric_settings_intro" msgid="4263069383955676756">"Cuando configures Desbloqueo facial y Desbloqueo con huella digital, el teléfono te pedirá la huella digital si llevas mascarilla o estás en un lugar oscuro"</string>
<string name="biometric_settings_category_ways_to_unlock" msgid="3384767901580915266">"Formas de desbloqueo"</string>
<string name="biometric_settings_use_biometric_unlock_phone" msgid="8180914579885804358">"Desbloquear teléfono"</string>
- <string name="biometric_settings_use_biometric_for_apps" msgid="6201168728906364189">"Verificar que eres tú"</string>
+ <string name="biometric_settings_use_biometric_for_apps" msgid="6201168728906364189">"Verificar que eres tú en aplicaciones"</string>
<string name="biometric_settings_use_face_preference_summary" msgid="1821648836899408477">"Usar la cara"</string>
<string name="biometric_settings_use_fingerprint_preference_summary" msgid="6077762097826050165">"Usar la huella digital"</string>
<string name="biometric_settings_use_face_or_fingerprint_preference_summary" msgid="3029102492674234728">"Usar la cara o la huella digital"</string>
@@ -1527,7 +1527,7 @@
<string name="storage_settings_for_app" msgid="229425418984637483">"Almacenamiento y caché"</string>
<string name="storage_usb_settings" msgid="7058142934214211583">"Almacenamiento"</string>
<string name="storage_settings_title" msgid="486118156723194815">"Ajustes de almacenamiento"</string>
- <string name="storage_settings_summary" product="nosdcard" msgid="3858049818577638926">"Desconectar almacenamiento USB, ver almacenamiento disponible"</string>
+ <string name="storage_settings_summary" product="nosdcard" msgid="3858049818577638926">"Desmontar almacenamiento USB, ver almacenamiento disponible"</string>
<string name="storage_settings_summary" product="default" msgid="267557695753980969">"Desconectar tarjeta SD, ver almacenamiento disponible."</string>
<string name="imei_multi_sim" msgid="71477088017585479">"IMEI (ranura SIM %1$d)"</string>
<string name="view_saved_network" msgid="1232387673095080910">"Para verla, selecciona una red guardada"</string>
@@ -1578,9 +1578,9 @@
<string name="memory_music_usage" msgid="8100634000114206429">"Audio (música, tonos, etc.)"</string>
<string name="memory_media_misc_usage" msgid="7066851245178533269">"Otros archivos"</string>
<string name="memory_media_cache_usage" msgid="780808666853685824">"Datos almacenados en caché"</string>
- <string name="sd_eject" product="nosdcard" msgid="6136102589751843304">"Desconectar almacenamiento compartido"</string>
- <string name="sd_eject" product="default" msgid="8062832622096296251">"Desconectar tarjeta SD"</string>
- <string name="sd_eject_summary" product="nosdcard" msgid="6859940774161708871">"Desconectar almacenamiento USB interno"</string>
+ <string name="sd_eject" product="nosdcard" msgid="6136102589751843304">"Desmontar almacenamiento compartido"</string>
+ <string name="sd_eject" product="default" msgid="8062832622096296251">"Desmontar tarjeta SD"</string>
+ <string name="sd_eject_summary" product="nosdcard" msgid="6859940774161708871">"Desmontar almacenamiento USB interno"</string>
<string name="sd_eject_summary" product="default" msgid="5151243312587186226">"Desconectar la tarjeta SD para extraerla de forma segura"</string>
<string name="sd_insert_summary" product="nosdcard" msgid="9164545135649775664">"Inserta USB para activar almacenamiento"</string>
<string name="sd_insert_summary" product="default" msgid="5949168259622002192">"Insertar una tarjeta SD para el montaje"</string>
@@ -1593,14 +1593,14 @@
<string name="sd_format_summary" product="nosdcard" msgid="6179784504937189658">"Borrar todos los datos del almacenamiento USB del teléfono, como la música y las fotos"</string>
<string name="sd_format_summary" product="default" msgid="60583152211068164">"Borrar todos los datos de la tarjeta SD, como la música y las fotos"</string>
<string name="mtp_ptp_mode_summary" msgid="7969656567437639239">"La función MTP o PTP está activa."</string>
- <string name="dlg_confirm_unmount_title" product="nosdcard" msgid="7694112411895701320">"¿Desconectar almacenamiento USB?"</string>
- <string name="dlg_confirm_unmount_title" product="default" msgid="8251329019960361646">"¿Desconectar tarjeta SD?"</string>
- <string name="dlg_confirm_unmount_text" product="nosdcard" msgid="1212025106709645023">"Si desconectas el almacenamiento USB, se detendrán algunas aplicaciones que estás usando y no estarán disponibles hasta que vuelvas a activarlo."</string>
- <string name="dlg_confirm_unmount_text" product="default" msgid="3887768438615563697">"Si desconectas la tarjeta SD, se detendrán algunas aplicaciones en ejecución y no estarán disponibles hasta que la vuelvas a activar."</string>
+ <string name="dlg_confirm_unmount_title" product="nosdcard" msgid="7694112411895701320">"¿Desmontar almacenamiento USB?"</string>
+ <string name="dlg_confirm_unmount_title" product="default" msgid="8251329019960361646">"¿Desmontar tarjeta SD?"</string>
+ <string name="dlg_confirm_unmount_text" product="nosdcard" msgid="1212025106709645023">"Si desmontas el almacenamiento USB, se detendrán algunas aplicaciones que estás usando y no estarán disponibles hasta que vuelvas a activarlo."</string>
+ <string name="dlg_confirm_unmount_text" product="default" msgid="3887768438615563697">"Si desmontas la tarjeta SD, se detendrán algunas aplicaciones en ejecución y no estarán disponibles hasta que la vuelvas a activar."</string>
<string name="dlg_error_unmount_title" product="nosdcard" msgid="2205587942165199845"></string>
<string name="dlg_error_unmount_title" product="default" msgid="2205587942165199845"></string>
- <string name="dlg_error_unmount_text" product="nosdcard" msgid="7876201891724279436">"No se ha podido desconectar el almacenamiento USB. Inténtalo de nuevo más tarde."</string>
- <string name="dlg_error_unmount_text" product="default" msgid="2185659901137961711">"No se ha podido desconectar la tarjeta SD. Inténtalo de nuevo más tarde."</string>
+ <string name="dlg_error_unmount_text" product="nosdcard" msgid="7876201891724279436">"No se ha podido desmontar el almacenamiento USB. Inténtalo de nuevo más tarde."</string>
+ <string name="dlg_error_unmount_text" product="default" msgid="2185659901137961711">"No se ha podido desmontar la tarjeta SD. Inténtalo de nuevo más tarde."</string>
<string name="unmount_inform_text" product="nosdcard" msgid="5932607205977999175">"Se desactivará el almacenamiento USB."</string>
<string name="unmount_inform_text" product="default" msgid="716578785262713312">"Se desactivará la tarjeta SD."</string>
<string name="sd_ejecting_title" msgid="1641122369013595273">"Desactivando"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Servicios de ubicación"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Servicios de ubicación"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Servicios de ubicación para el trabajo"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Usar ubicación para establecer la zona horaria"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Usar ubicación"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Se necesita la ubicación del dispositivo"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Para establecer la zona horaria usando tu ubicación, activa la ubicación y luego actualiza los ajustes de zona horaria"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Ajustes de ubicación"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"La detección de la zona horaria por ubicación está inhabilitada"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"No se admite la detección de la zona horaria por ubicación"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"No se permiten cambios en la detección de la zona horaria por ubicación"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"La ubicación puede usarse para definir la zona horaria"</string>
<string name="location_network_based" msgid="5247042890080021887">"Ubicación por red móvil y Wi‑Fi"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Permitir que las aplicaciones usen el servicio de ubicación de Google para calcular tu ubicación más rápido. Se recopilarán datos de ubicación anónimos y se enviarán a Google"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Ubicación determinada por Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<string name="lockpassword_choose_your_pin_header" msgid="7754265746504679473">"Establece un PIN"</string>
<string name="lockpassword_choose_your_profile_pin_header" msgid="4581749963670819048">"Define un PIN para el trabajo"</string>
<string name="lockpassword_choose_your_pattern_header" msgid="5674909390779586252">"Crea un patrón"</string>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3676,12 +3683,12 @@
<string name="keywords_ambient_display" msgid="3149287105145443697">"notificación entrante"</string>
<string name="keywords_hotspot_tethering" msgid="3688439689671232627">"conexión compartida por usb, conexión compartida por bluetooth, punto de acceso wi‑fi"</string>
<string name="keywords_accessibility_vibration_primary_switch" msgid="730692154347231253">"vibración al pulsar, vibrar, vibración"</string>
- <string name="keywords_touch_vibration" msgid="1125291201902251273">"háptica, vibrar, pantalla, sensibilidad"</string>
- <string name="keywords_ring_vibration" msgid="1736301626537417541">"háptica, vibrar, teléfono, llamada, sensibilidad, tono"</string>
- <string name="keywords_ramping_ringer_vibration" msgid="3678966746742257366">"vibración, vibrar, teléfono, llamada, tono, gradual"</string>
- <string name="keywords_notification_vibration" msgid="2620799301276142183">"háptica, vibrar, sensibilidad, notificación"</string>
- <string name="keywords_alarm_vibration" msgid="4833220371621521817">"háptica, vibrar, sensibilidad, alarma"</string>
- <string name="keywords_media_vibration" msgid="723896490102792327">"háptica, vibrar, sensibilidad, multimedia"</string>
+ <string name="keywords_touch_vibration" msgid="1125291201902251273">"vibración al pulsar, vibrar, pantalla, sensibilidad"</string>
+ <string name="keywords_ring_vibration" msgid="1736301626537417541">"vibración al pulsar, vibrar, teléfono, llamada, sensibilidad, tono"</string>
+ <string name="keywords_ramping_ringer_vibration" msgid="3678966746742257366">"vibración al pulsar, vibrar, teléfono, llamada, tono, gradual"</string>
+ <string name="keywords_notification_vibration" msgid="2620799301276142183">"vibración al pulsar, vibrar, sensibilidad, notificación"</string>
+ <string name="keywords_alarm_vibration" msgid="4833220371621521817">"vibración al pulsar, vibrar, sensibilidad, alarma"</string>
+ <string name="keywords_media_vibration" msgid="723896490102792327">"vibración al pulsar, vibrar, sensibilidad, multimedia"</string>
<string name="keywords_vibration" msgid="670455132028025952">"vibración al pulsar, vibrar, vibración"</string>
<string name="keywords_battery_saver_sticky" msgid="1646191718840975110">"ahorro de batería, batería fija, duradera, ahorro de batería, batería"</string>
<string name="keywords_battery_saver_schedule" msgid="8240483934368455930">"rutina, horario, ahorro de batería, ahorro de corriente, batería, automático, porcentaje"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, llamadas avanzadas, llamadas 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"añadir idioma, añadir un idioma, añadir lengua, añadir una lengua"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tamaño del texto, letras grandes, fuente grande, texto grande, baja visión, hacer el texto más grande, agrandar texto, ampliar texto, ampliador de fuente, ampliación de la fuente"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"pantalla siempre activa"</string>
<string name="default_sound" msgid="6604374495015245195">"Sonido predeterminado"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"El volumen del tono de llamada y de las notificaciones está al <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volumen, vibración, No molestar"</string>
@@ -3920,7 +3926,7 @@
<string name="notification_pulse_title" msgid="8013178454646671529">"Luz parpadeante"</string>
<string name="lock_screen_notifications_title" msgid="2876323153692406203">"Privacidad"</string>
<string name="lockscreen_bypass_title" msgid="6519964196744088573">"Saltar pantalla de bloqueo"</string>
- <string name="lockscreen_bypass_summary" msgid="464277506200346748">"Después de desbloquear, ir a la última pantalla usada"</string>
+ <string name="lockscreen_bypass_summary" msgid="464277506200346748">"Después de desbloquear, ir a la última pantalla usada."</string>
<string name="keywords_lockscreen_bypass" msgid="41035425468915498">"Pantalla de bloqueo, pantalla bloqueo, saltar, evitar"</string>
<string name="locked_work_profile_notification_title" msgid="279367321791301499">"Con el perfil de trabajo bloqueado"</string>
<string name="lock_screen_notifs_title" msgid="3412042692317304449">"Notificaciones en pantalla de bloqueo"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Nunca"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificaciones del dispositivo y de aplicaciones"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Controla qué aplicaciones y dispositivos pueden leer notificaciones"</string>
@@ -4300,7 +4300,7 @@
<string name="switch_off_text" msgid="1315547447393646667">"Desactivado"</string>
<string name="nfc_setting_on" msgid="7701896496026725772">"Activado"</string>
<string name="nfc_setting_off" msgid="7142103438532732309">"Desactivado"</string>
- <string name="screen_pinning_switch_on_text" msgid="6971386830247542552">"Activada"</string>
+ <string name="screen_pinning_switch_on_text" msgid="6971386830247542552">"Activado"</string>
<string name="screen_pinning_switch_off_text" msgid="5032105155623003875">"Desactivado"</string>
<string name="screen_pinning_title" msgid="6927227272780208966">"Fijar aplicaciones"</string>
<string name="app_pinning_intro" msgid="6409063008733004245">"Fijar una aplicación te permite mantenerla visible hasta que dejes de fijarla. Esta función se puede usar para, por ejemplo, dejar que alguien de confianza juegue a un juego específico."</string>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 05f081f..7da5533 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Kuupäeva ja kellaaja määramine"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Määra kuupäev, kellaaeg, ajavöönd ja vormingud"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Kellaaja automaatne määramine"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Ajavööndi automaatne määramine"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Määra automaatselt"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Kasuta lokaadi vaikeseadet"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-tunnine vorming"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-tunnise vormingu kasutamine"</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Asukohateenused"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Asukohateenused"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Asukohateenused töö jaoks"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Kasuta ajavööndi määramiseks asukohta"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Kasuta asukohta"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Seadme asukoht on vajalik"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Selleks et ajavöönd kasutaks teie asukohta, lülitage sisse asukoht ja värskendage ajavööndi seadeid"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Asukohaseaded"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Asukohapõhine ajavööndi tuvastamine on keelatud"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Asukohapõhine ajavööndi tuvastamine pole toetatud"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Asukohapõhise ajavööndi tuvastamise muudatused pole lubatud"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Ajavööndi määramiseks võidakse kasutada asukohta"</string>
<string name="location_network_based" msgid="5247042890080021887">"WiFi/mobiilsidevõrgu asukoht"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Lubage rakendustel kasutada Google\'i asukohateenust, et asukohta kiiremini määrata. Kogutud anonüümsed asukohaandmed saadetakse Google\'ile."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"WiFi järgi määratud asukoht"</string>
@@ -1944,6 +1945,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2925,6 +2928,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>
@@ -3014,6 +3018,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>
@@ -3691,8 +3698,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, täiustatud helistamine, 5g-kõned"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"lisa keel, keele lisamine"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"teksti suurus, suur tekst, suur font, halb nähtavus, teksti suuremaks muutmine, fondi suurendaja, fondi suurendamine"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"alati sisse lülitatud ekraan, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Vaikeheli"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Helina ja märguannete helitugevus on <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Helitugevus, vibreerimine, režiim Mitte segada"</string>
@@ -4003,14 +4009,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Mitte kunagi"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Seadmete ja rakenduste märguanded"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Hallake, millised rakendused ja seadmed saavad märguandeid lugeda"</string>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 062fce0..2dbcf90 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Zehaztu data eta ordua"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Ezarri data, ordua, ordu-zona eta formatuak"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Ezarri ordua automatikoki"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Ezarri ordu-zona automatikoki"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Ezarri automatikoki"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Erabili lurraldeko ezarpen lehenetsiak"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 orduko formatua"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Erabili 24 orduko formatua"</string>
@@ -340,7 +340,7 @@
<string name="safety_center_summary" msgid="3554867379951053869">"Aplikazioen segurtasuna, gailuaren blokeoa, baimenak"</string>
<string name="security_settings_face_preference_summary" msgid="6675126437396914838">"Gehitu da aurpegia"</string>
<string name="security_settings_face_preference_summary_none" msgid="5952752252122581846">"Sakatu aurpegi bidez desblokeatzeko eginbidea konfiguratzeko"</string>
- <string name="security_settings_face_preference_title" msgid="2126625155005348417">"Aurpegi bidez desblokeatzeko eginbidea"</string>
+ <string name="security_settings_face_preference_title" msgid="2126625155005348417">"Aurpegi bidez desblokeatzea"</string>
<string name="security_settings_face_profile_preference_title" msgid="7519527436266375005">"Aurpegi bidez desblokeatzeko eginbidea lanerako"</string>
<string name="security_settings_face_enroll_education_title" msgid="6448806884597691208">"Aurpegi bidez desblokeatzeko eginbidea konfiguratzeko argibideak"</string>
<string name="security_settings_face_enroll_education_title_accessibility" msgid="3701874093226957891">"Konfiguratu aurpegi bidez desblokeatzeko eginbidea"</string>
@@ -476,7 +476,7 @@
<string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Erabili hatz-marka tableta desblokeatzeko edo zeu zarela egiaztatzeko, hala nola aplikazioetan saioa hastean"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Erabili hatz-marka gailua blokeatzeko edo zeu zarela egiaztatzeko, hala nola aplikazioetan saioa hastean"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Erabili hatz-marka telefonoa desblokeatzeko edo zeu zarela egiaztatzeko, hala nola aplikazioetan saioa hastean"</string>
- <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Aurpegi eta hatz-marka bidez desblokeatzeko eginbidea"</string>
+ <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Aurpegi eta hatz-marka bidez desblokeatzea"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Sakatu konfiguratzeko"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Aurpegia eta hatz-markak gehitu dira"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Aurpegia eta hatz-marka gehitu dira"</string>
@@ -736,7 +736,7 @@
<string name="unlock_change_lock_pattern_title" msgid="8234523589333929193">"Aldatu desblokeatzeko eredua"</string>
<string name="unlock_change_lock_pin_title" msgid="2324077520816477479">"Aldatu desblokeo PINa"</string>
<string name="unlock_change_lock_password_title" msgid="873517913969091074">"Aldatu desblokeatzeko pasahitza"</string>
- <string name="unlock_footer_high_complexity_requested" msgid="4471274783909915352">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak PIN edo pasahitz seguru bat erabiltzea gomendatzen du, eta baliteke ez funtzionatzea behar bezala halakorik gabe"</string>
+ <string name="unlock_footer_high_complexity_requested" msgid="4471274783909915352">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak PIN edo pasahitz konplexu bat erabiltzea gomendatzen du, eta baliteke ez funtzionatzea behar bezala halakorik gabe"</string>
<string name="unlock_footer_medium_complexity_requested" msgid="5515870066751600640">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak beste PIN edo pasahitz bat erabiltzea gomendatzen du, eta baliteke ez funtzionatzea behar bezala halakorik gabe"</string>
<string name="unlock_footer_low_complexity_requested" msgid="2517656037576567971">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak beste eredu, PIN edo pasahitz bat erabiltzea gomendatzen du, eta baliteke ez funtzionatzea behar bezala halakorik gabe"</string>
<string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak pantailaren beste blokeo bat erabiltzea gomendatzen du"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Kokapen-zerbitzuak"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Kokapen-zerbitzuak"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Lanerako kokapen-zerbitzuak"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Erabili kokapena ordu-zona ezartzeko"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Erabili kokapena"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Gailuaren kokapena behar da"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Ordu-zona kokapenaren arabera ezartzeko, aktibatu kokapena eta eguneratu ordu-zonaren ezarpenak"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Kokapen-ezarpenak"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Kokapeneko ordu-zona hautemateko aukera desgaituta dago"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Ez da onartzen kokapeneko ordu-zona hautemateko aukera erabiltzea"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Ez da onartzen aldaketarik egitea kokapeneko ordu-zona hautemateko aukeretan"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Baliteke kokapena erabiltzea ordu-zona ezartzeko"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi eta sare mugikor bidezko kokapena"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Utzi aplikazioei zure kokapena bizkorrago zehazteko Google-ren kokapen-zerbitzua erabiltzen. Kokapen-datu anonimoak bildu eta Google-ra bidaliko dira."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Kokapena Wi-Fi bidez zehaztuta"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2041,9 +2044,9 @@
</plurals>
<string name="forgot_password_title" msgid="3967873480875239885">"Galdetu IKT saileko administratzaileari"</string>
<string name="forgot_password_text" msgid="2583194470767613163">"PINa, eredua edo pasahitza berrezartzen lagunduko dizu"</string>
- <string name="install_all_warning" product="tablet" msgid="7010749217925069520">"Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Iturburu honetako aplikazioak instalatzen badituzu, onartu egingo duzu haiek erabiltzeagatik tabletari gerta dakizkiokeen kalteen edo datu-galeren erantzulea zeu zarela."</string>
+ <string name="install_all_warning" product="tablet" msgid="7010749217925069520">"Baliteke tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Iturburu honetako aplikazioak instalatzen badituzu, onartu egingo duzu haiek erabiltzeagatik tabletari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu zarela."</string>
<string name="install_all_warning" product="default" msgid="652516435709047343">"Baliteke telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Iturburu honetako aplikazioak instalatzen badituzu, onartu egingo duzu zeu zarela haiek erabiltzeagatik telefonoari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea."</string>
- <string name="install_all_warning" product="device" msgid="2348262609815354500">"Gailuak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Iturburu honetako aplikazioak instalatzen badituzu, onartu egingo duzu haiek erabiltzeagatik gailuari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu izango zarela."</string>
+ <string name="install_all_warning" product="device" msgid="2348262609815354500">"Baliteke gailuak eta datu pertsonalek aplikazio ezezagunen erasoak jasatea. Iturburu honetako aplikazioak instalatzen badituzu, onartu egingo duzu haiek erabiltzeagatik gailuari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu izango zarela."</string>
<string name="advanced_settings" msgid="2368905204839169094">"Ezarpen aurreratuak"</string>
<string name="advanced_settings_summary" msgid="1823765348195530035">"Gaitu ezarpenen aukera gehiago"</string>
<string name="application_info_label" msgid="1015706497694165866">"Aplikazioen informazioa"</string>
@@ -2860,7 +2863,7 @@
<string name="usage_type_flashlight" msgid="5629235220169383309">"Flasha"</string>
<string name="usage_type_on_time" msgid="104642441471272535">"Aktibatuta"</string>
<string name="usage_type_no_coverage" msgid="1385712176630900103">"Seinalerik gabeko denbora"</string>
- <string name="usage_type_total_battery_capacity" msgid="3878234027503885998">"Bateriaren edukiera guztira"</string>
+ <string name="usage_type_total_battery_capacity" msgid="3878234027503885998">"Bateriaren ahalmena, guztira"</string>
<string name="usage_type_computed_power" msgid="5191902025833668752">"Kalkulatutako energia-erabilera"</string>
<string name="usage_type_actual_power" msgid="1221358930299037926">"Hautemandako energia-erabilera"</string>
<string name="battery_action_stop" msgid="6998228610098034316">"Behartu gelditzera"</string>
@@ -2877,7 +2880,7 @@
<string name="battery_desc_flashlight" msgid="6694895513133361404">"Linternak erabilitako bateria"</string>
<string name="battery_desc_camera" msgid="6152712271731518018">"Kamerak erabilitako bateria"</string>
<string name="battery_desc_display" msgid="7175017688954602685">"Pantailak eta hondoko argiak erabilitako bateria"</string>
- <string name="battery_sugg_display" msgid="3102137296547788111">"Murriztu pantailaren distira edota pantailaren denbora-muga"</string>
+ <string name="battery_sugg_display" msgid="3102137296547788111">"Murriztu pantailaren distira eta/edo pantailaren denbora-muga"</string>
<string name="battery_desc_wifi" msgid="5276669172548928768">"Wi-Fiak erabilitako energia"</string>
<string name="battery_sugg_wifi" msgid="359757575108350109">"Desaktibatu Wi‑Fi konexioa erabiltzen ari ez denean edo erabilgarri ez dagoenean."</string>
<string name="battery_desc_bluetooth" msgid="2237947137783306282">"Bluetooth bidezko konexioak erabilitako bateria"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, deitzeko aukera aurreratuak, 5g bidezko deiak"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"gehitu hizkuntza, gehitu hizkuntza bat"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"testuaren tamaina, letra-tipo handia, letra handia, testu handia, ikusmen txarra, handitu testua, testua handitzea, letra handitzea, letra handiagoa"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"pantaila aktibo etengabea, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Soinu lehenetsia"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Deien tonuaren eta jakinarazpenen bolumena: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Bolumena, dardara, ez molestatzeko modua"</string>
@@ -3989,7 +3995,7 @@
<string name="notification_silence_title" msgid="4085829874452944989">"Isila"</string>
<string name="notification_alert_title" msgid="1632401211722199217">"Lehenetsia"</string>
<string name="allow_interruption" msgid="5237201780159482716">"Baimendu etenaldiak"</string>
- <string name="allow_interruption_summary" msgid="9044131663518112543">"Utzi aplikazioari soinuak edo dardara egiten, edota pantailan jakinarazpenak erakusten"</string>
+ <string name="allow_interruption_summary" msgid="9044131663518112543">"Utzi aplikazioari soinuak edo dardara egiten, eta/edo pantailan jakinarazpenak erakusten"</string>
<string name="notification_priority_title" msgid="5554834239080425229">"Lehentasunezkoa"</string>
<string name="notification_channel_summary_priority" msgid="7225362351439076913">"Burbuila gisa agertzen da elkarrizketen atalaren goialdean, eta profileko argazkia bistaratzen du pantaila blokeatuta dagoenean"</string>
<string name="convo_not_supported_summary" msgid="4285471045268268048">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak ez ditu onartzen elkarrizketetarako eginbide gehienak. Ezin dituzu ezarri elkarrizketak lehentasunezko gisa, eta ez dira agertuko burbuila gainerakor gisa elkarrizketen atalaren goialdean."</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Inoiz ez"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Gailu eta aplikazioen jakinarazpenak"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Kontrolatu jakinarazpenak irakur ditzaketen aplikazioak eta gailuak"</string>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 2540ab5..d6328f0 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -142,13 +142,13 @@
<string name="bluetooth_pref_summary" product="device" msgid="2192027516577675587">"به دستگاهتان اجازه دهید با دستگاههای بلوتوث اطراف مرتبط شود"</string>
<string name="bluetooth_pref_summary" product="default" msgid="768958961865499804">"به تلفنتان اجازه دهید با دستگاههای بلوتوث اطراف مرتبط شود"</string>
<string name="bluetooth_disable_a2dp_hw_offload" msgid="5942913792817797541">"غیرفعال کردن انتقال داده ازطریق سختافزار بلوتوث A2DP"</string>
- <string name="bluetooth_disable_le_audio_hw_offload" msgid="4656853795514691257">"غیرفعال کردن تخلیه سختافزار صدای LE بلوتوث"</string>
+ <string name="bluetooth_disable_le_audio_hw_offload" msgid="4656853795514691257">"غیرفعال کردن تخلیه سختافزار «صدای کممصرف بلوتوث»"</string>
<string name="bluetooth_disable_hw_offload_dialog_title" msgid="6001142380445276918">"دستگاه بازراهاندازی شود؟"</string>
<string name="bluetooth_disable_hw_offload_dialog_message" msgid="1524373895333698779">"برای تغییر این تنظیم، باید دستگاه را بازراهاندازی کنید."</string>
<string name="bluetooth_disable_hw_offload_dialog_confirm" msgid="5594859658551707592">"بازراهاندازی"</string>
<string name="bluetooth_disable_hw_offload_dialog_cancel" msgid="3663690305043973720">"لغو"</string>
- <string name="bluetooth_enable_leaudio" msgid="1245004820628723136">"فعال کردن صدای LE بلوتوث"</string>
- <string name="bluetooth_enable_leaudio_summary" msgid="8066117764037123479">"اگر دستگاه از قابلیتهای سختافزار صدای LE پشتیبانی کند، ویژگی صدای LE بلوتوث را فعال میکند."</string>
+ <string name="bluetooth_enable_leaudio" msgid="1245004820628723136">"فعال کردن «صدای کممصرف بلوتوث»"</string>
+ <string name="bluetooth_enable_leaudio_summary" msgid="8066117764037123479">"اگر دستگاه از ویژگیهای سختافزار «صدای کممصرف» پشتیبانی کند، ویژگی «صدای کممصرف بلوتوث» را فعال میکند."</string>
<string name="connected_device_media_device_title" msgid="3783388247594566734">"دستگاههای ذخیرهسازی"</string>
<string name="connected_device_call_device_title" msgid="88732390601723608">"دستگاههای برقراری تماس"</string>
<string name="connected_device_other_device_title" msgid="4652120430615729193">"دستگاههای دیگر"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"تنظیم تاریخ و زمان"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"تنظیم تاریخ، ساعت، منطقهٔ زمانی و قالبها"</string>
<string name="date_time_auto" msgid="4239202185055225869">"تنظیم خودکار زمان"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"تنظیم خودکار منطقه زمانی"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"تنظیم خودکار"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"استفاده از پیشفرض منطقه زبانی"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"قالب ۲۴ ساعته"</string>
<string name="date_time_24hour" msgid="286679379105653406">"استفاده از قالب ۲۴ ساعته"</string>
@@ -332,11 +332,11 @@
<string name="lockscreen_settings_what_to_show_category" msgid="9205490627927741254">"چه چیزی نشان داده شود"</string>
<string name="security_settings_summary" msgid="1627059516127354233">"تنظیم مکان من، قفل صفحه، قفل سیم کارت، قفل حافظه اطلاعات کاربری"</string>
<string name="cdma_security_settings_summary" msgid="2455517905101186330">"تنظیم مکان من، بازگشایی قفل صفحه، قفل حافظه اطلاعات کاربری"</string>
- <string name="security_passwords_title" msgid="4154420930973818581">"حریمخصوصی"</string>
+ <string name="security_passwords_title" msgid="4154420930973818581">"حریم خصوصی"</string>
<string name="disabled_by_administrator_summary" msgid="5424846182313851124">"در دسترس نیست"</string>
<string name="security_status_title" msgid="6958004275337618656">"وضعیت امنیتی"</string>
<string name="security_dashboard_summary" msgid="7571035662779425918">"قفل صفحه، «یافتن دستگاهم»، امنیت برنامه"</string>
- <string name="safety_center_title" msgid="7732397372178774777">"امنیت و حریمخصوصی"</string>
+ <string name="safety_center_title" msgid="7732397372178774777">"امنیت و حریم خصوصی"</string>
<string name="safety_center_summary" msgid="3554867379951053869">"امنیت برنامه، قفل دستگاه، اجازهها"</string>
<string name="security_settings_face_preference_summary" msgid="6675126437396914838">"چهره افزوده شده است"</string>
<string name="security_settings_face_preference_summary_none" msgid="5952752252122581846">"برای راهاندازی چهره، ضربه بزنید"</string>
@@ -603,7 +603,7 @@
<string name="security_advanced_settings_work_profile_settings_summary" msgid="7295451997961973175">"قفل نمایه کاری، رمزگذاری، و غیره"</string>
<string name="security_advanced_settings_no_work_profile_settings_summary" msgid="345336447137417638">"رمزگذاری، اطلاعات کاربری، و غیره"</string>
<string name="security_advanced_settings_keywords" msgid="5294945170370974974">"امنیت، تنظیمات امنیتی بیشتر، تنظیمات بیشتر، تنظیمات امنیتی پیشرفته"</string>
- <string name="privacy_advanced_settings" msgid="8828215456566937719">"تنظیمات حریمخصوصی بیشتر"</string>
+ <string name="privacy_advanced_settings" msgid="8828215456566937719">"تنظیمات حریم خصوصی بیشتر"</string>
<string name="privacy_advanced_settings_summary" msgid="2927281894237561935">"تکمیل خودکار، کنترلهای فعالیت، و غیره"</string>
<string name="fingerprint_add_max" msgid="8639321019299347447">"میتوانید حداکثر <xliff:g id="COUNT">%d</xliff:g> اثرانگشت اضافه کنید"</string>
<string name="fingerprint_intro_error_max" msgid="4431784409732135610">"حداکثر تعداد اثرانگشت را اضافه کردهاید"</string>
@@ -665,7 +665,7 @@
<string name="unlock_set_unlock_pin_summary" msgid="1961863114590024945">"امنیت متوسط به بالا"</string>
<string name="unlock_set_unlock_password_title" msgid="2559842616268607041">"گذرواژه"</string>
<string name="unlock_set_unlock_password_summary" msgid="7647435233968707432">"امنیت بالا"</string>
- <string name="unlock_set_do_later_title" msgid="6565575303676064364">"اکنون نه"</string>
+ <string name="unlock_set_do_later_title" msgid="6565575303676064364">"حالا نه"</string>
<string name="current_screen_lock" msgid="1367883977261098017">"قفل صفحه فعلی"</string>
<string name="fingerprint_unlock_set_unlock_pattern" msgid="4492334416059646032">"اثر انگشت + الگو"</string>
<string name="fingerprint_unlock_set_unlock_pin" msgid="4724451168139460493">"اثر انگشت + پین"</string>
@@ -739,7 +739,7 @@
<string name="unlock_footer_high_complexity_requested" msgid="4471274783909915352">"<xliff:g id="APP_NAME">%1$s</xliff:g> توصیه میکند از پین یا گذرواژهای قوی استفاده کنید و ممکن است درصورت عدم ارائه یکی از این موارد کار نکند"</string>
<string name="unlock_footer_medium_complexity_requested" msgid="5515870066751600640">"<xliff:g id="APP_NAME">%1$s</xliff:g> توصیه میکند از پین یا گذرواژه جدیدی استفاده کنید و ممکن است درصورت عدم ارائه یکی از این موارد کار نکند"</string>
<string name="unlock_footer_low_complexity_requested" msgid="2517656037576567971">"<xliff:g id="APP_NAME">%1$s</xliff:g> توصیه میکند از الگو، پین یا گذرواژه جدیدی استفاده کنید و ممکن است درصورت عدم ارائه یکی از این موارد کار نکند"</string>
- <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> توصیه میکند از قفل صفحه جدیدی استفاده کنید"</string>
+ <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> توصیه میکند از قفل صفحه جدیدی استفاده کنید"</string>
<string name="lock_failed_attempts_before_wipe" msgid="6874652886647631418">"دوباره امتحان کنید. تلاش <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g> از <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="7450322567217745999">"دادههایتان حذف خواهد شد"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="5816668400104558952">"اگر در تلاش بعدی الگوی نادرستی وارد کنید، دادههای این دستگاه حذف خواهد شد"</string>
@@ -1050,7 +1050,7 @@
<string name="wifi_ap_5G" msgid="3493942667238551207">"۵٫۰ گیگاهرتز"</string>
<string name="wifi_ap_band_select_one" msgid="5221193733812493435">"حداقل یک باند برای نقطه اتصال Wi‑Fi انتخاب کنید:"</string>
<string name="wifi_ip_settings" msgid="6420498748726599133">"تنظیمات IP"</string>
- <string name="wifi_privacy_settings" msgid="3283946009000725698">"حریمخصوصی"</string>
+ <string name="wifi_privacy_settings" msgid="3283946009000725698">"حریم خصوصی"</string>
<string name="wifi_subscription" msgid="4432423938285430113">"اشتراک"</string>
<string name="wifi_subscription_summary" msgid="18802471063384598">"مشاهده یا تغییر اشتراک"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="8502084692297249372">"MAC تصادفی"</string>
@@ -1469,7 +1469,7 @@
<string name="sim_lock_settings" msgid="4493069398250139205">"تنظیمات قفل سیم کارت"</string>
<string name="sim_lock_settings_category" msgid="4280307997492851625">"قفل سیم کارت"</string>
<string name="sim_lock_settings_summary_off" msgid="4570941250786847095">"خاموش"</string>
- <string name="sim_lock_settings_summary_on" msgid="1562184566830887925">"قفل شد"</string>
+ <string name="sim_lock_settings_summary_on" msgid="1562184566830887925">"قفلشده"</string>
<string name="sim_lock_settings_title" msgid="1401619059761012696">"قفل سیم کارت"</string>
<string name="sim_pin_toggle" msgid="98754920202404425">"قفل کردن سیم کارت"</string>
<string name="sim_lock_on" product="tablet" msgid="5857965768682972363">"درخواست پین برای استفاده از رایانهٔ لوحی"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"خدمات مکان"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"خدمات مکان"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"خدمات مکان برای کار"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"استفاده از مکان برای تنظیم منطقه زمانی"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"استفاده از مکان"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"مکان دستگاه لازم است"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"برای تنظیم منطقه زمانی بااستفاده از مکان خود، مکان را روشن کنید و سپس تنظیمات منطقه زمانی را بهروزرسانی کنید"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"تنظیمات مکان"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"تشخیص منطقه زمانی بااستفاده از مکان غیرفعال است"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"تشخیص منطقه زمانی بااستفاده از مکان پشتیبانی نمیشود"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"تغییر تشخیص منطقه زمانی بااستفاده از مکان مجاز نیست"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"ممکن است از مکان برای تنظیم منطقه زمانی استفاده شود"</string>
<string name="location_network_based" msgid="5247042890080021887">"مکان شبکه تلفن همراه و Wi-Fi"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"به برنامهها اجازه داده شود با سرویس مکان Google مکانتان را سریعتر تخمین بزنند. دادههای مکان ناشناس جمعآوری شده و به Google ارسال خواهد شد."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"موقعیت مکانی تعیین شده توسط Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3677,8 +3684,8 @@
<string name="keywords_hotspot_tethering" msgid="3688439689671232627">"اشتراکگذاری اینترنت با USB، اتصال اینترنت به بلوتوث تلفن همراه، نقطه اتصال Wi-Fi"</string>
<string name="keywords_accessibility_vibration_primary_switch" msgid="730692154347231253">"لمس، لرزیدن، لرزش"</string>
<string name="keywords_touch_vibration" msgid="1125291201902251273">"لمسی، لرزش، صفحه نمایش، حساسیت"</string>
- <string name="keywords_ring_vibration" msgid="1736301626537417541">"لمس، لرزش، تلفن، تماس، حساسیت، به صدا در آوردن زنگ"</string>
- <string name="keywords_ramping_ringer_vibration" msgid="3678966746742257366">"لمس، لرزش، تلفن، تماس، به صدا در آوردن زنگ، بهتدریج"</string>
+ <string name="keywords_ring_vibration" msgid="1736301626537417541">"لمس، لرزش، تلفن، تماس، حساسیت، زنگ"</string>
+ <string name="keywords_ramping_ringer_vibration" msgid="3678966746742257366">"لمس، لرزش، تلفن، تماس، زنگ، بهتدریج"</string>
<string name="keywords_notification_vibration" msgid="2620799301276142183">"لمس، لرزش، حساسیت، اعلان"</string>
<string name="keywords_alarm_vibration" msgid="4833220371621521817">"لمس، لرزش، حساسیت، هشدار"</string>
<string name="keywords_media_vibration" msgid="723896490102792327">"لمس، لرزش، حساسیت، رسانه"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g، vonr، تماس پیشرفته، تماس نسل پنجم شبکه تلفن همراه"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"افزودن زبان، افزودن یک زبان"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"اندازه نوشتار، چاپ درشت، قلم بزرگ، نوشتار بزرگ، کمبینا، بزرگ کردن نوشتار، بزرگکننده قلم، بزرگ کردن قلم"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"نمایشگر همیشه روشن، AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"صدای پیشفرض"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"میزان صدای زنگ و اعلان <xliff:g id="PERCENTAGE">%1$s</xliff:g> است"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"میزان صدا، لرزش، «مزاحم نشوید»"</string>
@@ -3918,7 +3924,7 @@
<string name="gentle_notifications_display_summary_shade_status_lock" msgid="2068738866725616212">"در کشوی اعلانهای پایینپر، نوار وضعیت و صفحه قفل نشان داده میشود"</string>
<string name="silent_notifications_status_bar" msgid="6113307620588767516">"پنهان کردن اعلانهای ساکت در نوار وضعیت"</string>
<string name="notification_pulse_title" msgid="8013178454646671529">"نور چشمکزن"</string>
- <string name="lock_screen_notifications_title" msgid="2876323153692406203">"حریمخصوصی"</string>
+ <string name="lock_screen_notifications_title" msgid="2876323153692406203">"حریم خصوصی"</string>
<string name="lockscreen_bypass_title" msgid="6519964196744088573">"رد کردن صفحه قفل"</string>
<string name="lockscreen_bypass_summary" msgid="464277506200346748">"پساز قفلگشایی، مستقیم به آخرین صفحه استفادهشده میروید"</string>
<string name="keywords_lockscreen_bypass" msgid="41035425468915498">"صفحه قفل، صفحهقفل، رد کردن، نادیده گرفتن"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"هرگز"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"اعلانهای دستگاه و برنامه"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"کنترل برنامهها و دستگاههایی که میتوانند اعلانها را بخوانند"</string>
@@ -4047,7 +4047,7 @@
<string name="notif_type_silent" msgid="6273951794420331010">"بیصدا"</string>
<string name="notif_type_silent_summary" msgid="7820923063105060844">"اعلانهایی که همیشه بیصدا هستند و نمیلرزند"</string>
<string name="notification_listener_allowed" msgid="5536962633536318551">"مجاز"</string>
- <string name="notification_listener_not_allowed" msgid="3352962779597846538">"مجاز نیست"</string>
+ <string name="notification_listener_not_allowed" msgid="3352962779597846538">"اجازه ندادن"</string>
<string name="notif_listener_excluded_app_title" msgid="6679316209330349730">"مشاهده همه برنامهها"</string>
<string name="notif_listener_excluded_app_summary" msgid="2914567678047195396">"تغییر دادن تنظیمات هر برنامهای که اعلان ارسال میکند"</string>
<string name="notif_listener_excluded_app_screen_title" msgid="8636196723227432994">"برنامههایی که در دستگاه نشان داده میشوند"</string>
@@ -4075,7 +4075,7 @@
<string name="interact_across_profiles_switch_disabled" msgid="4312196170211463988">"متصل کردن این برنامهها"</string>
<string name="interact_across_profiles_summary_1" msgid="6093976896137600231">"برنامههای متصل از اجازههای مشترکی استفاده میکنند و میتوانند به دادههای یکدیگر دسترسی پیدا کنند."</string>
<string name="interact_across_profiles_summary_2" msgid="505748305453633885">"برای اینکه دادههای شخصی با سرپرست فناوری اطلاعات همرسانی نشود، تنها درصورتی برنامهها را متصل کنید که به آنها اعتماد داشته باشید."</string>
- <string name="interact_across_profiles_summary_3" msgid="444428694843299854">"هرزمان خواستید میتوانید اتصال برنامهها را در تنظیمات حریمخصوصی دستگاه قطع کنید."</string>
+ <string name="interact_across_profiles_summary_3" msgid="444428694843299854">"هرزمان خواستید میتوانید اتصال برنامهها را در تنظیمات حریم خصوصی دستگاه قطع کنید."</string>
<string name="interact_across_profiles_consent_dialog_title" msgid="8530621211216508681">"به برنامه کاری <xliff:g id="NAME">%1$s</xliff:g> برای دسترسی به دادههای شخصیتان اعتماد دارید؟"</string>
<string name="interact_across_profiles_consent_dialog_summary" msgid="3949870271562055048">"تنها درصورتی برنامهها را متصل کنید که به آنها اعتماد دارید که دادههای شخصی را با سرپرست فناوری اطلاعاتتان همرسانی نمیکنند."</string>
<string name="interact_across_profiles_consent_dialog_app_data_title" msgid="8436318876213958940">"دادههای برنامه"</string>
@@ -4408,7 +4408,7 @@
<string name="runtime_permissions_summary_no_permissions_granted" msgid="7456745929035665029">"اجازهای داده نشده"</string>
<string name="runtime_permissions_summary_no_permissions_requested" msgid="7174876170116073356">"اجازهای درخواست نشده"</string>
<string name="runtime_permissions_summary_control_app_access" msgid="3744591396348990500">"کنترل دسترسی برنامه به دادههای شما"</string>
- <string name="permissions_usage_title" msgid="2942741460679049132">"داشبورد حریمخصوصی"</string>
+ <string name="permissions_usage_title" msgid="2942741460679049132">"داشبورد حریم خصوصی"</string>
<string name="permissions_usage_summary" msgid="6784310472062516454">"نمایش برنامههایی که اخیراً از اجازهها استفاده کردهاند"</string>
<string name="unused_apps" msgid="4566272194756830656">"برنامههای استفادهنشده"</string>
<plurals name="unused_apps_summary" formatted="false" msgid="3827583582750975783">
@@ -5459,7 +5459,7 @@
<string name="enable_non_resizable_multi_window_summary" msgid="3275763753261901999">"مجاز کردن برنامههای با اندازه غیرقابلتغییر برای قرارگیری در چندپنجره"</string>
<string name="hwui_force_dark_title" msgid="4256904905631994219">"لغو اجبار حالت تاریک"</string>
<string name="hwui_force_dark_summary" msgid="6515748781487952769">"ویژگی اجبار حالت تاریک را برای همیشه روشن بودن لغو میکند"</string>
- <string name="privacy_dashboard_title" msgid="6845403825611829558">"حریمخصوصی"</string>
+ <string name="privacy_dashboard_title" msgid="6845403825611829558">"حریم خصوصی"</string>
<string name="privacy_dashboard_summary" msgid="5775090172422786808">"مجوزها، فعالیت حساب، دادههای شخصی"</string>
<string name="privacy_controls_title" msgid="1383047169455206604">"کنترلها"</string>
<string name="contextual_card_dismiss_remove" msgid="8636557343011606722">"حذف"</string>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 457fb5b..4621ddf 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Aseta päivämäärä ja aika"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Aseta päivämäärä, aika, aikavyöhyke ja muodot"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Aseta aika automaattisesti"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Aseta aikavyöhyke automaattisesti"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Aseta automaattisesti"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Käytä paikallista oletusasetusta"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 tunnin kello"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Käytä 24-tuntista kelloa"</string>
@@ -1293,7 +1293,7 @@
<string name="volume_alarm_mute" msgid="3730895630530980760">"Mykistä herätykset"</string>
<string name="dock_settings" msgid="4654404127402812514">"Telakointi"</string>
<string name="dock_settings_title" msgid="1276956575555480214">"Telakointiasetukset"</string>
- <string name="dock_audio_settings_title" msgid="8294821925086965934">"Ääni"</string>
+ <string name="dock_audio_settings_title" msgid="8294821925086965934">"Audio"</string>
<string name="dock_audio_summary_desk" msgid="4158593887711452737">"Yhdistetyn työpöytätelakan asetukset"</string>
<string name="dock_audio_summary_car" msgid="292911654994476080">"Yhdistetyn autotelakan asetukset"</string>
<string name="dock_audio_summary_none" product="tablet" msgid="7758416095500202500">"Tablet-laitetta ei ole telakoitu"</string>
@@ -1795,7 +1795,7 @@
<string name="main_clear_final_desc_esim" msgid="440406836793824969">"Kaikki henkilökohtaiset tietosi poistetaan, mukaan lukien ladatut sovellukset ja SIM-kortit. Toimintoa ei voi kumota."</string>
<string name="main_clear_confirm_title" msgid="6577071819657853713">"Poistetaanko kaikki data?"</string>
<string name="main_clear_not_available" msgid="3433795327146684827">"Tämä käyttäjä ei voi palauttaa tehdasasetuksia"</string>
- <string name="main_clear_progress_title" msgid="7239741132015617719">"Poistetaan"</string>
+ <string name="main_clear_progress_title" msgid="7239741132015617719">"Tyhjennetään"</string>
<string name="main_clear_progress_text" msgid="4636695115176327972">"Odota…"</string>
<string name="call_settings_title" msgid="2531072044177194164">"Puheluasetukset"</string>
<string name="call_settings_summary" msgid="8244293779053318053">"Ota käyttöön puhelinvastaaja, soitonsiirrot, koputuspalvelu, soittajan tunnus"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Sijaintipalvelut"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Sijaintipalvelut"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Sijaintipalvelut työkäyttöön"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Valitse aikavyöhyke sijainnin perusteella"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Käytä sijaintia"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Laitteen sijainti tarvitaan"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Jos haluat asettaa aikavyöhykkeen käyttämällä sijaintiasi, laita sijainti päälle ja päivitä sitten aikavyöhykeasetukset"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Sijaintiasetukset"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Sijainnin aikavyöhykkeen tunnistus on poistettu käytöstä"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Sijainnin aikavyöhykkeen tunnistusta ei tueta"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Sijainnin aikavyöhykkeen tunnistukseen ei voi tehdä muutoksia"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Sijaintia voidaan käyttää aikavyöhykkeen asettamiseen"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi- ja mobiiliverkkosijainti"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Anna sovellusten arvioida sijaintisi Googlen sijaintipalvelulla. Anonyymejä sijaintitietoja kerätään ja lähetetään Googlelle."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Sijainti on määritetty Wi-Fi-yhteyden perusteella"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2854,7 +2857,7 @@
<string name="usage_type_radio_active" msgid="1876069445855950097">"Mobiiliradio aktiivinen"</string>
<string name="usage_type_data_wifi_send" msgid="6154038607322769558">"Lähetetyt Wi-Fi-paketit"</string>
<string name="usage_type_data_wifi_recv" msgid="4821128213012023100">"Vastaanotetut Wi-Fi-paketit"</string>
- <string name="usage_type_audio" msgid="1100651355357912864">"Ääni"</string>
+ <string name="usage_type_audio" msgid="1100651355357912864">"Audio"</string>
<string name="usage_type_video" msgid="1068481638906679035">"Video"</string>
<string name="usage_type_camera" msgid="3999579307204257822">"Kamera"</string>
<string name="usage_type_flashlight" msgid="5629235220169383309">"Taskulamppu"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, puhelujen lisävaihtoehdot, 5g-puhelut"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"lisää kieli"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tekstin koko, suurikokoinen teksti, suuri fontti, suuri teksti, heikko näkö, suurenna tekstiä, fontin suurentaja, fontin suurennus"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"aina päällä oleva näyttö"</string>
<string name="default_sound" msgid="6604374495015245195">"Oletusääni"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Soittoäänen ja ilmoitusten äänenvoimakkuus <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Äänenvoimakkuus, värinä, Älä häiritse"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Ei koskaan"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Laite- ja sovellusilmoitukset"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Valitse, mitkä sovellukset ja laitteet voivat lukea ilmoituksia"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 274a20d..56748c8 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Régler la date et l\'heure"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Configurer la date, l\'heure, le fuseau horaire et les formats"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Définir l\'heure automatiquement"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Définir le fuseau horaire automatiquement"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Définir automatiquement"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Utiliser les paramètres régionaux par défaut"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Format 24 heures"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Utiliser le format 24 h"</string>
@@ -476,7 +476,7 @@
<string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Utilisez votre empreinte digitale pour déverrouiller votre tablette ou vérifier que c\'est bien vous"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Utilisez votre empreinte digitale pour déverrouiller votre appareil ou vérifier que c\'est bien vous"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Utilisez votre empreinte digitale pour déverrouiller votre téléphone ou vérifier que c\'est bien vous"</string>
- <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Déverrouillage par reconnaissance faciale et empreinte digitale"</string>
+ <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Déverrouillage par recon. faciale et empreinte digitale"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Touchez pour configurer"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Empreintes digitales et visage ajoutés"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Empreinte digitale et visage ajoutés"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Services de localisation"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Services de localisation"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Services de localisation pour le travail"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Utiliser la position pour définir le fuseau horaire"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Utiliser ma position"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"La position de l\'appareil est nécessaire"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Pour définir le fuseau horaire à l\'aide de votre position, activez la localisation et mettez à jour les paramètres de fuseau horaire"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Paramètres de localisation"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"La détection du fuseau horaire basée sur la position est désactivée"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"La détection du fuseau horaire basée sur la position n\'est pas prise en charge"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Les modifications de la détection du fuseau horaire basée sur la position ne sont pas autorisées"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"La position peut être utilisée pour définir le fuseau horaire"</string>
<string name="location_network_based" msgid="5247042890080021887">"Localis. via Wi-Fi et réseau mob."</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Autoriser applis à utiliser localisation Google pour estimer position plus rapidement. Infos localisation anonymes envoyées à Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Position déterminée par le Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2295,7 +2298,7 @@
<string name="screen_reader_category_title" msgid="5825700839731107803">"Lecteur d\'écran"</string>
<string name="captions_category_title" msgid="574490148949400274">"Sous-titres"</string>
<string name="audio_category_title" msgid="5283853679967605826">"Audio"</string>
- <string name="general_category_title" msgid="6298579528716834157">"Généraux"</string>
+ <string name="general_category_title" msgid="6298579528716834157">"Général"</string>
<string name="display_category_title" msgid="6638191682294461408">"Affichage"</string>
<string name="accessibility_color_and_motion_title" msgid="2323301706545305874">"Couleur et mouvement"</string>
<string name="accessibility_turn_screen_darker_title" msgid="5986223133285858349">"Assombrir l\'écran"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Voix sur 5G, voix sur NR, appels avancés, appels 5G"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ajouter langue, ajouter une langue"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"taille du texte, grands caractères, police de grande taille, texte de grande taille, vision faible, agrandir le texte, agrandisseur de police, agrandissement de la police"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"écran actif en permanence, EAP"</string>
<string name="default_sound" msgid="6604374495015245195">"Son par défaut"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Le volume pour la sonnerie et les notifications est réglé à <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibration, Ne pas déranger"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Contrôler quelles applications et quels appareils peuvent lire les notifications"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f34c5c1..0179264 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Régler la date et l\'heure"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Configurer la date, l\'heure, le fuseau horaire et les formats"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Définir l\'heure automatiquement"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Définir le fuseau horaire automatiquement"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Définir automatiquement"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Utiliser les paramètres régionaux par défaut"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Format 24 heures"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Utiliser le format 24h"</string>
@@ -412,7 +412,7 @@
<string name="security_settings_face_settings_require_confirmation" msgid="6603039421004198334">"Toujours demander confirmation"</string>
<string name="security_settings_face_settings_require_confirmation_details" msgid="3498729789625461914">"Toujours confirmer le déverrouillage par reco. faciale dans applis"</string>
<string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"Supprimer l\'empreinte faciale"</string>
- <string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Configurer déverr. par reconn. faciale."</string>
+ <string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Configurer déverr. par reconn. faciale"</string>
<string name="security_settings_face_settings_footer" msgid="625696606490947189">"Utilisez votre visage pour déverrouiller votre téléphone ou valider votre identité dans les applis (pour vous connecter ou approuver un achat, par exemple).\n\nÀ savoir :\nVous ne pouvez configurer qu\'un seul visage à la fois. Supprimez le visage actuel pour en ajouter un.\n\nVous pouvez déverrouiller votre téléphone sans le vouloir, en le regardant.\n\nUne autre personne peut le déverrouiller en le tenant devant votre visage.\n\nQuelqu\'un qui vous ressemble beaucoup, comme votre jumeau/jumelle, peut aussi déverrouiller votre téléphone."</string>
<string name="security_settings_face_settings_footer_attention_not_supported" msgid="2071065435536235622">"Utilisez votre visage pour déverrouiller votre téléphone ou valider votre identité dans les applis (pour vous connecter ou approuver un achat, par exemple).\n\nÀ savoir :\nVous ne pouvez configurer qu\'un seul visage à la fois. Supprimez le visage actuel pour en ajouter un.\n\nVous pouvez déverrouiller votre téléphone sans le vouloir, en le regardant.\n\nUne autre personne peut le déverrouiller en le tenant devant votre visage, même si vous fermez les yeux.\n\nQuelqu\'un qui vous ressemble beaucoup, comme votre jumeau/jumelle, peut aussi déverrouiller votre téléphone."</string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Supprimer l\'empreinte faciale ?"</string>
@@ -476,7 +476,7 @@
<string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Utilisez votre empreinte digitale pour déverrouiller votre tablette ou confirmer votre identité, par exemple pour vous connecter à des applis"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Utilisez votre empreinte digitale pour déverrouiller votre appareil ou confirmer votre identité, par exemple pour vous connecter à des applis"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Utilisez votre empreinte digitale pour déverrouiller votre téléphone ou confirmer votre identité, par exemple pour vous connecter à des applis"</string>
- <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Déverrouillage par reconnaissance faciale et empreinte digitale"</string>
+ <string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Déverrouillage par reco. faciale et empreinte digitale"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Appuyer pour configurer"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Visage et empreintes digitales ajoutés"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Reconnaissance faciale et empreinte digitale ajoutées"</string>
@@ -1323,8 +1323,9 @@
<string name="auto_rotate_link_a11y" msgid="5146188567212233286">"En savoir plus sur la rotation automatique"</string>
<string name="auto_rotate_summary_a11y" msgid="1505094100328581685">"Quand vous basculez votre téléphone en mode portrait ou paysage"</string>
<string name="screen_resolution_title" msgid="2690518693139811486">"Résolution d\'écran"</string>
- <string name="screen_resolution_option_high" msgid="2617496842852992853">"Haute résolution"</string>
- <string name="screen_resolution_option_highest" msgid="9134161136319625840">"Haute résolution"</string>
+ <!-- no translation found for screen_resolution_option_high (2617496842852992853) -->
+ <skip />
+ <string name="screen_resolution_option_highest" msgid="9134161136319625840">"Pleine résolution"</string>
<string name="screen_resolution_summary_high" msgid="5611896959631297437">"FHD+ 1080p"</string>
<string name="screen_resolution_summary_highest" msgid="2609112310453953756">"QHD+ 1440p"</string>
<string name="screen_resolution_footer" msgid="6772341522952795647">"La haute résolution consomme davantage de batterie. Modifier la résolution peut entraîner le redémarrage de certaines applis."</string>
@@ -1888,7 +1889,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Services de localisation"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Services de localisation"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Services de localisation pour le travail"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Utiliser la position pour définir le fuseau horaire"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Utiliser la position"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Position de l\'appareil nécessaire"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Pour définir le fuseau horaire à l\'aide de votre position, activez la localisation et mettez à jour les paramètres de fuseau horaire"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Paramètres de localisation"</string>
@@ -1897,6 +1898,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Détection du fuseau horaire basée sur la position désactivée"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Détection du fuseau horaire basée sur la position incompatible"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Modifications de la détection du fuseau horaire basée sur la position non autorisées"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"La position peut être utilisée pour définir le fuseau horaire"</string>
<string name="location_network_based" msgid="5247042890080021887">"Localis. via Wi-Fi et réseaux mobiles"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Autoriser applis à utiliser localisation Google pour estimer position plus rapidement. Infos localisation anonymes envoyées à Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Position déterminée par le Wi-Fi"</string>
@@ -1942,6 +1944,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2927,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>
@@ -3012,6 +3017,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>
@@ -3689,8 +3697,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, appel avancé, appel en 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ajouter langue, ajouter une langue"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"taille du texte, gros caractères, grande police, gros texte, déficience visuelle, agrandir le texte, agrandisseur de police, agrandissement de la police"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"mode Always-on, MAO"</string>
<string name="default_sound" msgid="6604374495015245195">"Son par défaut"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volume des sonneries et notifications à <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibreur, Ne pas déranger"</string>
@@ -4001,14 +4008,8 @@
<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">
- <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">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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Jamais"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notifications de l\'appareil et des applis"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Contrôler les applis et les appareils qui peuvent lire les notifications"</string>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 97228ca..f4540e8 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Definir data e hora"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Axusta a data, a hora, o fuso horario e os formatos"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Definir hora automaticamente"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Definir zona horaria automaticamente"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Definir automaticamente"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar configuración rexional predeterminada"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Formato de 24 horas"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Usar formato de 24 horas"</string>
@@ -1202,7 +1202,7 @@
<string name="wifi_hotspot_name_summary_connected" msgid="6935457127884928249">"Outros dispositivos poden conectarse á zona wifi <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
<string name="wifi_hotspot_password_title" msgid="9096340919454296786">"Contrasinal da zona wifi"</string>
<string name="wifi_hotspot_ap_band_title" msgid="560262446129195042">"Banda do punto de acceso"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="6620216295510397461">"Utiliza a zona wifi para crear unha rede wifi para os teus outros dispositivos. A zona wifi ofrece acceso a Internet a través da túa conexión de datos móbiles. É posible que se apliquen cargos de datos móbiles adicionais."</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="6620216295510397461">"Utiliza a zona wifi para crear unha rede wifi para os teus outros dispositivos. A zona wifi ofrece acceso a Internet a través da túa conexión de datos móbiles. É posible que se apliquen cargos adicionais polo uso de datos móbiles."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3813311942370920903">"As aplicacións poden crear unha zona wifi para compartir contido cos dispositivos que están cerca."</string>
<string name="wifi_hotspot_auto_off_title" msgid="8855711787485504882">"Desactivar a zona wifi automaticamente"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="8283656069997871354">"Se non hai ningún dispositivo conectado"</string>
@@ -1497,7 +1497,7 @@
<string name="sim_multi_sims_summary" msgid="1711012455679332238">"Selecciona a SIM que prefiras usar para os datos móbiles."</string>
<string name="sim_change_data_title" msgid="4663239438584588847">"Usar <xliff:g id="CARRIER">%1$s</xliff:g> para os datos móbiles?"</string>
<string name="sim_change_data_message" msgid="3046178883369645132">"Estás utilizando <xliff:g id="CARRIER2_0">%2$s</xliff:g> para os datos móbiles. Se cambias a <xliff:g id="CARRIER1">%1$s</xliff:g>, deixarase de utilizar <xliff:g id="CARRIER2_1">%2$s</xliff:g> para os datos móbiles."</string>
- <string name="sim_change_data_ok" msgid="4922114750417276560">"Utilizar <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
+ <string name="sim_change_data_ok" msgid="4922114750417276560">"Usar <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
<string name="sim_preferred_title" msgid="7182406911552216373">"Actualizar a SIM preferida?"</string>
<string name="sim_preferred_message" msgid="6004009449266648351">"A única SIM do dispositivo é: <xliff:g id="NEW_SIM">%1$s</xliff:g>. Queres usar esta SIM para os datos móbiles, as chamadas e as mensaxes SMS?"</string>
<string name="wrong_pin_code_pukked" msgid="3414172752791445033">"Código PIN da SIM incorrecto. Agora debes contactar co operador para desbloquear o dispositivo."</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Servizos de localización"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Servizos de localización"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Servizos de localización para o traballo"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Usar localización para establecer o fuso horario"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Utilizar localización"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Necesítase a localización do dispositivo"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Se queres definir o fuso horario mediante a localización, actívaa e, a seguir, actualiza a configuración do fuso horario"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Configuración de localización"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"A detección do fuso horario da localización está desactivada"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Non se admite a detección do fuso horario da localización"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Non está permitido modificar a detección do fuso horario da localización"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"A localización pode utilizarse para definir o fuso horario"</string>
<string name="location_network_based" msgid="5247042890080021887">"Situación por rede móbil/wifi"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Permite usar o servizo de localización para calcular a localización rápido. Recompilaranse datos anónimos e enviaranse a Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Localización determinada por wifi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2481,7 +2484,7 @@
<string name="accessibility_ring_vibration_title" msgid="4689811297654320885">"Vibración do ton"</string>
<string name="accessibility_notification_vibration_title" msgid="6205679908785776478">"Vibración das notificacións"</string>
<string name="accessibility_touch_vibration_title" msgid="533931451319110741">"Reacción aos toques"</string>
- <string name="accessibility_service_primary_switch_title" msgid="437610853412159406">"Utilizar <xliff:g id="ACCESSIBILITY_APP_NAME">%1$s</xliff:g>"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="437610853412159406">"Usar <xliff:g id="ACCESSIBILITY_APP_NAME">%1$s</xliff:g>"</string>
<string name="accessibility_service_primary_open_title" msgid="8655108684769091154">"Abrir <xliff:g id="ACCESSIBILITY_APP_NAME">%1$s</xliff:g>"</string>
<string name="accessibility_service_auto_added_qs_tooltip_content" msgid="2941824314912928072">"Engadiuse <xliff:g id="ACCESSIBILITY_APP_NAME">%1$s</xliff:g> ao menú Configuración rápida. Pasa o dedo cara abaixo para activar ou desactivar a función cando queiras."</string>
<string name="accessibility_service_qs_tooltip_content" msgid="6002493441414967868">"Tamén podes engadir <xliff:g id="ACCESSIBILITY_APP_NAME">%1$s</xliff:g> ao menú Configuración rápida desde a parte superior da pantalla"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, chamadas avanzadas, chamadas por 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"engadir idioma, engadir un idioma"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tamaño do texto, letra grande, tipo de letra grande, texto grande, visión reducida, agrandar texto, función para aumentar o tamaño da letra, aumento do tamaño da letra"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"pantalla sempre activa, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Son predeterminado"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volume de notificacións e son ao <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibración, Non molestar"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Controla cales das túas aplicacións e dispositivos poden ler as notificacións"</string>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 2dd715b..b624890 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -100,7 +100,7 @@
<string name="bluetooth_show_received_files" msgid="685424727760622632">"પ્રાપ્ત થયેલી ફાઇલો"</string>
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"બ્લૂટૂથ બંધ છે"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"આને ચાલુ કરવા માટે ટૅપ કરો"</string>
- <string name="device_picker" msgid="2427027896389445414">"બ્લૂટૂથ ઉપકરણ પસંદ કરો"</string>
+ <string name="device_picker" msgid="2427027896389445414">"બ્લૂટૂથ ડિવાઇસ પસંદ કરો"</string>
<string name="bluetooth_ask_enablement" msgid="1529030199895339199">"<xliff:g id="APP_NAME">%1$s</xliff:g>, બ્લૂટૂથ ચાલુ કરવા માગે છે"</string>
<string name="bluetooth_ask_disablement" msgid="1879788777942714761">"<xliff:g id="APP_NAME">%1$s</xliff:g>, બ્લૂટૂથ બંધ કરવા માગે છે"</string>
<string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"કોઈ ઍપ્લિકેશન બ્લૂટૂથ ચાલુ કરવા માગે છે"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"તારીખ અને સમય સેટ કરો"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"તારીખ, સમય, સમય ઝોન અને ફોર્મેટ્સ સેટ કરો"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ઑટોમૅટિક રીતે સમય સેટ કરો"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ઑટોમૅટિક રીતે સમય ઝોન સેટ કરો"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ઑટોમૅટિક રીતે સેટ કરો"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ડિફૉલ્ટ લોકેલનો ઉપયોગ કરો"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑કલાકનું ફોર્મેટ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-કલાક ફોર્મેટનો ઉપયોગ કરો"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"સ્થાન સેવાઓ"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"સ્થાન સેવાઓ"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"કાર્ય માટે સ્થાનની સેવાઓ"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"સમય ઝોન સેટ કરવા માટે સ્થાનનો ઉપયોગ કરો"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"સ્થાનનો ઉપયોગ કરો"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"ડિવાઇસના સ્થાનની જરૂર છે"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"તમારા સ્થાનનો ઉપયોગ કરીને તમારા સમય ઝોનનું સેટઅપ કરીને, સ્થાન સુવિધા ચાલુ કરો, પછી સમય ઝોનના સેટિંગ અપડેટ કરો"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"સ્થાન સેટિંગ"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"સ્થાનના સમય ઝોનની ઓળખ બંધ કરવામાં આવેલી છે"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"સ્થાનના સમય ઝોનની ઓળખ કરવાને સપોર્ટ આપવામાં આવતો નથી"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"સ્થાનના સમય ઝોનની ઓળખમાં ફેરફાર કરવાની મંજૂરી નથી"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"સમય ઝોન સેટ કરવા માટે સ્થાનનો ઉપયોગ કરવામાં આવી શકે છે"</string>
<string name="location_network_based" msgid="5247042890080021887">"વાઇ-ફાઇ અને મોબાઇલ નેટવર્ક સ્થાન"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"એપ્લિકેશન્સને તમારા સ્થાનનો વધુ ઝડપથી અંદાજ મેળવવા માટે Google ની સ્થાન સેવાનો ઉપયોગ કરવા દો. અનામી સ્થાન ડેટા એકત્રિત કરીને Google ને મોકલવામાં આવશે."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"સ્થાન વાઇ-ફાઇ દ્વારા નિર્ધારિત થયું"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -1950,7 +1953,7 @@
<string name="lockpassword_confirm_your_password_header" msgid="6132312814563023990">"તમારો પાસવર્ડ ફરી દાખલ કરો"</string>
<string name="lockpassword_reenter_your_profile_password_header" msgid="3812040127714827685">"ઑફિસની પ્રોફાઇલનો પાસવર્ડ ફરી દાખલ કરો"</string>
<string name="lockpassword_confirm_your_work_password_header" msgid="4647071231702288305">"તમારા કાર્યાલયનો પાસવર્ડ દાખલ કરો"</string>
- <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"તમારી પૅટર્નની પુષ્ટિ કરો"</string>
+ <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"તમારી પૅટર્ન કન્ફર્મ કરો"</string>
<string name="lockpassword_confirm_your_work_pattern_header" msgid="2668883108969165844">"કાર્યાલયની પૅટર્ન દાખલ કરો"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="2241722970567131308">"તમારો પિન ફરી દાખલ કરો"</string>
<string name="lockpassword_reenter_your_profile_pin_header" msgid="2890233614560435538">"ઑફિસની પ્રોફાઇલનો પિન ફરી દાખલ કરો"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -4000,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ક્યારેય નહીં"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ડિવાઇસ અને ઍપના નોટિફિકેશન"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"કઈ ઍપ અને ડિવાઇસ નોટિફિકેશન વાંચી શકશે તેનું નિયંત્રણ કરો"</string>
diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml
index f8cd4a9..2b780b2 100644
--- a/res/values-hi/arrays.xml
+++ b/res/values-hi/arrays.xml
@@ -282,7 +282,7 @@
<item msgid="1745447762712473288">"सिप का उपयोग करें"</item>
<item msgid="2986821801246709737">"कॉल करें"</item>
<item msgid="2702338156976571452">"फ़िंगरप्रिंट"</item>
- <item msgid="7925495329948404955">"शरीर संवेदक"</item>
+ <item msgid="7925495329948404955">"बॉडी सेंसर"</item>
<item msgid="8163066895749904470">"सेल ब्रॉडकास्ट (CBC) पढ़ें"</item>
<item msgid="7621394050624063528">"नकली जगह"</item>
<item msgid="37519917674959757">"मेमोरी पढ़ें"</item>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index d88f73c..fafce7c 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"तारीख और समय सेट करें"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"तारीख, समय, समय क्षेत्र और प्रारूप सेट करें"</string>
<string name="date_time_auto" msgid="4239202185055225869">"समय अपने-आप सेट हो जाए"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"समय क्षेत्र अपने-आप सेट हो जाए"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"अपने-आप सेट करें"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"डिफ़ॉल्ट जगह का इस्तेमाल करें"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑घंटा प्रारूप"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-घंटे वाले फ़ॉर्मैट का इस्तेमाल करें"</string>
@@ -342,13 +342,13 @@
<string name="security_settings_face_preference_summary_none" msgid="5952752252122581846">"फ़ेस अनलॉक की सुविधा सेट अप करने के लिए टैप करें"</string>
<string name="security_settings_face_preference_title" msgid="2126625155005348417">"फ़ेस अनलॉक"</string>
<string name="security_settings_face_profile_preference_title" msgid="7519527436266375005">"वर्क प्रोफ़ाइल के लिए फ़ेस अनलॉक"</string>
- <string name="security_settings_face_enroll_education_title" msgid="6448806884597691208">"फ़ेस अनलॉक की सुविधा सेट अप करने का तरीका"</string>
+ <string name="security_settings_face_enroll_education_title" msgid="6448806884597691208">"फ़ेस अनलॉक की सुविधा सेटअप करने का तरीका"</string>
<string name="security_settings_face_enroll_education_title_accessibility" msgid="3701874093226957891">"फे़स अनलॉक की सुविधा सेट अप करें"</string>
<string name="security_settings_face_enroll_education_title_unlock_disabled" msgid="8810954233979716906">"चेहरे का इस्तेमाल कर पुष्टि करें"</string>
<string name="security_settings_face_enroll_education_message" msgid="4308030157487176799"></string>
<string name="security_settings_face_enroll_education_message_accessibility" msgid="1986648712195281391"></string>
<string name="security_settings_face_enroll_education_start" msgid="8830924400907195590">"शुरू करें"</string>
- <string name="security_settings_face_enroll_education_accessibility_dialog_message" msgid="2965952386172202665">"अगर सुलभता सुविधा में फ़ेस अनलॉक की सुविधा बंद है, तो हो सकता है कि सेटअप के कुछ चरण, टॉकबैक के साथ ठीक से काम न करें."</string>
+ <string name="security_settings_face_enroll_education_accessibility_dialog_message" msgid="2965952386172202665">"अगर सुलभता सुविधा में फ़ेस अनलॉक की सुविधा बंद है, तो हो सकता है कि सेटअप के कुछ चरण, TalkBack के साथ ठीक से काम न करें."</string>
<string name="security_settings_face_enroll_education_accessibility_dialog_negative" msgid="7872647360361245461">"वापस जाएं"</string>
<string name="security_settings_face_enroll_education_accessibility_dialog_positive" msgid="3148077647572203458">"सेट अप जारी रखें"</string>
<string name="security_settings_face_enroll_introduction_accessibility" msgid="5748221179069430975">"सुलभता सेटअप का इस्तेमाल करें"</string>
@@ -483,7 +483,7 @@
<string name="biometric_settings_intro" msgid="4263069383955676756">"अगर आपके फ़ोन में फ़िंगरप्रिंट अनलॉक और फ़ेस अनलॉक की सुविधा सेट अप है, तो चेहरे पर मास्क होने पर या आस-पास रोशनी न होने पर, फ़ोन आपका फ़िंगरप्रिंट मांगेगा"</string>
<string name="biometric_settings_category_ways_to_unlock" msgid="3384767901580915266">"फ़ोन को अनलॉक करने के तरीके"</string>
<string name="biometric_settings_use_biometric_unlock_phone" msgid="8180914579885804358">"अपना फ़ोन अनलॉक करें"</string>
- <string name="biometric_settings_use_biometric_for_apps" msgid="6201168728906364189">"पुष्टि करें कि आप ही ऐप्लिकेशन इस्तेमाल कर रहे हैं"</string>
+ <string name="biometric_settings_use_biometric_for_apps" msgid="6201168728906364189">"पुष्टि करें कि ऐप्लिकेशन आपके इस्तेमाल में ही है"</string>
<string name="biometric_settings_use_face_preference_summary" msgid="1821648836899408477">"अपने चेहरे का इस्तेमाल करके"</string>
<string name="biometric_settings_use_fingerprint_preference_summary" msgid="6077762097826050165">"अपने फ़िंगरप्रिंट का इस्तेमाल करके"</string>
<string name="biometric_settings_use_face_or_fingerprint_preference_summary" msgid="3029102492674234728">"अपने फ़िंगरप्रिंट या चेहरे का इस्तेमाल करके"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"जगह की जानकारी"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"जगह की जानकारी"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"दफ़्तर के लिए, जगह की जानकारी से जुड़ी सेवाएं."</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"समय क्षेत्र सेट करने के लिए, जगह की जानकारी का इस्तेमाल करें"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"जगह की जानकारी का इस्तेमाल करें"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"डिवाइस की जगह की जानकारी चालू करना ज़रूरी है"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"जगह की जानकारी का इस्तेमाल करके समय क्षेत्र सेट करने के लिए, जगह की जानकारी की सुविधा चालू करें. इसके बाद, समय क्षेत्र से जुड़ी सेटिंग को अपडेट करें"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"जगह की जानकारी की सेटिंग"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"जगह के समय क्षेत्र की पहचान करने की सुविधा बंद है"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"जगह के समय क्षेत्र की पहचान करने की सुविधा काम नहीं कर रही"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"जगह के समय क्षेत्र की पहचान करने की सुविधा में, बदलाव करने की अनुमति नहीं है"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"समय क्षेत्र सेट करने के लिए, जगह की जानकारी का इस्तेमाल किया जा सकता है"</string>
<string name="location_network_based" msgid="5247042890080021887">"वाई-फ़ाई और मोबाइल नेटवर्क जगह"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"आपकी जगह का तेज़ी से अनुमान लगाने के लिए, ऐप को Google की जगह की जानकारी का इस्तेमाल करने दें. अनजान जगह का डेटा इकट्ठा करके Google को भेजा जाएगा."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"यह जगह वाई-फ़ाई ने तय की है"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2305,7 +2308,7 @@
<string name="user_installed_services_category_title" msgid="2639470729311439731">"डाउनलोड किए गए ऐप्लिकेशन"</string>
<string name="experimental_category_title" msgid="898904396646344152">"प्रयोग के लिए"</string>
<string name="feature_flags_dashboard_title" msgid="348990373716658289">"सुविधाएं दिखाने वाले फ़्लैग"</string>
- <string name="talkback_title" msgid="8756080454514251327">"टॉकबैक"</string>
+ <string name="talkback_title" msgid="8756080454514251327">"TalkBack"</string>
<string name="talkback_summary" msgid="5820927220378864281">"स्क्रीन रीडर खास तौर पर दृष्टिहीन और कमज़ोर नज़र वाले लोगों के लिए है"</string>
<string name="select_to_speak_summary" msgid="1995285446766920925">"अपनी स्क्रीन पर दिए गए आइटम तेज़ आवाज़ में सुनने के लिए उन पर टैप करें"</string>
<string name="accessibility_captioning_title" msgid="4561871958958925225">"कैप्शन की सेटिंग"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3443,7 +3450,7 @@
<string name="nfc_payment_favor_default" msgid="4508491832174644772">"हमेशा"</string>
<string name="nfc_payment_favor_open" msgid="8554643344050373346">"सिवाय तब, जब पैसे चुकाने के लिए दूसरा ऐप्लिकेशन खुला हो"</string>
<string name="nfc_payment_pay_with" msgid="3001320460566523453">"टच किए बिना पैसे चुकाने के टर्मिनल पर, इससे पैसे चुकाएं:"</string>
- <string name="nfc_how_it_works_title" msgid="1363791241625771084">"पैसे चुकाने की मशीन का इस्तेमाल करना"</string>
+ <string name="nfc_how_it_works_title" msgid="1363791241625771084">"पैसे चुकाने की टर्मिनल का इस्तेमाल करना"</string>
<string name="nfc_how_it_works_content" msgid="1141382684788210772">"पैसे चुकाने के लिए किसी ऐप्लिकेशन को चुनें. इसके बाद, टच किए बिना पैसे चुकाने के निशान वाले किसी टर्मिनल की ओर अपने फ़ोन का पिछला हिस्सा करके उसे पकड़े रहें."</string>
<string name="nfc_how_it_works_got_it" msgid="4717868843368296630">"ठीक है"</string>
<string name="nfc_more_title" msgid="1041094244767216498">"ज़्यादा…"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5G, VoNR, बेहतर कॉलिंग, 5G कॉलिंग"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"भाषा जोड़ें, किसी भाषा को जोड़ें"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"टेक्स्ट का साइज़, बड़ा प्रिंट, बड़ा फ़ॉन्ट, बड़ा टेक्स्ट, कम दृष्टि, टेक्स्ट बड़ा करना, फ़ॉन्ट बड़ा करने वाला टूल, फ़ॉन्ट बड़ा करना"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"हमेशा चालू रहने वाला डिसप्ले, एओडी"</string>
<string name="default_sound" msgid="6604374495015245195">"डिफ़ॉल्ट ध्वनि"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"घंटी और सूचना की आवाज़ <xliff:g id="PERCENTAGE">%1$s</xliff:g> है"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"आवाज़, वाइब्रेशन, परेशान न करें"</string>
@@ -3934,7 +3940,7 @@
<string name="lock_screen_notifs_redact_work_summary" msgid="3238238380405430156">"स्क्रीन लॉक होने पर वर्क प्रोफ़ाइल का संवेदनशील कॉन्टेंट दिखाएं"</string>
<string name="lock_screen_notifications_summary_show" msgid="6540443483088311328">"सारी सूचनाएं दिखाएं"</string>
<string name="lock_screen_notifications_summary_hide" msgid="7837303171531166789">"संवेदनशील कॉन्टेंट को अनलॉक होने पर ही दिखाएं"</string>
- <string name="lock_screen_notifications_summary_disable" msgid="3388290397947365744">"सूचनाएं बिल्कुल न दिखाएं"</string>
+ <string name="lock_screen_notifications_summary_disable" msgid="3388290397947365744">"सूचनाएं बिलकुल न दिखाएं"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4688399629301178487">"आपकी लॉक स्क्रीन कैसी दिखनी चाहिए?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="1360388192096354315">"लॉक स्क्रीन"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8373401288962523946">"ऑफ़िस के काम से जुड़ी सभी सूचनाएं दिखाएं"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"कभी नहीं"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"डिवाइस और ऐप्लिकेशन की सूचनाएं"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"यह कंट्रोल करें कि कौनसे ऐप्लिकेशन और डिवाइस आपको मिलने वाली सूचनाएं पढ़ सकते हैं"</string>
@@ -4642,7 +4642,7 @@
<string name="screen_zoom_conversation_icon_pete" msgid="4873109337506890558">"P"</string>
<string name="screen_zoom_conversation_message_1" msgid="2641317981482545659">"नमस्ते पीट!"</string>
<string name="screen_zoom_conversation_message_2" msgid="6528272610590915790">"क्यों न आज मिलकर कॉफ़ी पिएं और बातें करें?"</string>
- <string name="screen_zoom_conversation_message_3" msgid="6930848361702066106">"हां बिल्कुल. मुझे एक अच्छी जगह भी मालूम है और वह यहां से बहुत दूर भी नहीं है."</string>
+ <string name="screen_zoom_conversation_message_3" msgid="6930848361702066106">"हां बिलकुल. मुझे एक अच्छी जगह भी मालूम है और वह यहां से बहुत दूर भी नहीं है."</string>
<string name="screen_zoom_conversation_message_4" msgid="2501043894465807210">"बढ़िया!"</string>
<string name="screen_zoom_conversation_timestamp_1" msgid="512353741016062507">"मंगलवार शाम 6:00 बजे"</string>
<string name="screen_zoom_conversation_timestamp_2" msgid="472183807915497199">"मंगलवार शाम 6:01 बजे"</string>
@@ -5067,7 +5067,7 @@
<string name="do_disclosure_with_name" msgid="867544298924410766">"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g> इस डिवाइस को प्रबंधित करता है."</string>
<string name="do_disclosure_learn_more_separator" msgid="5714364437437041671">" "</string>
<string name="learn_more" msgid="3534519107947510952">"ज़्यादा जानें"</string>
- <string name="blocked_by_restricted_settings_title" msgid="7334715011474037399">"पाबंदी वाली सेटिंग"</string>
+ <string name="blocked_by_restricted_settings_title" msgid="7334715011474037399">"प्रतिबंधित सेटिंग"</string>
<string name="toast_allows_restricted_settings_successfully" msgid="1219116121291466102">"<xliff:g id="APP_NAME">%s</xliff:g> के लिए पाबंदी वाली सेटिंग की अनुमति दी गई"</string>
<string name="blocked_by_restricted_settings_content" msgid="3628660029601161080">"आपकी सुरक्षा के लिए, यह सेटिंग फ़िलहाल उपलब्ध नहीं है."</string>
<string name="financed_privacy_settings" msgid="2575114436197204145">"फ़ाइनैंस किए गए डिवाइस की जानकारी"</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 20817a5..e59f981 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -273,7 +273,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Postavite datum i vrijeme"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Postavljanje datuma, vremena, vremenske zone i formata"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Automatsko postavljanje vremena"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Automatsko postavljanje vremenske zone"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Postavi automatski"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Koristi zadani lokalni format"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-satni oblik"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Koristi 24-satni format"</string>
@@ -1912,7 +1912,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Usluge lokacije"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Usluge lokacije"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Usluge lokacije za posao"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Koristi lokaciju za postavljanje vremenske zone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Koristi lokaciju"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Potrebna je lokacija uređaja"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Da biste postavili vremensku zonu na temelju svoje lokacije, uključite lokaciju, a zatim ažurirajte postavke vremenske zone"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Postavke lokacije"</string>
@@ -1921,6 +1921,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Onemogućeno je otkrivanje vremenske zone lokacije"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Nije podržano otkrivanje vremenske zone lokacije"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Izmjene značajke otkrivanja vremenske zone lokacije nisu dopuštene"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Lokacija se može koristiti za postavljanje vremenske zone"</string>
<string name="location_network_based" msgid="5247042890080021887">"Lokacija Wi-Fi i mob. mreža"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Omogućite aplik. da upotrebljavaju Googleovu uslugu lokacije za brže lociranje. Anonimni podaci prikupljat će se i slati Googleu."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Lokacija utvrđena pomoću Wi-Fija"</string>
@@ -1966,6 +1967,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2963,6 +2966,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>
@@ -3052,6 +3056,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>
@@ -3734,8 +3741,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, napredni pozivi, 5g pozivi"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"dodaj jezik, dodajte jezik"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"veličina teksta, velika slova, veliki font, veliki tekst, slabovidnost, povećati tekst, povećalo fonta, povećanje fonta"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"uvijek uključen zaslon, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Zadani zvuk"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Glasnoća zvona i obavijesti na <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Glasnoća, vibracija, Ne uznemiravaj"</string>
@@ -4047,16 +4053,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Odredite koje aplikacije i uređaji mogu čitati obavijesti"</string>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index dd0424d..48bbca5 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Dátum és idő beállítása"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Dátum, idő, időzóna és formátumok beállítása"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Időpont automatikus beállítása"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Időzóna automatikus beállítása"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Automatikus beállítás"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Helyi alapértelmezés használata"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 órás formátum"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 órás formátum használata"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Helyszolgáltatások"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Helyszolgáltatások"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Munkahelyi helyszolgáltatások"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Az időzóna beállításához használja a helyadatokat"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Hely használata"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Az eszköz helyadataira van szükség"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Ha a tartózkodási helye alapján szeretné megadni az időzónát, kapcsolja be a helybeállításokat, majd frissítse az időzóna-beállításokat"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Helybeállítások"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"A helyalapú időzóna-meghatározás ki van kapcsolva"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"A helyalapú időzóna-meghatározás nem támogatott"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"A helyalapú időzóna-meghatározásra vonatkozó módosítások nem engedélyezettek"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"A helyadatok az időzóna beállításához használhatók"</string>
<string name="location_network_based" msgid="5247042890080021887">"Hely Wi-Fi és mobilhálózat alapján"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Engedélyezze az alkalmazásoknak, hogy a Google helymeghatározó szolgáltatásával gyorsabban megbecsüljék tartózkodási helyét. A névtelen helyadatok összegyűjtés után a Google-hoz kerülnek."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Helymeghatározás Wi-Fi-vel"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, továbbfejlesztett telefonhívás, 5g-s telefonhívás"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"nyelv hozzáadása, egy nyelv hozzáadása"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"betűméret, nagybetű, nagy betűtípus, nagy szöveg, gyengénlátó, szöveg nagyítása, betűtípusnagyító, betűtípus-nagyítás"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"mindig bekapcsolt kijelző, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Alapértelmezett hang"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Csörgetés és értesítések hangereje <xliff:g id="PERCENTAGE">%1$s</xliff:g>-on"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Hangerő, rezgés, Ne zavarjanak"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Vezérelheti, hogy mely alkalmazások és eszközök olvashatják az értesítéseket"</string>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index bbce77f..d250eff 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Սահմանել ամսաթիվն ու ժամը"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Սահմանել ամսաթիվը, ժամը, ժամային գոտին, & ձևաչափերը"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Ժամի ավտոմատ կարգավորում"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Ժամային գոտու ավտոմատ կարգավորում"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Ավտոմատ որոշում"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Օգտագործել կանխադրված տեղույթը"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-ժամյա ձևաչափ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Օգտագործել 24-ժամյա ձևաչափը"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Տեղորոշման ծառայություններ"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Տեղորոշման ծառայություններ"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Տեղորոշման ծառայություններ աշխատանքի համար"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Ժամային գոտին սահմանել ըստ գտնվելու վայրի"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Օգտագործել տեղադրության տվյալները"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Պահանջվում է սարքի տեղորոշման թույլտվություն"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Ժամային գոտին ըստ ձեր տեղադրության սահմանելու համար միացրեք տեղորոշումը, ապա թարմացրեք ժամային գոտու կարգավորումները"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Տեղադրության կարգավորումներ"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Տեղադրության միջոցով ժամային գոտու որոշումն անջատված է"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Տեղադրության միջոցով ժամային գոտու որոշումը չի աջակցվում"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Դուք չեք կարող փոփոխել տեղադրության միջոցով ժամային գոտու որոշման կարգավորումները"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Ժամային գոտին սահմանելու համար կարող են օգտագործվել տեղադրության տվյալները"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi & շարժական ցանցի տեղադրություն"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Թույլատրել ծրագրերին օգտագործել Google-ի տեղակայման ծառայությունները` ձեր տեղադրությունը ավելի արագ որոշելու համար: Անանուն տեղակայման տվյալները կհավաքագրվեն և կուղարկվեն Google-ին:"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Տեղադրությունը որոշված է Wi‑Fi-ի օգնությամբ"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, ընդլայնված հնարավորություններով զանգեր, 5G զանգեր"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ավելացնել լեզու, նոր լեզու"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"տեքստի չափը, մեծ տառատեսակ, խոշոր տառատեսակ, մեծ տեքստ, թույլ տեսողություն, մեծացնել տեքստը, մեծացնել տառատեսակը, տառատեսակի մեծացում"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"մշտապես ակտիվ էկրան, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Կանխադրված զանգերանգը"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Զանգի ու ծանուցումների ազդանշանների ուժգնությունը <xliff:g id="PERCENTAGE">%1$s</xliff:g> է"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Ձայնի ուժգնություն, թրթռոց, Չանհանգստացնել ռեժիմ"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Երբեք"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Սարքերի և հավելվածների ծանուցումներ"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Ընտրել հավելվածներն ու սարքերը, որոնք կարող են կարդալ ծանուցումները"</string>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 25be6e2..01f5a64 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Setel tanggal dan waktu"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Menyetel tanggal, waktu, zona waktu & format"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Setel waktu otomatis"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Setel zona waktu otomatis"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Setel otomatis"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Gunakan default lokalitas"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Format 24 jam"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Gunakan format 24 jam"</string>
@@ -433,7 +433,7 @@
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="7931650601996313070">"Siapkan sidik jari Anda"</string>
<string name="security_settings_fingerprint_enroll_consent_introduction_title" msgid="2278592030102282364">"Izinkan buka kunci dengan sidik jari"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="1911710308293783998">"Menggunakan sidik jari"</string>
- <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="tablet" msgid="1533352560544756928">"Gunakan sidik jari untuk membuka kunci tablet atau memverifikasi diri Anda, seperti saat login ke aplikasi atau menyetujui pembelian."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="tablet" msgid="1533352560544756928">"Gunakan sidik jari untuk membuka kunci tablet atau memverifikasi diri Anda, misalnya saat login ke aplikasi atau menyetujui pembelian."</string>
<string name="security_settings_fingerprint_enroll_introduction_v2_message" product="device" msgid="3570866595300511932">"Gunakan sidik jari untuk membuka kunci perangkat atau memverifikasi diri Anda, seperti saat login ke aplikasi atau menyetujui pembelian."</string>
<string name="security_settings_fingerprint_enroll_introduction_v2_message" product="default" msgid="8539442240212670385">"Gunakan sidik jari untuk membuka kunci ponsel atau memverifikasi diri Anda, seperti saat login ke aplikasi atau menyetujui pembelian."</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" msgid="1833139688278350628">"Izinkan anak Anda menggunakan sidik jari untuk membuka kunci ponsel atau memverifikasi dirinya. Hal ini dilakukan saat dia login ke aplikasi, menyetujui pembelian, dan lainnya."</string>
@@ -473,7 +473,7 @@
<string name="security_settings_fingerprint_v2_enroll_acquire_too_fast" msgid="5891227328100822018">"Angkat jari Anda setelah merasakan getaran"</string>
<string name="security_settings_fingerprint_v2_enroll_acquire_too_bright" msgid="769646735950329315">"Pindahlah ke tempat dengan cahaya yang lebih lembut, lalu coba lagi"</string>
<string name="security_settings_fingerprint_v2_enroll_error_max_attempts" msgid="1464972470750764128">"Anda telah mencapai jumlah maksimum percobaan"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Gunakan sidik jari untuk membuka kunci tablet atau memverifikasi diri Anda, seperti saat login ke aplikasi"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Gunakan sidik jari untuk membuka kunci tablet atau memverifikasi diri Anda, misalnya saat login ke aplikasi"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Gunakan sidik jari untuk membuka kunci perangkat atau memverifikasi diri Anda, seperti saat login ke aplikasi"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Gunakan sidik jari untuk membuka kunci ponsel atau memverifikasi diri Anda, seperti saat login ke aplikasi"</string>
<string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Face Unlock & Fingerprint Unlock"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Layanan lokasi"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Layanan lokasi"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Layanan lokasi untuk profil kerja"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Gunakan lokasi untuk menyetel zona waktu"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Gunakan lokasi"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Perlu lokasi perangkat"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Untuk menyetel zona waktu menggunakan lokasi Anda, aktifkan lokasi, lalu perbarui setelan zona waktu"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Setelan lokasi"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Deteksi zona waktu lokasi dinonaktifkan"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Deteksi zona waktu lokasi tidak didukung"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Perubahan deteksi zona waktu lokasi tidak diizinkan"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Lokasi dapat digunakan untuk menyetel zona waktu"</string>
<string name="location_network_based" msgid="5247042890080021887">"Lokasi Wi-Fi & seluler"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Izinkan aplikasi menggunakan layanan lokasi Google untuk memperkirakan lokasi Anda dengan lebih cepat. Data lokasi anonim akan dikumpulkan dan dikirim ke Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Lokasi yang ditentukan oleh Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3444,7 +3451,7 @@
<string name="nfc_payment_favor_open" msgid="8554643344050373346">"Kecuali jika aplikasi pembayaran lain dibuka"</string>
<string name="nfc_payment_pay_with" msgid="3001320460566523453">"Di terminal nirsentuh, bayar dengan:"</string>
<string name="nfc_how_it_works_title" msgid="1363791241625771084">"Membayar di terminal"</string>
- <string name="nfc_how_it_works_content" msgid="1141382684788210772">"Siapkan aplikasi pembayaran. Lalu, cukup dekatkan bagian belakang ponsel ke terminal mana saja yang memiliki simbol nirkontak."</string>
+ <string name="nfc_how_it_works_content" msgid="1141382684788210772">"Siapkan aplikasi pembayaran. Lalu, cukup dekatkan bagian belakang ponsel ke terminal mana saja yang memiliki simbol nirsentuh."</string>
<string name="nfc_how_it_works_got_it" msgid="4717868843368296630">"Mengerti"</string>
<string name="nfc_more_title" msgid="1041094244767216498">"Lainnya …"</string>
<string name="nfc_payment_set_default_label" msgid="7395939287766230293">"Setel aplikasi pembayaran default"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, panggilan telepon lanjutan, panggilan telepon 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"tambahkan bahasa, tambahkan sebuah bahasa"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ukuran teks, hasil cetak besar, font besar, teks besar, gangguan penglihatan, buat teks lebih besar, pembesar font, pembesaran font"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"layar always-on, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Suara default"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volume dering & notifikasi pada <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, getar, Jangan Ganggu"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Tidak pernah"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notifikasi perangkat & aplikasi"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Mengontrol aplikasi dan perangkat mana yang dapat membaca notifikasi"</string>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 877d838..3b28fd8 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Stilla dagsetningu og tíma"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Velja dagsetningu, tíma, tímabelti og snið"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Stilla tíma sjálfkrafa"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Stilla tímabelti sjálfkrafa"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Stilla sjálfkrafa"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Nota sjálfgefið snið staðar"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 tíma snið"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Nota 24 tíma snið"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Staðsetningarþjónustur"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Staðsetningarþjónustur"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Staðsetningarþjónustur fyrir vinnuna"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Nota staðsetningu til að stilla tímabelti"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Nota staðsetningu"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Staðsetningar tækis krafist"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Til að stilla tímabelti með staðsetningu skaltu kveikja á staðsetningu og uppfæra svo stillingar tímabeltis"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Staðsetningarstillingar"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Slökkt er á staðsetningargreiningu tímabeltis"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Staðsetningargreining tímabeltis er ekki studd"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Breytingar á staðsetningargreiningu tímabeltis eru ekki leyfðar"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Hægt er að nota staðsetningu til að stilla tímabelti"</string>
<string name="location_network_based" msgid="5247042890080021887">"Staðsetning frá Wi-Fi og kerfi"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Leyfir forritum að nota þjónustu Google fyrir hraðvirkari staðsetningarákvörðun. Nafnlausar upplýsingar verða sendar til Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi-Fi ákvarðar staðsetningu"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, betri símtöl, 5g-símtöl"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"nýtt tungumál, bæta við tungumáli"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"textastærð, stórt letur, stór leturgerð, stór texti, sjónskerðing, stækka texta, leturstækkari, leturstækkun"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"alltaf á skjánum, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Sjálfgefið hljóð"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Hljóðstyrkur símtala og tilkynninga í <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Hljóðstyrkur, titringur, ónáðið ekki"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Aldrei"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Tækja- og forritatilkynningar"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Stjórna því hvaða forrit og tæki geta lesið tilkynningar"</string>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 2f48e85..49d0786 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Imposta data e ora"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Imposta data, ora, fuso orario e formati"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Imposta automaticamente l\'orario"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Imposta automaticamente il fuso orario"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Imposta automaticamente"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usa impostazioni internazionali predefinite"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Formato 24 ore"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Usa il formato 24 ore"</string>
@@ -281,7 +281,7 @@
<string name="date_time_set_timezone" msgid="2915125337941495746">"Seleziona fuso orario"</string>
<string name="date_time_set_date_title" msgid="7624166157167528407">"Data"</string>
<string name="date_time_search_region" msgid="1364133854952610919">"Cerca area geografica"</string>
- <string name="date_time_select_region" msgid="5449345333305056072">"Area geografica"</string>
+ <string name="date_time_select_region" msgid="5449345333305056072">"Regione"</string>
<string name="date_time_select_fixed_offset_time_zones" msgid="594848300882055361">"Seleziona scarto da UTC"</string>
<string name="zone_change_to_from_dst" msgid="686451769985774294">"<xliff:g id="TIME_TYPE">%1$s</xliff:g> inizia il giorno <xliff:g id="TRANSITION_DATE">%2$s</xliff:g>."</string>
<string name="zone_info_exemplar_location_and_offset" msgid="2186042522225153092">"<xliff:g id="EXEMPLAR_LOCATION">%1$s</xliff:g> (<xliff:g id="OFFSET">%2$s</xliff:g>)"</string>
@@ -413,8 +413,8 @@
<string name="security_settings_face_settings_require_confirmation_details" msgid="3498729789625461914">"Chiedi sempre conferma se viene usato sblocco con il volto nelle app"</string>
<string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"Elimina il modello del volto"</string>
<string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Configura lo sblocco con il volto"</string>
- <string name="security_settings_face_settings_footer" msgid="625696606490947189">"Usa il tuo volto per sbloccare il telefono o per l\'autenticazione nelle app, ad esempio per accedere o approvare un acquisto.\n\nTieni presente che:\nPuoi configurare un solo volto alla volta. Per aggiungere un altro volto devi eliminare quello attuale.\n\nSe guardi direttamente il telefono, potresti sbloccarlo anche senza volerlo.\n\nIl tuo telefono può essere sbloccato da un\'altra persona se viene rivolto verso il tuo viso.\n\nIl tuo telefono può essere sbloccato da qualcuno che ti assomiglia molto, ad esempio un fratello gemello."</string>
- <string name="security_settings_face_settings_footer_attention_not_supported" msgid="2071065435536235622">"Usa il tuo volto per sbloccare il telefono o per l\'autenticazione nelle app, ad esempio per accedere o approvare un acquisto.\n\nTieni presente che:\nPuoi configurare un solo volto alla volta. Per aggiungere un altro volto devi eliminare quello attuale.\n\nSe guardi direttamente il telefono, potresti sbloccarlo anche senza volerlo.\n\nIl tuo telefono può essere sbloccato da un\'altra persona se viene rivolto verso il tuo viso, anche se hai gli occhi chiusi.\n\nIl tuo telefono può essere sbloccato da qualcuno che ti assomiglia molto, ad esempio un fratello gemello."</string>
+ <string name="security_settings_face_settings_footer" msgid="625696606490947189">"Usa il tuo volto per sbloccare il telefono o per l\'autenticazione nelle app, ad esempio per accedere o approvare un acquisto.\n\nTieni presente che:\nPuoi configurare un solo volto alla volta. Per aggiungere un altro volto devi eliminare quello attuale.\n\nSe guardi direttamente il telefono, potresti sbloccarlo anche senza volerlo.\n\nIl tuo telefono può essere sbloccato da un\'altra persona se viene rivolto verso il tuo viso.\n\nIl tuo telefono può essere sbloccato da qualcuno che ti assomiglia molto, ad esempio un gemello o una gemella."</string>
+ <string name="security_settings_face_settings_footer_attention_not_supported" msgid="2071065435536235622">"Usa il tuo volto per sbloccare il telefono o per l\'autenticazione nelle app, ad esempio per accedere o approvare un acquisto.\n\nTieni presente che:\nPuoi configurare un solo volto alla volta. Per aggiungere un altro volto devi eliminare quello attuale.\n\nSe guardi direttamente il telefono, potresti sbloccarlo anche senza volerlo.\n\nIl tuo telefono può essere sbloccato da un\'altra persona se viene rivolto verso il tuo viso, anche se hai gli occhi chiusi.\n\nIl tuo telefono può essere sbloccato da qualcuno che ti assomiglia molto, ad esempio un gemello o una gemella."</string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Eliminare il modello del volto?"</string>
<string name="security_settings_face_settings_remove_dialog_details" msgid="916131485988121592">"Il modello del volto verrà eliminato definitivamente e in sicurezza.\n\nDopo l\'eliminazione dovrai usare il PIN, la sequenza o la password per sbloccare il telefono o eseguire l\'autenticazione nelle app."</string>
<string name="security_settings_face_settings_remove_dialog_details_convenience" msgid="475568135197468990">"Il modello del volto verrà eliminato definitivamente e in sicurezza.\n\nDopo l\'eliminazione dovrai usare il PIN, la sequenza o la password per sbloccare il telefono."</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Servizi di geolocalizzazione"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Servizi di geolocalizzazione"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Location services for work"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Usa la posizione per impostare il fuso orario"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Usa posizione"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"È necessario attivare la geolocalizzazione del dispositivo"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Per impostare il fuso orario usando la tua posizione, attiva la geolocalizzazione e aggiorna le impostazioni del fuso orario"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Geolocalizzazione"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Il rilevamento del fuso orario in base alla posizione è disattivato"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Il rilevamento del fuso orario in base alla posizione non è supportato"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Non sono consentite modifiche relative al rilevamento del fuso orario in base alla posizione"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Potrebbe essere utilizzata la posizione per impostare il fuso orario"</string>
<string name="location_network_based" msgid="5247042890080021887">"Posizione Wi‑Fi e rete mobile"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Consenti alle app di usare geolocalizzazione Google per stabilire la posizione. Saranno raccolti e inviati a Google dati anonimi."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Posizione determinata da Wi‑Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -1971,7 +1974,7 @@
<string name="lockpassword_forgot_password" msgid="5730587692489737223">"Hai dimenticato la password?"</string>
<string name="lockpassword_forgot_pattern" msgid="1196116549051927516">"Hai dimenticato la sequenza?"</string>
<string name="lockpassword_forgot_pin" msgid="7164232234705747672">"Hai dimenticato il PIN?"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"Per continuare devi utilizzare la sequenza del dispositivo"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"Inserisci la sequenza del dispositivo per continuare"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="9206928587904701094">"Per continuare devi inserire il PIN del dispositivo"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="2616127423884477152">"Per continuare devi inserire la password del dispositivo"</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="9110305410672321714">"Per continuare devi utilizzare la sequenza del tuo profilo di lavoro"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, chiamate avanzate, chiamate 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"aggiungere lingua, aggiungere una lingua"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"dimensioni del testo, stampa grande, carattere grande, testo grande, ipovedente, ingrandimento del testo, ingranditore di carattere, ingrandimento di carattere"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"display sempre attivo, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Suono predefinito"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volume suoneria e notifiche: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibrazione, Non disturbare"</string>
@@ -3919,7 +3925,7 @@
<string name="silent_notifications_status_bar" msgid="6113307620588767516">"Nascondi le notifiche silenziose nella barra di stato"</string>
<string name="notification_pulse_title" msgid="8013178454646671529">"Luce lampeggiante"</string>
<string name="lock_screen_notifications_title" msgid="2876323153692406203">"Privacy"</string>
- <string name="lockscreen_bypass_title" msgid="6519964196744088573">"Ignorare la schermata di blocco"</string>
+ <string name="lockscreen_bypass_title" msgid="6519964196744088573">"Ignora schermata di blocco"</string>
<string name="lockscreen_bypass_summary" msgid="464277506200346748">"Dopo lo sblocco, vai direttamente all\'ultima schermata usata"</string>
<string name="keywords_lockscreen_bypass" msgid="41035425468915498">"Schermata di blocco, Schermata blocco, Salta, Ignora"</string>
<string name="locked_work_profile_notification_title" msgid="279367321791301499">"Con profilo di lavoro bloccato"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Mai"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notifiche app e dispositivi"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Controlla quali app e dispositivi possono leggere le notifiche"</string>
@@ -5136,7 +5136,7 @@
<string name="app_info_storage_title" msgid="4076977173803093808">"Spazio occupato"</string>
<string name="webview_uninstalled_for_user" msgid="627352948986275488">"(disinstallato per l\'utente <xliff:g id="USER">%s</xliff:g>)"</string>
<string name="webview_disabled_for_user" msgid="5809886172032644498">"(disattivato per l\'utente <xliff:g id="USER">%s</xliff:g>)"</string>
- <string name="autofill_app" msgid="7595308061826307921">"Compilazione automatica"</string>
+ <string name="autofill_app" msgid="7595308061826307921">"Servizio di compilazione automatica"</string>
<string name="autofill_passwords" msgid="6708057251459761083">"Password"</string>
<plurals name="autofill_passwords_count" formatted="false" msgid="7715009165029452622">
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> password</item>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index c7d539c..9467857 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -275,7 +275,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"הגדרת תאריך ושעה"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"הגדרת תאריך, שעה, אזור זמן ופורמטים"</string>
<string name="date_time_auto" msgid="4239202185055225869">"הגדרת זמן באופן אוטומטי"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"הגדרת אזור זמן באופן אוטומטי"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"הגדרה באופן אוטומטי"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"לפי ברירת המחדל באזור"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"פורמט 24 שעות"</string>
<string name="date_time_24hour" msgid="286679379105653406">"פורמט 24 שעות"</string>
@@ -1934,7 +1934,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"שירותי מיקום"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"שירותי מיקום"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"שירותי מיקום לעבודה"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"שימוש במיקום לקביעת אזור הזמן"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"שימוש במיקום"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"יש צורך בנתוני המיקום של המכשיר"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"כדי להגדיר את אזור הזמן באמצעות המיקום שלך, יש להפעיל את המיקום ולאחר מכן לעדכן את הגדרות אזור הזמן"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"הגדרות מיקום"</string>
@@ -1943,6 +1943,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"זיהוי אזור הזמן של המיקום מושבת"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"אין תמיכה בזיהוי אזור הזמן של המיקום"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"אין לבצע שינויים בזיהוי אזור הזמן של המיקום"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"ייתכן שייעשה שימוש במיקום כדי להגדיר את אזור הזמן"</string>
<string name="location_network_based" msgid="5247042890080021887">"מיקום רשת Wi-Fi ורשת סלולרית"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"מאפשרים לאפליקציות להשתמש בשירות המיקום של Google כדי להעריך את מיקומך מהר יותר. נתוני מיקום אנונימיים ייאספו ויישלחו אל Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"המיקום נקבע באמצעות Wi-Fi"</string>
@@ -1988,6 +1989,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -3001,6 +3004,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>
@@ -3090,6 +3094,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>
@@ -3777,8 +3784,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5G, VoNR, שיחות מתקדמות, התקשרות באמצעות 5G"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"הוספת שפה, להוסיף שפה"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"גודל הטקסט, אותיות גדולות, גופן גדול, טקסט גדול, לקוי ראייה, הגדלת טקסט, מגדיל טקסט"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"תצוגה תמידית, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"צליל ברירת מחדל"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"עוצמת הקול של צלצול והתראות ברמה של <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"עוצמת קול, רטט ומצב \'נא לא להפריע\'"</string>
@@ -4091,17 +4097,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>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 938c0b9..676fa9e 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -100,7 +100,7 @@
<string name="bluetooth_show_received_files" msgid="685424727760622632">"受信済みファイル"</string>
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"Bluetooth は OFF です"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"タップして ON にします"</string>
- <string name="device_picker" msgid="2427027896389445414">"Bluetoothデバイスの選択"</string>
+ <string name="device_picker" msgid="2427027896389445414">"Bluetooth デバイスの選択"</string>
<string name="bluetooth_ask_enablement" msgid="1529030199895339199">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」が Bluetooth を ON にしようとしています"</string>
<string name="bluetooth_ask_disablement" msgid="1879788777942714761">"「<xliff:g id="APP_NAME">%1$s</xliff:g>」が Bluetooth を OFF にしようとしています"</string>
<string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"アプリが Bluetooth を ON にしようとしています"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"日時の設定"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"日付、時刻、タイムゾーン、フォーマットを設定する"</string>
<string name="date_time_auto" msgid="4239202185055225869">"日時を自動的に設定"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"タイムゾーンを自動的に設定"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"自動設定"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"言語 / 地域で一般的な形式を使用する"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24時間表示"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24時間表示"</string>
@@ -433,7 +433,7 @@
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="7931650601996313070">"指紋の設定"</string>
<string name="security_settings_fingerprint_enroll_consent_introduction_title" msgid="2278592030102282364">"指紋認証によるロック解除の許可"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="1911710308293783998">"指紋の使用"</string>
- <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="tablet" msgid="1533352560544756928">"指紋を使ってタブレットのロック解除や本人確認(アプリへのログインや購入の承認など)を行えるようにします。"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_v2_message" product="tablet" msgid="1533352560544756928">"指紋を使ってタブレットのロック解除や本人確認(アプリへのログインや購入の承認など)を行えるようになります。"</string>
<string name="security_settings_fingerprint_enroll_introduction_v2_message" product="device" msgid="3570866595300511932">"指紋を使ってデバイスのロック解除や本人確認(アプリへのログインや購入の承認など)を行えるようにします。"</string>
<string name="security_settings_fingerprint_enroll_introduction_v2_message" product="default" msgid="8539442240212670385">"指紋を使ってスマートフォンのロック解除や本人確認(アプリへのログインや購入の承認など)を行えるようにします。"</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" msgid="1833139688278350628">"お子様に、指紋を使ってスマートフォンのロック解除や本人確認を行うことを許可します。アプリへのログインや購入の承認などに顔を使用できるようになります。"</string>
@@ -473,7 +473,7 @@
<string name="security_settings_fingerprint_v2_enroll_acquire_too_fast" msgid="5891227328100822018">"振動を感じるまで指を離さないでください"</string>
<string name="security_settings_fingerprint_v2_enroll_acquire_too_bright" msgid="769646735950329315">"もっと明るい場所に移動してもう一度お試しください"</string>
<string name="security_settings_fingerprint_v2_enroll_error_max_attempts" msgid="1464972470750764128">"試行回数の上限を超えました"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"指紋を使ってタブレットのロック解除や本人確認(アプリへのログインなど)を行えるようにします。"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"指紋を使ってタブレットのロック解除や本人確認(アプリへのログインなど)を行えるようになります。"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"指紋を使ってデバイストのロック解除や本人確認(アプリへのログインなど)を行えるようにします。"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"指紋を使ってスマートフォンのロック解除や本人確認(アプリへのログインなど)を行えるようにします。"</string>
<string name="security_settings_biometric_preference_title" msgid="298146483579539448">"顔認証と指紋認証によるロック解除"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"位置情報サービス"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"位置情報サービス"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"仕事用プロファイル向けの位置情報サービス"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"タイムゾーンの設定に位置情報を使用"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"位置情報の使用"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"デバイスの位置情報が必要"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"位置情報を使用してタイムゾーンを設定するには、位置情報を ON にしてから、タイムゾーンの設定を更新してください"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"位置情報の設定"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"位置情報によるタイムゾーン検出は無効です"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"位置情報によるタイムゾーン検出はサポートされていません"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"位置情報によるタイムゾーン検出は変更できません"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"タイムゾーンの設定に位置情報が使用されることがあります"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi/モバイル接続時の位置情報"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Googleの位置情報サービスで現在地をすばやく推定することをアプリに許可します。匿名の現在地データが収集され、Googleに送信されます。"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi-Fiで検出される現在地"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -1971,7 +1974,7 @@
<string name="lockpassword_forgot_password" msgid="5730587692489737223">"パスワードを忘れた場合"</string>
<string name="lockpassword_forgot_pattern" msgid="1196116549051927516">"パターンを忘れた場合"</string>
<string name="lockpassword_forgot_pin" msgid="7164232234705747672">"PIN を忘れた場合"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"続行するにはデバイスのパターンを使用してください"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"続行するにはデバイスのパターンを入力してください"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="9206928587904701094">"続行するにはデバイスの PIN を入力してください"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="2616127423884477152">"続行するにはデバイスのパスワードを入力してください"</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="9110305410672321714">"仕事用のパターンを使って続行します"</string>
@@ -2923,6 +2926,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>
@@ -2941,7 +2945,7 @@
<string name="battery_saver_auto_routine" msgid="4656495097900848608">"普段の充電パターンを基に自動で ON"</string>
<string name="battery_saver_pref_auto_routine_summary" msgid="4739240095966241508">"普段の充電パターンを基に自動で ON にします"</string>
<string name="battery_saver_auto_percentage" msgid="558533724806281980">"残量に応じて自動で ON"</string>
- <string name="battery_saver_auto_routine_summary" msgid="3913145448299472628">"次回のいつもの充電前に電池が切れる可能性がある場合、バッテリー セーバーが ON になります"</string>
+ <string name="battery_saver_auto_routine_summary" msgid="3913145448299472628">"次回のいつもの充電前にバッテリーが切れる可能性がある場合、バッテリー セーバーが ON になります"</string>
<string name="battery_saver_auto_percentage_summary" msgid="6190884450723824287">"<xliff:g id="PERCENT">%1$s</xliff:g> で ON"</string>
<string name="battery_saver_schedule_settings_title" msgid="3688019979950082237">"スケジュールの設定"</string>
<string name="battery_saver_turn_on_summary" msgid="1433919417587171160">"電池を長持ちさせる"</string>
@@ -3012,6 +3016,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>
@@ -3029,7 +3036,7 @@
<string name="vpn_settings_single_insecure_multiple_total" msgid="6107225844641301139">"安全ではない VPN: <xliff:g id="VPN_COUNT">%d</xliff:g> 件"</string>
<string name="vpn_settings_multiple_insecure_multiple_total" msgid="1706236062478680488">"安全ではない VPN: <xliff:g id="VPN_COUNT">%d</xliff:g> 件"</string>
<string name="adaptive_connectivity_title" msgid="7464959640138428192">"接続の自動調整"</string>
- <string name="adaptive_connectivity_summary" msgid="3648731530666326885">"ネットワーク接続を自動的に管理することで、電池が長持ちし、デバイスのパフォーマンスが改善します"</string>
+ <string name="adaptive_connectivity_summary" msgid="3648731530666326885">"ネットワーク接続を自動的に管理することで、バッテリーが長持ちし、デバイスのパフォーマンスが改善します"</string>
<string name="adaptive_connectivity_switch_on" msgid="3653067561620745493">"ON"</string>
<string name="adaptive_connectivity_switch_off" msgid="5076172560836115265">"OFF"</string>
<string name="credentials_title" msgid="7535942196886123656">"認証情報ストレージ"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5G, VoNR, 拡張 通信, 5G 通信"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"言語を追加, 追加 言語"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"テキスト サイズ, 大きい 活字, 大きい フォント, 大きい テキスト, ロー ビジョン, 切り替え テキスト 大きく, フォント 大きく, フォント 拡大"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"常に表示状態のディスプレイ, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"デフォルトの通知音"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"着信音と通知の音量: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"音量、バイブレーション、サイレント モード"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"なし"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"デバイスとアプリの通知"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"通知を読み取れるアプリとデバイスの管理"</string>
@@ -4485,7 +4485,7 @@
<string name="memory_avg_desc" msgid="2632995851138152303">"平均: <xliff:g id="MEMORY">%1$s</xliff:g>"</string>
<string name="memory_use_running_format" msgid="4376086847362492613">"<xliff:g id="MEMORY">%1$s</xliff:g>/<xliff:g id="RUNNING">%2$s</xliff:g>"</string>
<string name="process_format" msgid="4239069158701023623">"<xliff:g id="APP_NAME">%1$s</xliff:g>(<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
- <string name="high_power_apps" msgid="5623152700992102510">"電池の最適化"</string>
+ <string name="high_power_apps" msgid="5623152700992102510">"バッテリーの最適化"</string>
<string name="additional_battery_info" msgid="3104208543623068714">"使用状況に関する通知"</string>
<string name="show_all_apps" msgid="4490719452453223082">"デバイス全体での使用状況を表示"</string>
<string name="hide_extra_apps" msgid="7313907836289865123">"アプリの使用状況を表示"</string>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index ecf254e..848e54e 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"თარიღისა და დროის დაყენება"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"თარიღის, დროის, დროის ზონის და ფორმატების დაყენება"</string>
<string name="date_time_auto" msgid="4239202185055225869">"დროის ავტომატურად დაყენება"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"სასაათო სარტყლის ავტომატურად დაყენება"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ავტომატურად დაყენება"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ლოკალის ნაგულისხმევი პარამეტრის გამოყენება"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-საათიანი ფორმატი"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-საათიანი ფორმატი"</string>
@@ -485,7 +485,7 @@
<string name="biometric_settings_use_biometric_unlock_phone" msgid="8180914579885804358">"თქვენი ტელეფონის განსაბლოკად"</string>
<string name="biometric_settings_use_biometric_for_apps" msgid="6201168728906364189">"აპებში ვინაობის დასადასტურებლად"</string>
<string name="biometric_settings_use_face_preference_summary" msgid="1821648836899408477">"სახის მეშვეობით"</string>
- <string name="biometric_settings_use_fingerprint_preference_summary" msgid="6077762097826050165">"თთის ანაბეჭდის მეშვეობით"</string>
+ <string name="biometric_settings_use_fingerprint_preference_summary" msgid="6077762097826050165">"თითის ანაბეჭდის მეშვეობით"</string>
<string name="biometric_settings_use_face_or_fingerprint_preference_summary" msgid="3029102492674234728">"სახის ან თითის ანაბეჭდის მეშვეობით"</string>
<string name="biometric_settings_hand_back_to_guardian" product="tablet" msgid="1498542470242509989">"დაუბრუნეთ ტაბლეტი მშობელს"</string>
<string name="biometric_settings_hand_back_to_guardian" product="device" msgid="3837001353226852511">"დაუბრუნეთ მოწყობილობა მშობელს"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"მდებარეობის სერვისები"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"მდებარეობის სერვისები"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"მდებარეობის სერვისები სამსახურისთვის"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"დააყენეთ სასაათო სარტყელი მდებარეობის მიხედვით"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"მდებარეობის გამოყენება"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"საჭიროა მოწყობილობის მდებარეობა"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"თქვენი მდებარეობის გამოყენებით სასაათო სარტყლის დასაყენებლად ჯერ გაააქტიურეთ მდებარეობა, შემდეგ კი განაახლეთ სასაათო სარტყლის პარამეტრები"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"მდებარეობის პარამეტრები"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"მდებარეობის სასაათო სარტყლის განსაზღვრა გათიშულია"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"მდებარეობის სასაათო სარტყლის განსაზღვრა მხარდაუჭერელია"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"მდებარეობის სასაათო სარტყლის განსაზღვრის ცვლილებები არ არის დაშვებული"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"სასაათო სარტყლის დასაყენებლად მდებარეობა გამოიყენება"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi & მობილური ქსელის მდებარეობა"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"თქვენი ადგილმდებარეობის უფრო სწრაფად დასადგენად დართეთ აპებს ნება, გამოიყენონ Google-ის მდებარეობის სერვისი. ანონიმური მდებარეობის მომაცემები შეგროვდება და გაეგზავნება Google-ს."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi‑Fi-ს მიერ დადგენილი ადგილმდებარეობა"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, გაუმჯობესებული დარეკვა, 5g დარეკვა"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ენის დამატება, დაამატეთ ენა"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ტექსტის ზომა, დიდი ასოები, დიდი შრიფტი, დიდი ზომის ტექსტი, მხედველობადაქვეითებული, ტექსტის გადიდება, შრიფტის გამადიდებელი, შრიფტის გადიდება"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ყოველთვის ჩართული ეკრანიყოველთვის ჩართული ეკრანი, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ნაგულისხმევი ხმა"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"ზარებისა და შეტყობინებების ხმა <xliff:g id="PERCENTAGE">%1$s</xliff:g>-ზეა"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ხმა, ვიბრაცია, არ შემაწუხოთ"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"არასოდეს"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"მოწყობილობისა და აპის შეტყობინებები"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"განსაზღვრეთ, რომელი აპებისა და მოწყობილობებისთვის გსურთ შეტყობინებების წაკითხვის ფუნქციის მინიჭება"</string>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index ea9d071..d995d28 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Күні мен уақытын реттеу"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Күнін, уақытын, уақыт аймағын, форматтарды реттеу"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Уақытты автоматты түрде орнату"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Уақыт белдеуін автоматты түрде орнату"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Автоматты орнату"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Жергілікті әдепкі формат"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 сағаттық формат"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 сағаттық формат"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Локация қызметтері"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Локация қызметтері"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Жұмыс профиліне арналған Локация қызметтері"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Уақыт белдеуін орнату үшін локацияны пайдалану"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Локацияны пайдалану"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Құрылғының геодерегі қажет"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Локация арқылы уақыт белдеуін орнату үшін, геодеректі қосыңыз, содан кейін уақыт белдеуінің параметрлерін жаңартыңыз."</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Локация параметрлері"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Орынның уақыт белдеуін анықтау функциясы өшірулі."</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Орынның уақыт белдеуін анықтау функциясына қолдау көрсетілмейді."</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Орынның уақыт белдеуін анықтау функциясына өзгеріс енгізуге болмайды."</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Уақыт белдеуін орнату үшін локация пайдаланылуы мүмкін."</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi және ұялы желі орны"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Аймағыңызды жылдамырақ анықтау үшін қолданбаларға Google\' аймақтар қызметін қолдануға рұқсат етіңіз. Аймақ туралы деректер анонимді түрде жинақталып, Google-ға жіберіледі."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Орын Wi‑Fi арқылы анықталды"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, жетілдірілген қоңырау, 5g қоңырауы"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"тілді енгізу, тіл енгізу"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"мәтін өлшемі, үлкен жазу, үлкен қаріп, үлкен мәтін, нашар көру қабілеті, мәтінді ұлғайту, қаріпті ұлғайту"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"өшпейтін экран, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Әдепкі дыбыс"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Қоңырау мен хабарландырудың дыбыс деңгейі: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Дыбыс деңгейі, діріл, Мазаламау режимі"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Ешқашан"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Құрылғы мен қолданба хабарландырулары"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Қолданбалар мен құрылғылардың қайсысы хабарландыруларды оқи алатынын басқару"</string>
@@ -4055,7 +4055,7 @@
<string name="vr_listeners_title" msgid="4960357292472540964">"Көмекші VR қызметтері"</string>
<string name="no_vr_listeners" msgid="8442646085375949755">"Орнатылған қолданбалар көмекші VR қызметі ретінде қосылуға рұқсат сұраған жоқ."</string>
<string name="vr_listener_security_warning_title" msgid="7026351795627615177">"Көмекші VR қызметтеріне <xliff:g id="SERVICE">%1$s</xliff:g> пайдалануға рұқсат беру керек пе?"</string>
- <string name="vr_listener_security_warning_summary" msgid="1888843557687017791">"<xliff:g id="VR_LISTENER_NAME">%1$s</xliff:g> қолданбаларды виртуалды шындық режимінде пайдаланып жатқанда іске қосыла алады."</string>
+ <string name="vr_listener_security_warning_summary" msgid="1888843557687017791">"<xliff:g id="VR_LISTENER_NAME">%1$s</xliff:g> қолданбаларды виртуалдық шындық режимінде пайдаланып жатқанда іске қосыла алады."</string>
<string name="display_vr_pref_title" msgid="4850474436291113569">"Құрылғы VR режимінде болғанда"</string>
<string name="display_vr_pref_low_persistence" msgid="7039841277157739871">"Бұлдырлықты азайту (ұсынылады)"</string>
<string name="display_vr_pref_off" msgid="4008841566387432721">"Жыпылықтауды азайту"</string>
@@ -4609,7 +4609,7 @@
<string name="media_management_apps_toggle_label" msgid="166724270857067456">"Қолданбаға мультимедианы басқаруға рұқсат ету"</string>
<string name="media_management_apps_description" msgid="8000565658455268524">"Рұқсат берілсе, бұл қолданба осы құрылғыдағы басқа қолданбалар жасаған медиафайлдарды сізден сұрамай өзгерте немесе жоя алады. Файлдар мен медиафайлдарды пайдалану үшін қолданбаның рұқсаты болуы керек."</string>
<string name="keywords_media_management_apps" msgid="7499959607583088690">"Мультимедиа, Файл, Басқару, Басқарушы, Өзгерту, Редактор, Қолданба, Бағдарлама"</string>
- <string name="keywords_vr_listener" msgid="902737490270081131">"виртуалды шындық тыңдаушысының стерео көмекші қызметі"</string>
+ <string name="keywords_vr_listener" msgid="902737490270081131">"виртуалдық шындық тыңдаушысының стерео көмекші қызметі"</string>
<string name="overlay_settings" msgid="2030836934139139469">"Басқа қолданбалардың үстінен көрсету"</string>
<string name="system_alert_window_summary" msgid="1435856750594492891">"<xliff:g id="COUNT_1">%2$d</xliff:g> қолданбаның <xliff:g id="COUNT_0">%1$d</xliff:g>-на(не) басқа қолданбалардың үстінен шығуға рұқсат берілген"</string>
<string name="filter_overlay_apps" msgid="2483998217116789206">"Рұқсаты бар қолданбалар"</string>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index b57d471..ed6e28e 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -100,7 +100,7 @@
<string name="bluetooth_show_received_files" msgid="685424727760622632">"ឯកសារដែលបានទទួល"</string>
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"ប៊្លូធូសត្រូវបានបិទ"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"ចុចដើម្បីបើកប៊្លូធូស"</string>
- <string name="device_picker" msgid="2427027896389445414">"ជ្រើសឧបករណ៍ប៊្លូធូស"</string>
+ <string name="device_picker" msgid="2427027896389445414">"ជ្រើសរើសឧបករណ៍ប៊្លូធូស"</string>
<string name="bluetooth_ask_enablement" msgid="1529030199895339199">"<xliff:g id="APP_NAME">%1$s</xliff:g> ចង់បើកប៊្លូធូស"</string>
<string name="bluetooth_ask_disablement" msgid="1879788777942714761">"<xliff:g id="APP_NAME">%1$s</xliff:g> ចង់បិទប៊្លូធូស"</string>
<string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"កម្មវិធីចង់បើកប៊្លូធូស"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"កំណត់កាលបរិច្ឆេទ និងពេលវេលា"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"កំណត់កាលបរិច្ឆេទ ពេលវេលា តំបន់ពេលវេលា & ទ្រង់ទ្រាយ"</string>
<string name="date_time_auto" msgid="4239202185055225869">"កំណត់ម៉ោងដោយស្វ័យប្រវត្តិ"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"កំណត់ល្វែងម៉ោងដោយស្វ័យប្រវត្តិ"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"កំណត់ដោយស្វ័យប្រវត្តិ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ប្រើតាមតំបន់"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"ប្រព័ន្ធ 24 ម៉ោង"</string>
<string name="date_time_24hour" msgid="286679379105653406">"ប្រើប្រព័ន្ធ ២៤ ម៉ោង"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"សេវាកម្មទីតាំង"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"សេវាកម្មទីតាំង"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"សេវាកម្មទីតាំងសម្រាប់ការងារ"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"ប្រើទីតាំង ដើម្បីកំណត់ល្វែងម៉ោង"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"ប្រើទីតាំង"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"តម្រូវឱ្យមានទីតាំងឧបករណ៍"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"ដើម្បីកំណត់ល្វែងម៉ោងដោយប្រើទីតាំងរបស់អ្នក សូមបើកទីតាំង បន្ទាប់មកធ្វើបច្ចុប្បន្នភាពការកំណត់ល្វែងម៉ោង"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"ការកំណត់ទីតាំង"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"ការចាប់ដឹងពីល្វែងម៉ោងរបស់ទីតាំងត្រូវបានបិទ"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"ការចាប់ដឹងពីល្វែងម៉ោងរបស់ទីតាំងមិនអាចប្រើបានទេ"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"ការផ្លាស់ប្ដូរការចាប់ដឹងពីល្វែងម៉ោងរបស់ទីតាំងមិនត្រូវបានអនុញ្ញាតទេ"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"ទីតាំងអាចនឹងត្រូវបានប្រើដើម្បីកំណត់ល្វែងម៉ោង"</string>
<string name="location_network_based" msgid="5247042890080021887">"វ៉ាយហ្វាយ & ទីតាំងបណ្ដាញចល័ត"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"ឲ្យកម្មវិធីប្រើសេវាកម្មទីតាំងរបស់ Google ដើម្បីស្មានទីតាំងរបស់អ្នកកាន់តែលឿន។ ទិន្នន័យទីតាំងអនាមិកនឹងត្រូវបានប្រមូល រួចផ្ញើទៅ Google ។"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"ទីតាំងបានកំណត់ដោយវ៉ាយហ្វាយ"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, ការហៅទូរសព្ទកម្រិតខ្ពស់, ការហៅទូរសព្ទតាមរយៈ 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"បញ្ចូលភាសា បញ្ចូលភាសាមួយ"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ទំហំអក្សរ ទំហំអក្សរធំ ពុម្ពអក្សរធំ អក្សរធំ ខ្សោយភ្នែក ធ្វើឱ្យអក្សរកាន់តែធំ កម្មវិធីពង្រីកពុម្ពអក្សរ ការពង្រីកពុម្ពអក្សរ"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"អេក្រង់បើកជានិច្ច, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"សំឡេងលំនាំដើម"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"កម្រិតសំឡេងរោទ៍ និងការជូនដំណឹងត្រឹម <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"កម្រិតសំឡេង ការញ័រ កុំរំខាន"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"កុំឱ្យសោះ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ការជូនដំណឹងឧបករណ៍ និងកម្មវិធី"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"គ្រប់គ្រងកម្មវិធី និងឧបករណ៍ដែលអាចអានការជូនដំណឹង"</string>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 66bbc7c..0b755bc 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"ದಿನಾಂಕ ಮತ್ತು ಸಮಯವನ್ನು ಹೊಂದಿಸಿ"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"ದಿನಾಂಕ, ಸಮಯ, ಸಮಯದ ವಲಯದ, & ಸ್ವರೂಪಗಳನ್ನು ಹೊಂದಿಸಿ"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ಸಮಯವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹೊಂದಿಸಿ"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ಸಮಯವಲಯವನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಹೊಂದಿಸಿ"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೆಟ್ ಮಾಡಿ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ಸ್ಥಳೀಯ ಭಾಷೆ ಡೀಫಾಲ್ಟ್ ಬಳಸಿ"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑ಗಂಟೆಯ ಸ್ವರೂಪ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-ಗಂಟೆ ಫಾರ್ಮ್ಯಾಟ್ ಬಳಸಿ"</string>
@@ -474,8 +474,8 @@
<string name="security_settings_fingerprint_v2_enroll_acquire_too_bright" msgid="769646735950329315">"ಕಡಿಮೆ ಬೆಳಕಿನ ಸ್ಥಳಕ್ಕೆ ಸರಿಸಿ ಹಾಗೂ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="security_settings_fingerprint_v2_enroll_error_max_attempts" msgid="1464972470750764128">"ನೀವು ಗರಿಷ್ಠ ಸಂಖ್ಯೆಯ ಪ್ರಯತ್ನಗಳ ಮಿತಿಯನ್ನು ತಲುಪಿದ್ದೀರಿ"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"ನೀವು ಆ್ಯಪ್ಗಳಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವಂತೆಯೇ, ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಅಥವಾ ನಿಮ್ಮ ಗುರುತನ್ನು ದೃಢೀಕರಿಸಲು ನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ನೀವು ಬಳಸಿ"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"ನೀವು ಆ್ಯಪ್ಗಳಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವಂತೆಯೇ, ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಅಥವಾ ನಿಮ್ಮ ಗುರುತನ್ನು ದೃಢೀಕರಿಸಲು ನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ನೀವು ಬಳಸಿ"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"ನೀವು ಆ್ಯಪ್ಗಳಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವಂತೆಯೇ, ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಅಥವಾ ನಿಮ್ಮ ಗುರುತನ್ನು ದೃಢೀಕರಿಸಲು ನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ನೀವು ಬಳಸಿ"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"ನೀವು ಆ್ಯಪ್ಗಳಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವಂತೆಯೇ, ನಿಮ್ಮ ಸಾಧನವನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಅಥವಾ ನಿಮ್ಮ ಗುರುತನ್ನು ದೃಢೀಕರಿಸಲು ನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಬಳಸಿ"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"ನೀವು ಆ್ಯಪ್ಗಳಿಗೆ ಸೈನ್ ಇನ್ ಮಾಡುವಂತೆಯೇ, ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಅಥವಾ ನಿಮ್ಮ ಗುರುತನ್ನು ದೃಢೀಕರಿಸಲು ನಿಮ್ಮ ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ನು ಬಳಸಿ"</string>
<string name="security_settings_biometric_preference_title" msgid="298146483579539448">"ಫೇಸ್ ಮತ್ತು ಫಿಂಗರ್ಪ್ರಿಂಟ್ ಅನ್ಲಾಕ್"</string>
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"ಸೆಟಪ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"ಫೇಸ್ ಮತ್ತು ಫಿಂಗರ್ಪ್ರಿಂಟ್ಗಳನ್ನು ಸೇರಿಸಲಾಗಿದೆ"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"ಸ್ಥಳ ಸೇವೆಗಳು"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"ಸ್ಥಾನ ಸೇವೆಗಳು"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"ಕೆಲಸಕ್ಕಾಗಿ ಸ್ಥಳ ಸೇವೆಗಳು"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"ಸಮಯ ವಲಯವನ್ನು ಹೊಂದಿಸಲು ಸ್ಥಳವನ್ನು ಬಳಸಿ"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"ಸ್ಥಳವನ್ನು ಬಳಸಿ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"ಸಾಧನ ಸ್ಥಳದ ಅಗತ್ಯವಿದೆ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಬಳಸಿಕೊಂಡು ಸಮಯ ವಲಯವನ್ನು ಹೊಂದಿಸಲು, ಸ್ಥಳವನ್ನು ಆನ್ ಮಾಡಿ, ನಂತರ ಸಮಯ ವಲಯ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"ಸ್ಥಳದ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"ಸ್ಥಳದ ಸಮಯವಲಯದ ಪತ್ತೆಹಚ್ಚುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"ಸ್ಥಳದ ಸಮಯವಲಯದ ಪತ್ತೆಹಚ್ಚುವಿಕೆಯನ್ನು ಬೆಂಬಲಿಸಲಾಗುವುದಿಲ್ಲ"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"ಸ್ಥಳದ ಸಮಯವಲಯದ ಪತ್ತೆಹಚ್ಚುವಿಕೆಯಲ್ಲಿ ಬದಲಾವಣೆ ಮಾಡಲು ಅನುಮತಿಯಿಲ್ಲ"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"ಸಮಯ ವಲಯವನ್ನು ಸೆಟ್ ಮಾಡಲು ಸ್ಥಳವನ್ನು ಬಳಸಬಹುದು"</string>
<string name="location_network_based" msgid="5247042890080021887">"ವೈ-ಫೈ,ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಸ್ಥಳ"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"ನಿಮ್ಮ ಸ್ಥಳವನ್ನು ಅತಿ ವೇಗವಾಗಿ ಅಂದಾಜು ಮಾಡಲು Google ನ ಸ್ಥಳ ಸೇವೆ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಬಳಸಿ. ಅನಾಮಧೇಯ ಸ್ಥಳದ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸಲಾಗುವುದು ಮತ್ತು Google ಗೆ ಕಳುಹಿಸಲಾಗುವುದು."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"ವೈ-ಫೈ ಮೂಲಕ ನಿರ್ಧರಿಸಲಾಗಿರುವ ಸ್ಥಳ"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, ಸುಧಾರಿತ ಕರೆ, 5g ಕರೆ"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ಭಾಷೆಯನ್ನು ಸೇರಿಸಿ, ಭಾಷೆಯೊಂದನ್ನು ಸೇರಿಸಿ"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ಪಠ್ಯ ಗಾತ್ರ, ದೊಡ್ಡ ಪ್ರಿಂಟ್, ದೊಡ್ಡ ಫಾಂಟ್, ದೊಡ್ಡ ಪಠ್ಯ, ಕಡಿಮೆ ವಿಷನ್, ಪಠ್ಯವನ್ನು ದೊಡ್ಡದಾಗಿಸಿ, ಫಾಂಟ್ ಹಿಗ್ಗಿಸುವಿಕೆ, ಫಾಂಟ್ ಹಿಗ್ಗುವಿಕೆ"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ಯಾವಾಗಲೂ ಡಿಸ್ಪ್ಲೇ ಆನ್ ಆಗಿರಲಿ, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ಡಿಫಾಲ್ಟ್ ಧ್ವನಿ"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"ರಿಂಗ್ ಮತ್ತು ಅಧಿಸೂಚನೆ ವಾಲ್ಯೂಮ್ <xliff:g id="PERCENTAGE">%1$s</xliff:g> ರಲ್ಲಿದೆ"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ವಾಲ್ಯೂಮ್, ವೈಬ್ರೇಶನ್, ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ಎಂದೂ ಇಲ್ಲ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ಸಾಧನದ & ಆ್ಯಪ್ ಅಧಿಸೂಚನೆಗಳು"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"ಯಾವ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಸಾಧನಗಳು ಅಧಿಸೂಚನೆಗಳನ್ನು ಓದಬಹುದು ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 6be8875..88ffa44 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"날짜 및 시간 설정"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"날짜, 시간, 표준시간대 및 형식 설정"</string>
<string name="date_time_auto" msgid="4239202185055225869">"자동으로 시간 설정"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"자동으로 시간대 설정"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"자동 설정"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"언어 기본값 사용"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24시간 형식"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24시간 형식 사용"</string>
@@ -348,7 +348,7 @@
<string name="security_settings_face_enroll_education_message" msgid="4308030157487176799"></string>
<string name="security_settings_face_enroll_education_message_accessibility" msgid="1986648712195281391"></string>
<string name="security_settings_face_enroll_education_start" msgid="8830924400907195590">"시작"</string>
- <string name="security_settings_face_enroll_education_accessibility_dialog_message" msgid="2965952386172202665">"접근성 얼굴 인식 잠금 해제가 사용 중지되면 음성 안내 지원 사용 시 일부 설정 단계가 제대로 작동하지 않을 수 있습니다."</string>
+ <string name="security_settings_face_enroll_education_accessibility_dialog_message" msgid="2965952386172202665">"접근성 얼굴 인식 잠금 해제가 사용 중지되면 TalkBack 사용 시 일부 설정 단계가 제대로 작동하지 않을 수 있습니다."</string>
<string name="security_settings_face_enroll_education_accessibility_dialog_negative" msgid="7872647360361245461">"뒤로"</string>
<string name="security_settings_face_enroll_education_accessibility_dialog_positive" msgid="3148077647572203458">"설정 계속"</string>
<string name="security_settings_face_enroll_introduction_accessibility" msgid="5748221179069430975">"접근성 설정 사용"</string>
@@ -741,7 +741,7 @@
<string name="unlock_footer_high_complexity_requested" msgid="4471274783909915352">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 안전한 PIN 또는 비밀번호를 사용할 것을 제안합니다. 제안을 무시하면 앱이 제대로 작동하지 않을 수 있습니다."</string>
<string name="unlock_footer_medium_complexity_requested" msgid="5515870066751600640">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 새 PIN 또는 비밀번호를 사용할 것을 제안합니다. 제안을 무시하면 앱이 제대로 작동하지 않을 수 있습니다."</string>
<string name="unlock_footer_low_complexity_requested" msgid="2517656037576567971">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 새 패턴, PIN 또는 비밀번호를 사용할 것을 제안합니다. 제안을 무시하면 앱이 제대로 작동하지 않을 수 있습니다."</string>
- <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 새 잠금 화면을 사용할 것을 제안합니다."</string>
+ <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g>에서 새 화면 잠금을 사용할 것을 제안합니다."</string>
<string name="lock_failed_attempts_before_wipe" msgid="6874652886647631418">"다시 시도하세요. 입력 횟수: <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g>/<xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>회"</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="7450322567217745999">"데이터 삭제 위험"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="5816668400104558952">"다음번 시도에서 잘못된 패턴을 입력하면 이 기기의 데이터가 삭제됩니다."</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"위치 서비스"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"위치 서비스"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"업무용 위치 서비스"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"위치 정보를 사용하여 시간대 설정"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"위치 사용"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"기기 위치가 필요함"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"위치를 사용하여 시간대를 설정하려면 위치를 사용 설정한 후 시간대 설정을 업데이트하세요."</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"위치 설정"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"위치 시간대 감지가 사용 중지됩니다."</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"위치 시간대 감지가 지원되지 않습니다."</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"위치 시간대 감지 변경이 허용되지 않습니다."</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"시간대 설정을 위해 위치가 사용될 수 있음"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi 및 모바일 네트워크 위치"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"사용자의 위치를 빠르게 파악하도록 앱에서 Google의 위치 서비스를 사용합니다. 익명의 위치 정보가 수집되어 Google로 전송됩니다."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi-Fi에서 측정된 위치"</string>
@@ -1944,6 +1945,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2307,7 +2310,7 @@
<string name="user_installed_services_category_title" msgid="2639470729311439731">"다운로드한 앱"</string>
<string name="experimental_category_title" msgid="898904396646344152">"실험"</string>
<string name="feature_flags_dashboard_title" msgid="348990373716658289">"기능 플래그"</string>
- <string name="talkback_title" msgid="8756080454514251327">"음성 안내 지원"</string>
+ <string name="talkback_title" msgid="8756080454514251327">"TalkBack"</string>
<string name="talkback_summary" msgid="5820927220378864281">"주로 시각 장애가 있는 사용자를 위한 스크린 리더"</string>
<string name="select_to_speak_summary" msgid="1995285446766920925">"화면에서 항목을 탭하여 읽는 소리 듣기"</string>
<string name="accessibility_captioning_title" msgid="4561871958958925225">"자막 환경설정"</string>
@@ -2925,6 +2928,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>
@@ -3014,6 +3018,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>
@@ -3455,7 +3462,7 @@
<string name="nfc_payment_set_default_instead_of" msgid="565237441045013280">"미접촉 결제 단말기에서 <xliff:g id="APP_0">%1$s</xliff:g> 앱으로 결제합니다.\n\n이 앱이 <xliff:g id="APP_1">%2$s</xliff:g> 대신 기본 결제 앱으로 사용됩니다."</string>
<string name="nfc_payment_btn_text_set_deault" msgid="1821065137209590196">"기본으로 설정"</string>
<string name="nfc_payment_btn_text_update" msgid="5159700960497443832">"업데이트"</string>
- <string name="nfc_work_text" msgid="2496515165821504077">"업무"</string>
+ <string name="nfc_work_text" msgid="2496515165821504077">"직장"</string>
<string name="restriction_settings_title" msgid="4293731103465972557">"제한사항"</string>
<string name="restriction_menu_reset" msgid="92859464456364092">"제한사항 삭제"</string>
<string name="restriction_menu_change_pin" msgid="2505923323199003718">"PIN 변경"</string>
@@ -3691,8 +3698,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, 고급 통화, 5g 통화"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"언어 추가, 언어 한 개 추가"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"텍스트 크기, 큰 글자, 큰 글꼴, 큰 텍스트, 저시력, 텍스트 크게, 텍스트 확대, 글꼴 확대"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"항상 켜져 있는 화면, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"기본 사운드"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"벨소리 및 알림 볼륨이 <xliff:g id="PERCENTAGE">%1$s</xliff:g>로 설정되었습니다."</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"볼륨, 진동, 방해 금지 모드"</string>
@@ -3922,7 +3928,7 @@
<string name="notification_pulse_title" msgid="8013178454646671529">"표시등 깜박임"</string>
<string name="lock_screen_notifications_title" msgid="2876323153692406203">"개인 정보 보호"</string>
<string name="lockscreen_bypass_title" msgid="6519964196744088573">"잠금 화면 건너뛰기"</string>
- <string name="lockscreen_bypass_summary" msgid="464277506200346748">"잠금 해제 후 최근 사용한 화면으로 바로 이동"</string>
+ <string name="lockscreen_bypass_summary" msgid="464277506200346748">"잠금 해제 후 최근 사용한 화면으로 바로 이동합니다."</string>
<string name="keywords_lockscreen_bypass" msgid="41035425468915498">"잠금 화면, 잠금화면, 건너뛰기, 우회"</string>
<string name="locked_work_profile_notification_title" msgid="279367321791301499">"직장 프로필이 잠긴 경우"</string>
<string name="lock_screen_notifs_title" msgid="3412042692317304449">"잠금 화면에 표시할 알림"</string>
@@ -4003,14 +4009,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"전송하지 않음"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"기기 및 앱 알림"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"알림을 읽을 수 있는 앱과 기기 제어"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index ad23531..c9d2719 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Күн жана убакытын коюу"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Датаны, убакытты, саат алкагын, жана форматтарды тууралоо"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Убакытты автоматтык түрдө коюу"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Убакыт алкагын автоматтык түрдө коюу"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Автоматтык түрдө орнотуу"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Демейки жергиликтүү форматты колдонуу"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 сааттык формат"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 сааттык форматты колдонуу"</string>
@@ -343,7 +343,7 @@
<string name="security_settings_face_preference_title" msgid="2126625155005348417">"Жүзүнөн таанып ачуу"</string>
<string name="security_settings_face_profile_preference_title" msgid="7519527436266375005">"Жумуш профили үчүн Жүзүнөн таанып ачуу функциясы"</string>
<string name="security_settings_face_enroll_education_title" msgid="6448806884597691208">"Жүзүнөн таанып ачуу функциясын кантип койсо болот"</string>
- <string name="security_settings_face_enroll_education_title_accessibility" msgid="3701874093226957891">"Жүзүнөн таанып ачууну жөндөө"</string>
+ <string name="security_settings_face_enroll_education_title_accessibility" msgid="3701874093226957891">"Жүзүнөн таанып ачууну тууралоо"</string>
<string name="security_settings_face_enroll_education_title_unlock_disabled" msgid="8810954233979716906">"Жүзүңүз менен аныктыгыңызды текшертиңиз"</string>
<string name="security_settings_face_enroll_education_message" msgid="4308030157487176799"></string>
<string name="security_settings_face_enroll_education_message_accessibility" msgid="1986648712195281391"></string>
@@ -402,7 +402,7 @@
<string name="security_settings_face_enroll_should_re_enroll_subtitle" msgid="7055780282999744813">"Жүзүнөн таанып ачуу функциясын кайрадан жөндөңүз"</string>
<string name="security_settings_face_enroll_must_re_enroll_title" msgid="4421818770682557621">"Жүзүнөн таанып ачуу функциясын кайрадан жөндөңүз"</string>
<string name="security_settings_face_enroll_must_re_enroll_subtitle" msgid="3584740139535177961">"Коопсуздукту жана иштин майнаптуулугун жакшыртыңыз"</string>
- <string name="security_settings_face_enroll_improve_face_alert_title" msgid="6194184776580066012">"Жүзүнөн таанып ачууну жөндөө"</string>
+ <string name="security_settings_face_enroll_improve_face_alert_title" msgid="6194184776580066012">"Жүзүнөн таанып ачууну тууралоо"</string>
<string name="security_settings_face_enroll_improve_face_alert_body" msgid="2670118180411127323">"Жүзүнөн таанып ачуу функциясын кайра коюу үчүн жүзүңүздүн учурдагы үлгүсүн өчүрүңүз.\n\nЖүзүңүздүн үлгүсү биротоло өчүрүлөт.\n\nӨчүрүлгөндөн кийин телефонуңуздун кулпусун ачуу же колдонмолордо аутентификациядан өтүү үчүн PIN кодуңуз, графикалык ачкычыңыз же сырсөзүңүз керек болот."</string>
<string name="security_settings_face_enroll_improve_face_alert_body_fingerprint" msgid="2469599074650327489">"Жүзүнөн таанып ачуу функциясын кайра коюу үчүн жүзүңүздүн учурдагы үлгүсүн өчүрүңүз.\n\nЖүзүңүздүн үлгүсү биротоло өчүрүлөт.\n\nӨчүрүлгөндөн кийин телефонуңуздун кулпусун ачуу же колдонмолордо аутентификациядан өтүү үчүн манжаңыздын изи, PIN код, графикалык ачкыч же сырсөз керек болот."</string>
<string name="security_settings_face_settings_use_face_category" msgid="1638314154119800188">"Жүзүнөн таанып ачуу:"</string>
@@ -412,7 +412,7 @@
<string name="security_settings_face_settings_require_confirmation" msgid="6603039421004198334">"Ар дайым ырастоо талап кылынсын"</string>
<string name="security_settings_face_settings_require_confirmation_details" msgid="3498729789625461914">"Жүзүнөн таанып ачуу функциясы колдонулганда, ар дайым ырастоо талап кылынат"</string>
<string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"Жүздүн үлгүсүн өчүрүү"</string>
- <string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Жүзүнөн таанып ачууну жөндөө"</string>
+ <string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Жүзүнөн таанып ачууну тууралоо"</string>
<string name="security_settings_face_settings_footer" msgid="625696606490947189">"Жүзүңүз менен телефонуңуздун кулпусун ачыңыз же өзүңүздү ырастаңыз (мисалы, колдонмолорго кирүү же кандайдыр бир нерсени сатып алуу үчүн).\n\nКөңүл буруңуз:\nБир убакта бир гана жүз кошо аласыз. Башка жүз кошуу үчүн учурдагыны өчүрүшүңүз керек.\n\nЭкранды карап койсоңуз эле, түзмөгүңүздүн кулпусу ачылып калышы мүмкүн.\n\nОшондой эле кимдир бирөө телефонуңузду жүзүңүзгө алып келип ачышы мүмкүн.\n\nТелефонуңуздун кулпусун сизге аябай окшош адам (мисалы, эгизиңиз) ачып алышы мүмкүн."</string>
<string name="security_settings_face_settings_footer_attention_not_supported" msgid="2071065435536235622">"Жүзүңүз менен телефонуңуздун кулпусун ачыңыз же өзүңүздү ырастаңыз (мисалы, колдонмолорго кирүү же кандайдыр бир нерсени сатып алуу үчүн).\n\nКөңүл буруңуз:\nБир убакта бир гана жүз кошо аласыз. Башка жүз кошуу үчүн учурдагыны өчүрүшүңүз керек.\n\nЭкранды карап койсоңуз эле, түзмөгүңүздүн кулпусу ачылып калышы мүмкүн.\n\nОшондой эле кимдир бирөө көзүңүз жумулуп турганда да, телефонуңузду жүзүңүзгө жакын алып келип ачып алышы ыктымал.\n\nТелефонуңуздун кулпусун сизге аябай окшош адам (мисалы, эгизиңиз) ачып алышы мүмкүн."</string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Жүздүн үлгүсүн өчүрөсүзбү?"</string>
@@ -480,7 +480,7 @@
<string name="security_settings_biometric_preference_summary_none_enrolled" msgid="6941188982863819389">"Жөндөө үчүн таптаңыз"</string>
<string name="security_settings_biometric_preference_summary_both_fp_multiple" msgid="4821859306609955966">"Жүз жана манжа изи кошулду"</string>
<string name="security_settings_biometric_preference_summary_both_fp_single" msgid="684409535278676426">"Жүз жана манжа изи кошулду"</string>
- <string name="biometric_settings_intro" msgid="4263069383955676756">"Эгер манжа изи жана жүзүнөн таанып ачуу функциясын жөндөсөңүз, беткап тагынып же караңгы жерде турганыңызда телефонуңуз манжаңыздын изин сурайт"</string>
+ <string name="biometric_settings_intro" msgid="4263069383955676756">"Эгер манжа изи жана жүзүнөн таанып ачуу функциясын койгон болсоңуз, беткап тагынып же караңгы жерде турганыңызда телефонуңуз манжаңыздын изин сурайт"</string>
<string name="biometric_settings_category_ways_to_unlock" msgid="3384767901580915266">"Кулпуну ачуу жолдору"</string>
<string name="biometric_settings_use_biometric_unlock_phone" msgid="8180914579885804358">"Телефонуңуздун кулпусун ачыңыз"</string>
<string name="biometric_settings_use_biometric_for_apps" msgid="6201168728906364189">"Колдонмолордо өзүңүздү ырастаңыз"</string>
@@ -619,7 +619,7 @@
<string name="encrypt_title" product="tablet" msgid="6518642273119816435">"Планшетти шифрлөө"</string>
<string name="encrypt_title" product="default" msgid="7337365190988321100">"Телефонду шифрлөө"</string>
<string name="encrypted_summary" msgid="545623487587251207">"Шифрленген"</string>
- <string name="no_screen_lock_issue_title" msgid="1814109590692792891">"Экран кулпусун коюп алыңыз"</string>
+ <string name="no_screen_lock_issue_title" msgid="1814109590692792891">"Экран кулпусун коюу"</string>
<string name="no_screen_lock_issue_summary" msgid="2383217853510608406">"Коопсуздукту бекемдөө үчүн бул түзмөккө PIN код, графикалык ачкыч же сырсөз коюңуз"</string>
<string name="no_screen_lock_issue_action_label" msgid="2691229130486382863">"Экран кулпусун коюу"</string>
<string name="suggested_lock_settings_title" msgid="7836065447159730217">"Телефонуңузду коргоңуз"</string>
@@ -739,7 +739,7 @@
<string name="unlock_footer_high_complexity_requested" msgid="4471274783909915352">"<xliff:g id="APP_NAME">%1$s</xliff:g> колонмосу ишенимдүү PIN кодду же сырсөздү сунуштайт, ансыз талапка ылайык иштебеши мүмкүн"</string>
<string name="unlock_footer_medium_complexity_requested" msgid="5515870066751600640">"<xliff:g id="APP_NAME">%1$s</xliff:g> колонмосу жаңы PIN кодду же сырсөздү сунуштайт, ансыз талапка ылайык иштебеши мүмкүн"</string>
<string name="unlock_footer_low_complexity_requested" msgid="2517656037576567971">"<xliff:g id="APP_NAME">%1$s</xliff:g> колонмосу жаңы графикалык ачкычты, PIN кодду же сырсөздү сунуштайт, ансыз талапка ылайык иштебеши мүмкүн"</string>
- <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу экрандын жаңы кулпусун сунуштайт"</string>
+ <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу экранды жаңыча кулпулоону сунуштайт"</string>
<string name="lock_failed_attempts_before_wipe" msgid="6874652886647631418">"Кайталап көрүңүз. <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g> ичинен <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g> аракет калды."</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="7450322567217745999">"Бир гана аракет калды"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="5816668400104558952">"Эгер графикалык ачкычты кийинки жолу туура эмес киргизсеңиз, бул түзмөктүн дайындары өчүрүлөт"</string>
@@ -847,7 +847,7 @@
<string name="bluetooth_preference_scan_title" msgid="3460316252463771851">"Түзмөктөрдү издөө"</string>
<string name="bluetooth_search_for_devices" msgid="6516902340975407648">"Жаңылоо"</string>
<string name="bluetooth_searching_for_devices" msgid="6541984133657573124">"Изделүүдө…"</string>
- <string name="bluetooth_preference_device_settings" msgid="1688662188157019998">"Түзмөктүн жөндөөлөрү"</string>
+ <string name="bluetooth_preference_device_settings" msgid="1688662188157019998">"Түзмөктү тууралоо"</string>
<string name="bluetooth_preference_paired_dialog_title" msgid="1090131276572055841">"Жупташкан түзмөк"</string>
<string name="bluetooth_preference_paired_dialog_internet_option" msgid="4337953030661626289">"Интернет"</string>
<string name="bluetooth_preference_paired_dialog_keyboard_option" msgid="8247634441638919886">"Баскычтоп"</string>
@@ -894,7 +894,7 @@
<string name="bluetooth_device_advanced_online_mode_summary" msgid="271856759516576615">"Bluetooth түзмөгүнө туташуу"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="7892879890208207223">"Төмөнкү үчүн колдонуу"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="4798081898389041132">"Атын өзгөртүү"</string>
- <string name="bluetooth_device_advanced_enable_opp_title" msgid="7604726126703453984">"Кирүүчү файл өткөрүүгө уруксат"</string>
+ <string name="bluetooth_device_advanced_enable_opp_title" msgid="7604726126703453984">"Файлдар алынсын"</string>
<string name="bluetooth_pan_user_profile_summary_connected" msgid="7851033200857999275">"Интернетке мүмкүнчүлүк алуу үчүн түзмөккө туташты"</string>
<string name="bluetooth_pan_nap_profile_summary_connected" msgid="5563892893331988809">"Түзмөк модем катары иштөөдө"</string>
<string name="bluetooth_dock_settings" msgid="1709536202189755022">"Докко орнотуунун жөндөөлөрү"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Жайгашкан жерди аныктоо кызматтары"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Жайгашкан жерди аныктоо кызматтары"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Жумуш үчүн Жайгашкан жерди аныктоо кызматтары"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Убакыт алкагын жүргөн жерге жараша коюу"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Жайгашкан жерди аныктоо"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Түзмөктүн жайгашкан жерин аныктоо керектелет"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Жайгашкан жериңиздин негизинде убакыт алкагын жөндөө үчүн жайгашкан жерди аныктоо функциясын күйгүзүп, убакыт алкагынын жөндөөлөрүн жаңыртыңыз"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Жайгашкан жерди аныктоо жөндөөлөрү"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Убакыт алкагын жайгашкан жер аркылуу аныктоо өчүрүлгөн"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Убакыт алкагын жайгашкан жер аркылуу аныктоо колдоого алынбайт"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Убакыт алкагын жайгашкан жер аркылуу аныктоо жөндөөлөрүн өзгөртүүгө болбойт"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Убакыт алкагы жайгашкан жерге жараша орнотулушу мүмкүн"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi ж-а мобилдик жайгаштыруу"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Колдонмолорго Google жайгаштыруу м-н ордуңузду тактоого жол берүү. Жайгашуу берилиштери аноним. чогултулат ж-а Google\'га берилет."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Жайгашуу Wi‑Fi аркылуу аныкталды"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2908,7 +2911,7 @@
<string name="battery_total_usage_less_minute" msgid="7614894994853812076">"Акыркы жолу толук кубатталгандан бери жалпысынан 1 мүнөткө жетпейт"</string>
<string name="battery_total_usage_less_minute_24hr" msgid="699268449496083696">"Акыркы 24 сааттын ичинде жалпысынан 1 мүнөткө жетпейт"</string>
<string name="battery_total_usage_less_minute_with_period" msgid="571923652373556609">"<xliff:g id="TIME_PERIOD">^1</xliff:g> чейин жалпысынан 1 мүнөткө жетпейт"</string>
- <string name="battery_bg_usage_less_minute" msgid="3919299699317615641">"Акыркы жолу толук кубатталгандан бери фондо 1 мүнөттөн аз убакытка колдонулган"</string>
+ <string name="battery_bg_usage_less_minute" msgid="3919299699317615641">"Акыркы жолу толук кубатталгандан бери фондо 1 мүнөткө жетпейт убакытка колдонулган"</string>
<string name="battery_bg_usage_less_minute_24hr" msgid="5016983623297552985">"Акыркы 24 сааттын ичинде фондо 1 мүнөткө жетпеген убакыт колдонулду"</string>
<string name="battery_bg_usage_less_minute_with_period" msgid="7624741677867017430">"<xliff:g id="TIME_PERIOD">^1</xliff:g> аралыгында 1 мүнөткө жетпеген убакытта фондо колдонулган"</string>
<string name="battery_total_usage" msgid="4685408616230899847">"Акыркы жолу толук кубатталгандан бери жалпысынан <xliff:g id="TIME">^1</xliff:g>"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3386,7 +3393,7 @@
<string name="user_cannot_manage_message" product="default" msgid="6434662649769855494">"Телефондун ээси гана колдонуучуларды башкара алат."</string>
<string name="user_cannot_add_accounts_message" msgid="2351326078338805337">"Чектелген профайлдар эсеп жарата алышпайт"</string>
<string name="user_remove_user_menu" msgid="2183714948094429367">"<xliff:g id="USER_NAME">%1$s</xliff:g> бул түзмөктөн жок кылуу"</string>
- <string name="user_lockscreen_settings" msgid="4596612658981942092">"Кулпуланган экран жөндөөлөрү"</string>
+ <string name="user_lockscreen_settings" msgid="4596612658981942092">"Экранды кулпулоо параметрлери"</string>
<string name="user_add_on_lockscreen_menu" msgid="2539059062034644966">"Кулпуланган экрандан колдонуучуларды кошуу"</string>
<string name="switch_to_user_zero_when_docked" msgid="2554028721803481458">"Туташтырылганда админге которулуңуз"</string>
<string name="user_confirm_remove_self_title" msgid="926265330805361832">"Өзүңүздү жок кылалыбы?"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, өркүндөтүлгөн чалуу, 5g аркылуу чалуу"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"тил кошуу, тил кошуу"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"тексттин өлчөмү, чоң өлчөмдө басып чыгаруу, чоң арип, чоң текст, начар көрүү, текстти чоңойтуу, арип чоңойткуч, арипти чоңойтуу"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ар дайым күйүк дисплей, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Демейки үн"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Шыңгырлар менен билдирмелердин үнүнүн катуулугу <xliff:g id="PERCENTAGE">%1$s</xliff:g> коюлду"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Үн деңгээли, дирилдөө, \"Тынчымды алба\" режими"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Эч качан"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Түзмөктөгү жана колдонмодогу билдирмелер"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Билдирмелерди кайсы колдонмолор көрө аларын белгилеңиз"</string>
@@ -5540,7 +5540,7 @@
<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_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_summary" msgid="7550610071666801935">"Сезгичтигин тууралоо үчүн кубат баскычын канчага чейин коё бербей басып туруу керектигин тандаңыз"</string>
<string name="power_menu_long_press_for_assist_sensitivity_low_label" msgid="3430099983480845635">"Кыска"</string>
<string name="power_menu_long_press_for_assist_sensitivity_high_label" msgid="2059686170350829156">"Узун"</string>
<string name="lockscreen_privacy_wallet_setting_toggle" msgid="4188327143734192000">"Капчыкты көрсөтүү"</string>
@@ -5772,7 +5772,7 @@
<string name="ingress_rate_limit_title" msgid="2106694002836274350">"Тармактан жүктөп алуу ылдамдыгынын чеги"</string>
<string name="ingress_rate_limit_summary" msgid="1097811019742438371">"Интернет байланышын камсыздаган бардык тармактарга колдонула турган тармактын өткөрүү жөндөмдүүлүгүнүн кирүү жыштыгынын чегин конфигурациялаңыз."</string>
<string name="ingress_rate_limit_dialog_title" msgid="5359461052422633789">"Тармактан жүктөп алуу ылдамдыгынын чегин конфигурациялаңыз"</string>
- <string name="ingress_rate_limit_no_limit_entry" msgid="8741098826008012163">"Чек жок"</string>
+ <string name="ingress_rate_limit_no_limit_entry" msgid="8741098826008012163">"Чектелбейт"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Кабарлоо"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"<xliff:g id="CURRENTAPP">%1$s</xliff:g> колдонмосунда кабарлоо"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Жакын жерде угузулган кабарларды угуңуз"</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 f4e51a3..d062579 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"ຕັ້ງວັນທີ ແລະເວລາ"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"ຕັ້ງຄ່າວັນທີ, ເວລາ, ເຂດເວລາ & ຮູບແບບ"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ຕັ້ງເວລາອັດຕະໂນມັດ"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ຕັ້ງເຂດເວລາອັດຕະໂນມັດ"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ຕັ້ງຄ່າໂດຍອັດຕະໂນມັດ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ໃຊ້ຄ່າເລີ່ມຕົ້ນຂອງສະຖານທີ່"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"ຮູບແບບເວລາ 24 ຊົ່ວໂມງ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"ໃຊ້ຮູບແບບ 24 ຊົ່ວໂມງ"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"ບໍລິການສະຖານທີ່"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"ບໍລິການສະຖານທີ່"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"ບໍລິການສະຖານທີ່ສຳລັບວຽກ"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"ໃຊ້ສະຖານທີ່ເພື່ອຕັ້ງເຂດເວລາ"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"ໃຊ້ສະຖານທີ່"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"ຈຳເປັນຕ້ອງໃຊ້ສະຖານທີ່ອຸປະກອນ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"ເພື່ອຕັ້ງເຂດເວລາໂດຍໃຊ້ສະຖານທີ່ຂອງທ່ານ, ໃຫ້ເປີດໃຊ້ສະຖານທີ່ກ່ອນ, ຈາກນັ້ນອັບເດດການຕັ້ງຄ່າເຂດເວລາ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"ການຕັ້ງຄ່າສະຖານທີ່"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"ປິດການນຳໃຊ້ການກວດຫາເຂດເວລາສະຖານທີ່ແລ້ວ"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"ບໍ່ຮອງຮັບການກວດຫາເຂດເວລາສະຖານທີ່"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"ບໍ່ອະນຸຍາດໃຫ້ປ່ຽນການກວດຫາເຂດເວລາສະຖານທີ່"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"ສະຖານທີ່ອາດຖືກໃຊ້ເພື່ອຕັ້ງຄ່າເຂດເວລາ"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi & ສະຖານທີ່ເຄືອຂ່າຍມືຖື"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"ໃຫ້ແອັບຯຕ່າງໆໃຊ້ບໍລິການສະຖານທີ່ຂອງ Google ເພື່ອປະເມີນສະຖານທີ່ຂອງທ່ານໄດ້ໄວຂຶ້ນ. ຂໍ້ມູນສະຖານທີ່ທີ່ບໍ່ລະບຸໂຕຕົນຈະຖືກເກັບກຳ ແລະສົ່ງໃຫ້ Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"ສະຖານທີ່ທີ່ລະບຸໂດຍ Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, ການໂທຂັ້ນສູງ, ການໂທ 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ເພີ່ມພາສາ, ເພີ່ມພາສາໃດໜຶ່ງ"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ຂະໜາດໜ້າຈໍ, ພິມຂະໜາດໃຫຍ່, ຟອນຂະໜາດໃຫຍ່, ຂໍ້ຄວາມຂະໜາດໃຫຍ່, ເບິ່ງເຫັນຍາກ, ເຮັດໃຫ້ຂໍ້ຄວາມໃຫຍ່ຂຶ້ນ, ຕົວຂະຫຍາຍຟອນ, ການຂະຫຍາຍຟອນ"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ໜ້າຈໍແບບເປີດຕະຫຼອດ, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ສຽງເລີ່ມຕົ້ນ"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"ລະດັບສຽງໂທເຂົ້າ ແລະ ສຽງແຈ້ງເຕືອນທີ່ <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ລະດັບສຽງ, ການສັ່ນເຕືອນ, ຫ້າມລົບກວນ"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ບໍ່ສົ່ງ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ການແຈ້ງເຕືອນອຸປະກອນ ແລະ ແອັບ"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"ຄວບຄຸມວ່າແອັບ ແລະ ອຸປະກອນໃດສາມາດອ່ານການແຈ້ງເຕືອນໄດ້"</string>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index a40acf1..e71d575 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -275,7 +275,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Nustatyti datą ir laiką"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Nustatyti datą, laiką, laiko juostą ir formatus"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Nustatyti laiką automatiškai"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Nustatyti laiko juostą automatiškai"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Nustatyti automatiškai"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Naudoti numatytuosius lokalės nustatymus"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 val. formatas"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Naudoti 24 val. formatą"</string>
@@ -1932,7 +1932,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Vietovės paslaugos"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Vietovės paslaugos"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Darbui skirtos Vietovės paslaugos"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Naudoti vietovės duomenis laiko juostai nustatyti"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Naudoti vietovę"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Reikalinga įrenginio vietovė"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Jei norite nustatyti laiko juostą naudodami savo vietovę, įjunkite vietovės funkciją, tada atnaujinkite laiko juostos nustatymus"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Vietovės nustatymai"</string>
@@ -1941,6 +1941,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Vietovės laiko juostos nustatymas išjungtas"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Vietovės laiko juostos nustatymas nepalaikomas"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Vietovės laiko juostos nustatymo pakeitimai neleidžiami"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Vietovės duomenys gali būti naudojami laiko juostai nustatyti"</string>
<string name="location_network_based" msgid="5247042890080021887">"„Wi-Fi“ ir mob. tinklo vietovė"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Leisti programoms naud. „Google“ viet. pasl., kad viet. būtų nustatoma greičiau. Anonim. viet. duom. bus renk. ir siunč. „Google“."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Vietą nustatė „Wi-Fi“"</string>
@@ -1986,6 +1987,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2999,6 +3002,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>
@@ -3088,6 +3092,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>
@@ -3775,8 +3782,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5G, VoNR, išplėstinės skambinimo parinktys, 5G skambinimas"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"pridėti kalbą"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"teksto dydis, didelis spaudinys, didelis šriftas, didelis tekstas, sutrikusio regėjimo asmuo, padaryti tekstą didesnį, šrifto didinimo priemonė, šrifto padidinimas"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"visada veikiantis ekranas, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Numatytasis garsas"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Skambučių ir nustatymų garsumas: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Garsumas, vibravimas, netrukdymo režimas"</string>
@@ -4089,18 +4095,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Niekada"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Įrenginių ir programų pranešimai"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Valdykite, kurios programos ir įrenginiai gali nuskaityti pranešimus"</string>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 7974960..4bc99ee 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -273,7 +273,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Datuma un laika iestatīšana"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Iestatīt datumu, laiku, laika joslu un formātus"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Iestatīt laiku automātiski"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Automātiski iestatīt laika joslu"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Iestatīt automātiski"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Izmantot lokalizācijas noklusējuma vērtību"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 stundu formāts"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Izmantot 24 stundu formātu"</string>
@@ -1910,7 +1910,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Atrašanās vietu pakalpojumi"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Atrašanās vietu pakalpojumi"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Atrašanās vietu pakalpojumi darbam"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Izmantot atrašanās vietu, lai iestatītu laika joslu"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Izmantot atrašanās vietu"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Nepieciešama ierīces atrašanās vieta"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Lai iestatītu laika joslu atbilstoši atrašanās vietai, ieslēdziet atrašanās vietas noteikšanu un pēc tam atjauniniet laika joslas iestatījumus"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Atrašanās vietas iestatījumi"</string>
@@ -1919,6 +1919,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Atrašanās vietas laika joslas noteikšana ir atspējota."</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Atrašanās vietas laika joslas noteikšana netiek atbalstīta."</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Atrašanās vietas laika joslas noteikšanas izmaiņas nav atļautas."</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Atrašanās vietu var izmantot, lai iestatītu laika joslu"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi un mob. tīklu atr. vieta"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Ļaut lietotnēm izmantot Google atrašanās vietas pakalpojumu, lai ātrāk noteiktu jūsu atrašanās vietu. Tiks vākti un nosūtīti uz Google serveriem anonīmi atrašanās vietas dati."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi-Fi noteikta atrašanās vieta"</string>
@@ -1964,6 +1965,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2961,6 +2964,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>
@@ -3050,6 +3054,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>
@@ -3732,8 +3739,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, paplašinātas zvanu iespējas, 5g zvani"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"pievienot valodu, valodas pievienošana"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"teksta lielums, lieli burti, lieli fonti, liels teksts, vājredzība, padarīt tekstu lielāku, fontu palielinātājs, fontu palielināšana"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"nepārtraukti aktīvs displejs, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Noklusējuma skaņa"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Zvanu un paziņojumu signāla skaļums: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Skaļums, vibrācija, režīms “Netraucēt”"</string>
@@ -4045,16 +4051,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Pārvaldiet, kuras lietotnes un ierīces var lasīt paziņojumus."</string>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 35fa8c2..74b5345 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Постави датум и време"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Постави датум, време, временска зона и формати"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Постави време автоматски"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Постави часовна зона автоматски"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Постави автоматски"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Користи локален стандард"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Формат од 24 часа"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Користи 24-часовен формат"</string>
@@ -411,7 +411,7 @@
<string name="security_settings_face_settings_require_attention_details" msgid="2546230511769544074">"За да го отклучите телефонот, очите мора да ви бидат отворени"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="6603039421004198334">"Секогаш барај потврда"</string>
<string name="security_settings_face_settings_require_confirmation_details" msgid="3498729789625461914">"При користење „Отклучување со лик“ во апликации, секогаш барај потврда"</string>
- <string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"Избриши го моделот на лице"</string>
+ <string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"Избриши го моделот на лик"</string>
<string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Поставете „Отклучување со лик“"</string>
<string name="security_settings_face_settings_footer" msgid="625696606490947189">"Користете го вашето лице за да го отклучувате телефонот или за проверка во апликации, како на пр., кога се најавувате или одобрувате купување.\n\nИмајте предвид:\nможе да имате поставено само еден лик. За да додадете друг лик, избришете го моменталниот.\n\nПоглед кон телефонот може да го отклучи и кога немате таква намера.\n\nНекој друг може да го отклучи вашиот телефон ако го подигне до вашиот лик.\n\nТелефонот може да го отклучи некој што многу наликува на вас, на пример, идентичен близнак."</string>
<string name="security_settings_face_settings_footer_attention_not_supported" msgid="2071065435536235622">"Користете го вашето лице за да го отклучувате телефонот или за проверка во апликации, како на пр., кога се најавувате или одобрувате купување.\n\nИмајте предвид:\nможе да имате поставено само еден лик. За да додадете друг лик, избришете го моменталниот.\n\nПоглед кон телефонот може да го отклучи и кога немате таква намера.\n\nНекој друг може да го отклучи вашиот телефон ако го подигне до вашиот лик, дури и ако очите ви се затворени.\n\nТелефонот може да го отклучи некој што многу наликува на вас, на пример, идентичен близнак."</string>
@@ -483,7 +483,7 @@
<string name="biometric_settings_intro" msgid="4263069383955676756">"Кога ќе поставите „Отклучување со лик“ и „Отклучување со отпечаток на прст“, телефонот ќе го побара вашиот отпечаток кога носите маска или сте на темно место"</string>
<string name="biometric_settings_category_ways_to_unlock" msgid="3384767901580915266">"Начини на отклучување"</string>
<string name="biometric_settings_use_biometric_unlock_phone" msgid="8180914579885804358">"Отклучувајте го телефонот"</string>
- <string name="biometric_settings_use_biometric_for_apps" msgid="6201168728906364189">"Потврдете дека сте вие во апликации"</string>
+ <string name="biometric_settings_use_biometric_for_apps" msgid="6201168728906364189">"Потврдувајте дека сте вие во апликациите"</string>
<string name="biometric_settings_use_face_preference_summary" msgid="1821648836899408477">"со користење лик"</string>
<string name="biometric_settings_use_fingerprint_preference_summary" msgid="6077762097826050165">"со користење отпечаток"</string>
<string name="biometric_settings_use_face_or_fingerprint_preference_summary" msgid="3029102492674234728">"со користење лик или отпечаток"</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Услуги според локација"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Услуги според локација"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Услуги според локација за работа"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Користи ја локацијата за поставување часовна зона"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Користете ја локацијата"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Потребна е локацијата на уредот"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"За да ја поставите временската зона преку локацијата, вклучете ја локацијата, а потоа ажурирајте ги поставките за временската зона"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Поставки за локација"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Откривање временска зона на локација е оневозможено"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Откривањето временска зона на локација не е поддржано"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Промените на откривањето временска зона на локација не се дозволени"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Може да се користи локацијата за да се постави временската зона"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi &лок. на моб. мрежа"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"За брза процена, овозможи услуга за локација на Google. Анонимните податоци за локација се собираат и се испраќаат на Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Локацијата е утврдена со Wi-Fi"</string>
@@ -1944,6 +1945,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -1973,7 +1976,7 @@
<string name="lockpassword_forgot_password" msgid="5730587692489737223">"Ја заборавивте лозинката?"</string>
<string name="lockpassword_forgot_pattern" msgid="1196116549051927516">"Ја заборавивте шемата?"</string>
<string name="lockpassword_forgot_pin" msgid="7164232234705747672">"Го заборавивте PIN-кодот?"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"Користете ја шемата на уредот за да продолжите"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"Внесете ја шемата на уредот за да продолжите"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="9206928587904701094">"Внесете го PIN-кодот на уредот за да продолжите"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="2616127423884477152">"Внесете ја лозинката на уредот за да продолжите"</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="9110305410672321714">"Користете ја шемата на работниот профил за да продолжите"</string>
@@ -2925,6 +2928,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>
@@ -3014,6 +3018,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>
@@ -3691,8 +3698,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5G, VoNR, напредно повикување, повикување преку 5G"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"додај јазик, додај некој јазик"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"големина на текст, големи букви, голем фонт, голем текст, слаб вид, зголемување текст, фонт, зголеми, зголеми фонт"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"секогаш вклучен екран, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Стандарден звук"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Јачината на звук при ѕвонење и известувања е <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Јачина на звук, вибрации и „Не вознемирувај“"</string>
@@ -4003,14 +4009,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Никогаш"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Известувања во уреди и апликации"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Контролирајте кои апликации и уреди може да ги читаат известувањата"</string>
diff --git a/res/values-ml/arrays.xml b/res/values-ml/arrays.xml
index 2aad677..252b4e5 100644
--- a/res/values-ml/arrays.xml
+++ b/res/values-ml/arrays.xml
@@ -521,7 +521,7 @@
</string-array>
<string-array name="cdma_system_select_choices">
<item msgid="1205665684426617345">"ഹോം മാത്രം"</item>
- <item msgid="6691772120712000966">"സ്വമേധയാ"</item>
+ <item msgid="6691772120712000966">"സ്വയമേവ"</item>
</string-array>
<string-array name="preferred_network_mode_choices">
<item msgid="5746729990546256950">"മുൻഗണന നൽകുന്നത് GSM/WCDMA"</item>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index b8c1a6d..635b76a 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -100,7 +100,7 @@
<string name="bluetooth_show_received_files" msgid="685424727760622632">"സ്വീകരിച്ച ഫയലുകള്"</string>
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"Bluetooth ഓഫാണ്"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"അത് ഓണാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
- <string name="device_picker" msgid="2427027896389445414">"ബ്ലൂടൂത്തുപകരണം തിരഞ്ഞെടുക്കൂ"</string>
+ <string name="device_picker" msgid="2427027896389445414">"Bluetooth ഉപകരണം തിരഞ്ഞെടുക്കൂ"</string>
<string name="bluetooth_ask_enablement" msgid="1529030199895339199">"Bluetooth ഓണാക്കാൻ <xliff:g id="APP_NAME">%1$s</xliff:g> താൽപ്പര്യപ്പെടുന്നു"</string>
<string name="bluetooth_ask_disablement" msgid="1879788777942714761">"Bluetooth ഓഫാക്കാൻ <xliff:g id="APP_NAME">%1$s</xliff:g> താൽപ്പര്യപ്പെടുന്നു"</string>
<string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"Bluetooth ഓണാക്കാൻ ഒരു ആപ്പ് താൽപ്പര്യപ്പെടുന്നു"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"തീയതിയും സമയവും സജ്ജീകരിക്കുക"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"തീയതി, സമയം, സമയ മേഖല, ഫോർമാറ്റുകൾ എന്നിവ സജ്ജീകരിക്കുക"</string>
<string name="date_time_auto" msgid="4239202185055225869">"സമയം സ്വയമേവ സജ്ജീകരിക്കുക"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"സമയമേഖല സ്വയമേവ സജ്ജീകരിക്കുക"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"സ്വയമേവ സജ്ജീകരിക്കുക"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ഡിഫോൾട്ട് ഭാഷ ഉപയോഗിക്കുക"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 മണിക്കൂർ ഫോർമാറ്റ്"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-മണിക്കൂർ ഫോർമാറ്റ് ഉപയോഗിക്കുക"</string>
@@ -1042,7 +1042,7 @@
<string name="wifi_password" msgid="1458802324849513755">"പാസ്വേഡ്"</string>
<string name="wifi_show_password" msgid="6865993988238157923">"പാസ്വേഡ് കാണിക്കുക"</string>
<string name="wifi_ap_band_config" msgid="1589020070150933055">"AP ബാൻഡ് തിരഞ്ഞെടുക്കുക"</string>
- <string name="wifi_ap_choose_auto" msgid="8944442003151215691">"സ്വമേധയാ"</string>
+ <string name="wifi_ap_choose_auto" msgid="8944442003151215691">"സ്വയമേവ"</string>
<string name="wifi_ap_choose_2G" msgid="1436802195991542016">"2.4 GHz ബാൻഡ്"</string>
<string name="wifi_ap_choose_5G" msgid="8413248472288180075">"5.0 GHz ബാൻഡ്"</string>
<string name="wifi_ap_prefer_5G" msgid="2520628479818369902">"5.0 GHz ബാൻഡിന് മുൻഗണന"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"ലൊക്കേഷൻ സേവനങ്ങൾ"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"ലൊക്കേഷൻ സേവനങ്ങൾ"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"ജോലിക്കുള്ള ലൊക്കേഷൻ സേവനങ്ങൾ"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"സമയമേഖല സജ്ജീകരിക്കാൻ ലൊക്കേഷൻ ഉപയോഗിക്കുക"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"ലൊക്കേഷൻ ഉപയോഗിക്കുക"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"ഉപകരണ ലൊക്കേഷൻ ആവശ്യമാണ്"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"നിങ്ങളുടെ ലൊക്കേഷൻ ഉപയോഗിച്ച് സമയമേഖല സജ്ജീകരിക്കാൻ, ലൊക്കേഷൻ ഓണാക്കി സമയമേഖല ക്രമീകരണം അപ്ഡേറ്റ് ചെയ്യുക"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"ലൊക്കേഷൻ ക്രമീകരണം"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"ലൊക്കേഷൻ ഉപയോഗിച്ചുള്ള സമയമേഖല കണ്ടെത്തൽ പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"ലൊക്കേഷൻ ഉപയോഗിച്ചുള്ള സമയമേഖല കണ്ടെത്തൽ പിന്തുണയ്ക്കുന്നില്ല"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"ലൊക്കേഷൻ ഉപയോഗിച്ചുള്ള സമയമേഖല കണ്ടെത്തലിൽ മാറ്റങ്ങൾ അനുവദനീയമല്ല"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"സമയമേഖല സജ്ജീകരിക്കാൻ ലൊക്കേഷൻ ഉപയോഗിച്ചേക്കാം"</string>
<string name="location_network_based" msgid="5247042890080021887">"വൈഫൈ & മൊബൈൽ നെറ്റ്വർക്ക് ലൊക്കേഷൻ"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"നിങ്ങളുടെ ലൊക്കേഷൻ വേഗത്തിൽ നിർണ്ണയിക്കാൻ Google-ന്റെ ലൊക്കേഷൻ സേവനം ഉപയോഗിക്കാൻ അപ്ലിക്കേഷനുകളെ അനുവദിക്കുക. അജ്ഞാത ലൊക്കേഷൻ ഡാറ്റ ശേഖരിച്ച് Google-ന് അയയ്ക്കും."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"വൈഫൈ നിർണ്ണയിച്ച ലൊക്കേഷൻ"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, വിപുലീകരിച്ച കോളിംഗ്, 5g കോളിംഗ്"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ഭാഷ ചേർക്കുക, ഒരു ഭാഷ ചേർക്കുക"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ടെക്സ്റ്റ് വലുപ്പം, വലിയ പ്രിന്റ്, വലിയ ഫോണ്ട്, വലിയ ടെക്സ്റ്റ്, കുറഞ്ഞ കാഴ്ച, ടെക്സ്റ്റ് കൂടുതൽ വലുതാക്കുക, ഫോണ്ട് വലുതാക്കൽ, ഫോണ്ടിന്റെ വലുപ്പം കൂട്ടൽ"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"എപ്പോഴും ഓണായ ഡിസ്പ്ലേ, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"സ്ഥിര ശബ്ദം"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"റിംഗ് ചെയ്യുന്നതിന്റെയും അറിയിപ്പിന്റെയും ശബ്ദം <xliff:g id="PERCENTAGE">%1$s</xliff:g> ആണ്"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ശബ്ദം, വൈബ്രേഷൻ, ശല്യപ്പെടുത്തരുത്"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ഒരിക്കലും"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ഉപകരണ, ആപ്പ് അറിയിപ്പുകൾ"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"ഏതൊക്കെ ആപ്പുകൾക്കും ഉപകരണങ്ങൾക്കും അറിയിപ്പുകൾ വായിക്കാൻ കഴിയുമെന്നത് നിയന്ത്രിക്കുക"</string>
@@ -4434,7 +4434,7 @@
<string name="app_permissions_summary" msgid="2709819220672938860">"<xliff:g id="APPS">%1$s</xliff:g> ഉപയോഗിക്കുന്ന ആപ്പുകൾ"</string>
<string name="app_permissions_summary_more" msgid="6247952473615352350">"<xliff:g id="APPS">%1$s</xliff:g> എന്നിവയും മറ്റും ഉപയോഗിക്കുന്ന ആപ്പുകൾ"</string>
<string name="tap_to_wake" msgid="3313433536261440068">"സജീവമാക്കാൻ ടാപ്പുചെയ്യുക"</string>
- <string name="tap_to_wake_summary" msgid="6641039858241611072">"ഉപകരണം സജീവമാക്കാൻ സ്ക്രീനിലെവിടെയെങ്കിലും രണ്ടുതവണ ടാപ്പുചെയ്യുക"</string>
+ <string name="tap_to_wake_summary" msgid="6641039858241611072">"ഉപകരണം സജീവമാക്കാൻ സ്ക്രീനിലെവിടെയെങ്കിലും ഡബിൾ ടാപ്പ് ചെയ്യുക"</string>
<string name="domain_urls_title" msgid="7012209752049678876">"ലിങ്കുകൾ തുറക്കൽ"</string>
<string name="domain_urls_summary_none" msgid="1132578967643384733">"പിന്തുണയ്ക്കുന്ന ലിങ്കുകൾ തുറക്കരുത്"</string>
<string name="domain_urls_summary_one" msgid="3312008753802762892">"<xliff:g id="DOMAIN">%s</xliff:g> തുറക്കുക"</string>
@@ -4948,8 +4948,8 @@
<string name="keywords_gesture_navigation_settings" msgid="667561222717238931">"വിരൽചലന നാവിഗേഷൻ, ബാക്ക് സെൻസിറ്റിവിറ്റി, തിരികെ പോകാനുള്ള വിരൽചലനം"</string>
<string name="keywords_button_navigation_settings" msgid="7888812253110553920">"നാവിഗേഷൻ, ഹോം ബട്ടൺ"</string>
<string name="ambient_display_title" product="default" msgid="5885136049497127396">"ഫോൺ പരിശോധിക്കുന്നതിന്, ഡബിൾ ടാപ്പ് ചെയ്യുക"</string>
- <string name="ambient_display_title" product="tablet" msgid="205744440641466921">"ടാബ്ലെറ്റ് പരിശോധിക്കുന്നതിന്, രണ്ടുതവണ ടാപ്പുചെയ്യുക"</string>
- <string name="ambient_display_title" product="device" msgid="4164103424628824786">"ഉപകരണം പരിശോധിക്കുന്നതിന്, രണ്ടുതവണ ടാപ്പുചെയ്യുക"</string>
+ <string name="ambient_display_title" product="tablet" msgid="205744440641466921">"ടാബ്ലെറ്റ് പരിശോധിക്കുന്നതിന്, ഡബിൾ ടാപ്പ് ചെയ്യുക"</string>
+ <string name="ambient_display_title" product="device" msgid="4164103424628824786">"ഉപകരണം പരിശോധിക്കുന്നതിന്, ഡബിൾ ടാപ്പ് ചെയ്യുക"</string>
<string name="one_handed_title" msgid="2584414010282746195">"ഒറ്റക്കൈ മോഡ്"</string>
<string name="one_handed_mode_enabled" msgid="3396864848786359651">"ഒറ്റക്കൈ മോഡ് ഉപയോഗിക്കുക"</string>
<string name="one_handed_mode_shortcut_title" msgid="1847871530184067369">"ഒറ്റക്കൈ മോഡ് കുറുക്കുവഴി"</string>
@@ -4962,7 +4962,7 @@
<string name="one_handed_action_pull_down_screen_summary" msgid="7582432473450036628">"സ്ക്രീനിന്റെ മുകൾഭാഗം നിങ്ങളുടെ തള്ളവിരലിന് എത്താവുന്ന പരിധിയിലേക്ക് നീങ്ങും."</string>
<string name="one_handed_action_show_notification_title" msgid="8789305491485437130">"അറിയിപ്പുകൾ കാണിക്കുക"</string>
<string name="one_handed_action_show_notification_summary" msgid="8281689861222000436">"അറിയിപ്പുകളും ക്രമീകരണവും ദൃശ്യമാകും."</string>
- <string name="ambient_display_summary" msgid="2650326740502690434">"സമയവും അറിയിപ്പുകളും മറ്റ് വിവരങ്ങളും പരിശോധിക്കുന്നതിന്, നിങ്ങളുടെ സ്ക്രീനിൽ രണ്ട് തവണ ടാപ്പ് ചെയ്യുക."</string>
+ <string name="ambient_display_summary" msgid="2650326740502690434">"സമയവും അറിയിപ്പുകളും മറ്റ് വിവരങ്ങളും പരിശോധിക്കുന്നതിന്, നിങ്ങളുടെ സ്ക്രീനിൽ ഡബിൾ ടാപ്പ് ചെയ്യുക."</string>
<string name="ambient_display_pickup_title" product="default" msgid="4418310591912877548">"പരിശോധിക്കാൻ ഫോണെടുക്കുക"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="8055486872070888377">"പരിശോധിക്കുന്നതിന് ടാബ്ലെറ്റ് എടുത്തുയർത്തുക"</string>
<string name="ambient_display_pickup_title" product="device" msgid="8980156994848721455">"പരിശോധിക്കുന്നതിന് ഉപകരണം എടുത്തുയർത്തുക"</string>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index b0ca9f4..7de1adb 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Огноо болон цагийг тохируулах"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Огноо, цаг, цагийн бүс & форматуудыг тохируулах"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Цагийг автоматаар тохируулах"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Цагийн бүсийг автоматаар тохируулах"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Автоматаар тохируулах"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Бүс нутгийн өгөгдмөлийг ашиглах"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 цагийн формат"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 цагийн формат ашиглах"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Байршлын үйлчилгээ"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Байршлын үйлчилгээ"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Ажилд зориулсан байршлын үйлчилгээ"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Цагийн бүс тохируулахын тулд байршлыг ашиглана уу"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Байршлыг ашиглах"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Төхөөрөмжийн байршил шаардлагатай"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Та байршлаа ашиглан цагийн бүс тохируулахын тулд байршлыг асааж, цагийн бүсийн тохиргоог шинэчилнэ үү"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Байршлын тохиргоо"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Байршлын цагийн бүс илрүүлэх горимыг идэвхгүй болгосон"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Байршлын цаг бүс илрүүлэх горимыг дэмждэггүй"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Байршлын цагийн бүс илрүүлэх горимыг өөрчлөхийг зөвшөөрөхгүй"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Байршлыг цагийн бүс тохируулахад ашиглаж магадгүй"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi & мобайл сүлжээний байршил"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Апп-уудад Google-н байршлын үйлчилгээ ашиглан таны байршлыг хурдан олохыг зөвшөөрөх. Нэргүй байршлын мэдээлэл цуглуулагдаж Google рүү илгээгдэх болно."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi-Fi-р тодорхойлогдсон байршил"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2795,8 +2798,8 @@
<string name="smart_battery_footer" msgid="8407121907452993645">"Батарейн менежер нь аппуудыг батарейг хурдан дуусгаж байгааг илрүүлэх үед та тэдгээр аппыг хязгаарлах боломжтой. Хязгаарласан аппууд буруу ажиллаж болзошгүй бөгөөд мэдэгдэл хоцорч болзошгүй."</string>
<string name="restricted_app_title" msgid="6585080822121007436">"Хязгаарласан аппууд"</string>
<plurals name="restricted_app_summary" formatted="false" msgid="6059772951505411003">
- <item quantity="other">%1$d аппын батерей ашиглалтыг хязгаарлаж байна</item>
- <item quantity="one">%1$d аппын батерей ашиглалтыг хязгаарлаж байна</item>
+ <item quantity="other">%1$d аппын батарей ашиглалтыг хязгаарлаж байна</item>
+ <item quantity="one">%1$d аппын батарей ашиглалтыг хязгаарлаж байна</item>
</plurals>
<string name="restricted_app_time_summary" msgid="3097721884155913252">"Хязгаарласан <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="restricted_app_detail_footer" msgid="3495725286882138803">"Эдгээр аппыг ард батарей ашиглахыг нь хязгаарласан. Тэдгээр нь зохих ёсоор ажиллахгүй байж магадгүй бөгөөд мэдэгдлүүд саатаж болзошгүй."</string>
@@ -2874,7 +2877,7 @@
<string name="battery_desc_standby" product="default" msgid="2543075041964578103">"Утас идэвхгүй байх үед зарцуулагдсан зай"</string>
<string name="battery_desc_radio" msgid="454677140485133914">"Үүрэн радиод ашиглагдсан зайны цэнэг"</string>
<string name="battery_sugg_radio" msgid="5476234634503535270">"Үүрэн сүлжээгүй газарт нислэгийн горимд шилжүүлэн цэнэгээ хэмнээрэй"</string>
- <string name="battery_desc_flashlight" msgid="6694895513133361404">"Флашд ашиглагддаг батерей"</string>
+ <string name="battery_desc_flashlight" msgid="6694895513133361404">"Флашд ашиглагддаг батарей"</string>
<string name="battery_desc_camera" msgid="6152712271731518018">"Камерын ашигласан тэжээлийн хэмжээ"</string>
<string name="battery_desc_display" msgid="7175017688954602685">"Дэлгэц болон арын гэрэлд зарцуулагдсан зай"</string>
<string name="battery_sugg_display" msgid="3102137296547788111">"Дэлгэцийн гэрэлтүүлэг болон/эсхүл дэлгэцийн завсарлах хугацааг бууруулна уу"</string>
@@ -2885,11 +2888,11 @@
<string name="battery_sugg_bluetooth_headset" msgid="6495519793211758353">"Өөр блютүүт төхөөрөмж холбож үзнэ үү"</string>
<string name="battery_desc_apps" msgid="4187483940383266017">"Апп-н ашигласан зайны цэнэг"</string>
<string name="battery_sugg_apps_info" msgid="4796917242296658454">"Апп-г зогсоох буюу устгах"</string>
- <string name="battery_sugg_apps_gps" msgid="7221335088647925110">"Батерей хэмнэлтийн горимыг сонгох"</string>
+ <string name="battery_sugg_apps_gps" msgid="7221335088647925110">"Батарей хэмнэлтийн горимыг сонгох"</string>
<string name="battery_sugg_apps_settings" msgid="6527223370162382166">"Апп зайны ашиглалтыг багасгах тохиргоог санал болгож болно"</string>
<string name="battery_desc_users" msgid="1959428568888686847">"Хэрэглэгчийн зарцуулсан зай"</string>
<string name="battery_desc_unaccounted" msgid="1649497860893660763">"Бусад цахилгаан хэрэглээ"</string>
- <string name="battery_msg_unaccounted" msgid="5647345548624995064">"Батерейны ашиглалт нь цэнэг зарцуулалтын ойролцоо хэмжүүр бөгөөд батерей зарцуулдаг бүх сурвалжийг багтаахгүй. Бусад цахилгаан хэрэглээ гэдэг нь тооцоолсон ашиглалт болон бодит цэнэг зарцуулалтын зөрүү юм."</string>
+ <string name="battery_msg_unaccounted" msgid="5647345548624995064">"Батарейны ашиглалт нь цэнэг зарцуулалтын ойролцоо хэмжүүр бөгөөд батарей зарцуулдаг бүх сурвалжийг багтаахгүй. Бусад цахилгаан хэрэглээ гэдэг нь тооцоолсон ашиглалт болон бодит цэнэг зарцуулалтын зөрүү юм."</string>
<string name="battery_desc_overcounted" msgid="5982079150027267539">"Хэтрүүлэн тооцсон цахилгаан ашиглалт"</string>
<string name="mah" msgid="3604527474433227780">"<xliff:g id="NUMBER">%d</xliff:g> mAh"</string>
<string name="battery_used_for" msgid="6401552215008504483">"<xliff:g id="TIME">^1</xliff:g>-д ашигласан"</string>
@@ -2923,6 +2926,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>
@@ -2955,7 +2959,7 @@
<string name="battery_saver_master_switch_title" msgid="3474312070095834915">"Батарей хэмнэгчийг ашиглах"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7857393318205740864">"Автоматаар асаах"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="6194649389871448663">"Хэзээ ч үгүй"</string>
- <string name="battery_saver_turn_on_automatically_pct" msgid="4294335680892392449">"батерей <xliff:g id="PERCENT">%1$s</xliff:g> болоход"</string>
+ <string name="battery_saver_turn_on_automatically_pct" msgid="4294335680892392449">"батарей <xliff:g id="PERCENT">%1$s</xliff:g> болоход"</string>
<string name="battery_percentage" msgid="1779934245963043490">"Батарейн хувь"</string>
<string name="battery_percentage_description" msgid="2321465139126125541">"Батарейн хувийг статус самбарт харуулах"</string>
<string name="battery_usage_chart_graph_hint" msgid="9182079098173323005">"Өнгөрсөн 24 цагийн батарейн түвшин"</string>
@@ -3012,6 +3016,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>
@@ -3606,7 +3613,7 @@
<string name="keywords_more_mobile_networks" msgid="5041272719326831744">"үүрэн холбоо, үүрэн холбооны оператор, утасгүй интернэт, дата, 4g, 3g, 2g, lte"</string>
<string name="keywords_wifi_calling" msgid="4319184318421027136">"wifi, wi-fi, залгах, дуудлага"</string>
<string name="keywords_display" msgid="874738809280751745">"дэлгэц, мэдрэгчтэй дэлгэц"</string>
- <string name="keywords_display_brightness_level" msgid="850742707616318056">"бүдэг гэрэлтэй дэлгэц, мэдрэмтгий дэлгэц, батерей, гэгээлэг"</string>
+ <string name="keywords_display_brightness_level" msgid="850742707616318056">"бүдэг гэрэлтэй дэлгэц, мэдрэмтгий дэлгэц, батарей, гэгээлэг"</string>
<string name="keywords_display_night_display" msgid="4711054330804250058">"бүдэг гэрэлтэй дэлгэц, шөнө, уусгалт, шөнийн ээлж, гэрэлтүүлэг, дэлгэцийн өнгө, өнгө, өнгө"</string>
<string name="keywords_display_wallpaper" msgid="8478137541939526564">"дэвсгэр, өөрчлөх, дэлгэцийг өөрчлөх"</string>
<string name="keywords_display_font_size" msgid="3593317215149813183">"текстийн хэмжээ"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, дэвшилтэт дуудлага, 5g дуудлага"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"хэл нэмэх, хэл нэмэх"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"текстийн хэмжээ, том хэвлэл, том фонт, том текст, сул хараа, текстийг илүү том болгох, фонт томруулагч, фонт томруулалт"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"үргэлж дэлгэцэд байх, ҮДБ"</string>
<string name="default_sound" msgid="6604374495015245195">"Үндсэн дуу"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Хонх ба мэдэгдлийн дууны түвшин <xliff:g id="PERCENTAGE">%1$s</xliff:g> байна"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Түвшин, чичиргээ, Бүү саад бол"</string>
@@ -4001,13 +4007,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>
diff --git a/res/values-mr/arrays.xml b/res/values-mr/arrays.xml
index 112a12a..cee98e9 100644
--- a/res/values-mr/arrays.xml
+++ b/res/values-mr/arrays.xml
@@ -242,10 +242,10 @@
<item msgid="2527973826970434181">"फोनवर कॉल करा"</item>
<item msgid="2766022553327609913">"SMS वाचा"</item>
<item msgid="167775364051357284">"SMS लिहा"</item>
- <item msgid="3397583039407928979">"SMS प्राप्त करा"</item>
- <item msgid="3658964859478786980">"आणीबाणी SMS प्राप्त करा"</item>
- <item msgid="7975129014728281140">"MMS प्राप्त करा"</item>
- <item msgid="404809195686849835">"WAP पुश प्राप्त करा"</item>
+ <item msgid="3397583039407928979">"SMS मिळवा"</item>
+ <item msgid="3658964859478786980">"आणीबाणी SMS मिळवा"</item>
+ <item msgid="7975129014728281140">"MMS मिळवा"</item>
+ <item msgid="404809195686849835">"WAP पुश मिळवा"</item>
<item msgid="5167716820004184705">"SMS पाठवा"</item>
<item msgid="3834284815734286927">"ICC SMS वाचा"</item>
<item msgid="6394881108820762646">"ICC SMS लिहा"</item>
@@ -309,10 +309,10 @@
<item msgid="5019327268152480733">"फोनवर कॉल करा"</item>
<item msgid="8001855901083066554">"SMS/MMS वाचा"</item>
<item msgid="187744670643011148">"SMS/MMS लिहा"</item>
- <item msgid="3324078624274013835">"SMS/MMS प्राप्त करा"</item>
- <item msgid="1924065490920451511">"SMS/MMS प्राप्त करा"</item>
- <item msgid="1239934115787777477">"SMS/MMS प्राप्त करा"</item>
- <item msgid="1030342664910454057">"SMS/MMS प्राप्त करा"</item>
+ <item msgid="3324078624274013835">"SMS/MMS मिळवा"</item>
+ <item msgid="1924065490920451511">"SMS/MMS मिळवा"</item>
+ <item msgid="1239934115787777477">"SMS/MMS मिळवा"</item>
+ <item msgid="1030342664910454057">"SMS/MMS मिळवा"</item>
<item msgid="9189359977063200554">"SMS/MMS पाठवा"</item>
<item msgid="6954817837534799424">"SMS/MMS वाचा"</item>
<item msgid="7921014514153395846">"SMS/MMS लिहा"</item>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 21afde0..65e0547 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"तारीख आणि वेळ सेट करा"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"तारीख, वेळ, टाइम झोन आणि स्वरूपने सेट करा"</string>
<string name="date_time_auto" msgid="4239202185055225869">"वेळ आपोआप सेट करा"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"टाइमझोन आपोआप सेट करा"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"आपोआप सेट करा"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"लोकॅल डीफॉल्ट वापरा"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑तास स्वरूप"</string>
<string name="date_time_24hour" msgid="286679379105653406">"२४ तास फॉरमॅट वापरा"</string>
@@ -1889,7 +1889,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"स्थान सेवा"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"स्थान सेवा"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"ऑफिससाठीच्या स्थान सेवा"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"टाइम झोन सेट करण्यासाठी स्थान वापरा"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"स्थान वापरा"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"डिव्हाइस स्थान आवश्यक आहे"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"तुमचे स्थान वापरून टाइमझोन सेट करण्यासाठी, स्थान सुरू करा त्यानंतर टाइमझोन सेटिंग्ज अपडेट करा"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"स्थान सेटिंग्ज"</string>
@@ -1898,6 +1898,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"स्थानाचे टाइमझोन डिटेक्शन बंद केले आहे"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"स्थानाच्या टाइमझोन डिटेक्शनला सपोर्ट नाही"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"स्थानाच्या टाइमझोन डिटेक्शनमधील बदलांना अनुमती नाही"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"टाइम झोन सेट करण्यासाठी स्थान वापरले जाऊ शकते"</string>
<string name="location_network_based" msgid="5247042890080021887">"वाय-फाय आणि मोबाइल नेटवर्क स्थान"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"आपल्या स्थानाचा अधिक जलद अंदाज घेण्यासाठी ॲप्सना Google ची स्थान सेवा वापरू द्या. अनामित स्थान डेटा संकलित केला जाईल आणि Google कडे पाठविला जाईल."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"वाय-फाय द्वारे निर्धारित केलेले स्थान"</string>
@@ -1943,6 +1944,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -1951,7 +1954,7 @@
<string name="lockpassword_confirm_your_password_header" msgid="6132312814563023990">"तुमचा पासवर्ड पुन्हा टाका"</string>
<string name="lockpassword_reenter_your_profile_password_header" msgid="3812040127714827685">"तुमचा कार्य पासवर्ड पुन्हा एंटर करा"</string>
<string name="lockpassword_confirm_your_work_password_header" msgid="4647071231702288305">"तुमच्या ऑफिसचा पासवर्ड एंटर करा"</string>
- <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"आपल्या नमुन्याची पुष्टी करा"</string>
+ <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"तुमचा पॅटर्न कंफर्म करा"</string>
<string name="lockpassword_confirm_your_work_pattern_header" msgid="2668883108969165844">"तुमच्या ऑफिसचा पॅटर्न एंटर करा"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="2241722970567131308">"तुमचा पिन पुन्हा टाका"</string>
<string name="lockpassword_reenter_your_profile_pin_header" msgid="2890233614560435538">"तुमचा कार्य पिन पुन्हा एंटर करा"</string>
@@ -2924,6 +2927,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>
@@ -3013,6 +3017,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>
@@ -3465,11 +3472,11 @@
<string name="user_account_title" msgid="6389636876210834864">"सामग्रीसाठी खाते"</string>
<string name="user_picture_title" msgid="7176437495107563321">"फोटो आयडी"</string>
<string name="extreme_threats_title" msgid="1098958631519213856">"अत्याधिक धोके"</string>
- <string name="extreme_threats_summary" msgid="3560742429496902008">"जीवन आणि मालमत्तेस असलेल्या अत्याधिक धोक्यांसाठी सूचना प्राप्त करा"</string>
+ <string name="extreme_threats_summary" msgid="3560742429496902008">"जीवन आणि मालमत्तेस असलेल्या अत्याधिक धोक्यांसाठी सूचना मिळवा"</string>
<string name="severe_threats_title" msgid="8962959394373974324">"गंभीर धोके"</string>
- <string name="severe_threats_summary" msgid="4982256198071601484">"जीवन आणि मालमत्तेस असलेल्या गंभीर धोक्यांसाठी सूचना प्राप्त करा"</string>
+ <string name="severe_threats_summary" msgid="4982256198071601484">"जीवन आणि मालमत्तेस असलेल्या गंभीर धोक्यांसाठी सूचना मिळवा"</string>
<string name="amber_alerts_title" msgid="5238275758191804575">"अँबर सूचना"</string>
- <string name="amber_alerts_summary" msgid="5755221775246075883">"बाल अपहरणाविषयी बुलेटिन प्राप्त करा"</string>
+ <string name="amber_alerts_summary" msgid="5755221775246075883">"बाल अपहरणाविषयी बुलेटिन मिळवा"</string>
<string name="repeat_title" msgid="8676570486899483606">"पुनरावृत्ती"</string>
<string name="call_manager_enable_title" msgid="1214301265395158720">"कॉल व्यवस्थापक सुरू करा"</string>
<string name="call_manager_enable_summary" msgid="7362506369604163030">"तुमचे कॉल कसे केले जातात हे व्यवस्थापित करण्यासाठी या सेवेस अनुमती द्या."</string>
@@ -3690,8 +3697,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, प्रगत कॉलिंग, 5g कॉलिंग"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"भाषा जोडा, एखादी भाषा जोडा"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"मजकुराचा आकार, मोठी प्रिंट, मोठा फॉंट, मोठा मजकूर, कमी दृश्यमानता, मजकूर आणखी मोठा करा, फॉंटचा आकार मोठा करणारा, फॉंटचा आकार मोठा करणे"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"नेहमी सुरू असलेला डिस्प्ले, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"डीफॉल्ट ध्वनी"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"रिंग आणि सूचनेचा व्हॉल्यूम <xliff:g id="PERCENTAGE">%1$s</xliff:g> वर आहे"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"आवाज, व्हायब्रेट, व्यत्यय आणू नका"</string>
@@ -4002,14 +4008,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"कधीही नाही"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"डिव्हाइस आणि ॲप सूचना"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"कोणती ॲप्स आणि डिव्हाइस सूचना वाचू शकतात हे नियंत्रित करा"</string>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index c565b39..5ad5d43 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Tetapkan tarikh dan masa"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Tetapkan tarikh, masa, zon masa, & format"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Tetapkan masa secara automatik"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Tetapkan zon waktu secara automatik"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Tetapkan secara automatik"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Gunakan tetapan lalai tempat peristiwa"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Format 24 jam"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Gunakan format 24 jam"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Perkhidmatan lokasi"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Perkhidmatan lokasi"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Perkhidmatan lokasi untuk kerja"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Gunakan lokasi untuk menetapkan zon waktu"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Gunakan lokasi"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Lokasi peranti diperlukan"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Untuk menyediakan zon waktu menggunakan lokasi anda, hidupkan lokasi, kemudian kemas kini tetapan zon waktu"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Tetapan lokasi"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Pengesanan zon waktu lokasi dilumpuhkan"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Pengesanan zon waktu lokasi tidak disokong"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Perubahan pengesanan zon waktu lokasi tidak dibenarkan"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Lokasi mungkin digunakan untuk menetapkan zon waktu"</string>
<string name="location_network_based" msgid="5247042890080021887">"Lokasi Wi-Fi & rangkaian mudah alih"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Biar apl guna perkhidmatan lokasi Google utk anggar lokasi lebih cepat. Data lokasi tanpa nama dikumpul dan dihantar kpd Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Lokasi ditentukan oleh Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, panggilan lanjutan, panggilan 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"tambah bahasa, tambah satu bahasa"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"saiz teks, huruf cetak besar, fon besar, teks besar, rabun, jadikan teks lebih besar, besarkan teks, pembesaran fon"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"paparan sentiasa hidup, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Bunyi lalai"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Kelantangan dering & pemberitahuan di <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Kelantangan, getaran, Jangan Ganggu"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Jangan sekali-kali"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Pemberitahuan peranti & apl"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Kawal apl dan peranti yang boleh membaca pemberitahuan"</string>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 5bc1a01..63555f5 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"ရက်စွဲနှင့် အချိန် သတ်မှတ်ရန်"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"ရက်စွဲ အချိန် အချိန်ဇုန်နှင့် ပုံစံများအား သတ်မှတ်ရန်"</string>
<string name="date_time_auto" msgid="4239202185055225869">"အချိန် အလိုအလျောက် သတ်မှတ်ခြင်း"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ဒေသစံတော်ချိန် အလိုအလျောက် သတ်မှတ်ခြင်း"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"အလိုအလျောက်သတ်မှတ်ရန်"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ဒေသ၏ ဘာသာစကားစနစ်ကို သုံးရန်"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"၂၄-နာရီပုံစံ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"၂၄-နာရီပုံစံကို အသုံးပြုမည်"</string>
@@ -630,7 +630,7 @@
<string name="suggested_fingerprint_lock_settings_summary" product="tablet" msgid="1040265358906410746"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="device" msgid="1040265358906410746"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="default" msgid="1040265358906410746"></string>
- <string name="lock_settings_picker_title" msgid="9219376327364915334">"ဖန်သားပြင်လော့ခ်"</string>
+ <string name="lock_settings_picker_title" msgid="9219376327364915334">"ဖန်သားပြင်လော့ခ်ရွေးပါ"</string>
<string name="lock_settings_picker_new_lock_title" msgid="3113042086804290919">"ဖန်သားပြင်လော့ခ် ရွေးပါ"</string>
<string name="lock_settings_picker_update_lock_title" msgid="536853138943415927">"ဖန်သားပြင်လော့ခ်အသစ် ရွေးပါ"</string>
<string name="lock_settings_picker_new_profile_lock_title" msgid="2270462215256413800">"အလုပ်သုံးအက်ပ်များအတွက် လော့ခ်ရွေးပါ"</string>
@@ -1311,7 +1311,7 @@
<string name="accessibility_category_work" msgid="5133894487353964944">"အလုပ်အချက်အလက် အကောင့်များကို - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_category_personal" msgid="2228088849803484780">"ကိုယ်ရေးကိုယ်တာ အချက်အလက် အကောင့်များ"</string>
<string name="accessibility_work_account_title" msgid="7622485151217943839">"အလုပ်အကောင့်ကို - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="accessibility_personal_account_title" msgid="8535265881509557013">"ကိုယ်ရေးကိုယ်တာ အကောင့်ကို - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
+ <string name="accessibility_personal_account_title" msgid="8535265881509557013">"ကိုယ်ပိုင်အကောင့် - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="search_settings" msgid="7573686516434589771">"ရှာဖွေခြင်း"</string>
<string name="display_settings" msgid="7197750639709493852">"ဖန်သားပြင် ပြသမှု"</string>
<string name="accelerometer_title" msgid="7745991950833748909">"ဖန်သားပြင် အလိုအလျောက်လှည့်ခြင်း"</string>
@@ -1564,7 +1564,7 @@
<string name="status_serial_number" msgid="9060064164331466789">"စက်မှတ်ပုံတင်နံပါတ်"</string>
<string name="status_up_time" msgid="1274778533719495438">"ဖွင့်ထားသောအချိန်"</string>
<string name="status_awake_time" msgid="2573925324168081586">"ပြန်ပွင့်မည်အချိန်"</string>
- <string name="internal_memory" msgid="1869518160077033848">"စက်တွင်း သိုလှောင်ထားမှု"</string>
+ <string name="internal_memory" msgid="1869518160077033848">"စက်တွင်းသိုလှောင်ခန်း"</string>
<string name="sd_memory" product="nosdcard" msgid="5456718463397723781">"USBဖြင့် သိမ်းဆည်းခြင်း"</string>
<string name="sd_memory" product="default" msgid="3098344183202722455">"SD ကတ်"</string>
<string name="memory_available" msgid="712528795743654737">"နေရာလွတ်"</string>
@@ -1651,9 +1651,9 @@
<string name="storage_wizard_init_title" msgid="9036374223934708619">"သင့် <xliff:g id="NAME">^1</xliff:g> ကိုတပ်ဆင်မည်"</string>
<string name="storage_wizard_init_external_title" msgid="6540132491909241713">"ရွှေ့လျားနိုင်သည့် သိုလှောင်မှုအဖြစ် သုံးမည်"</string>
<string name="storage_wizard_init_external_summary" msgid="5807552934494462984">"စက်ပစ္စည်းများအကြား ပုံများနှင့် အခြားမီဒီယာများရွှေ့လျားရန်အတွက်။"</string>
- <string name="storage_wizard_init_internal_title" msgid="3256355049992147270">"အတွင်းသိုလှောင်မှုအဖြစ် အသုံးပြုမည်"</string>
+ <string name="storage_wizard_init_internal_title" msgid="3256355049992147270">"စက်တွင်းသိုလှောင်ခန်းအဖြစ် သုံးရန်"</string>
<string name="storage_wizard_init_internal_summary" msgid="2283798331883929674">"အပ်ဖ်များနှင့် ပုံများ အပါအဝင် ဤစက်ပစ္စည်းပေါ်တွင်သာ သိုလှောင်ရန်အတွက် ဖြစ်သည်။ ပုံစံချရန်လိုအပ်ပြီး ၎င်းသည်အခြားစက်ပစ္စည်းများနှင့် အလုပ်လုပ်ခြင်းမှ ကာကွယ်မည်ဖြစ်သည်။"</string>
- <string name="storage_wizard_format_confirm_title" msgid="4898014527956178762">"အတွင်းသိုလှောင်မှုအဖြစ် ပုံစံချမည်"</string>
+ <string name="storage_wizard_format_confirm_title" msgid="4898014527956178762">"စက်တွင်းသိုလှောင်ခန်းအဖြစ်"</string>
<string name="storage_wizard_format_confirm_body" msgid="5514665245241830772">"လုံခြုံစေရန်အတွက် ၎င်းတွင် <xliff:g id="NAME_0">^1</xliff:g> ကိုပုံစံချထားရန် လိုအပ်ပါသည်။\n\nပုံစီချပြီးနောက်၊ <xliff:g id="NAME_1">^1</xliff:g> သည်ဤစက်ပစ္စည်းတွင်သာ အလုပ်လုပ်ပါမည်။ \n\n"<b>"ပုံစံချခြင်းဖြင့်<xliff:g id="NAME_2">^1</xliff:g>တွင်လက်ရှိသိုလှောင်ထားသည့် ဒေတာများအားလုံးကို ဖျက်ပစ်မည်ဖြစ်သည်။"</b>" ဒေတာများ ဆုံးရှုံးခြင်းမှ ကာကွယ်ရန်၊ အရံကူးယူထားရန် စဉ်းစားပါ။"</string>
<string name="storage_wizard_format_confirm_public_title" msgid="649252654496577680">"သယ်နိုင်သောသိုလှောင်မှုပုံစံချပါ"</string>
<string name="storage_wizard_format_confirm_public_body" msgid="6219883780307218266">"<xliff:g id="NAME_0">^1</xliff:g> အား ပုံစံချရန် လိုအပ်သည်။ \n\n"<b>" ပုံစံချပါက <xliff:g id="NAME_1">^1</xliff:g> တွင် လတ်တလော သိမ်းထားသည်များအားလုံးအား ပျက်သွားမည်။ "</b>" ဒေတာများပျောက်ပျက်သွားခြင်းမှ ကာကွယ်လိုပါ၊ အရံသိမ်းဆည်းခြင်းပြုရန် စဉ်းစားပါ။"</string>
@@ -1661,7 +1661,7 @@
<string name="storage_wizard_format_progress_title" msgid="9170393018855949774">"<xliff:g id="NAME">^1</xliff:g>ပုံစံချနေသည်…"</string>
<string name="storage_wizard_format_progress_body" msgid="1044024044955390417">"ဖော်မက်လုပ်နေစဉ် <xliff:g id="NAME">^1</xliff:g> ကို မဖယ်ရှားပါနှင့်။"</string>
<string name="storage_wizard_migrate_title" msgid="3013711737005104623">"ဒေတာကို သိုလှောင်မှုအသစ်သို့ ရွှေ့မည်"</string>
- <string name="storage_wizard_migrate_body" msgid="1630853797296198275">"သင့်ပုံများ၊ ဖိုင်များနှင့် အချို့ အက်ပ်များကို ဤ<xliff:g id="NAME">^1</xliff:g> အသစ်ပေါ်သို့ ရွှေ့နိုင်သည်။ \n\nရွှေ့ခြင်းသည်<xliff:g id="TIME">^2</xliff:g> ခန့်ကြာမည်ဖြစ်ပြီး အတွင်းသိုလှောင်မှုတွင် <xliff:g id="SIZE">^3</xliff:g> ခန့်နေရာလွတ်သွားပါမည်။ ၎င်းပြုလုပ်နေစဉ် အချို့သော အက်ပ်များ အလုပ်လုပ်မည်မဟုတ်ပါ။"</string>
+ <string name="storage_wizard_migrate_body" msgid="1630853797296198275">"သင့်ပုံများ၊ ဖိုင်များနှင့် အချို့အက်ပ်များကို ဤ <xliff:g id="NAME">^1</xliff:g> အသစ်ပေါ်သို့ ရွှေ့နိုင်သည်။ \n\nရွှေ့ချိန် <xliff:g id="TIME">^2</xliff:g> ခန့်ကြာပြီး စက်တွင်းသိုလှောင်ခန်းတွင် <xliff:g id="SIZE">^3</xliff:g> နေရာလွတ်သွားပါမည်။ ၎င်းပြုလုပ်နေစဉ် အချို့သော အက်ပ်များ အလုပ်လုပ်မည်မဟုတ်ပါ။"</string>
<string name="storage_wizard_migrate_now" msgid="175023718337037181">"ယခုရွှေ့မည်"</string>
<string name="storage_wizard_migrate_later" msgid="6573789572520980112">"နောက်မှ ရွှေ့မည်"</string>
<string name="storage_wizard_migrate_confirm_title" msgid="255346780598924540">"ဒေတာများယခု ရွှေ့မည်"</string>
@@ -1777,7 +1777,7 @@
<string name="main_clear_title" msgid="277664302144837723">"ဒေတာအားလုံးဖျက်ရန် (စက်ရုံထုတ်ဆက်တင် သတ်မှတ်ရန်)"</string>
<string name="main_clear_short_title" msgid="4752094765533020696">"ဒေတာအားလုံးဖျက်ခြင်း (စက်ရုံထုတ်ဆက်တင် သတ်မှတ်ရန်)"</string>
<string name="main_clear_desc" product="tablet" msgid="1651178880680056849">"ဤသို့ပြုလုပ်ခြင်းက သင့်တက်ဘလက်၏ "<b>"စက်အတွင်းသိုလှောင်ခန်း"</b>" အပါအဝင် အောက်ပါဒေတာအားလုံးကို ဖျက်ပါမည်-\n\n"<li>"သင်၏ Google အကောင့်"</li>\n<li>"စနစ်နှင့် အက်ပ်ဒေတာ၊ ဆက်တင်များ၊"</li>\n<li>"ဒေါင်းလုဒ်လုပ်ထားသည့်အက်ပ်များ"</li></string>
- <string name="main_clear_desc" product="default" msgid="6984348811887162647">"ဤသို့ပြုလုပ်ခြင်းက သင့်ဖုန်း၏ "<b>"စက်အတွင်းသိုလှောင်ခန်း"</b>" အပါအဝင် အောက်ပါဒေတာအားလုံးကို ဖျက်ပါမည်- \n\n"<li>"သင်၏ Google အကောင့်"</li>\n<li>"စနစ်နှင့် အက်ပ်ဒေတာ၊ ဆက်တင်များ၊"</li>\n<li>"ဒေါင်းလုဒ်လုပ်ထားသည့်အက်ပ်များ"</li></string>
+ <string name="main_clear_desc" product="default" msgid="6984348811887162647">"ဤသို့ပြုလုပ်ခြင်းဖြင့် အောက်ပါတို့ အပါအဝင် သင့်ဖုန်း၏ "<b>"စက်တွင်းသိုလှောင်ခန်း"</b>" ရှိဒေတာအားလုံးကို ဖျက်ပါမည်- \n\n"<li>"သင်၏ Google Account"</li>\n<li>"စနစ်နှင့် အက်ပ်ဒေတာ၊ ဆက်တင်များ၊"</li>\n<li>"ဒေါင်းလုဒ်လုပ်ထားသည့်အက်ပ်များ"</li></string>
<string name="main_clear_accounts" product="default" msgid="7675859115108318537">\n\n"သင်သည် လက်ရှိတွင် အောက်ပါအကောင့်များကို ဝင်ရောက်ထားပါသည်\n"</string>
<string name="main_clear_other_users_present" product="default" msgid="2672976674798019077">\n\n"ဤစက်ပစ္စည်းပေါ်တွင် အခြားအသုံးပြုသူများလည်း ရှိသည်။\n"</string>
<string name="main_clear_desc_also_erases_external" msgid="3687911419628956693"><li>"သီချင်း"</li>\n<li>"ဓာတ်ပုံများ"</li>\n<li>"အသုံးပြုသူ၏အခြားဒေတာ"</li></string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"တည်နေရာဝန်ဆောင်မှုများ"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"တည်နေရာဝန်ဆောင်မှုများ"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"အလုပ်အတွက် တည်နေရာဝန်ဆောင်မှုများ"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"ဒေသစံတော်ချိန် သတ်မှတ်ရန်အတွက် တည်နေရာကို သုံးခြင်း"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"တည်နေရာကို သုံးရန်"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"စက်ပစ္စည်း တည်နေရာ လိုအပ်သည်"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"သင်၏တည်နေရာကို သုံး၍ ဒေသစံတော်ချိန်သတ်မှတ်ရန် တည်နေရာကို ဖွင့်ပါ၊ ထို့နောက် ဒေသစံတော်ချိန် ဆက်တင်များကို အပ်ဒိတ်လုပ်ပါ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"တည်နေရာပြ ဆက်တင်များ"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"တည်နေရာဖြင့် ဒေသစံတော်ချိန်ရှာဖွေခြင်းကို ပိတ်ထားသည်"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"တည်နေရာဖြင့် ဒေသစံတော်ချိန်ရှာဖွေခြင်းကို ပံ့ပိုးမထားပါ"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"တည်နေရာဖြင့် ဒေသစံတော်ချိန်ရှာဖွေခြင်း အပြောင်းအလဲများကို ခွင့်ပြုမထားပါ"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"ဒေသစံတော်ချိန် သတ်မှတ်ရန် တည်နေရာကို သုံးထားနိုင်သည်"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi & မိုဘိုင်းလ်ကွန်ယက်တည်နေရာ"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"သင့်တည်နေရာကို ခန့်မှန်းရာတွင် ပိုမြန်စေရန် အပလီကေးရှင်းကို Google၏ တည်နေရာဝန်ဆောင်မှု အသုံးပြုပါစေ။ အမည်မသိ တည်နေရာ အချက်အလက်များကို စု၍ ဂူဂဲလ်သို့ ပို့ပေးပါမည်။"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"ဝိုင်ဖိုင်မှ ဆုံးဖြတ်သော တည်နေရာ"</string>
@@ -1942,6 +1943,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>
@@ -2107,7 +2109,7 @@
<string name="not_installed" msgid="5074606858798519449">"ဤအသုံးပြုသူအတွက် ထည့်သွင်းမထားပါ"</string>
<string name="installed" msgid="2837449358488825884">"ထည့်သွင်းထားသည်"</string>
<string name="no_applications" msgid="985069304755391640">"အက်ပ် မရှိပါ။"</string>
- <string name="internal_storage" msgid="999496851424448809">"စက်တွင်း သိုလှောင်ထားမှု"</string>
+ <string name="internal_storage" msgid="999496851424448809">"သိုလှောင်ခန်း"</string>
<string name="recompute_size" msgid="1098091228370999128">"အရွယ်အစားကို ပြန်လည်တွက်ချက်နေသည်"</string>
<string name="clear_data_dlg_title" msgid="180446967743732410">"အက်ပ်ဒေတာ ဖျက်မလား။"</string>
<string name="clear_data_dlg_text" msgid="3440011276559762619">"ဖိုင်နှင့် ဆက်တင်များအပါအဝင် ဤအက်ပ်၏ ဒေတာအားလုံးကို စက်မှ အပြီးဖျက်လိုက်ပါမည်"</string>
@@ -2632,7 +2634,7 @@
<string name="keywords_accessibility" msgid="4263443239404659143">"အသုံးပြုရလွယ်ခြင်း၊ သုံးလွယ်ခြင်း၊ အကူအညီ၊ ကူညီပေးသော"</string>
<string name="keywords_magnification" msgid="3908145308269840862">"ဝင်းဒိုးမှန်ဘီလူး၊ ဇူးမ်၊ ချဲ့ခြင်း၊ အမြင်အာရုံချို့တဲ့ခြင်း၊ ပုံကြီးချဲ့ခြင်း၊ ပိုကြီးအောင်လုပ်ခြင်း"</string>
<string name="keywords_talkback" msgid="2816435437095102527"></string>
- <string name="keywords_live_caption" msgid="1667203998080567556">"စာတန်းများ၊ စာတန်းများ၊ CC၊ Live Transcribe၊ နားလေးခြင်း၊ အကြားအာရုံဆုံးရှုံးခြင်း၊ CART၊ စကားပြောမှ စာသားသို့၊ စာတန်းထိုးများ"</string>
+ <string name="keywords_live_caption" msgid="1667203998080567556">"စာတန်းများ၊ စာတန်းများ၊ CC၊ Live Transcribe၊ နားလေးခြင်း၊ အကြားအာရုံဆုံးရှုံးခြင်း၊ CART၊ စကားမှ စာသို့၊ စာတန်းထိုးများ"</string>
<string name="keywords_live_transcribe" msgid="3226990195174890997"></string>
<string name="keywords_sound_notifications" msgid="8183107485754075413"></string>
<string name="keywords_sound_amplifier" msgid="939404835256246663"></string>
@@ -2923,6 +2925,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>
@@ -3010,8 +3013,11 @@
<string name="voice_input_settings_title" msgid="3708147270767296322">"အသံဖြင့် စာရိုက်ထည့်ခြင်း"</string>
<string name="voice_service_preference_section_title" msgid="4807795449147187497">"အသံဖြင့် ထည့်သွင်းရေး ဝန်ဆောင်မှုများ"</string>
<string name="voice_interactor_preference_summary" msgid="3942881638813452880">"စကားလုံးတို နှင့် ပြန်လှန်တုံ့ပြန်မှု အပြည့်"</string>
- <string name="voice_recognizer_preference_summary" msgid="9195427725367463336">"ရိုးရိုး စကားမှ စာသားသို့"</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>
@@ -3617,7 +3623,7 @@
<string name="keywords_battery_saver" msgid="6289682844453234359">"ဘက်ထရီ အားထိန်း၊ ပါဝါချွေတာစနစ်၊ ချွေတာစနစ်"</string>
<string name="keywords_battery_adaptive_preferences" msgid="1774870663426502938">"အလိုက်သင့် သတ်မှတ်ချက်များ၊ အလိုက်အထိုက် ဘက်ထရီအားထိန်း"</string>
<string name="keywords_spell_checker" msgid="5148906820603481657">"စာလုံးပေါင်းခြင်း၊ အဘိဓာန်၊ သတ်ပုံစစ်ဆေးခြင်း၊ အလိုအလျောက် အမှားပြင်ဆင်ခြင်း"</string>
- <string name="keywords_voice_input" msgid="7534900094659358971">"အသိမှတ်ပြုကိရိယာ၊ အဝင်၊ စကားပြောဆိုမှု၊ စကားပြော၊ ဘာသာစကား၊ လက်အလွှတ်၊ လက်အလွှတ်၊ အသိမှတ်ပြုခြင်း၊ စိတ်အနှောင့်အယှက်ဖြစ်စေသော၊ စကားလုံး၊ အသံ၊ သမိုင်း၊ ဘလူးတုသ်နားကြပ်"</string>
+ <string name="keywords_voice_input" msgid="7534900094659358971">"အသိမှတ်ပြုကိရိယာ၊ အဝင်၊ စကားပြောဆိုမှု၊ စကားပြော၊ ဘာသာစကား၊ လက်အလွှတ်၊ လက်အလွှတ်၊ အသိမှတ်ပြုခြင်း၊ စိတ်အနှောင့်အယှက်ဖြစ်စေသော၊ စကားလုံး၊ အသံ၊ မှတ်တမ်း၊ ဘလူးတုသ်နားကြပ်"</string>
<string name="keywords_text_to_speech_output" msgid="6728080502619011668">"နှုန်း၊ ဘာသာစကား၊ မူရင်း၊ စကားပြော၊ စကားပြောခြင်း၊ tts၊ အသုံးပြုနိုင်စွမ်း၊ မျက်နှာပြင် စာဖတ်မှု၊ မျက်မမြင်"</string>
<string name="keywords_date_and_time" msgid="4402136313104901312">"နာရီ၊ စစ်တပ်"</string>
<string name="keywords_network_reset" msgid="4075670452112218042">"ပြန်လည်သတ်မှတ်ရန်၊ ပြန်လည်သိုလှောင်ရန်၊ စက်ရုံ"</string>
@@ -3689,8 +3695,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g၊ vonr၊ အဆင့်မြင့် ဖုန်းခေါ်ဆိုမှု၊ 5g ဖုန်းခေါ်ဆိုမှု"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ဘာသာစကားထည့်ရန်၊ ဘာသာစကားတစ်ခုကို ထည့်ပါ"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"စာသားအရွယ်အစား၊ ပုံနှိပ်အကြီး၊ ဖောင့်အကြီး၊ စာသားအကြီး၊ အမြင်အာရုံချို့တဲ့ခြင်း၊ စာသားကို ပိုကြီးအောင်လုပ်ခြင်း၊ ဖောင့်ပိုကြီးအောင် ချဲ့ခြင်း၊ ဖောင့် ပုံကြီးချဲ့ခြင်း"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"အမြဲတမ်းပွင့်နေသည့် ဖန်သားပြင်၊ AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ပုံသေ အသံ"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"မြည်သံနှင့် အကြောင်းကြားချက် အသံ <xliff:g id="PERCENTAGE">%1$s</xliff:g> ရှိသည်"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"အသံအတိုးအကျယ်၊ တုန်ခါမှု၊ မနှောင့်ယှက်ရ"</string>
@@ -4001,14 +4006,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ဘယ်တော့မှ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"စက်နှင့်အက်ပ် အကြောင်းကြားချက်များ"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"မည်သည့်အက်ပ်နှင့် စက်များက အကြောင်းကြားချက်များ ဖတ်နိုင်သည်ကို ထိန်းချုပ်နိုင်သည်"</string>
@@ -4371,7 +4370,7 @@
<string name="app_launch_supported_links_add" msgid="3271247750388016131">"ထည့်ရန်"</string>
<string name="app_launch_supported_links_subtext" msgid="4268004019469184113">"<xliff:g id="APP_LABEL">%s</xliff:g> တွင် ဖွင့်သည်"</string>
<string name="storage_summary_format" msgid="5721782272185284276">"<xliff:g id="STORAGE_TYPE">%2$s</xliff:g>ထဲတွင် <xliff:g id="SIZE">%1$s</xliff:g>သုံးထားသည်"</string>
- <string name="storage_type_internal" msgid="979243131665635278">"စက်အတွင်းသိမ်းဆည်းရန်နေရာ"</string>
+ <string name="storage_type_internal" msgid="979243131665635278">"စက်တွင်းသိုလှောင်ခန်း"</string>
<string name="storage_type_external" msgid="125078274000280821">"ပြင်ပသိုလှောင်ခန်း"</string>
<string name="data_summary_format" msgid="8802057788950096650">"<xliff:g id="DATE">%2$s</xliff:g> မှစ၍ <xliff:g id="SIZE">%1$s</xliff:g> အသုံးပြုခဲ့သည်။"</string>
<string name="storage_used" msgid="2591194906751432725">"အသုံးပြုပြီး သိုလှောင်ရုံ"</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 4dc486e..6f68021 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Angi dato og klokkeslett"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Angi dato, klokkeslett, tidssone og formater"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Angi klokkeslettet automatisk"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Angi tidssonen automatisk"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Angi automatisk"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Bruk lokal standard"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-timers format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Bruk 24-timers format"</string>
@@ -977,8 +977,8 @@
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="2299284032301667622">"For å bruke funksjonen, velg en leverandør av nettverksvurdering"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1780306481499369913">"For å bruke funksjonen, velg en kompatibel leverandør av nettverksvurdering"</string>
<string name="wifi_install_credentials" msgid="5192903644606839972">"Installer sertifikater"</string>
- <string name="wifi_scan_notify_text" msgid="7163137260385995873">"For å forbedre posisjonsnøyaktigheten kan apper og tjenester søke etter Wi-Fi-nettverk når som helst – også når Wi-Fi er slått av. Dette kan for eksempel brukes til å forbedre posisjonsbaserte funksjoner og tjenester. Du kan endre dette i <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>innstillingene for Wi-Fi-skanning<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="7439201783168213149">"For å forbedre posisjonsnøyaktigheten, slå på Wi-Fi-skanning i <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>innstillingene for Wi-Fi-skanning<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text" msgid="7163137260385995873">"For å forbedre posisjonsnøyaktigheten kan apper og tjenester søke etter Wi-Fi-nettverk når som helst – også når Wi-Fi er slått av. Dette kan for eksempel brukes til å forbedre posisjonsbaserte funksjoner og tjenester. Du kan endre dette i <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>innstillingene for wifi-skanning<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="7439201783168213149">"For å forbedre posisjonsnøyaktigheten, slå på wifi-skanning i <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>innstillingene for wifi-skanning<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="8436897497968907701">"Ikke vis igjen"</string>
<string name="wifi_setting_sleep_policy_title" msgid="6285374200292675649">"Behold Wi-Fi på i hvilemodus"</string>
<string name="wifi_setting_on_during_sleep_title" msgid="8753852404141070878">"Wi-Fi aktivert i hvilemodus"</string>
@@ -1010,8 +1010,8 @@
<string name="wifi_more" msgid="8742256421693351035">"Se mer"</string>
<string name="wifi_setup_wps" msgid="4303694722593999931">"Automatisk konfig. (WPS)"</string>
<string name="wifi_settings_scanning_required_title" msgid="1088663325396007484">"Vil du slå på Wi‑Fi-skanning?"</string>
- <string name="wifi_settings_scanning_required_summary" msgid="4770243653675416569">"For å slå på Wi-Fi automatisk må du først slå på Wi-Fi-skanning."</string>
- <string name="wifi_settings_scanning_required_info" msgid="1473411566072565789">"Med Wi-Fi-skanning kan apper og tjenester søke etter enheter i nærheten når som helst, selv når Wi-Fi er slått av. Dette kan for eksempel brukes til å forbedre posisjonsbaserte funksjoner og tjenester."</string>
+ <string name="wifi_settings_scanning_required_summary" msgid="4770243653675416569">"For å slå på Wi-Fi automatisk må du først slå på wifi-skanning."</string>
+ <string name="wifi_settings_scanning_required_info" msgid="1473411566072565789">"Med wifi-skanning kan apper og tjenester søke etter enheter i nærheten når som helst, selv når Wi-Fi er slått av. Dette kan for eksempel brukes til å forbedre posisjonsbaserte funksjoner og tjenester."</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="1112223196123955447">"Slå på"</string>
<string name="wifi_settings_scanning_required_enabled" msgid="4721729158927146365">"Wi‑Fi-skanning er slått på"</string>
<string name="wifi_show_advanced" msgid="2969378109942071741">"Avanserte alternativer"</string>
@@ -1081,10 +1081,10 @@
<string name="wifi_dpp_device_found" msgid="633646744759830603">"Fant en enhet"</string>
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="7250369936882080107">"Deler Wi-Fi med denne enheten …"</string>
<string name="wifi_dpp_connecting" msgid="2312769193202897589">"Kobler til …"</string>
- <string name="wifi_dpp_share_hotspot" msgid="6186452780604755316">"Del Wi-Fi-sone"</string>
+ <string name="wifi_dpp_share_hotspot" msgid="6186452780604755316">"Del wifi-sone"</string>
<string name="wifi_dpp_lockscreen_title" msgid="4231438175617953652">"Bekreft at det er deg"</string>
- <string name="wifi_dpp_wifi_password" msgid="4992986319806934381">"Wi-Fi-passord: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
- <string name="wifi_dpp_hotspot_password" msgid="688464342650820420">"Passord for Wi-Fi-sone: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_wifi_password" msgid="4992986319806934381">"Wifi-passord: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_hotspot_password" msgid="688464342650820420">"Passord for wifi-sone: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_auto_connect_title" msgid="1890342051674657892">"Automatisk tilkobling"</string>
<string name="wifi_auto_connect_summary" msgid="1707702705345670370">"Tillat tilkobling til dette nettverket når det er innen rekkevidde"</string>
<string name="wifi_dpp_add_device" msgid="8695656122114721335">"Legg til en enhet"</string>
@@ -1191,33 +1191,33 @@
<string name="wifi_p2p_cancel_connect_title" msgid="8476985132989357041">"Vil du avbryte invitasjonen?"</string>
<string name="wifi_p2p_cancel_connect_message" msgid="2409074184473879809">"Vil du avbryte invitasjonen til å koble til <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
<string name="wifi_p2p_delete_group_message" msgid="4880242270742385699">"Vil du glemme denne gruppen?"</string>
- <string name="wifi_hotspot_checkbox_text" msgid="1549663436920597006">"Wi-Fi-sone"</string>
+ <string name="wifi_hotspot_checkbox_text" msgid="1549663436920597006">"Wifi-sone"</string>
<string name="wifi_hotspot_off_subtext" msgid="2751383134504362078">"Deler ikke internett eller innhold med andre enheter"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5832429443898690152">"Deler nettbrettets internettilkobling via Wi-Fi-sone"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5451921191609178326">"Deler telefonens internettilkobling via Wi-Fi-sone"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5832429443898690152">"Deler nettbrettets internettilkobling via wifi-sone"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5451921191609178326">"Deler telefonens internettilkobling via wifi-sone"</string>
<string name="wifi_hotspot_on_local_only_subtext" msgid="965051079784031636">"Appen deler innhold. For å dele Internett-tilkoblingen, slå Wi-Fi-sonen av og deretter på"</string>
<string name="wifi_hotspot_no_password_subtext" msgid="3685689196772398783">"Ingen passord er angitt"</string>
- <string name="wifi_hotspot_name_title" msgid="6633480190014369846">"Navn på Wi-Fi-sone"</string>
+ <string name="wifi_hotspot_name_title" msgid="6633480190014369846">"Navn på wifi-sone"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="2094754115215428892">"Slår på <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> …"</string>
<string name="wifi_hotspot_name_summary_connected" msgid="6935457127884928249">"Andre enheter kan koble til <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
- <string name="wifi_hotspot_password_title" msgid="9096340919454296786">"Passord for Wi-Fi-sone"</string>
+ <string name="wifi_hotspot_password_title" msgid="9096340919454296786">"Passord for wifi-sone"</string>
<string name="wifi_hotspot_ap_band_title" msgid="560262446129195042">"AP-bånd"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="6620216295510397461">"Bruk Wi-Fi-soner for å opprette Wi-Fi-nettverk for de andre enhetene dine. Wi-Fi-soner gir Internett-tilgang ved hjelp av mobildatatilkoblingen din. Ytterligere avgifter for databruk kan påløpe."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3813311942370920903">"Du kan bruke apper til å opprette Wi-Fi-soner for deling av innhold med enheter i nærheten."</string>
- <string name="wifi_hotspot_auto_off_title" msgid="8855711787485504882">"Slå av Wi-Fi-sone automatisk"</string>
+ <string name="wifi_hotspot_auto_off_title" msgid="8855711787485504882">"Slå av wifi-sone automatisk"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="8283656069997871354">"Når ingen enheter er tilkoblet"</string>
<string name="wifi_hotspot_maximize_compatibility" msgid="6494125684420024058">"Utvid kompatibilitet"</string>
<string name="wifi_hotspot_maximize_compatibility_single_ap_summary" msgid="383355687431591441">"Dette hjelper andre enheter med å finne denne Wi-Fi-sonen. Dette reduserer tilkoblingshastigheten."</string>
<string name="wifi_hotspot_maximize_compatibility_dual_ap_summary" msgid="3579549223159056533">"Dette hjelper andre enheter med å finne denne Wi-Fi-sonen. Øker batteribruken."</string>
- <string name="wifi_tether_starting" msgid="8879874184033857814">"Slår på Wi-Fi-sone …"</string>
+ <string name="wifi_tether_starting" msgid="8879874184033857814">"Slår på wifi-sone …"</string>
<string name="wifi_tether_stopping" msgid="4416492968019409188">"Slår av trådløs sone …"</string>
<string name="wifi_tether_carrier_unsupport_dialog_title" msgid="3089432578433978073">"Internettdeling er utilgjengelig"</string>
<string name="wifi_tether_carrier_unsupport_dialog_content" msgid="5920421547607921112">"Kontakt operatøren din for å få mer informasjon"</string>
<string name="wifi_tether_enabled_subtext" msgid="5085002421099821056">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> er aktiv"</string>
- <string name="wifi_tether_failed_subtext" msgid="437190628041885500">"Feil med flyttbar Wi-Fi-sone"</string>
- <string name="wifi_tether_configure_ap_text" msgid="7072559431286459122">"Konfigurer Wi-Fi-sone"</string>
- <string name="wifi_hotspot_configure_ap_text" msgid="9027072969831022321">"Konfigurasjon av Wi-Fi-sone"</string>
- <string name="wifi_hotspot_configure_ap_text_summary" msgid="1445157424926935178">"AndroidAP WPA2 PSK-Wi-Fi-sone"</string>
+ <string name="wifi_tether_failed_subtext" msgid="437190628041885500">"Feil med flyttbar wifi-sone"</string>
+ <string name="wifi_tether_configure_ap_text" msgid="7072559431286459122">"Konfigurer wifi-sone"</string>
+ <string name="wifi_hotspot_configure_ap_text" msgid="9027072969831022321">"Konfigurasjon av wifi-sone"</string>
+ <string name="wifi_hotspot_configure_ap_text_summary" msgid="1445157424926935178">"AndroidAP WPA2 PSK-wifi-sone"</string>
<string name="wifi_tether_configure_ssid_default" msgid="1709397571393179300">"AndroidHotspot"</string>
<string name="wifi_add_app_single_network_title" msgid="8911612806204065225">"Vil du lagre dette nettverket?"</string>
<string name="wifi_add_app_single_network_summary" product="default" msgid="6881712878537666626">"<xliff:g id="APPNAME">%1$s</xliff:g> vil lagre et nettverk på telefonen din"</string>
@@ -1230,7 +1230,7 @@
<string name="wifi_add_app_networks_summary" product="tablet" msgid="2088967184512169910">"<xliff:g id="APPNAME">%1$s</xliff:g> vil lagre disse nettverkene på nettbrettet ditt"</string>
<string name="wifi_add_app_networks_saving_summary" msgid="577680250954742033">"Lagrer <xliff:g id="NUMBER">%d</xliff:g> nettverk …"</string>
<string name="wifi_add_app_networks_saved_summary" msgid="1648417628665152905">"Nettverkene er lagret"</string>
- <string name="wifi_calling_settings_title" msgid="264665264535884440">"Wi-Fi-anrop"</string>
+ <string name="wifi_calling_settings_title" msgid="264665264535884440">"Wifi-anrop"</string>
<string name="wifi_calling_suggestion_title" msgid="4791435106729906727">"Forleng anrop med Wi‑Fi"</string>
<string name="wifi_calling_suggestion_summary" msgid="5413024679599742858">"Slå på Wi‑Fi-anrop for å forlenge dekningen"</string>
<string name="wifi_calling_mode_title" msgid="5145896168360825619">"Ringeinnstillinger"</string>
@@ -1251,15 +1251,15 @@
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="3240387177966098351">"Bruk mobilnettverk hvis Wi-Fi er utilgjengelig"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="3746914244902314059">"Bruk Wi-Fi hvis mobilnettverket er utilgjengelig"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="3155660680014892641">"Ring via Wi‑Fi. Samtalen avsluttes hvis du mister Wi‑Fi-tilkoblingen."</string>
- <string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Når Wi-Fi-anrop er slått på, kan telefonen din dirigere telefonsamtaler via Wi-Fi-nettverk eller operatørens nettverk, avhengig av hva du har angitt i innstillingene og hvilket signal som er sterkest. Før du slår på denne funksjonen, er det viktig å sjekke gebyrer og andre detaljer med operatøren din.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
+ <string name="wifi_calling_off_explanation" msgid="6295526820826322895">"Når wifi-anrop er slått på, kan telefonen din dirigere telefonsamtaler via Wi-Fi-nettverk eller operatørens nettverk, avhengig av hva du har angitt i innstillingene og hvilket signal som er sterkest. Før du slår på denne funksjonen, er det viktig å sjekke gebyrer og andre detaljer med operatøren din.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="3487475808574416183"></string>
<string name="emergency_address_title" msgid="8102786488994263815">"Adresse for nødssituasjoner"</string>
<string name="emergency_address_summary" msgid="3022628750270626473">"Brukes som posisjonen din når du gjør et nødanrop over Wi-Fi"</string>
<string name="private_dns_help_message" msgid="851221502063782306"><annotation id="url">"Finn ut mer"</annotation>" om funksjoner for privat DNS"</string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"På"</string>
<string name="wifi_calling_pref_managed_by_carrier" msgid="129524064888622179">"Innstillingen administreres av operatøren"</string>
- <string name="wifi_calling_settings_activation_instructions" msgid="3936067355828542266">"Aktivér Wi-Fi-anrop"</string>
- <string name="wifi_calling_turn_on" msgid="7687886259199428823">"Slå på Wi-Fi-anrop"</string>
+ <string name="wifi_calling_settings_activation_instructions" msgid="3936067355828542266">"Aktivér wifi-anrop"</string>
+ <string name="wifi_calling_turn_on" msgid="7687886259199428823">"Slå på wifi-anrop"</string>
<string name="wifi_calling_not_supported" msgid="3303917737849393175">"Wi‑Fi-anrop støttes ikke for %1$s"</string>
<string name="wifi_disconnected_from" msgid="5249576734324159708">"Koblet fra <xliff:g id="SSID">%1$s</xliff:g>"</string>
<string name="carrier" msgid="1755020806290963951">"Operatør"</string>
@@ -1803,29 +1803,29 @@
<string name="tether_settings_title_wifi" msgid="4327056146425282159">"Flyttbar trådløs sone"</string>
<string name="tether_settings_title_bluetooth" msgid="8878813702520141084">"Bluetooth-internettdeling"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="4437274151658505496">"Internettdeling"</string>
- <string name="tether_settings_title_all" msgid="6807525590937697228">"Wi-Fi-sone og internettdeling"</string>
- <string name="tether_settings_summary_hotspot_on_tether_on" msgid="6110241048260139633">"Wi-Fi-sone på, internettdeling"</string>
- <string name="tether_settings_summary_hotspot_on_tether_off" msgid="5057598961245943644">"Wi-Fi-sone på"</string>
+ <string name="tether_settings_title_all" msgid="6807525590937697228">"Wifi-sone og internettdeling"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_on" msgid="6110241048260139633">"Wifi-sone på, internettdeling"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_off" msgid="5057598961245943644">"Wifi-sone på"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="7181518138494995888">"Internettdeling"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="9054069463426952689">"Kan ikke bruke internettdeling eller flyttbare Wi-Fi-soner mens Datasparing er på"</string>
- <string name="tether_settings_summary_hotspot_only" msgid="8529008147731140279">"Bare Wi-Fi-sone"</string>
+ <string name="tether_settings_summary_hotspot_only" msgid="8529008147731140279">"Bare wifi-sone"</string>
<string name="tether_settings_summary_usb_tethering_only" msgid="6351624505239356221">"Bare USB"</string>
<string name="tether_settings_summary_bluetooth_tethering_only" msgid="1451008625343274930">"Bare Bluetooth"</string>
<string name="tether_settings_summary_ethernet_tethering_only" msgid="3582266687537419309">"Bare Ethernet"</string>
- <string name="tether_settings_summary_hotspot_and_usb" msgid="5999349643653265016">"Wi-Fi-sone, USB"</string>
- <string name="tether_settings_summary_hotspot_and_bluetooth" msgid="810514646401708557">"Wi-Fi-sone, Bluetooth"</string>
- <string name="tether_settings_summary_hotspot_and_ethernet" msgid="5489192670354277152">"Wi-Fi-sone, Ethernet"</string>
+ <string name="tether_settings_summary_hotspot_and_usb" msgid="5999349643653265016">"Wifi-sone, USB"</string>
+ <string name="tether_settings_summary_hotspot_and_bluetooth" msgid="810514646401708557">"Wifi-sone, Bluetooth"</string>
+ <string name="tether_settings_summary_hotspot_and_ethernet" msgid="5489192670354277152">"Wifi-sone, Ethernet"</string>
<string name="tether_settings_summary_usb_and_bluetooth" msgid="1355680331767261967">"USB, Bluetooth"</string>
<string name="tether_settings_summary_usb_and_ethernet" msgid="2195017679820919905">"USB, Ethernet"</string>
<string name="tether_settings_summary_bluetooth_and_ethernet" msgid="1015253926959211012">"Bluetooth, Ethernet"</string>
- <string name="tether_settings_summary_hotspot_and_usb_and_bluetooth" msgid="2949043525073791732">"Wi-Fi-sone, USB, Bluetooth"</string>
- <string name="tether_settings_summary_hotspot_and_usb_and_ethernet" msgid="5178946567323581144">"Wi-Fi-sone, USB, Ethernet"</string>
- <string name="tether_settings_summary_hotspot_and_bluetooth_and_ethernet" msgid="4104425838594994441">"Wi-Fi-sone, Bluetooth, Ethernet"</string>
+ <string name="tether_settings_summary_hotspot_and_usb_and_bluetooth" msgid="2949043525073791732">"Wifi-sone, USB, Bluetooth"</string>
+ <string name="tether_settings_summary_hotspot_and_usb_and_ethernet" msgid="5178946567323581144">"Wifi-sone, USB, Ethernet"</string>
+ <string name="tether_settings_summary_hotspot_and_bluetooth_and_ethernet" msgid="4104425838594994441">"Wifi-sone, Bluetooth, Ethernet"</string>
<string name="tether_settings_summary_usb_and_bluetooth_and_ethernet" msgid="5880591133984166550">"USB, Bluetooth, Ethernet"</string>
- <string name="tether_settings_summary_all" msgid="7565193614882005775">"Wi-Fi-sone, USB, Bluetooth, Ethernet"</string>
+ <string name="tether_settings_summary_all" msgid="7565193614882005775">"Wifi-sone, USB, Bluetooth, Ethernet"</string>
<string name="tether_settings_summary_off" msgid="2526164899130351968">"Deler ikke internett med andre enheter"</string>
<string name="tethering_interface_options" msgid="7575535888135143650">"Internettdeling"</string>
- <string name="disable_wifi_hotspot_title" msgid="2167985468585290478">"Ikke bruk Wi-Fi-sone"</string>
+ <string name="disable_wifi_hotspot_title" msgid="2167985468585290478">"Ikke bruk wifi-sone"</string>
<string name="disable_wifi_hotspot_when_usb_on" msgid="220439059794714583">"Bare del internett via USB"</string>
<string name="disable_wifi_hotspot_when_bluetooth_on" msgid="4711723299880116345">"Bare del internett via Bluetooth"</string>
<string name="disable_wifi_hotspot_when_ethernet_on" msgid="4123242400542103599">"Bare del internett via Ethernet"</string>
@@ -1845,7 +1845,7 @@
<string name="bluetooth_untether_blank" msgid="5087548945727762308">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> kobles fra."</string>
<string name="ethernet_tether_checkbox_text" msgid="959743110824197356">"Ethernet-internettdeling"</string>
<string name="ethernet_tethering_subtext" product="default" msgid="5998100693350351694">"Del telefonens internettilkobling via Ethernet"</string>
- <string name="tethering_footer_info" msgid="6782375845587483281">"Bruk Wi-Fi-sone og internettdeling for å gi andre enheter tilgang til internett via mobildataforbindelsen din. Apper kan også opprette en Wi-Fi-sone for å dele innhold med enheter i nærheten."</string>
+ <string name="tethering_footer_info" msgid="6782375845587483281">"Bruk wifi-sone og internettdeling for å gi andre enheter tilgang til internett via mobildataforbindelsen din. Apper kan også opprette en wifi-sone for å dele innhold med enheter i nærheten."</string>
<string name="tethering_footer_info_sta_ap_concurrency" msgid="2079039077487477676">"Bruk Wi-Fi-soner og internettdeling for å gi andre enheter internettilgang via Wi-Fi- eller mobildatatilkoblingen din. Du kan også bruke apper til å opprette Wi-Fi-soner for å dele innhold med enheter i nærheten."</string>
<string name="tethering_help_button_text" msgid="2823655011510912001">"Hjelp"</string>
<string name="network_settings_title" msgid="4663717899931613176">"Mobilnettverk"</string>
@@ -1856,7 +1856,7 @@
<string name="sms_change_default_no_previous_dialog_text" msgid="6215622785087181275">"Vil du bruke <xliff:g id="NEW_APP">%s</xliff:g> som SMS-app?"</string>
<string name="network_scorer_picker_title" msgid="2022922801936206195">"Nettverksvurdering levert av"</string>
<string name="network_scorer_picker_none_preference" msgid="8894034333043177807">"Ingen"</string>
- <string name="network_scorer_change_active_dialog_title" msgid="7005220310238618141">"Vil du endre Wi-Fi-assistent?"</string>
+ <string name="network_scorer_change_active_dialog_title" msgid="7005220310238618141">"Vil du endre wifi-assistent?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="7006057749370850706">"Vil du bruke <xliff:g id="NEW_APP">%1$s</xliff:g> i stedet for <xliff:g id="CURRENT_APP">%2$s</xliff:g> til å administrere nettverkstilkoblingene?"</string>
<string name="network_scorer_change_active_no_previous_dialog_text" msgid="680685773455072321">"Vil du bruke <xliff:g id="NEW_APP">%s</xliff:g> til å administrere nettverkstilkoblingene?"</string>
<string name="mobile_unknown_sim_operator" msgid="6650422533065760963">"Ukjent SIM-operatør"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Posisjonstjenester"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Posisjonstjenester"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Posisjonstjenester for jobb"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Bruk posisjonen til å angi tidssonen"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Bruk posisjon"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Enhetsposisjonen er nødvendig"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"For å angi tidssonen med posisjonen din, slå på posisjon og oppdater innstillingene for tidssone"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Posisjonsinnstillinger"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Gjenkjenning av tidssone basert på posisjon er slått av"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Gjenkjenning av tidssone basert på posisjon støttes ikke"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Du har ikke tillatelse til å endre gjenkjenning av tidssone"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Posisjonen kan brukes til å angi tidssonen"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi- og mobilnettverksposisjon"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Tillat at apper bruker posisjonstjenesten fra Google til å finne posisjonen din raskere. Anonym posisjonsdata blir samlet inn og sendt til Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Posisjon fastsatt av Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2554,7 +2557,7 @@
<string name="reduce_bright_colors_preference_summary" product="default" msgid="7878756844769221647">"Gjør skjermen mørkere enn den laveste lysstyrken på telefonen"</string>
<string name="reduce_bright_colors_preference_summary" product="tablet" msgid="8959794720356934888">"Gjør skjermen mørkere enn den laveste lysstyrken på nettbrettet"</string>
<string name="reduce_bright_colors_preference_intro_text" msgid="3502290826747650566">"Gjør skjermen mørkere så det blir mer komfortabelt å lese"</string>
- <string name="reduce_bright_colors_preference_subtitle" product="default" msgid="8573408446901659333">"Ekstra dimmet kan være nyttig når <ol> <li> standard laveste lysstyrke på telefonen fremdeles er for lys</li> <li> du bruker telefonen i mørke omgivelser, for eksempel om natten eller i et mørkt rom før leggetid</li> </ol>"</string>
+ <string name="reduce_bright_colors_preference_subtitle" product="default" msgid="8573408446901659333">"Ekstra dimmet kan være nyttig når <ol> <li> standard laveste lysstyrke på telefonen fremdeles er for lys</li> <li> du bruker telefonen i mørke omgivelser, for eksempel om natten eller i et mørkt rom før leggetid</li> </ol>"</string>
<string name="reduce_bright_colors_preference_subtitle" product="tablet" msgid="5158211121482010799">"Ekstra dimmet kan være nyttig når <ol> <li> standard laveste lysstyrke på nettbrettet fremdeles er for lys</li> <li> du bruker nettbrettet i mørke omgivelser, for eksempel om natten eller i et mørkt rom før leggetid</li> </ol>"</string>
<string name="reduce_bright_colors_intensity_preference_title" msgid="7455443033955118267">"Intensitet"</string>
<string name="reduce_bright_colors_intensity_start_label" msgid="930387498396426039">"Mørkere"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3082,7 +3089,7 @@
<string name="backup_section_title" msgid="6539706829848457794">"Sikkerhetskopier og gjenopprett"</string>
<string name="personal_data_section_title" msgid="6368610168625722682">"Personlige data"</string>
<string name="backup_data_title" msgid="507663517227498525">"Sikkerhetskopiér data"</string>
- <string name="backup_data_summary" msgid="8054551085241427531">"Sikkerhetskopiér appdata, Wi-Fi-passord og andre innstillinger til Googles tjenere"</string>
+ <string name="backup_data_summary" msgid="8054551085241427531">"Sikkerhetskopiér appdata, wifi-passord og andre innstillinger til Googles tjenere"</string>
<string name="backup_configure_account_title" msgid="8574055186903658842">"Sikkerhetskopikonto"</string>
<string name="backup_data_management_title" msgid="6596830198441939702">"Administrer sikkerhetskopikontoen"</string>
<string name="include_app_data_title" msgid="2969603876620594523">"Inkluder appdata"</string>
@@ -3091,9 +3098,9 @@
<string name="backup_inactive_title" msgid="6753265378043349277">"Sikkerhetskopitjenesten er ikke aktiv"</string>
<string name="backup_configure_account_default_summary" msgid="5323225330966306690">"Ingen konto lagrer for øyeblikket sikkerhetskopierte data"</string>
<string name="backup_erase_dialog_title" msgid="5892431263348766484"></string>
- <string name="backup_erase_dialog_message" msgid="2250872501409574331">"Vil du stoppe sikkerhetskopiering av Wi-Fi-passord, bokmerker, andre innstillinger og appdata, samt slette alle kopier på Googles tjenere?"</string>
- <string name="fullbackup_erase_dialog_message" msgid="2379053988557486162">"Vil du stoppe automatisk sikkerhetskopiering av enhetsdata (for eksempel Wi-Fi-passord og anropslogg) og appdata (for eksempel innstillinger og filer lagret av apper), og i tillegg slette alle kopier på eksterne tjenere?"</string>
- <string name="fullbackup_data_summary" msgid="971587401251601473">"Sikkerhetskopiér enhetsdata (for eksempel Wi-Fi-passord og anropslogg) og appdata (for eksempel innstillinger og filer lagret av apper) automatisk fra en ekstern posisjon.\n\nNår du slår på automatisk sikkerhetskopiering, lagres app- og enhetsdata automatisk fra en ekstern posisjon. Appdata kan være alle slags data apper har lagret (basert på utviklerinnstillinger), inkludert potensielle sensitive data, for eksempel kontakter, meldinger og bilder."</string>
+ <string name="backup_erase_dialog_message" msgid="2250872501409574331">"Vil du stoppe sikkerhetskopiering av wifi-passord, bokmerker, andre innstillinger og appdata, samt slette alle kopier på Googles tjenere?"</string>
+ <string name="fullbackup_erase_dialog_message" msgid="2379053988557486162">"Vil du stoppe automatisk sikkerhetskopiering av enhetsdata (for eksempel wifi-passord og anropslogg) og appdata (for eksempel innstillinger og filer lagret av apper), og i tillegg slette alle kopier på eksterne tjenere?"</string>
+ <string name="fullbackup_data_summary" msgid="971587401251601473">"Sikkerhetskopiér enhetsdata (for eksempel wifi-passord og anropslogg) og appdata (for eksempel innstillinger og filer lagret av apper) automatisk fra en ekstern posisjon.\n\nNår du slår på automatisk sikkerhetskopiering, lagres app- og enhetsdata automatisk fra en ekstern posisjon. Appdata kan være alle slags data apper har lagret (basert på utviklerinnstillinger), inkludert potensielle sensitive data, for eksempel kontakter, meldinger og bilder."</string>
<string name="device_admin_settings_title" msgid="31392408594557070">"Innstillinger for enhetsadministrator"</string>
<string name="active_device_admin_msg" msgid="7744106305636543184">"Administratorapp for enheten"</string>
<string name="remove_device_admin" msgid="3143059558744287259">"Deaktiver denne administratorappen for enheten"</string>
@@ -3570,8 +3577,8 @@
<item quantity="one">Vis %d skjult element</item>
</plurals>
<string name="network_dashboard_title" msgid="788543070557731240">"Nettverk og internett"</string>
- <string name="network_dashboard_summary_mobile" msgid="7750924671970583670">"Mobil, Wi‑Fi, Wi-Fi-sone"</string>
- <string name="network_dashboard_summary_no_mobile" msgid="4022575916334910790">"Wi-Fi, Wi-Fi-sone"</string>
+ <string name="network_dashboard_summary_mobile" msgid="7750924671970583670">"Mobil, Wi‑Fi, wifi-sone"</string>
+ <string name="network_dashboard_summary_no_mobile" msgid="4022575916334910790">"Wi-Fi, wifi-sone"</string>
<string name="connected_devices_dashboard_title" msgid="19868275519754895">"Tilkoblede enheter"</string>
<string name="connected_devices_dashboard_default_summary" msgid="7211769956193710397">"Bluetooth, tilkobling"</string>
<string name="connected_devices_dashboard_summary" msgid="6927727617078296491">"Bluetooth, kjøremodus, NFC"</string>
@@ -3674,7 +3681,7 @@
<string name="keywords_assist_input" msgid="3086289530227075593">"standard, assistent"</string>
<string name="keywords_default_payment_app" msgid="5162298193637362104">"betaling, standard"</string>
<string name="keywords_ambient_display" msgid="3149287105145443697">"innkommende varsel"</string>
- <string name="keywords_hotspot_tethering" msgid="3688439689671232627">"USB-internettdeling, Bluetooth-internettdeling, Wi-Fi-sone"</string>
+ <string name="keywords_hotspot_tethering" msgid="3688439689671232627">"USB-internettdeling, Bluetooth-internettdeling, wifi-sone"</string>
<string name="keywords_accessibility_vibration_primary_switch" msgid="730692154347231253">"haptisk, vibrer, vibrering"</string>
<string name="keywords_touch_vibration" msgid="1125291201902251273">"haptisk, vibrer, skjerm, følsomhet"</string>
<string name="keywords_ring_vibration" msgid="1736301626537417541">"haptisk, vibrer, telefon, anrop, følsomhet, ring"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, avansert ringing, 5g-ringing"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"Legg til språk, legg til et språk"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tekststørrelse, stor skrift, stor skrifttype, stor tekst, nedsatt synsevne, gjør tekst større, tekstforstørrer, forstørring av tekst"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"alltid-på-skjerm, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Standardlyd"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Ringe- og varselvolum er satt til <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volum, vibrasjon, ikke forstyrr"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Aldri"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Enhets- og appvarsler"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Kontrollér hvilke apper og enheter som kan lese varsler"</string>
@@ -5076,20 +5076,20 @@
<string name="financed_privacy_install_apps" msgid="7381718005710210851">"installere apper fra utenfor Play-butikken"</string>
<string name="financed_privacy_safe_mode" msgid="5362149445732602578">"starte enheten din på nytt i sikker modus"</string>
<string name="financed_privacy_multi_users" msgid="1727194928477613081">"legge til flere brukere på enheten din"</string>
- <string name="financed_privacy_config_date_time" msgid="8567370445374984365">"Endre dato, klokkeslett og tidssoner"</string>
+ <string name="financed_privacy_config_date_time" msgid="8567370445374984365">"endre dato, klokkeslett og tidssoner"</string>
<string name="financed_privacy_developer_options" msgid="7602001474669831672">"bruke utvikleralternativer"</string>
<string name="financed_privacy_credit_provider_capabilities_category" msgid="8737902277892987998">"Kredittleverandøren din kan"</string>
- <string name="financed_privacy_IMEI" msgid="1852413860963824799">"Tilgang til IMEI-nummeret ditt"</string>
- <string name="financed_privacy_factory_reset" msgid="5505016667590160732">"Tilbakestill enheten til fabrikkstandard hvis noe går galt"</string>
+ <string name="financed_privacy_IMEI" msgid="1852413860963824799">"tilgang til IMEI-nummeret ditt"</string>
+ <string name="financed_privacy_factory_reset" msgid="5505016667590160732">"tilbakestill enheten til fabrikkstandard hvis noe går galt"</string>
<string name="financed_privacy_locked_mode_category" msgid="3708288398912647751">"Hvis enheten din er låst, kan du bare bruke den til å"</string>
<string name="financed_privacy_emergency_calls" msgid="1108183987142736497">"starte nødanrop"</string>
<string name="financed_privacy_system_info" msgid="4158031444108708927">"se systeminformasjon som dato, klokkeslett, nettverksstatus og batteri"</string>
<string name="financed_privacy_turn_on_off_device" msgid="3331566753152790571">"slå enheten din på eller av"</string>
<string name="financed_privacy_notifications" msgid="5932303271274089968">"se varsler og SMS-er"</string>
- <string name="financed_privacy_allowlisted_apps" msgid="8333040812194879963">"Tilgang til apper som tillates av kredittleverandøren"</string>
+ <string name="financed_privacy_allowlisted_apps" msgid="8333040812194879963">"tilgang til apper som tillates av kredittleverandøren"</string>
<string name="financed_privacy_fully_paid_category" msgid="9221763928564246923">"Når du har betalt hele beløpet:"</string>
- <string name="financed_privacy_restrictions_removed" msgid="3182636815294595072">"Alle begrensninger fjernes fra enheten"</string>
- <string name="financed_privacy_uninstall_creditor_app" msgid="6339004120497310705">"Du kan ikke avinstallere kreditorappen"</string>
+ <string name="financed_privacy_restrictions_removed" msgid="3182636815294595072">"alle begrensninger fjernes fra enheten"</string>
+ <string name="financed_privacy_uninstall_creditor_app" msgid="6339004120497310705">"du kan ikke avinstallere kreditorappen"</string>
<plurals name="default_camera_app_title" formatted="false" msgid="8112432929729136399">
<item quantity="other">Kamera-apper</item>
<item quantity="one">Kamera-app</item>
@@ -5213,9 +5213,9 @@
<string name="my_device_info_legal_category_title" msgid="7732792841537995127">"Juridisk og regelverk"</string>
<string name="my_device_info_device_details_category_title" msgid="4848438695638348680">"Enhetsdetaljer"</string>
<string name="my_device_info_device_identifiers_category_title" msgid="2197063484127704153">"Enhetsidentifikatorer"</string>
- <string name="change_wifi_state_title" msgid="5629648102837821525">"Wi-Fi-kontroll"</string>
+ <string name="change_wifi_state_title" msgid="5629648102837821525">"Wifi-kontroll"</string>
<string name="change_wifi_state_app_detail_switch" msgid="1385358508267180745">"Appen kan kontrollere Wi-Fi"</string>
- <string name="change_wifi_state_app_detail_summary" msgid="8230854855584217111">"Tillat at denne appen slår Wi-Fi på eller av, søker etter og kobler til Wi-Fi-nettverk, legger til eller fjerner nettverk eller starter en lokal Wi-Fi-sone"</string>
+ <string name="change_wifi_state_app_detail_summary" msgid="8230854855584217111">"Tillat at denne appen slår Wi-Fi på eller av, søker etter og kobler til Wi-Fi-nettverk, legger til eller fjerner nettverk eller starter en lokal wifi-sone"</string>
<string name="media_output_title" msgid="8283629315159510680">"Spill av på"</string>
<string name="media_output_label_title" msgid="4139048973886819148">"Spill av <xliff:g id="LABEL">%s</xliff:g> på"</string>
<string name="media_output_default_summary" msgid="4200343059396412376">"Denne enheten"</string>
@@ -5245,7 +5245,7 @@
<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="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 Wi-Fi-sone."</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>
<string name="homepage_all_settings" msgid="1877827279189801035">"Alle innstillinger"</string>
<string name="homepage_personal_settings" msgid="8312279476519359656">"Forslag"</string>
@@ -5506,7 +5506,7 @@
<string name="automatic_system_heap_dump_summary" msgid="4060846186592886986">"Samle automatisk inn en minnedump for Android-systemet når det bruker for mye minne"</string>
<string name="wifi_disconnect_button_text" msgid="5698154296678571998">"Koble fra"</string>
<string name="wfc_disclaimer_emergency_limitation_title_text" msgid="8276287227589397162">"Nødanrop"</string>
- <string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="5503902001191552196">"Nødanrop via Wi-Fi-anrop støttes ikke av operatøren din.\nEnheten bytter automatisk til et mobilnettverk for å foreta et nødanrop.\nNødanrop er bare mulige i områder med mobildekning."</string>
+ <string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="5503902001191552196">"Nødanrop via wifi-anrop støttes ikke av operatøren din.\nEnheten bytter automatisk til et mobilnettverk for å foreta et nødanrop.\nNødanrop er bare mulige i områder med mobildekning."</string>
<string name="wifi_calling_summary" msgid="8566648389959032967">"Bruk Wi‑Fi for anrop for å forbedre kvaliteten"</string>
<string name="backup_calling_settings_title" msgid="519714752900364326">"Reserve for anrop"</string>
<string name="backup_calling_setting_summary" msgid="599493254305348733">"Hvis <xliff:g id="BACKUP_CALLING_OPERATOR_TEXT">%1$s</xliff:g> er utilgjengelig eller roamer, bruker du SIM-kortet for mobildata for <xliff:g id="BACKUP_CALLING_CARRIER_TEXT">%1$s</xliff:g>-anrop."</string>
@@ -5586,7 +5586,7 @@
<string name="provider_network_settings_title" msgid="2624756136016346774">"SIM-kort"</string>
<string name="keywords_airplane_safe_networks" msgid="5902708537892978245">"fly, trygg på fly"</string>
<string name="calls_and_sms" msgid="1931855083959003306">"Anrop og SMS"</string>
- <string name="calls_and_sms_category" msgid="3788238090898237767">"Wi-Fi-anrop"</string>
+ <string name="calls_and_sms_category" msgid="3788238090898237767">"Wifi-anrop"</string>
<string name="calls_sms_wfc_summary" msgid="3940529919408667336">"Ring og motta anrop via Wi‑Fi"</string>
<string name="calls_sms_footnote" msgid="1003530944232362815">"Med Wi‑Fi-anrop ringer og mottar du anrop via Wi-Fi-nettverk utenfor operatøren. "<annotation id="url">"Finn ut mer"</annotation></string>
<string name="calls_preference_title" msgid="7536882032182563800">"Anrop"</string>
@@ -5622,7 +5622,7 @@
<string name="default_active_sim_calls" msgid="2390973682556353558">"anrop"</string>
<string name="default_active_sim_sms" msgid="8041498593025994921">"SMS"</string>
<string name="default_active_sim_mobile_data" msgid="6798083892814045301">"mobildata"</string>
- <string name="wifi_scan_notify_message" msgid="1331238142061476869">"For å forbedre brukeropplevelsen på enheten kan apper og tjenester søke etter Wi-Fi-nettverk når som helst – også når Wi-Fi er slått av. Dette kan for eksempel brukes til å forbedre posisjonsbaserte funksjoner og tjenester. Du kan endre dette i innstillingene for Wi-Fi-skanning."</string>
+ <string name="wifi_scan_notify_message" msgid="1331238142061476869">"For å forbedre brukeropplevelsen på enheten kan apper og tjenester søke etter Wi-Fi-nettverk når som helst – også når Wi-Fi er slått av. Dette kan for eksempel brukes til å forbedre posisjonsbaserte funksjoner og tjenester. Du kan endre dette i innstillingene for wifi-skanning."</string>
<string name="wifi_scan_change" msgid="8438320311511852918">"Endre"</string>
<string name="preference_summary_default_combination" msgid="4643585915107796253">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="NETWORKMODE">%2$s</xliff:g>"</string>
<string name="mobile_data_connection_active" msgid="2422223108911581552">"Tilkoblet"</string>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 4d8c833..1d00a52 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -100,7 +100,7 @@
<string name="bluetooth_show_received_files" msgid="685424727760622632">"प्राप्त गरिएका फाइलहरू"</string>
<string name="bluetooth_devices_card_off_title" msgid="1320149821945129127">"ब्लुटुथ निष्क्रिय छ"</string>
<string name="bluetooth_devices_card_off_summary" msgid="2276527382891105858">"यसलाई सक्रिय गर्न ट्याप गर्नुहोस्"</string>
- <string name="device_picker" msgid="2427027896389445414">"ब्लुटुथ उपकरण छान्नुहोस्"</string>
+ <string name="device_picker" msgid="2427027896389445414">"ब्लुटुथ डिभाइस छान्नुहोस्"</string>
<string name="bluetooth_ask_enablement" msgid="1529030199895339199">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लुटुथ सक्रिय गर्न चाहन्छ"</string>
<string name="bluetooth_ask_disablement" msgid="1879788777942714761">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लुटुथ निष्क्रिय पार्न चाहन्छ"</string>
<string name="bluetooth_ask_enablement_no_name" msgid="5091401961637405417">"एउटा एप ब्लुटुथ सक्रिय गर्न चाहन्छ"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"मिति र समय सेट गर्नुहोस्"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"मिति, समय, प्रामाणिक समय र प्रारुपहरू सेट गर्नुहोस्"</string>
<string name="date_time_auto" msgid="4239202185055225869">"समय स्वतः सेट गरियोस्"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"प्रामाणिक समय स्वतः सेट गरियोस्"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"स्वतः सेट गरियोस्"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"लोकेलको डिफल्ट सेटिङ प्रयोग गरियोस्"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"२४ घण्टे ढाँचामा"</string>
<string name="date_time_24hour" msgid="286679379105653406">"२४-घण्टे ढाँचा प्रयोग गरियोस्"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"लोकेसन सर्भिस"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"लोकेसनसम्बन्धी सेवाहरू"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"कार्यस्थलका लागि लोकेसन सर्भिस"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"प्रामाणिक समय सेट गर्न लोकेसन प्रयोग गरियोस्"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"लोकेसन प्रयोग गरियोस्"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"डिभाइसको लोकेसन सर्भिस अन गर्नु पर्ने हुन्छ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"आफ्नो स्थानसम्बन्धी जानकारी प्रयोग गरी प्रामाणिक समय तय गर्न लोकेसन सर्भिस अन गर्नुहोस् अनि प्रामाणिक समयसम्बन्धी सेटिङ अपडेट गर्नुहोस्"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"लोकेसन सेटिङ"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"स्थानको प्रामाणिक समय पत्ता लगाउने सुविधा असक्षम पारिएको छ"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"स्थानको प्रामाणिक समय पत्ता लगाउने सुविधा प्रयोग गर्न मिल्दैन"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"स्थानको प्रामाणिक समय पत्ता लगाउने सुविधासम्बन्धी सेटिङ परिवर्तन गर्न पाइँदैन"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"प्रामाणिक समय सेट गर्न लोकेसन प्रयोग गर्न सकिन्छ"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi; मोबाइल नेटवर्क स्थान"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"तपाईँको स्थानलाई सीघ्र अनुमान गर्न एपहरूलाई Google लोकेसन सर्भिस प्रयोग गर्ने अनुमति दिनुहोस्। बेनामी स्थान डेटा भेला गरिने छ र Googleमा पठाइने छ।"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"वाइ-फाइद्वारा निर्धारित स्थान"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3370,8 +3377,8 @@
<item quantity="one">प्रमाणपत्रलाई जाँच गर्नुहोस्</item>
</plurals>
<string name="user_settings_title" msgid="6550866465409807877">"बहु प्रयोगकर्ताहरू"</string>
- <string name="user_settings_footer_text" product="device" msgid="7523914344521302179">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो यन्त्र सेयर गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल गृह स्क्रिन, खाता, एप, सेटिङ र थप कुराहरूका लागि तपाईंको डिभाइसमा व्यक्तिगत स्थान हुन्छ।"</string>
- <string name="user_settings_footer_text" product="tablet" msgid="3730074318510244552">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो ट्याब्लेट सेयर गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल गृह स्क्रिन, खाता, एप, सेटिङ र थप कुराहरूका लागि तपाईंको ट्याब्लेटमा व्यक्तिगत स्थान हुन्छ।"</string>
+ <string name="user_settings_footer_text" product="device" msgid="7523914344521302179">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो यन्त्र सेयर गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल होम स्क्रिन, खाता, एप, सेटिङ र थप कुराहरूका लागि तपाईंको डिभाइसमा व्यक्तिगत स्थान हुन्छ।"</string>
+ <string name="user_settings_footer_text" product="tablet" msgid="3730074318510244552">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो ट्याब्लेट सेयर गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल होम स्क्रिन, खाता, एप, सेटिङ र थप कुराहरूका लागि तपाईंको ट्याब्लेटमा व्यक्तिगत स्थान हुन्छ।"</string>
<string name="user_settings_footer_text" product="default" msgid="4420915712050349125">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो फोन सेयर गर्नुहोस्। तपाईंको फोनमा प्रत्येक प्रयोगकर्ताका लागि कस्टम होम स्क्रिन, खाता, एप, सेटिङ र थप कुराहरूका लागि व्यक्तिगत स्थान उपलब्ध हुन्छ।"</string>
<string name="user_list_title" msgid="1387379079186123404">"प्रयोगकर्ता र प्रोफाइलहरू"</string>
<string name="user_add_user_or_profile_menu" msgid="305851380425838287">"प्रयोगकर्ता वा प्रोफाइल थप गर्नुहोस्"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, कल गर्ने उन्नत सुविधा, 5g कलिङ"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"भाषा हाल्नुहोस्, कुनै भाषा हाल्नुहोस्"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"पाठको आकार, ठुलो आकारको पाठ, ठुलो फन्ट, ठुलो पाठ, कमजोर दृष्टि, पाठ अझ ठुलो बनाउनुहोस्, फन्ट ठुलो बनाउने टुल, फन्ट ठुलो बनाउने प्रक्रिया"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"सधैँ अन भइरहने डिस्प्ले, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"डिफल्ट साउन्ड"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"घन्टी तथा सूचनाको भोल्युम <xliff:g id="PERCENTAGE">%1$s</xliff:g> मा सेट छ"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"भोल्युम, कम्पन, बाधा नपुर्याउनुहोस्"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"कहिल्यै होइन"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"डिभाइस तथा एपसम्बन्धी सूचनाहरू"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"कुन कुन एप र डिभाइसहरूले सूचना पढ्न पाउँछन् भन्ने कुरा नियन्त्रण गर्नुहोस्"</string>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 6bf5080..075fef6 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Datum en tijd instellen"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Datum, tijd, tijdzone en notaties instellen"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Tijd automatisch instellen"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Tijdzone automatisch instellen"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Automatisch instellen"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Standaardinstelling voor land gebruiken"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑uursnotatie"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-uurs klok gebruiken"</string>
@@ -473,7 +473,7 @@
<string name="security_settings_fingerprint_v2_enroll_acquire_too_fast" msgid="5891227328100822018">"Til je vinger op zodra je een trilling voelt"</string>
<string name="security_settings_fingerprint_v2_enroll_acquire_too_bright" msgid="769646735950329315">"Ga naar een plek met zachter licht en probeer het opnieuw"</string>
<string name="security_settings_fingerprint_v2_enroll_error_max_attempts" msgid="1464972470750764128">"Je hebt het maximale aantal pogingen bereikt"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Gebruik je vingerafdruk om je tablet te ontgrendelen of te bevestigen dat jij het bent als je inlogt bij apps"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Gebruik je vingerafdruk om je tablet te ontgrendelen of te bevestigen dat jij het bent als je bijvoorbeeld inlogt bij apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Gebruik je vingerafdruk om je apparaat te ontgrendelen of te bevestigen dat jij het bent als je inlogt bij apps"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Gebruik je vingerafdruk om je telefoon te ontgrendelen of te bevestigen dat jij het bent als je inlogt bij apps"</string>
<string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Ontgrendelen via gezichtsherkenning en vingerafdruk"</string>
@@ -1577,7 +1577,7 @@
<string name="memory_dcim_usage" msgid="3568913845973164352">"Foto\'s, video\'s"</string>
<string name="memory_music_usage" msgid="8100634000114206429">"Audio (muziek, ringtones, podcasts, enzovoort)"</string>
<string name="memory_media_misc_usage" msgid="7066851245178533269">"Andere bestanden"</string>
- <string name="memory_media_cache_usage" msgid="780808666853685824">"Gegevens in het cachegeheugen"</string>
+ <string name="memory_media_cache_usage" msgid="780808666853685824">"Gecachete gegevens"</string>
<string name="sd_eject" product="nosdcard" msgid="6136102589751843304">"Gedeelde opslag ontkoppelen"</string>
<string name="sd_eject" product="default" msgid="8062832622096296251">"SD-kaart ontkoppelen"</string>
<string name="sd_eject_summary" product="nosdcard" msgid="6859940774161708871">"Interne USB-opslag ontkoppelen"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Locatieservices"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Locatieservices"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Locatieservices voor het werk"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Locatie gebruiken om tijdzone in te stellen"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Locatie gebruiken"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Apparaatlocatie nodig"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Als je je tijdzone wilt instellen, zet je eerst locatie aan en update je daarna de instellingen voor tijdzones"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Locatie-instellingen"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Tijdzonedetectie op basis van locatie staat uit"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Tijdzonedetectie op basis van locatie wordt niet ondersteund"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Wijzigingen in tijdzonedetectie op basis van locatie zijn niet toegestaan"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Locatie kan worden gebruikt om tijdzone in te stellen"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wifi en mobiele netwerklocatie"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Apps toestaan de locatieservice van Google te gebruiken om je locatie sneller te schatten. Anonieme locatiegegevens worden verzameld en verzonden naar Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Locatie bepaald via wifi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2885,7 +2888,7 @@
<string name="battery_sugg_bluetooth_headset" msgid="6495519793211758353">"Probeer verbinding te maken met een ander Bluetooth-apparaat"</string>
<string name="battery_desc_apps" msgid="4187483940383266017">"Batterij gebruikt door app"</string>
<string name="battery_sugg_apps_info" msgid="4796917242296658454">"De app stoppen of verwijderen"</string>
- <string name="battery_sugg_apps_gps" msgid="7221335088647925110">"Accubesparingsmodus selecteren"</string>
+ <string name="battery_sugg_apps_gps" msgid="7221335088647925110">"Batterijbesparingsmodus selecteren"</string>
<string name="battery_sugg_apps_settings" msgid="6527223370162382166">"De app kan instellingen aanbieden om het accugebruik te beperken"</string>
<string name="battery_desc_users" msgid="1959428568888686847">"Batterij gebruikt door gebruiker"</string>
<string name="battery_desc_unaccounted" msgid="1649497860893660763">"Divers stroomgebruik"</string>
@@ -2923,6 +2926,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>
@@ -2994,7 +2998,7 @@
<string name="menu_duration_6h" msgid="2843895006519153126">"6 uur"</string>
<string name="menu_duration_12h" msgid="9206922888181602565">"12 uur"</string>
<string name="menu_duration_1d" msgid="8538390358158862330">"1 dag"</string>
- <string name="menu_show_system" msgid="3780310384799907818">"Systeem tonen"</string>
+ <string name="menu_show_system" msgid="3780310384799907818">"Systeem-apps tonen"</string>
<string name="menu_hide_system" msgid="5197937451381420622">"Systeem verbergen"</string>
<string name="menu_show_percentage" msgid="6143205879027928330">"Percentages tonen"</string>
<string name="menu_use_uss" msgid="1663914348353623749">"USS gebruiken"</string>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, geavanceerd bellen, 5g-bellen, bellen via 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"taal toevoegen, een taal toevoegen"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tekstgrootte, grote letters, groot lettertype, grote tekst, slechtziend, tekst groter maken, lettertype vergroten, vergroting van lettertype"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"scherm dat altijd actief is, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Standaardgeluid"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volume van ringtone en meldingen op <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, trillen, niet storen"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Nooit"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Apparaat- en app-meldingen"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Beheer welke apps en apparaten meldingen kunnen lezen"</string>
@@ -4031,7 +4031,7 @@
<string name="nls_feature_read_title" msgid="7629713268744220437">"Je meldingen lezen"</string>
<string name="nls_feature_read_summary" msgid="1064698238110273593">"De app kan je meldingen lezen, waaronder persoonlijke informatie zoals contacten, berichten en foto\'s"</string>
<string name="nls_feature_reply_title" msgid="7925455553821362039">"Berichten beantwoorden"</string>
- <string name="nls_feature_reply_summary" msgid="4492543411395565556">"De app kan berichten beantwoorden en acties uitvoeren voor knoppen in meldingen, waaronder meldingen snoozen of sluiten en gesprekken beantwoorden"</string>
+ <string name="nls_feature_reply_summary" msgid="4492543411395565556">"De app kan berichten beantwoorden, meldingen snoozen of sluiten en gesprekken beantwoorden."</string>
<string name="nls_feature_settings_title" msgid="8208164329853194414">"Instellingen wijzigen"</string>
<string name="nls_feature_settings_summary" msgid="3770028705648985689">"De app kan Niet storen aan- of uitzetten en gerelateerde instellingen wijzigen"</string>
<string name="notification_listener_disable_warning_summary" msgid="8373396293802088961">"Als je <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> geen toegang tot meldingen geeft, krijgt Niet storen mogelijk ook geen toegang."</string>
@@ -5088,8 +5088,8 @@
<string name="financed_privacy_notifications" msgid="5932303271274089968">"Meldingen en sms-berichten bekijken"</string>
<string name="financed_privacy_allowlisted_apps" msgid="8333040812194879963">"Toegang krijgen tot apps die zijn toegestaan door de kredietverstrekker"</string>
<string name="financed_privacy_fully_paid_category" msgid="9221763928564246923">"Nadat je het volledige bedrag hebt betaald:"</string>
- <string name="financed_privacy_restrictions_removed" msgid="3182636815294595072">"Alle beperkingen voor het apparaat worden ingetrokken"</string>
- <string name="financed_privacy_uninstall_creditor_app" msgid="6339004120497310705">"Je kunt de app van de kredietverstrekker verwijderen"</string>
+ <string name="financed_privacy_restrictions_removed" msgid="3182636815294595072">"worden alle beperkingen voor het apparaat ingetrokken."</string>
+ <string name="financed_privacy_uninstall_creditor_app" msgid="6339004120497310705">"kun je de app van de kredietverstrekker verwijderen."</string>
<plurals name="default_camera_app_title" formatted="false" msgid="8112432929729136399">
<item quantity="other">Camera-apps</item>
<item quantity="one">Camera-app</item>
diff --git a/res/values-or/arrays.xml b/res/values-or/arrays.xml
index f7a665d..89f4ff4 100644
--- a/res/values-or/arrays.xml
+++ b/res/values-or/arrays.xml
@@ -521,7 +521,7 @@
</string-array>
<string-array name="cdma_system_select_choices">
<item msgid="1205665684426617345">"କେବଳ ହୋମ୍ ନେଟ୍ୱର୍କ"</item>
- <item msgid="6691772120712000966">"ସ୍ୱଚାଳିତ"</item>
+ <item msgid="6691772120712000966">"ଅଟୋମେଟିକ"</item>
</string-array>
<string-array name="preferred_network_mode_choices">
<item msgid="5746729990546256950">"GSM/WCDMA ପସନ୍ଦ କରାଯାଇଛି"</item>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 3fec535..d8d119d 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -146,7 +146,7 @@
<string name="bluetooth_disable_hw_offload_dialog_title" msgid="6001142380445276918">"ଡିଭାଇସକୁ ରିଷ୍ଟାର୍ଟ କରିବେ?"</string>
<string name="bluetooth_disable_hw_offload_dialog_message" msgid="1524373895333698779">"ଏହି ସେଟିଂ ବଦଳାଇବାକୁ ଆପଣଙ୍କୁ ଆପଣଙ୍କ ଡିଭାଇସ ରିଷ୍ଟାର୍ଟ କରିବାକୁ ହେବ।"</string>
<string name="bluetooth_disable_hw_offload_dialog_confirm" msgid="5594859658551707592">"ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ"</string>
- <string name="bluetooth_disable_hw_offload_dialog_cancel" msgid="3663690305043973720">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="bluetooth_disable_hw_offload_dialog_cancel" msgid="3663690305043973720">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="bluetooth_enable_leaudio" msgid="1245004820628723136">"ବ୍ଲୁଟୁଥ LE ଅଡିଓକୁ ସକ୍ଷମ କରନ୍ତୁ"</string>
<string name="bluetooth_enable_leaudio_summary" msgid="8066117764037123479">"ଯଦି ଡିଭାଇସ LE ଅଡିଓ ହାର୍ଡୱେର କ୍ଷମତାକୁ ସମର୍ଥନ କରେ ତେବେ ବ୍ଲୁଟୁଥ LE ଅଡିଓ ଫିଚରକୁ ସକ୍ଷମ କରେ।"</string>
<string name="connected_device_media_device_title" msgid="3783388247594566734">"ମିଡିଆ ଡିଭାଇସ୍ଗୁଡ଼ିକ"</string>
@@ -240,7 +240,7 @@
<string name="sd_card_settings_label" product="nosdcard" msgid="1850505156136467106">"USB ଷ୍ଟୋରେଜ୍"</string>
<string name="sd_card_settings_label" product="default" msgid="8715502912796241588">"SD କାର୍ଡ"</string>
<string name="proxy_settings_label" msgid="6300573815025557843">"ପ୍ରକ୍ସି ସେଟିଂସ"</string>
- <string name="cancel" msgid="5780102414089664898">"ବାତିଲ୍"</string>
+ <string name="cancel" msgid="5780102414089664898">"ବାତିଲ"</string>
<string name="okay" msgid="4827099303045669054">"ଠିକ୍ ଅଛି"</string>
<string name="forget" msgid="3754013654135912783">"ଭୁଲିଯାଆନ୍ତୁ"</string>
<string name="save" msgid="3125033126936493822">"ସେଭ୍ କରନ୍ତୁ"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"ତାରିଖ ଓ ସମୟ ସେଟ କରନ୍ତୁ"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"ତାରିଖ, ସମୟ, ସମୟ ଅଞ୍ଚଳ, ଓ ଫର୍ମାଟ୍ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ସ୍ୱଚାଳିତ ଭାବେ ସମୟ ସେଟ୍ କରନ୍ତୁ"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ସ୍ୱଚାଳିତ ଭାବେ ଟାଇମ୍ ଜୋନ୍ ସେଟ୍ କରନ୍ତୁ"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ସ୍ଵଚାଳିତ ଭାବେ ସେଟ କରନ୍ତୁ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ଡିଫଲ୍ଟ ସ୍ଥାନର ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑ଘଣ୍ଟିଆ ଫର୍ମାଟ୍"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-ଘଣ୍ଟିଆ ଫର୍ମାଟ ବ୍ୟବହାର କରନ୍ତୁ"</string>
@@ -355,7 +355,7 @@
<string name="security_settings_face_enroll_introduction_accessibility_expanded" msgid="6763509014732769185"></string>
<string name="security_settings_face_enroll_introduction_accessibility_diversity" msgid="2774962371839179206"></string>
<string name="security_settings_face_enroll_introduction_accessibility_vision" msgid="7700394302162170363"></string>
- <string name="security_settings_face_enroll_introduction_cancel" msgid="7551159644361639436">"ବାତିଲ୍"</string>
+ <string name="security_settings_face_enroll_introduction_cancel" msgid="7551159644361639436">"ବାତିଲ"</string>
<string name="security_settings_face_enroll_introduction_no_thanks" msgid="1820618982738898717">"ନାହିଁ, ଧନ୍ୟବାଦ"</string>
<string name="security_settings_face_enroll_introduction_agree" msgid="6319476573697497750">"ମୁଁ ରାଜି ଅଛି"</string>
<string name="security_settings_face_enroll_introduction_more" msgid="1970820298889710532">"ଅଧିକ"</string>
@@ -444,7 +444,7 @@
<string name="security_settings_fingerprint_enroll_introduction_footer_message_2" msgid="3507618608004123384">"ଏକ ଦୃଢ଼ ପାଟର୍ନ କିମ୍ବା PINଠାରୁ ଆପଣଙ୍କ ଟିପଚିହ୍ନ କମ୍ ସୁରକ୍ଷିତ ହୋଇପାରେ।"</string>
<string name="security_settings_fingerprint_enroll_introduction_footer_message_3" product="default" msgid="4757472591076060066">"ଉନ୍ନତ ଟିପଚିହ୍ନ ମଡେଲଗୁଡ଼ିକୁ ତିଆରି କରିବା ପାଇଁ ଆପଣଙ୍କର ଫୋନ୍ ବେଳେବେଳେ ଆପଣଙ୍କ ବର୍ତ୍ତମାନର ଟିପଚିହ୍ନ ଛବିଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବ।"</string>
<string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="8957789840251747092">"ଫୋନ୍କୁ ଅନ୍ଲକ୍ କରିବା କିମ୍ୱା କିଣାକିଣିକୁ ଅନୁମୋଦନ କରିବା ପାଇଁ ନିଜ ଟିପଚିହ୍ନର ବ୍ୟବହାର କରନ୍ତୁ।\n\nଧ୍ୟାନଦିଅନ୍ତୁ: ଏହି ଡିଭାଇସ୍ ଅନଲକ୍ କରିବାକୁ ଆପଣ ଟିପଚିହ୍ନ ବ୍ୟବହାର କରିପାରିବେ ନାହିଁ। ଅଧିକ ସୂଚନା ପାଇଁ, ଆପଣଙ୍କ ସଂସ୍ଥାର ଆଡମିନଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।"</string>
- <string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="6086532316718920562">"ବାତିଲ୍"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="6086532316718920562">"ବାତିଲ"</string>
<string name="security_settings_fingerprint_enroll_introduction_no_thanks" msgid="6104718999323591180">"ନା, ଧନ୍ୟବାଦ"</string>
<string name="security_settings_fingerprint_enroll_introduction_agree" msgid="4068276083536421828">"ମୁଁ ରାଜି"</string>
<string name="setup_fingerprint_enroll_skip_title" msgid="2473807887676247264">"ଟିପଚିହ୍ନ ବାଦ୍ ଦେବେ?"</string>
@@ -501,7 +501,7 @@
<string name="skip_anyway_button_label" msgid="3442274117023270068">"ଯେ କୌଣସି ଭାବେ ବାଦ୍ ଦିଅନ୍ତୁ"</string>
<string name="go_back_button_label" msgid="6139455414099035594">"ପଛକୁ ଫେରନ୍ତୁ"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="641984698150020591">"ବାଦ୍ ଦିଅନ୍ତୁ"</string>
- <string name="cancel_lock_screen_dialog_button_label" msgid="1801132985957491690">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="cancel_lock_screen_dialog_button_label" msgid="1801132985957491690">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="886085239313346000">"ସେନ୍ସରକୁ ସ୍ପର୍ଶ କରନ୍ତୁ"</string>
<string name="security_settings_udfps_enroll_find_sensor_title" msgid="8077484429913330179">"ଆପଣଙ୍କ ଟିପଚିହ୍ନ କିପରି ସେଟ୍ ଅପ୍ କରିବେ"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="6160543980992596286">"ଏହା ଆପଣଙ୍କ ଫୋନ୍ର ପଛରେ ଅଛି। ନିଜ ପ୍ରଥମ ଆଙ୍ଗୁଠିର ବ୍ୟବହାର କରନ୍ତୁ।"</string>
@@ -805,10 +805,10 @@
<string name="lockpassword_password_recently_used" msgid="5341218079730167191">"ଏକ ସମ୍ପ୍ରତି ପାସ୍ୱର୍ଡ ବ୍ୟବହାର କରିବାକୁ ଡିଭାଇସ୍ ଆଡମିନ୍ ଅନୁମତି ଦିଅନ୍ତି ନାହିଁ"</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="5843639256988031272">"ସଂଖ୍ୟାର କ୍ରମବୃଦ୍ଧି, କ୍ରମହ୍ରାସ, କିମ୍ବା ପୁନରାବୃତ୍ତ କ୍ରମ ଅନୁମୋଦିତ ନୁହେଁ"</string>
<string name="lockpassword_confirm_label" msgid="560897521093566777">"ନିଶ୍ଚିତ କରନ୍ତୁ"</string>
- <string name="lockpassword_cancel_label" msgid="6711112212489992112">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="lockpassword_cancel_label" msgid="6711112212489992112">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="lockpassword_clear_label" msgid="311359833434539894">"ଖାଲି କରନ୍ତୁ"</string>
<string name="lockpassword_credential_changed" msgid="5934778179732392028">"ପୂର୍ବରୁ ସ୍କ୍ରିନ୍ ଲକ୍ ପରିବର୍ତ୍ତନ କରାଯାଇଥିଲା। ନୂତନ ସ୍କ୍ରିନ୍ ଲକ୍କୁ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
- <string name="lockpattern_tutorial_cancel_label" msgid="775215267818384016">"ବାତିଲ୍"</string>
+ <string name="lockpattern_tutorial_cancel_label" msgid="775215267818384016">"ବାତିଲ"</string>
<string name="lockpattern_tutorial_continue_label" msgid="1329049481210689408">"ଆଗକୁ"</string>
<string name="lock_setup" msgid="4622999020926280737">"ସେଟଅପ୍ ସମ୍ପୂର୍ଣ୍ଣ।"</string>
<string name="manage_device_admin" msgid="1044620606203916275">"ଡିଭାଇସ୍ ଆଡମିନ୍ ଆପ୍"</string>
@@ -1134,7 +1134,7 @@
<string name="wifi_failed_forget_message" msgid="8272732599235525880">"ନେଟ୍ୱର୍କ ଭୁଲିଯିବାରେ ବିଫଳ ହେଲା"</string>
<string name="wifi_save" msgid="2312643132472226807">"ସେଭ୍ କରନ୍ତୁ"</string>
<string name="wifi_failed_save_message" msgid="1830279872341387120">"ନେଟୱାର୍କ୍ ସେଭ୍ କରି ପାରିଲା ନାହିଁ"</string>
- <string name="wifi_cancel" msgid="6698897376888935410">"ବାତିଲ୍"</string>
+ <string name="wifi_cancel" msgid="6698897376888935410">"ବାତିଲ"</string>
<string name="wifi_forget_dialog_title" msgid="4363829200968563164">"ନେଟୱର୍କକୁ ଭୁଲିଯିବେ?"</string>
<string name="wifi_forget_dialog_message" msgid="8419499588321940243">"ଏହି ନେଟ୍ୱର୍କ ପାଇଁ ଥିବା ସବୁ ପାସ୍ୱର୍ଡକୁ ଡିଲିଟ୍ କରିଦିଆଯିବ"</string>
<plurals name="wifi_saved_access_points_summary" formatted="false" msgid="2802436466732147888">
@@ -1166,7 +1166,7 @@
<string name="wifi_advanced_settings_label" msgid="5880605751602184383">"IP ସେଟିଂସ"</string>
<string name="wifi_advanced_not_available" msgid="8701003884367299092">"ଏହି ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ ୱାଇ-ଫାଇର ଉନ୍ନତ ସେଟିଂସ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="wifi_ip_settings_menu_save" msgid="5190481040428567106">"ସେଭ୍ କରନ୍ତୁ"</string>
- <string name="wifi_ip_settings_menu_cancel" msgid="1757817733064004598">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="wifi_ip_settings_menu_cancel" msgid="1757817733064004598">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="wifi_ip_settings_invalid_ip_address" msgid="3622891107865052307">"ଏକ ବୈଧ IP ଠିକଣା ଟାଇପ୍ କରନ୍ତୁ"</string>
<string name="wifi_ip_settings_invalid_gateway" msgid="1174931247370931239">"ଏକ ମାନ୍ୟ ଗେଟ୍ୱେ ଠିକଣା ଟାଇପ୍ କରନ୍ତୁ"</string>
<string name="wifi_ip_settings_invalid_dns" msgid="1757402215999845975">"ଏକ ବୈଧ DNS ଠିକଣା ଟାଇପ୍ କରନ୍ତୁ।"</string>
@@ -1188,8 +1188,8 @@
<string name="wifi_p2p_disconnect_title" msgid="96361896458072463">"ବିଚ୍ଛିନ୍ନ କରିବେ?"</string>
<string name="wifi_p2p_disconnect_message" msgid="1208761239498807208">"ଯଦି ଆପଣ ବିଚ୍ଛିନ୍ନ କରନ୍ତି, <xliff:g id="PEER_NAME">%1$s</xliff:g> ସହ ଆପଣଙ୍କ ସଂଯୋଗ ଶେଷ ହୋଇଯିବ।"</string>
<string name="wifi_p2p_disconnect_multiple_message" msgid="4490648217799144078">"ଯଦି ଆପଣ ବିଚ୍ଛିନ୍ନ କରନ୍ତି, <xliff:g id="PEER_NAME">%1$s</xliff:g> ଏବଂ <xliff:g id="PEER_COUNT">%2$s</xliff:g> ଟି ଅନ୍ୟ ଡିଭାଇସ୍ ସହ ଆପଣଙ୍କ ସଂଯୋଜନା ଶେଷ ହେବ।"</string>
- <string name="wifi_p2p_cancel_connect_title" msgid="8476985132989357041">"ନିମନ୍ତ୍ରଣକୁ ବାତିଲ୍ କରିବେ?"</string>
- <string name="wifi_p2p_cancel_connect_message" msgid="2409074184473879809">"<xliff:g id="PEER_NAME">%1$s</xliff:g> ସହ ସଂଯୋଗ କରିବାକୁ ନିମନ୍ତ୍ରଣକୁ ଆପଣ ବାତିଲ୍ କରିବାକୁ ଚାହାଁନ୍ତି କି?"</string>
+ <string name="wifi_p2p_cancel_connect_title" msgid="8476985132989357041">"ନିମନ୍ତ୍ରଣକୁ ବାତିଲ କରିବେ?"</string>
+ <string name="wifi_p2p_cancel_connect_message" msgid="2409074184473879809">"<xliff:g id="PEER_NAME">%1$s</xliff:g> ସହ ସଂଯୋଗ କରିବାକୁ ନିମନ୍ତ୍ରଣକୁ ଆପଣ ବାତିଲ କରିବାକୁ ଚାହାଁନ୍ତି କି?"</string>
<string name="wifi_p2p_delete_group_message" msgid="4880242270742385699">"ଏହି ଗ୍ରୁପ୍କୁ ଭୁଲିଯିବେ?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="1549663436920597006">"ୱାଇ-ଫାଇ ହଟସ୍ପଟ୍"</string>
<string name="wifi_hotspot_off_subtext" msgid="2751383134504362078">"ଅନ୍ୟ ଡିଭାଇସଗୁଡ଼ିକ ସହ ଇଣ୍ଟରନେଟ୍ କିମ୍ବା ବିଷୟବସ୍ତୁ ସେୟାର୍ କରୁନାହିଁ"</string>
@@ -1492,7 +1492,7 @@
<string name="sim_pin_disable_failed" msgid="8719890393181032837">"PIN ଅକ୍ଷମ କରିହେବ ନାହିଁ।"</string>
<string name="sim_pin_enable_failed" msgid="5156513975085380284">"PIN ସକ୍ଷମ କରିହେବ ନାହିଁ।"</string>
<string name="sim_enter_ok" msgid="3401715290135787531">"ଠିକ ଅଛି"</string>
- <string name="sim_enter_cancel" msgid="2001859323724961490">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="sim_enter_cancel" msgid="2001859323724961490">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="sim_multi_sims_title" msgid="4875083890014013296">"ଏକାଧିକ ସିମ୍ ମିଳିଛି"</string>
<string name="sim_multi_sims_summary" msgid="1711012455679332238">"ମୋବାଇଲ୍ ଡାଟା ପାଇଁ ନିଜ ପସନ୍ଦର SIM ବାଛନ୍ତୁ।"</string>
<string name="sim_change_data_title" msgid="4663239438584588847">"ମୋବାଇଲ୍ ଡାଟା ପାଇଁ <xliff:g id="CARRIER">%1$s</xliff:g> ବ୍ୟବହାର କରିବେ?"</string>
@@ -1677,7 +1677,7 @@
<string name="storage_wizard_move_unlock" msgid="14651384927767749">"ଡାଟା ନେବାକୁ ଆପଣଙ୍କୁ ଉପଯୋଗକର୍ତ୍ତା <xliff:g id="APP">^1</xliff:g> ଅନଲକ୍ କରିବା ଆବଶ୍ୟକ।"</string>
<string name="storage_wizard_move_progress_title" msgid="3912406225614672391">"<xliff:g id="APP">^1</xliff:g> ଚଳାଉଛି…"</string>
<string name="storage_wizard_move_progress_body" msgid="2396714553394935094">"ଘୁଞ୍ଚାଇବାବେଳେ <xliff:g id="NAME">^1</xliff:g>କୁ କାଢ଼ନ୍ତୁ ନାହିଁ। \n\nଏହି ଡିଭାଇସ୍ରେ ଥିବା <xliff:g id="APP">^2</xliff:g> ଆପ୍, ଏହି କାର୍ଯ୍ୟ ନସରିବା ପର୍ଯ୍ୟନ୍ତ କାମ କରିବ ନାହିଁ।"</string>
- <string name="storage_wizard_move_progress_cancel" msgid="3494022998599718937">"ଘୁଞ୍ଚାଇବା କ୍ୟାନ୍ସଲ୍ କରନ୍ତୁ"</string>
+ <string name="storage_wizard_move_progress_cancel" msgid="3494022998599718937">"ଘୁଞ୍ଚାଇବା ବାତିଲ କରନ୍ତୁ"</string>
<string name="storage_wizard_slow_body" msgid="8293565076885232029">"ଏହି <xliff:g id="NAME_0">^1</xliff:g> ଧୀର ଥିବା ପରି ଜଣାପଡୁଛି। \n\nଆପଣ ଜାରିରଖିପାରିବେ, କିନ୍ତୁ ଏହି ଅବସ୍ଥାନକୁ ଚଳାଯାଇଥିବା ଆପ୍ଗୁଡ଼ିକ ରହି ରହି ଚାଲିପାରେ ଏବଂ ଡାଟା ସ୍ଥାନାନ୍ତର ବହୁତ ସମୟ ନେଇପାରେ। \n\nଉନ୍ନତ କାର୍ଯ୍ୟଦକ୍ଷତା ପାଇଁ ଏକ ଦ୍ରୁତତ୍ତମ <xliff:g id="NAME_1">^1</xliff:g> ପାଇଁ ବିବେଚନା କରନ୍ତୁ।"</string>
<string name="storage_wizard_init_v2_title" msgid="2538630338392381113">"ଆପଣ କିପରି ଏହି <xliff:g id="NAME">^1</xliff:g>କୁ ବ୍ୟବହାର କରିବେ?"</string>
<string name="storage_wizard_init_v2_internal_title" product="tablet" msgid="1884468440013151482">"ଅତିରିକ୍ତ ଟାବଲେଟ୍ ଷ୍ଟୋରେଜ୍ ପାଇଁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
@@ -1715,7 +1715,7 @@
<string name="battery_status_title" msgid="4661768220545945771">"ବ୍ୟାଟେରୀ ସ୍ଥିତି"</string>
<string name="battery_level_title" msgid="1371765298786083448">"ବ୍ୟାଟେରୀ ସ୍ତର"</string>
<string name="apn_settings" msgid="4295467389400441299">"APNs"</string>
- <string name="apn_edit" msgid="2003683641840248741">"ଆକ୍ସେସ୍ ପଏଣ୍ଟକୁ ଏଡିଟ୍ କରନ୍ତୁ"</string>
+ <string name="apn_edit" msgid="2003683641840248741">"ଆକ୍ସେସ ପଏଣ୍ଟକୁ ଏଡିଟ କରନ୍ତୁ"</string>
<string name="apn_not_set" msgid="8246646433109750293">"ସେଟ୍ ହୋଇନାହିଁ"</string>
<string name="apn_not_set_for_mvno" msgid="1141490067313964640">"ସେଟ୍ କରାଯାଇନାହିଁ"</string>
<string name="apn_name" msgid="6677695784108157953">"ନାମ"</string>
@@ -1747,7 +1747,7 @@
<string name="menu_delete" msgid="9199740901584348273">"APN ଡିଲିଟ୍ କରନ୍ତୁ"</string>
<string name="menu_new" msgid="6571230342655509006">"ନୂଆ APN"</string>
<string name="menu_save" msgid="6611465355127483100">"ସେଭ୍ କରନ୍ତୁ"</string>
- <string name="menu_cancel" msgid="1197826697950745335">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="menu_cancel" msgid="1197826697950745335">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="error_title" msgid="7158648377702417716"></string>
<string name="error_name_empty" msgid="1258275899283079142">"ନାମ ସ୍ଥାନ ଶୂନ୍ୟ ରହିପାରିବ ନାହିଁ।"</string>
<string name="error_apn_empty" msgid="7657491065443746915">"APNକୁ ଖାଲି ରଖାଯାଇପାରିବ ନାହିଁ।"</string>
@@ -1764,7 +1764,7 @@
<string name="reset_network_desc" msgid="1112523764899788246">"ଏହା:\n\n"<li>"ୱାଇ-ଫାଇ"</li>\n<li>"ମୋବାଇଲ ଡାଟା"</li>\n<li>"ବ୍ଲୁଟୁଥ୍"</li>" ସମେତ ସମସ୍ତ ନେଟୱାର୍କ ସେଟିଂସକୁ ରିସେଟ କରିବ"</string>
<string name="erase_euicc_data_button" msgid="728078969563311737">"ଖାଲି କରନ୍ତୁ"</string>
<string name="reset_esim_title" msgid="6152167073280852849">"ଡାଉନଲୋଡ୍ ହୋଇଥିବା SIMକୁ ଖାଲି କରନ୍ତୁ"</string>
- <string name="reset_esim_desc" msgid="3662444090563399131">"ଏହା କୌଣସି ମୋବାଇଲ ସେବା ପ୍ଲାନକୁ ବାତିଲ୍ କରିବ ନାହିଁ। ରିପ୍ଲେସମେଣ୍ଟ SIMଗୁଡ଼ିକୁ ଡାଉନଲୋଡ କରିବା ପାଇଁ ଆପଣଙ୍କ କ୍ୟାରିଅର ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।"</string>
+ <string name="reset_esim_desc" msgid="3662444090563399131">"ଏହା କୌଣସି ମୋବାଇଲ ସେବା ପ୍ଲାନକୁ ବାତିଲ କରିବ ନାହିଁ। ରିପ୍ଲେସମେଣ୍ଟ SIMଗୁଡ଼ିକୁ ଡାଉନଲୋଡ କରିବା ପାଇଁ ଆପଣଙ୍କ କ୍ୟାରିଅର ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।"</string>
<string name="reset_network_button_text" msgid="2281476496459610071">"ସେଟିଂସ ରିସେଟ କରନ୍ତୁ"</string>
<string name="reset_network_final_desc" msgid="5304365082065278425">"ସମସ୍ତ ନେଟୱାର୍କ ସେଟିଂସ ରିସେଟ କରିବେ? ଏହାକୁ ଆପଣ ଆଉ ପୂର୍ବବତ୍ କରିପାରିବେ ନାହିଁ।"</string>
<string name="reset_network_final_desc_esim" msgid="8342882682282693844">"ସମସ୍ତ ନେଟୱାର୍କ ସେଟିଂସ ରିସେଟ ଏବଂ ଡାଉନଲୋଡ ହୋଇଥିବା SIMକୁ ଖାଲି କରିବେ କି? ଆପଣ ଏହି କାର୍ଯ୍ୟକୁ ପୂର୍ବବତ୍ କରିପାରିବେ ନାହିଁ।"</string>
@@ -1782,7 +1782,7 @@
<string name="main_clear_other_users_present" product="default" msgid="2672976674798019077">\n\n"ଏହି ଡିଭାଇସରେ ଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତା ଅଛନ୍ତି।\n"</string>
<string name="main_clear_desc_also_erases_external" msgid="3687911419628956693"><li>"ସଙ୍ଗୀତ"</li>\n<li>"ଫଟୋ"</li>\n<li>"ଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତା ଡାଟା"</li></string>
<string name="main_clear_desc_also_erases_esim" msgid="4553469876411831729"><li>"eSIMs"</li></string>
- <string name="main_clear_desc_no_cancel_mobile_plan" msgid="369883568059127035">\n\n"ଏହା ଆପଣଙ୍କ ମୋବାଇଲ ସେବା ପ୍ଲାନକୁ ବାତିଲ୍ କରିବ ନାହିଁ।"</string>
+ <string name="main_clear_desc_no_cancel_mobile_plan" msgid="369883568059127035">\n\n"ଏହା ଆପଣଙ୍କ ମୋବାଇଲ ସେବା ପ୍ଲାନକୁ ବାତିଲ କରିବ ନାହିଁ।"</string>
<string name="main_clear_desc_erase_external_storage" product="nosdcard" msgid="4441604184663452046">\n\n"ସଙ୍ଗୀତ, ଛବି ଓ ଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତା ଡାଟାକୁ ଖାଲି କରିବାକୁ "<b>"USB ଷ୍ଟୋରେଜ୍"</b>"କୁ ଖାଲି କରିବା ଆବଶ୍ୟକ।"</string>
<string name="main_clear_desc_erase_external_storage" product="default" msgid="1498514970618215728">\n\n"ସଙ୍ଗୀତ, ଛବି ଓ ଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତା ଡାଟାକୁ ଖାଲି କରିବାକୁ "<b>"SD କାର୍ଡ"</b>"କୁ ଖାଲି କରିବା ଆବଶ୍ୟକ।"</string>
<string name="erase_external_storage" product="nosdcard" msgid="2182181846128639635">"USB ଷ୍ଟୋରେଜ୍କୁ ଲିଭାନ୍ତୁ"</string>
@@ -1888,15 +1888,16 @@
<string name="location_services_preference_title" msgid="604317859531782159">"ଲୋକେସନ୍ ସେବା"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"ଲୋକେସନ୍ ସେବାଗୁଡ଼ିକ"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"କାର୍ଯ୍ୟ ପାଇଁ ଲୋକେସନ୍ ସମ୍ପର୍କିତ ସେବା"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"ଟାଇମ୍ ଜୋନ୍ ସେଟ୍ କରିବାକୁ ଲୋକେସନ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"ଲୋକେସନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"ଡିଭାଇସର ଲୋକେସନ୍ ଆବଶ୍ୟକ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"ଆପଣଙ୍କ ଲୋକେସନ ବ୍ୟବହାର କରି ଟାଇମ ଜୋନ ସେଟ କରିବାକୁ ଲୋକେସନ ଚାଲୁ କରନ୍ତୁ, ତା\'ପରେ ଟାଇମ ଜୋନ ସେଟିଂସ ଅପଡେଟ କରନ୍ତୁ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"ଲୋକେସନ ସେଟିଂସ"</string>
- <string name="location_time_zone_detection_location_is_off_dialog_cancel_button" msgid="3968729678789071154">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="location_time_zone_detection_location_is_off_dialog_cancel_button" msgid="3968729678789071154">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="location_time_zone_detection_auto_is_off" msgid="6264253990141650280">"ସ୍ୱଚାଳିତ ଟାଇମ୍ ଜୋନ୍ ବନ୍ଦ ଅଛି"</string>
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"ଲୋକେସନ୍ ଟାଇମ୍ ଜୋନ୍ ଚିହ୍ନଟକରଣ ଅକ୍ଷମ କରାଯାଇଛି"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"ଲୋକେସନ୍ ଟାଇମ୍ ଜୋନ୍ ଚିହ୍ନଟକରଣ ସମର୍ଥିତ ନୁହେଁ"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"ଲୋକେସନ୍ ଟାଇମ୍ ଜୋନ୍ ଚିହ୍ନଟକରଣ ପରିବର୍ତ୍ତନଗୁଡ଼ିକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"ଟାଇମ ଜୋନ ସେଟ କରିବାକୁ ଲୋକେସନ ବ୍ୟବହାର କରାଯାଇପାରେ"</string>
<string name="location_network_based" msgid="5247042890080021887">"ୱାଇ-ଫାଇ ଓ ମୋବାଇଲ୍ ନେଟ୍ୱର୍କ ଲୋକେସନ୍"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"ଆପଣଙ୍କର ଲୋକେସନ୍କୁ ଶୀଘ୍ର ଜାଣିବା ପାଇଁ, ଆପ୍ଗୁଡ଼ିକୁ Googleର ଲୋକେସନ୍ ସେବାର ବ୍ୟବହାର କରିବାକୁ ଦିଅନ୍ତୁ। ଅଜଣା ଲୋକେସନ୍ର ତଥ୍ୟ ସଂଗ୍ରହ କରାଯାଇ Googleକୁ ପଠାଯିବ।"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"ୱାଇ-ଫାଇ ଦ୍ୱାରା ନିର୍ଦ୍ଧାରିତ ଲୋକେସନ୍"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -1950,7 +1953,7 @@
<string name="lockpassword_confirm_your_password_header" msgid="6132312814563023990">"ପାସୱାର୍ଡ ପୁଣି ଦିଅନ୍ତୁ"</string>
<string name="lockpassword_reenter_your_profile_password_header" msgid="3812040127714827685">"ଆପଣଙ୍କ ୱାର୍କ ପାସୱାର୍ଡ ପୁଣି-ଲେଖନ୍ତୁ"</string>
<string name="lockpassword_confirm_your_work_password_header" msgid="4647071231702288305">"ଆପଣଙ୍କର କାର୍ଯ୍ୟସ୍ଥଳୀ ପାସୱାର୍ଡ ଲେଖନ୍ତୁ"</string>
- <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"ଆପଣଙ୍କ ପ୍ୟାଟର୍ନ ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
+ <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"ଆପଣଙ୍କ ପାଟର୍ନ ସୁନିଶ୍ଚିତ କରନ୍ତୁ"</string>
<string name="lockpassword_confirm_your_work_pattern_header" msgid="2668883108969165844">"ଆପଣଙ୍କ କାର୍ଯ୍ୟସ୍ଥଳୀ ପାଟର୍ନ ଲେଖନ୍ତୁ"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="2241722970567131308">"ଆପଣଙ୍କ PIN ପୁଣି ଲେଖନ୍ତୁ"</string>
<string name="lockpassword_reenter_your_profile_pin_header" msgid="2890233614560435538">"ଆପଣଙ୍କ ୱାର୍କ PIN ପୁଣି-ଲେଖନ୍ତୁ"</string>
@@ -1971,7 +1974,7 @@
<string name="lockpassword_forgot_password" msgid="5730587692489737223">"ଆପଣଙ୍କ ପାସୱାର୍ଡ ଭୁଲି ଯାଇଛନ୍ତି କି?"</string>
<string name="lockpassword_forgot_pattern" msgid="1196116549051927516">"ପାଟର୍ନ ଭୁଲି ଯାଇଛନ୍ତି କି?"</string>
<string name="lockpassword_forgot_pin" msgid="7164232234705747672">"PIN ଭୁଲି ଯାଇଛନ୍ତି କି?"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"ଜାରି ରଖିବା ପାଇଁ ନିଜ ଡିଭାଇସ୍ ପାଟର୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"ଜାରି ରଖିବା ପାଇଁ ନିଜ ଡିଭାଇସ ପାଟର୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="9206928587904701094">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ଡିଭାଇସ୍ର PIN ଲେଖନ୍ତୁ"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="2616127423884477152">"ଜାରି ରଖିବାକୁ ନିଜ ଡିଭାଇସ୍ର ପାସ୍ୱର୍ଡ ଲେଖନ୍ତୁ"</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="9110305410672321714">"ଜାରି ରଖିବାକୁ ନିଜ କାର୍ଯ୍ୟ ପାଟର୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
@@ -2251,8 +2254,8 @@
<string name="user_dict_settings_add_locale_option_name" msgid="2117468247460253346">"ଭାଷା:"</string>
<string name="user_dict_settings_add_word_hint" msgid="4560494723256242785">"ଏକ ଶବ୍ଦ ଟାଇପ୍ କରନ୍ତୁ"</string>
<string name="user_dict_settings_add_shortcut_hint" msgid="6209624157217434640">"ବିକଳ୍ପ ସର୍ଟକଟ୍"</string>
- <string name="user_dict_settings_edit_dialog_title" msgid="316493656442362284">"ଶବ୍ବ ସମ୍ପାଦନ କରନ୍ତୁ"</string>
- <string name="user_dict_settings_context_menu_edit_title" msgid="4909198741914531509">"ସମ୍ପାଦନ"</string>
+ <string name="user_dict_settings_edit_dialog_title" msgid="316493656442362284">"ଶବ୍ବ ଏଡିଟ କରନ୍ତୁ"</string>
+ <string name="user_dict_settings_context_menu_edit_title" msgid="4909198741914531509">"ଏଡିଟ"</string>
<string name="user_dict_settings_context_menu_delete_title" msgid="651550824433043545">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
<string name="user_dict_settings_empty_text" msgid="86562873609647919">"ଉପଯୋଗକର୍ତ୍ତା ଶବ୍ଦକୋଷରେ ଆପଣ କୌଣସି ଶବ୍ଦ ଯୋଗ କରିନାହାଁନ୍ତି। ଶବ୍ଦ ଯୋଗ କରିବା ପାଇଁ \"ଯୋଗ(+)\" ବଟନ୍ରେ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="user_dict_settings_all_languages" msgid="8563387437755363526">"ସମସ୍ତ ଭାଷାଗୁଡିକ ପାଇଁ"</string>
@@ -2264,7 +2267,7 @@
<string name="input_method" msgid="2982805181425436775">"ଇନ୍ପୁଟ୍ ପଦ୍ଧତି"</string>
<string name="current_input_method" msgid="3471068842881330883">"ବର୍ତ୍ତମାନର କୀବୋର୍ଡ"</string>
<string name="input_method_selector" msgid="8463209725824763600">"ଇନପୁଟ୍ ପଦ୍ଧତି ଚୟନକାରୀ"</string>
- <string name="input_method_selector_show_automatically_title" msgid="6483428482089875034">"ଅଟୋମେଟିକ୍"</string>
+ <string name="input_method_selector_show_automatically_title" msgid="6483428482089875034">"ଅଟୋମେଟିକ"</string>
<string name="input_method_selector_always_show_title" msgid="2479533500357556146">"ସର୍ବଦା ଦେଖାନ୍ତୁ"</string>
<string name="input_method_selector_always_hide_title" msgid="807424180027384849">"ସର୍ବଦା ଲୁଚାଇ ରଖ"</string>
<string name="configure_input_method" msgid="8831343065130376880">"ସେଟ୍ ଅପ୍ ଇନ୍ପୁଟ୍ ପଦ୍ଧତି"</string>
@@ -2334,7 +2337,7 @@
<string name="accessibility_magnification_triple_tap_warning_title" msgid="8484669851397296597">"ଏହା ଆପଣଙ୍କ କୀବୋର୍ଡକୁ ଧୀର କରିପାରେ"</string>
<string name="accessibility_magnification_triple_tap_warning_message" msgid="2008671502848936410">"ଆପଣଙ୍କ ସ୍କ୍ରିନର ଅଂଶକୁ ମ୍ୟାଗ୍ନିଫାଏ କରିବା ପାଇଁ ତିନିଥର-ଟାପ ବିକଳ୍ପକୁ ବ୍ୟବହାର କରିବା ସମୟରେ, ଆପଣ କୀବୋର୍ଡରେ ସମସ୍ୟାଗୁଡ଼ିକୁ ନୋଟିସ କରିପାରନ୍ତି।\n\nଏହାକୁ ଏଡ଼ାଇବା ପାଇଁ, ଆପଣ ଆପଣଙ୍କ ମ୍ୟାଗ୍ନିଫିକେସନ ସର୍ଟକଟକୁ ତିନିଥର-ଟାପରୁ ଅନ୍ୟ ଏକ ବିକଳ୍ପକୁ ପରିବର୍ତ୍ତନ କରିପାରିବେ।\n"<annotation id="link">"ସେଟିଂ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</annotation></string>
<string name="accessibility_magnification_triple_tap_warning_positive_button" msgid="8712304035901450010">"ଯେ କୌଣସି ମତେ ଜାରି ରଖନ୍ତୁ"</string>
- <string name="accessibility_magnification_triple_tap_warning_negative_button" msgid="2028849736366584733">"ବାତିଲ୍ କର"</string>
+ <string name="accessibility_magnification_triple_tap_warning_negative_button" msgid="2028849736366584733">"ବାତିଲ କର"</string>
<string name="accessibility_magnification_service_settings_title" msgid="3531350704632316017">"ମାଗ୍ନିଫିକେସନ ସେଟିଂସ"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="3121714118381882167">"ଟ୍ରିପଲ୍-ଟାପ୍ ଦ୍ୱାରା ମାଗ୍ନିଫାଏ କରନ୍ତୁ"</string>
<string name="accessibility_screen_magnification_navbar_title" msgid="480853328665484528">"ସର୍ଟକଟ୍ ସାହାଯ୍ୟରେ ମାଗ୍ନିଫାଏ କରନ୍ତୁ"</string>
@@ -2621,7 +2624,7 @@
<string name="accessibility_dialog_button_allow" msgid="8274918676473216697">"ଅନୁମତି"</string>
<string name="accessibility_dialog_button_deny" msgid="2037249860078259284">"ଅଗ୍ରାହ୍ୟ"</string>
<string name="accessibility_dialog_button_stop" msgid="7295448112784528196">"ବନ୍ଦ କରନ୍ତୁ"</string>
- <string name="accessibility_dialog_button_cancel" msgid="4813234247237851121">"ବାତିଲ୍"</string>
+ <string name="accessibility_dialog_button_cancel" msgid="4813234247237851121">"ବାତିଲ"</string>
<string name="disable_service_title" msgid="2909108731776956167">"<xliff:g id="SERVICE">%1$s</xliff:g>କୁ ବନ୍ଦ କରିବେ?"</string>
<string name="disable_service_message" msgid="4814173941688548016">"<xliff:g id="STOP">%1$s</xliff:g>କୁ ଟାପ୍ କରିବା ଦ୍ୱାରା <xliff:g id="SERVICE">%2$s</xliff:g> ବନ୍ଦ ହୋଇଯିବ।"</string>
<string name="accessibility_no_services_installed" msgid="3725569493860028593">"କୌଣସି ସେବା ସଂସ୍ଥାପିତ ହୋଇନାହିଁ"</string>
@@ -2672,7 +2675,7 @@
<string name="print_print_jobs" msgid="2605944855933091183">"ପ୍ରିଣ୍ଟ ଜବ୍"</string>
<string name="print_print_job" msgid="8477859161886726608">"ପ୍ରିଣ୍ଟ ଜବ୍"</string>
<string name="print_restart" msgid="4424096106141083945">"ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ"</string>
- <string name="print_cancel" msgid="7611266511967568501">"ବାତିଲ୍"</string>
+ <string name="print_cancel" msgid="7611266511967568501">"ବାତିଲ"</string>
<string name="print_job_summary" msgid="277210060872032969">"<xliff:g id="PRINTER">%1$s</xliff:g>\n<xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="print_configuring_state_title_template" msgid="2887013172492183045">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> କନଫିଗର୍ କରାଯାଉଛି"</string>
<string name="print_printing_state_title_template" msgid="7367513245156603431">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> ପ୍ରିଣ୍ଟ ହେଉଛି"</string>
@@ -2785,7 +2788,7 @@
<string name="battery_tip_unrestrict_app_dialog_title" msgid="5501997201160532301">"ପ୍ରତିବନ୍ଧକ ହଟାଇ ଦେବେ?"</string>
<string name="battery_tip_unrestrict_app_dialog_message" msgid="215449637818582819">"ଏହି ଆପ୍ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରିପାରିବ। ଆପଣଙ୍କ ବ୍ୟାଟେରୀ ଅନୁମାନ କରିଥିବା ସମୟର ପୂର୍ବରୁ ହିଁ ସରିଯାଇପାରେ।"</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="7940183167721998470">"କାଢ଼ିଦିଅନ୍ତୁ"</string>
- <string name="battery_tip_unrestrict_app_dialog_cancel" msgid="4968135709160207507">"ବାତିଲ୍"</string>
+ <string name="battery_tip_unrestrict_app_dialog_cancel" msgid="4968135709160207507">"ବାତିଲ"</string>
<string name="battery_tip_dialog_summary_message" product="default" msgid="6097167058237891756">"ଆପଣଙ୍କର ଆପ୍ସ ସାଧାରଣ ଭାବେ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରୁଛି। ଯଦି ଆପ୍ସ ଅଧିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରେ, ତେବେ ଆପଣଙ୍କ ଫୋନ୍ ପଦକ୍ଷେପ ନେବା ପାଇଁ ଆପଣଙ୍କୁ ପରାମର୍ଶ ଦେବ। \n\n ବ୍ୟାଟେରୀ ଅଧିକ ଖର୍ଚ୍ଚ ହେଉଥିଲେ ଆପଣ ସର୍ବଦା ବ୍ୟାଟେରୀ ସେଭର୍କୁ ଚାଲୁ କରିପାରିବେ।"</string>
<string name="battery_tip_dialog_summary_message" product="tablet" msgid="573297655597451123">"ଆପଣଙ୍କର ଆପଗୁଡ଼ିକ ସାଧାରଣ ଭାବେ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରୁଛନ୍ତି। ଯଦି ଆପଗୁଡ଼ିକ ଅଧିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ଟାବଲେଟ୍ ପଦକ୍ଷେପ ନେବା ପାଇଁ ଆପଣଙ୍କୁ ପରାମର୍ଶ ଦେବ। \n\n ବ୍ୟାଟେରୀ ଅଧିକ ଖର୍ଚ୍ଚ ହେଉଥିଲେ ଆପଣ ସର୍ବଦା ବ୍ୟାଟେରୀ ସେଭର୍କୁ ଚାଲୁ କରିପାରିବେ।"</string>
<string name="battery_tip_dialog_summary_message" product="device" msgid="8222461068860745749">"ଆପଣଙ୍କର ଆପ୍ ସାଧାରଣ ଭାବେ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରୁଛି। ଯଦି ଆପ୍ ଅଧିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରନ୍ତି, ତେବେ ଡିଭାଇସ୍ ପଦକ୍ଷେପ ନେବା ପାଇଁ ଆପଣଙ୍କୁ ପରାମର୍ଶ ଦେବ। \n\n ବ୍ୟାଟେରୀ ଅଧିକ ଖର୍ଚ୍ଚ ହେଉଥିଲେ ଆପଣ ସର୍ବଦା ବ୍ୟାଟେରୀ ସେଭର୍କୁ ଚାଲୁ କରିପାରିବେ।"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3021,7 +3028,7 @@
<string name="tts_install_voices_title" msgid="6505257816336165782">"Voices ଇନ୍ଷ୍ଟଲ୍ କରନ୍ତୁ"</string>
<string name="tts_install_voices_text" msgid="902408506519246362">"ଭଏସ୍ ଇନ୍ଷ୍ଟଲ୍ କରିବାକୁ <xliff:g id="TTS_APP_NAME">%s</xliff:g> ଆପ୍ ଜାରି ରଖନ୍ତୁ"</string>
<string name="tts_install_voices_open" msgid="919034855418197668">"ଆପ୍ ଖୋଲନ୍ତୁ"</string>
- <string name="tts_install_voices_cancel" msgid="5179154684379560628">"ବାତିଲ୍"</string>
+ <string name="tts_install_voices_cancel" msgid="5179154684379560628">"ବାତିଲ"</string>
<string name="tts_reset" msgid="9047681050813970031">"ରିସେଟ୍ କରନ୍ତୁ"</string>
<string name="tts_play" msgid="2945513377250757221">"ଚଲାନ୍ତୁ"</string>
<string name="vpn_settings_title" msgid="9131315656202257272">"VPN"</string>
@@ -3151,7 +3158,7 @@
<string name="settings_backup" msgid="5357973563989458049">"ବ୍ୟାକଅପ ସେଟିଂସ"</string>
<string name="settings_backup_summary" msgid="6803046376335724034">"ମୋ ସେଟିଂସର ବ୍ୟାକଅପ ନିଅ"</string>
<string name="sync_menu_sync_now" msgid="3948443642329221882">"ବର୍ତ୍ତମାନ ସିଙ୍କ କରନ୍ତୁ"</string>
- <string name="sync_menu_sync_cancel" msgid="2422994461106269813">"ସିଙ୍କ୍ ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="sync_menu_sync_cancel" msgid="2422994461106269813">"ସିଙ୍କ୍ ବାତିଲ କରନ୍ତୁ"</string>
<string name="sync_one_time_sync" msgid="8114337154112057462">"<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g> ବର୍ତ୍ତମାନ ସିଙ୍କ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="sync_gmail" msgid="228561698646018808">"Gmail"</string>
@@ -3260,7 +3267,7 @@
<string name="data_usage_metered_mobile" msgid="3514227339274396401">"ମୋବାଇଲ୍ ନେଟୱର୍କ"</string>
<string name="data_usage_metered_wifi" msgid="4807465959110473407">"Wi‑Fi ନେଟୱର୍କର ତାଲିକା"</string>
<string name="data_usage_metered_wifi_disabled" msgid="4664158157415362613">"ମିଟରଯୁକ୍ତ ନେଟ୍ୱର୍କଗୁଡିକର ଚୟନ କରିବାକୁ, ୱାଇ-ଫାଇ ଅନ୍ କରନ୍ତୁ।"</string>
- <string name="data_usage_metered_auto" msgid="1560514082131687116">"ସ୍ଵତଃଚାଳିତ"</string>
+ <string name="data_usage_metered_auto" msgid="1560514082131687116">"ଅଟୋମେଟିକ"</string>
<string name="wifi_metered_title" msgid="6623732965268033931">"ନେଟ୍ୱାର୍କର ବ୍ୟବହାର"</string>
<string name="data_usage_metered_yes" msgid="4262598072030135223">"ମିଟର୍ଡ"</string>
<string name="data_usage_metered_no" msgid="1685828958417926268">"ମପାଯାଉନାହିଁ"</string>
@@ -3290,12 +3297,12 @@
<string name="vpn_always_on_invalid_reason_no_dns" msgid="3980357762395272467">"ସର୍ବଦା-ଅନ୍ VPN ପାଇଁ ଏକ DNS ସର୍ଭର ଉଲ୍ଲେଖ କରିବା ଜରୁରୀ"</string>
<string name="vpn_always_on_invalid_reason_dns" msgid="3934369594591801587">"ସର୍ବଦା ଚାଲୁଥିବା VPN ପାଇଁ DNS ସର୍ଭର୍ ଠିକଣା ସଂଖ୍ୟା ବିଶିଷ୍ଟ ହୋଇଥିବା ଦରକାର"</string>
<string name="vpn_always_on_invalid_reason_other" msgid="4571905303713233321">"ଏଣ୍ଟର୍ କରାଯାଇଥିବା ସୂଚନା ସର୍ବଦା-ଅନ୍ VPNକୁ ସପୋର୍ଟ କରେ ନାହିଁ"</string>
- <string name="vpn_cancel" msgid="5929410618112404383">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="vpn_cancel" msgid="5929410618112404383">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="vpn_done" msgid="5137858784289564985">"ଖାରଜ"</string>
<string name="vpn_save" msgid="683868204634860888">"ସେଭ୍ କରନ୍ତୁ"</string>
<string name="vpn_connect" msgid="7102335248484045354">"ସଂଯୋଗ କରନ୍ତୁ"</string>
<string name="vpn_replace" msgid="1533147558671640341">"ପରିବର୍ତ୍ତନ"</string>
- <string name="vpn_edit" msgid="5862301148429324911">"VPN ପ୍ରୋଫାଇଲ୍ ଏଡିଟ୍ କରନ୍ତୁ"</string>
+ <string name="vpn_edit" msgid="5862301148429324911">"VPN ପ୍ରୋଫାଇଲ ଏଡିଟ କରନ୍ତୁ"</string>
<string name="vpn_forget" msgid="2913950864877236737">"ଭୁଲିଯାଆନ୍ତୁ"</string>
<string name="vpn_connect_to" msgid="216709261691085594">"<xliff:g id="PROFILE">%s</xliff:g> ସହ ସଂଯୋଗ କରନ୍ତୁ"</string>
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ଏହି VPNକୁ ବିଚ୍ଛିନ୍ନ କରିବେ?"</string>
@@ -3313,7 +3320,7 @@
<string name="vpn_cant_connect_message" msgid="2139148820719163694">"ସର୍ବଦା-ଅନ୍ VPNକୁ ଏହି ଆପ୍ ସପୋର୍ଟ କରୁନାହିଁ"</string>
<string name="vpn_title" msgid="3068868814145870274">"VPN"</string>
<string name="vpn_create" msgid="7546073242936894638">"VPN ପ୍ରୋଫାଇଲ୍ ଯୋଡ଼ନ୍ତୁ"</string>
- <string name="vpn_menu_edit" msgid="5100387853773792379">"ପ୍ରୋଫାଇଲ୍ ଏଡିଟ୍ କରନ୍ତୁ"</string>
+ <string name="vpn_menu_edit" msgid="5100387853773792379">"ପ୍ରୋଫାଇଲ ଏଡିଟ କରନ୍ତୁ"</string>
<string name="vpn_menu_delete" msgid="4455966182219039928">"ପ୍ରୋଫାଇଲ ଡିଲିଟ କରନ୍ତୁ"</string>
<string name="vpn_menu_lockdown" msgid="5284041663859541007">"ସର୍ବଦା-ଅନ୍ ଥିବା VPN"</string>
<string name="vpn_no_vpns_added" msgid="7387080769821533728">"କୌଣସି VPN ଯୋଗ କରାଯାଇନାହିଁ"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, ଉନ୍ନତ କଲିଂ, 5g କଲିଂ"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ଭାଷା ଯୋଗ କରନ୍ତୁ, ଏକ ଭାଷା ଯୋଗ କରନ୍ତୁ"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ଟେକ୍ସଟର ଆକାର, ବଡ଼ ପ୍ରିଣ୍ଟ, ବଡ଼ ଫଣ୍ଟ, ବଡ଼ ଟେକ୍ସଟ୍, କମ୍ ଦେଖାଯାଉଥିବା, ଟେକ୍ସଟ୍ ଆହୁରି ବଡ଼ କରନ୍ତୁ, ଫଣ୍ଟର ଆକାର ବଡ଼ କରୁଥିବା ଟୁଲ୍, ଫଣ୍ଟର ଆକାର ବଡ଼ କରିବା"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ଅଲୱେଜ ଅନ ଡିସପ୍ଲେ, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ ଶବ୍ଦ"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"ରିଙ୍ଗ ଏବଂ ବିଜ୍ଞପ୍ତି ଭଲ୍ୟୁମ୍ <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ଭଲ୍ୟୁମ୍, ଭାଇବ୍ରେସନ୍, ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ"</string>
@@ -3746,7 +3752,7 @@
<string name="zen_mode_automation_settings_title" msgid="3709324184191870926">"ସିଡୁଲ୍"</string>
<string name="zen_mode_delete_automatic_rules" msgid="5020468289267191765">"ସିଡୁଲ୍ ଡିଲିଟ୍ କରନ୍ତୁ"</string>
<string name="zen_mode_schedule_delete" msgid="5383420576833765114">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
- <string name="zen_mode_rule_name_edit" msgid="1053237022416700481">"ଏଡିଟ୍ କରନ୍ତୁ"</string>
+ <string name="zen_mode_rule_name_edit" msgid="1053237022416700481">"ଏଡିଟ"</string>
<string name="zen_mode_automation_settings_page_title" msgid="6217433860514433311">"ସିଡୁଲ୍"</string>
<string name="zen_mode_automatic_rule_settings_page_title" msgid="5264835276518295033">"ସିଡୁଲ୍"</string>
<string name="zen_mode_schedule_category_title" msgid="1381879916197350988">"ସିଡୁଲ୍"</string>
@@ -3893,7 +3899,7 @@
<string name="bubbles_feature_disabled_dialog_title" msgid="1794193899792284007">"ଡିଭାଇସ୍ ପାଇଁ ବବଲ୍ ଚାଲୁ କରିବେ?"</string>
<string name="bubbles_feature_disabled_dialog_text" msgid="5275666953364031055">"ଏହି ଆପ୍ ପାଇଁ ବବଲ୍ ଚାଲୁ କଲେ ଆପଣଙ୍କ ଡିଭାଇସ୍ ପାଇଁ ମଧ୍ୟ ବବଲଗୁଡ଼ିକ ଚାଲୁ ହୋଇଯିବ।\n\n ଏହା ବବଲକୁ ଅନୁମତି ଦେଇ ଥିବା ଅନ୍ୟ ଆପ୍ କିମ୍ବା ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକୁ ପ୍ରଭାବିତ କରେ।"</string>
<string name="bubbles_feature_disabled_button_approve" msgid="2042628067101419871">"ଚାଲୁ କରନ୍ତୁ"</string>
- <string name="bubbles_feature_disabled_button_cancel" msgid="8963409459448350600">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="bubbles_feature_disabled_button_cancel" msgid="8963409459448350600">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="notifications_bubble_setting_on_summary" msgid="4641572377430901196">"ଚାଲୁ ଅଛି / ବାର୍ତ୍ତାଳାପଗୁଡ଼ିକ ଫ୍ଲୋଟିଂ ଆଇକନଗୁଡ଼ିକ ଭାବେ ଦେଖାଯାଇପାରିବ"</string>
<string name="notifications_bubble_setting_title" msgid="8287649393774855268">"ବବଲଗୁଡ଼ିକ ଦେଖାଇବାକୁ ଆପଗୁଡ଼ିକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="notifications_bubble_setting_description" msgid="7336770088735025981">"ଅନ୍ୟ ଆପଗୁଡ଼ିକର ଶୀର୍ଷରେ କିଛି ବାର୍ତ୍ତାଳାପ ଫ୍ଲୋଟିଂ ଆଇକନ୍ ପରି ଦେଖାଯିବ"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ଆଦୌ ନୁହେଁ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ଡିଭାଇସ୍ ଓ ଆପ୍ ବିଜ୍ଞପ୍ତି"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"କେଉଁ ଆପ୍ ଏବଂ ଡିଭାଇସଗୁଡ଼ିକ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ପଢ଼ିପାରିବ ତାହା ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ"</string>
@@ -4036,7 +4036,7 @@
<string name="nls_feature_settings_summary" msgid="3770028705648985689">"ଏହା \"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\"କୁ ଚାଲୁ କିମ୍ବା ବନ୍ଦ କରିପାରିବ ଏବଂ ସମ୍ବନ୍ଧିତ ସେଟିଂସକୁ ପରିବର୍ତ୍ତନ କରିପାରିବ।"</string>
<string name="notification_listener_disable_warning_summary" msgid="8373396293802088961">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> ପାଇଁ ଯଦି ଆପଣ ବିଜ୍ଞପ୍ତି ଆକ୍ସେସ୍କୁ ବନ୍ଦ କରୁଛନ୍ତି, ତେବେ \"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ବିକଳ୍ପ ଆକ୍ସେସ୍ ମଧ୍ୟ ବନ୍ଦ ହୋଇଯାଇପାରେ।"</string>
<string name="notification_listener_disable_warning_confirm" msgid="841492108402184976">"ବନ୍ଦ କରନ୍ତୁ"</string>
- <string name="notification_listener_disable_warning_cancel" msgid="8802784105045594324">"ବାତିଲ୍"</string>
+ <string name="notification_listener_disable_warning_cancel" msgid="8802784105045594324">"ବାତିଲ"</string>
<string name="notification_listener_type_title" msgid="2791552789364336733">"ଅନୁମତି ଦିଆଯାଇଥିବା ବିଜ୍ଞପ୍ତିର ପ୍ରକାର"</string>
<string name="notif_type_ongoing" msgid="135675014223627555">"ରିଅଲ୍-ଟାଇମ୍"</string>
<string name="notif_type_ongoing_summary" msgid="2348867528527573574">"ବ୍ୟବହାରରେ ଥିବା ଆପ୍, ନାଭିଗେସନ୍, ଫୋନ୍ କଲ୍ ଏବଂ ଆହୁରି ଅନେକ କିଛିରୁ ଚାଲୁଥିବା କମ୍ୟୁନିକେସନ୍"</string>
@@ -4363,7 +4363,7 @@
<string name="app_launch_dialog_ok" msgid="1446157681861409861">"ଠିକ୍ ଅଛି"</string>
<string name="app_launch_verified_links_info_description" msgid="7514750232467132117">"ଯାଞ୍ଚ କରାଯାଇଥିବା ଲିଙ୍କଗୁଡ଼ିକର ତାଲିକା ଦେଖାନ୍ତୁ"</string>
<string name="app_launch_checking_links_title" msgid="6119228853554114201">"ଅନ୍ୟ ସମର୍ଥିତ ଲିଙ୍କଗୁଡ଼ିକ ପାଇଁ ଯାଞ୍ଚ କରାଯାଉଛି…"</string>
- <string name="app_launch_dialog_cancel" msgid="6961071841814898663">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="app_launch_dialog_cancel" msgid="6961071841814898663">"ବାତିଲ କରନ୍ତୁ"</string>
<plurals name="app_launch_supported_links_title" formatted="false" msgid="8579323750839397568">
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>ଟି ସମର୍ଥିତ ଲିଙ୍କ୍</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g>ଟି ସମର୍ଥିତ ଲିଙ୍କ୍</item>
@@ -4608,7 +4608,7 @@
<string name="media_management_apps_title" msgid="8222942355578724582">"ମିଡିଆ ମ୍ୟାନେଜମେଣ୍ଟ ଆପଗୁଡ଼ିକ"</string>
<string name="media_management_apps_toggle_label" msgid="166724270857067456">"ମିଡିଆକୁ ପରିଚାଳନା କରିବାକୁ ଆପକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="media_management_apps_description" msgid="8000565658455268524">"ଯଦି ଅନୁମତି ଦିଆଯାଏ, ତେବେ ଏହି ଆପ୍ ଆପଣଙ୍କୁ ନପଚାରି ଅନ୍ୟ ଆପଗୁଡ଼ିକ ସହ ତିଆରି କରାଯାଇଥିବା ମିଡିଆ ଫାଇଲଗୁଡ଼ିକୁ ପରିବର୍ତ୍ତନ କିମ୍ବା ଡିଲିଟ୍ କରିପାରିବ। ଫାଇଲ୍ ଏବଂ ମିଡିଆକୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ଆପର ଅନୁମତି ରହିବା ଆବଶ୍ୟକ।"</string>
- <string name="keywords_media_management_apps" msgid="7499959607583088690">"ମିଡିଆ, ଫାଇଲ୍, ପରିଚାଳନା, ପରିଚାଳକ, ପରିଚାଳନା କରନ୍ତୁ, ଏଡିଟ୍ କରନ୍ତୁ, ଏଡିଟର୍, ଆପ୍, ଆପ୍ଲିକେସନ୍, ପ୍ରୋଗ୍ରାମ୍"</string>
+ <string name="keywords_media_management_apps" msgid="7499959607583088690">"ମିଡିଆ, ଫାଇଲ, ପରିଚାଳନା, ପରିଚାଳକ, ପରିଚାଳନା କରନ୍ତୁ, ଏଡିଟ କରନ୍ତୁ, ଏଡିଟର, ଆପ, ଆପ୍ଲିକେସନ, ପ୍ରୋଗ୍ରାମ"</string>
<string name="keywords_vr_listener" msgid="902737490270081131">"vr ଭର୍ଚୁଆଲ୍ ରିଅଲିଟୀ ଲିସ୍ନର୍ ଷ୍ଟେରିଓ ସାହାଯ୍ୟକାରୀ ସେବା"</string>
<string name="overlay_settings" msgid="2030836934139139469">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଦେଖାନ୍ତୁ"</string>
<string name="system_alert_window_summary" msgid="1435856750594492891">"<xliff:g id="COUNT_1">%2$d</xliff:g> ଟି ଆପ୍ରୁ <xliff:g id="COUNT_0">%1$d</xliff:g> ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକରେ ଡିସପ୍ଲେ କରିବାକୁ ଅନୁମୋଦିତ"</string>
@@ -4904,7 +4904,7 @@
<string name="automatic_storage_manager_days_title" msgid="5077286114860539367">"ଫୋଟୋ ଓ ଭିଡିଓଗୁଡ଼ିକ କାଢ଼ିଦିଅନ୍ତୁ"</string>
<string name="automatic_storage_manager_preference_title" msgid="3483357910142595444">"ଷ୍ଟୋରେଜ୍ ମ୍ୟାନେଜର୍"</string>
<string name="automatic_storage_manager_primary_switch_title" msgid="9131959126462101994">"ଷ୍ଟୋରେଜ୍ ମ୍ୟାନେଜର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="deletion_helper_automatic_title" msgid="597196990024769472">"ଅଟୋମେଟିକ୍"</string>
+ <string name="deletion_helper_automatic_title" msgid="597196990024769472">"ଅଟୋମେଟିକ"</string>
<string name="deletion_helper_manual_title" msgid="1068812971600327101">"ମାନୁଆଲ୍"</string>
<string name="deletion_helper_preference_title" msgid="6364023246849161274">"ବର୍ତ୍ତମାନ ସ୍ପେସ୍ ଖାଲି କରନ୍ତୁ"</string>
<string name="gesture_preference_title" msgid="8291899281322647187">"ଜେଶ୍ଚର୍"</string>
@@ -5348,7 +5348,7 @@
<string name="mobile_network_disable_sim_explanation" msgid="2851862257846773796">"ଏହି SIMକୁ ଅକ୍ଷମ କରିବା ପାଇଁ SIM କାର୍ଡକୁ କାଢ଼ି ଦିଅନ୍ତୁ"</string>
<string name="mobile_network_tap_to_activate" msgid="4139979375717958102">"<xliff:g id="CARRIER">%1$s</xliff:g>କୁ ସକ୍ରିୟ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="mobile_network_esim_swap_confirm_title" msgid="2762744961192218789">"<xliff:g id="CARRIER">%1$s</xliff:g>ରେ ସ୍ବିଚ୍ କରିବେ କି?"</string>
- <string name="mobile_network_esim_swap_confirm_body" msgid="8168680839542031781">"ଏକ ସମୟରେ କେବଳ ଗୋଟିଏ ଡାଉନଲୋଡ୍ ହୋଇଥିବା SIM ସକ୍ରିୟ ହୋଇପାରିବ।\n\n <xliff:g id="CARRIER1">%1$s</xliff:g>କୁ ସ୍ୱିଚ୍ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର <xliff:g id="CARRIER2">%2$s</xliff:g> ସେବା ବାତିଲ୍ ହୋବ ନାହିଁ।"</string>
+ <string name="mobile_network_esim_swap_confirm_body" msgid="8168680839542031781">"ଏକ ସମୟରେ କେବଳ ଗୋଟିଏ ଡାଉନଲୋଡ ହୋଇଥିବା SIM ସକ୍ରିୟ ହୋଇପାରିବ।\n\n <xliff:g id="CARRIER1">%1$s</xliff:g>କୁ ସ୍ୱିଚ୍ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର <xliff:g id="CARRIER2">%2$s</xliff:g> ସେବା ବାତିଲ ହୋବ ନାହିଁ।"</string>
<string name="mobile_network_esim_swap_confirm_ok" msgid="8695772737522378095">"<xliff:g id="CARRIER">%1$s</xliff:g>କୁ ଯାଆନ୍ତୁ"</string>
<string name="mobile_network_erase_sim" msgid="4629071168032714930">"SIM ଖାଲି କରନ୍ତୁ"</string>
<string name="mobile_network_erase_sim_error_dialog_title" msgid="6680959559589234726">"SIMକୁ ଖାଲି କରିହେବ ନାହିଁ"</string>
@@ -5382,13 +5382,13 @@
<string name="sim_action_switch_sub_dialog_title" msgid="9180969453358718635">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g>କୁ ସ୍ୱିଚ୍ କରିବେ?"</string>
<string name="sim_action_switch_psim_dialog_title" msgid="5613177333235213024">"SIM କାର୍ଡ ବ୍ୟବହାର କରିବାକୁ ସ୍ୱିଚ୍ କରିବେ?"</string>
<string name="sim_action_switch_sub_dialog_mep_title" msgid="933856847099933004">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> ବ୍ୟବହାର କରିବେ?"</string>
- <string name="sim_action_switch_sub_dialog_text" msgid="2091834911153293004">"ଥରକେ କେବଳ ଗୋଟିଏ SIMକୁ ସକ୍ରିୟ କରାଯାଇପାରିବ।\n\n<xliff:g id="TO_CARRIER_NAME">%1$s</xliff:g>କୁ ସ୍ୱିଚ୍ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର <xliff:g id="FROM_CARRIER_NAME">%2$s</xliff:g> ସେବା ବାତିଲ୍ ହେବ ନାହିଁ।"</string>
- <string name="sim_action_switch_sub_dialog_text_downloaded" msgid="1396320209544698027">"ଥରକେ କେବଳ ଗୋଟିଏ ଡାଉନଲୋଡ୍ କରାଯାଇଥିବା SIMକୁ ସକ୍ରିୟ କରାଯାଇପାରିବ।\n\n <xliff:g id="TO_CARRIER_NAME">%1$s</xliff:g>କୁ ସ୍ୱିଚ୍ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର <xliff:g id="FROM_CARRIER_NAME">%2$s</xliff:g> ସେବା ବାତିଲ୍ ହେବ ନାହିଁ।"</string>
- <string name="sim_action_switch_sub_dialog_text_single_sim" msgid="6188750682431170845">"ଥରକେ କେବଳ ଗୋଟିଏ SIMକୁ ସକ୍ରିୟ କରାଯାଇପାରିବ।\n\nସ୍ୱିଚ୍ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର <xliff:g id="TO_CARRIER_NAME">%1$s</xliff:g> ସେବା ବାତିଲ୍ ହେବ ନାହିଁ।"</string>
+ <string name="sim_action_switch_sub_dialog_text" msgid="2091834911153293004">"ଥରକେ କେବଳ ଗୋଟିଏ SIMକୁ ସକ୍ରିୟ କରାଯାଇପାରିବ।\n\n<xliff:g id="TO_CARRIER_NAME">%1$s</xliff:g>କୁ ସ୍ୱିଚ୍ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର <xliff:g id="FROM_CARRIER_NAME">%2$s</xliff:g> ସେବା ବାତିଲ ହେବ ନାହିଁ।"</string>
+ <string name="sim_action_switch_sub_dialog_text_downloaded" msgid="1396320209544698027">"ଥରକେ କେବଳ ଗୋଟିଏ ଡାଉନଲୋଡ କରାଯାଇଥିବା SIMକୁ ସକ୍ରିୟ କରାଯାଇପାରିବ।\n\n <xliff:g id="TO_CARRIER_NAME">%1$s</xliff:g>କୁ ସ୍ୱିଚ୍ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର <xliff:g id="FROM_CARRIER_NAME">%2$s</xliff:g> ସେବା ବାତିଲ ହେବ ନାହିଁ।"</string>
+ <string name="sim_action_switch_sub_dialog_text_single_sim" msgid="6188750682431170845">"ଥରକେ କେବଳ ଗୋଟିଏ SIMକୁ ସକ୍ରିୟ କରାଯାଇପାରିବ।\n\nସ୍ୱିଚ୍ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର <xliff:g id="TO_CARRIER_NAME">%1$s</xliff:g> ସେବା ବାତିଲ ହେବ ନାହିଁ।"</string>
<string name="sim_action_switch_sub_dialog_mep_text" msgid="8348764755143679582">"ଆପଣ ଥରକେ 2ଟି SIM ବ୍ୟବହାର କରିପାରିବେ। <xliff:g id="CARRIER_NAME">%1$s</xliff:g> ବ୍ୟବହାର କରିବା ପାଇଁ, ଅନ୍ୟ ଏକ SIM ବନ୍ଦ କରନ୍ତୁ।"</string>
<string name="sim_action_switch_sub_dialog_confirm" msgid="1901181581944638961">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g>କୁ ସ୍ୱିଚ୍ କରନ୍ତୁ"</string>
<string name="sim_action_switch_sub_dialog_carrier_list_item_for_turning_off" msgid="5392037608705799522">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> ବନ୍ଦ କରନ୍ତୁ"</string>
- <string name="sim_action_switch_sub_dialog_info_outline_for_turning_off" msgid="1617619100229136888">"ଏକ SIMକୁ ବନ୍ଦ କରିବା ଫଳରେ ଆପଣଙ୍କ ସେବା ବାତିଲ୍ ହେବ ନାହିଁ"</string>
+ <string name="sim_action_switch_sub_dialog_info_outline_for_turning_off" msgid="1617619100229136888">"ଏକ SIMକୁ ବନ୍ଦ କରିବା ଫଳରେ ଆପଣଙ୍କ ସେବା ବାତିଲ ହେବ ନାହିଁ"</string>
<string name="sim_action_enabling_sim_without_carrier_name" msgid="2706862823501979981">"ନେଟୱାର୍କ ସହ ସଂଯୋଗ କରାଯାଉଛି…"</string>
<string name="sim_action_switch_sub_dialog_progress" msgid="4718412054243793310">"କଲ ଏବଂ ମେସେଜଗୁଡ଼ିକ ପାଇଁ <xliff:g id="CARRIER_NAME">%1$s</xliff:g>କୁ ସ୍ୱିଚ କରାଯାଉଛି…"</string>
<string name="sim_action_enable_sim_fail_title" msgid="1765646238941015899">"କ୍ୟାରିଅରକୁ ସ୍ୱିଚ୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
@@ -5406,7 +5406,7 @@
<string name="sim_action_yes" msgid="8076556020131395515">"ହଁ"</string>
<string name="sim_action_reboot" msgid="3508948833333441538">"ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ"</string>
<string name="sim_action_no_thanks" msgid="435717748384544195">"ନା, ଧନ୍ୟବାଦ"</string>
- <string name="sim_action_cancel" msgid="2668099867029610910">"ବାତିଲ୍ କରନ୍ତୁ"</string>
+ <string name="sim_action_cancel" msgid="2668099867029610910">"ବାତିଲ କରନ୍ତୁ"</string>
<string name="sim_switch_button" msgid="1405772571706095387">"ସ୍ୱିଚ୍ କରନ୍ତୁ"</string>
<string name="dsds_activation_failure_title" msgid="4467364110584914794">"SIMକୁ ସକ୍ରିୟ କରାଯାଇପାରିବ ନାହିଁ"</string>
<string name="dsds_activation_failure_body_msg1" msgid="6303921196869256391">"SIMକୁ କାଢ଼ି ପୁଣି ଭର୍ତ୍ତି କରନ୍ତୁ। ଯଦି ସମସ୍ୟା ଜାରି ରହେ, ତେବେ ଆପଣଙ୍କ ଡିଭାଇସକୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ।"</string>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 49a20ba..773e32d 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"ਤਾਰੀਖ ਅਤੇ ਸਮਾਂ ਸੈੱਟ ਕਰੋ"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"ਤਾਰੀਖ, ਸਮਾਂ, ਸਮਾਂ ਜ਼ੋਨ, & ਫੌਰਮੈਟ ਸੈੱਟ ਕਰੋ"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਸਮਾਂ ਸੈੱਟ ਕਰੋ"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਸਮਾਂ ਖੇਤਰ ਸੈੱਟ ਕਰੋ"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਸੈੱਟ ਕਰੋ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਸਥਾਨਕ ਸਮਾਂ ਵਰਤੋ"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑ਘੰਟੇ ਫੌਰਮੈਟ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-ਘੰਟੇ ਵਾਲਾ ਫਾਰਮੈਟ ਵਰਤੋ"</string>
@@ -1051,8 +1051,8 @@
<string name="wifi_ap_band_select_one" msgid="5221193733812493435">"ਵਾਈ-ਫਾਈ ਹੌਟਸਪੌਟ ਲਈ ਘੱਟੋ-ਘੱਟ ਇੱਕ ਬੈਂਡ ਚੁਣੋ:"</string>
<string name="wifi_ip_settings" msgid="6420498748726599133">"IP ਸੈਟਿੰਗਾਂ"</string>
<string name="wifi_privacy_settings" msgid="3283946009000725698">"ਪਰਦੇਦਾਰੀ"</string>
- <string name="wifi_subscription" msgid="4432423938285430113">"ਗਾਹਕੀ"</string>
- <string name="wifi_subscription_summary" msgid="18802471063384598">"ਗਾਹਕੀ ਦੇਖੋ ਜਾਂ ਬਦਲੋ"</string>
+ <string name="wifi_subscription" msgid="4432423938285430113">"ਸਬਸਕ੍ਰਿਪਸ਼ਨ"</string>
+ <string name="wifi_subscription_summary" msgid="18802471063384598">"ਸਬਸਕ੍ਰਿਪਸ਼ਨ ਦੇਖੋ ਜਾਂ ਬਦਲੋ"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="8502084692297249372">"ਬੇਤਰਤੀਬਾ MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="6141246783457722976">"ਕੋਈ ਡੀਵਾਈਸ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="wifi_dpp_center_qr_code" msgid="5270782275746178104">"ਡੀਵਾਈਸ ਨੂੰ “<xliff:g id="SSID">%1$s</xliff:g>” ਵਿੱਚ ਸ਼ਾਮਲ ਕਰਨ ਲਈ QR ਕੋਡ ਨੂੰ ਹੇਠਾਂ ਵਿਚਾਲੇ ਰੱਖੋ"</string>
@@ -1142,12 +1142,12 @@
<item quantity="other">%d ਨੈੱਟਵਰਕ</item>
</plurals>
<plurals name="wifi_saved_passpoint_access_points_summary" formatted="false" msgid="5802057518058840450">
- <item quantity="one">%d ਗਾਹਕੀ</item>
- <item quantity="other">%d ਗਾਹਕੀਆਂ</item>
+ <item quantity="one">%d ਸਬਸਕ੍ਰਿਪਸ਼ਨ</item>
+ <item quantity="other">%d ਸਬਸਕ੍ਰਿਪਸ਼ਨਾਂ</item>
</plurals>
<plurals name="wifi_saved_all_access_points_summary" formatted="false" msgid="5125849180309374451">
- <item quantity="one">%d ਨੈੱਟਵਰਕ ਅਤੇ ਗਾਹਕੀ</item>
- <item quantity="other">%d ਨੈੱਟਵਰਕ ਅਤੇ ਗਾਹਕੀਆਂ</item>
+ <item quantity="one">%d ਨੈੱਟਵਰਕ ਅਤੇ ਸਬਸਕ੍ਰਿਪਸ਼ਨ</item>
+ <item quantity="other">%d ਨੈੱਟਵਰਕ ਅਤੇ ਸਬਸਕ੍ਰਿਪਸ਼ਨਾਂ</item>
</plurals>
<string name="wifi_advanced_titlebar" msgid="1234150304285575798">"ਵਿਕਸਿਤ ਵਾਈ‑ਫਾਈ"</string>
<string name="wifi_advanced_ssid_title" msgid="1561437650193980185">"SSID"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"ਟਿਕਾਣਾ ਸੇਵਾਵਾਂ"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"ਟਿਕਾਣਾ ਸੇਵਾਵਾਂ"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਲਈ ਟਿਕਾਣਾ ਸੇਵਾਵਾਂ"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"ਸਮਾਂ ਖੇਤਰ ਸੈੱਟ ਕਰਨ ਲਈ ਟਿਕਾਣਾ ਵਰਤੋ"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"ਟਿਕਾਣਾ ਵਰਤੋ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਦੀ ਲੋੜ ਹੈ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"ਆਪਣੇ ਟਿਕਾਣੇ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਸਮਾਂ ਖੇਤਰ ਸੈੱਟ ਕਰਨ ਲਈ, ਟਿਕਾਣੇ ਨੂੰ ਚਾਲੂ ਕਰੋ, ਫਿਰ ਸਮਾਂ ਖੇਤਰ ਸੈਟਿੰਗਾਂ ਨੂੰ ਅੱਪਡੇਟ ਕਰੋ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"ਟਿਕਾਣਾ ਸੈਟਿੰਗਾਂ"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"ਟਿਕਾਣਾ ਦੇ ਸਮਾਂ ਖੇਤਰ ਦੀ ਪਛਾਣ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਬੰਦ ਹੈ"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"ਟਿਕਾਣਾ ਦੇ ਸਮਾਂ ਖੇਤਰ ਦੀ ਪਛਾਣ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"ਟਿਕਾਣਾ ਦੇ ਸਮਾਂ ਖੇਤਰ ਦੀ ਪਛਾਣ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਵਿੱਚ ਤਬਦੀਲੀਆਂ ਕਰਨ ਦੀ ਆਗਿਆ ਨਹੀਂ ਹੈ"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"ਸਮਾਂ ਖੇਤਰ ਸੈੱਟ ਕਰਨ ਲਈ ਟਿਕਾਣੇ ਦੀ ਵਰਤੋਂ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ"</string>
<string name="location_network_based" msgid="5247042890080021887">"ਵਾਈ‑ਫਾਈ & ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਟਿਕਾਣਾ"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"ਐਪਸ ਨੂੰ ਤੁਹਾਡੇ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਦਾ ਤੇਜ਼ ਅਨੁਮਾਨ ਲਗਾਉਣ ਲਈ Google ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਸੇਵਾ ਵਰਤਣ ਦਿਓ। ਅਨਾਮ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਡਾਟਾ ਇਕੱਤਰ ਕੀਤਾ ਜਾਏਗਾ ਅਤੇ Google ਨੂੰ ਭੇਜਿਆ ਜਾਏਗਾ।"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"ਵਾਈ‑ਫਾਈ ਵੱਲੋਂ ਪਤਾ ਲਗਾਇਆ ਟਿਕਾਣਾ"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2806,8 +2809,8 @@
<string name="battery_manager_summary_unsupported" msgid="7334173707292807964">"ਐਪਾਂ ਵੱਲੋਂ ਜ਼ਿਆਦਾ ਬੈਟਰੀ ਵਰਤੇ ਜਾਣ ਦਾ ਪਤਾ ਲਗਾਇਆ ਜਾ ਰਿਹਾ ਹੈ"</string>
<string name="battery_manager_off" msgid="673547668722420924">"ਬੰਦ"</string>
<plurals name="battery_manager_app_restricted" formatted="false" msgid="6714534362166394848">
- <item quantity="one">%1$d ਐਪ ਪ੍ਰਤੀਬੰਧਿਤ</item>
- <item quantity="other">%1$d ਐਪਾਂ ਪ੍ਰਤੀਬੰਧਿਤ</item>
+ <item quantity="one">%1$d ਐਪ ਪ੍ਰਤਿਬੰਧਿਤ</item>
+ <item quantity="other">%1$d ਐਪਾਂ ਪ੍ਰਤਿਬੰਧਿਤ</item>
</plurals>
<string name="battery_header_title_alternate" msgid="8371821625994616659">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">%</xliff:g>"</font></small>""</string>
<string name="battery_missing_message" msgid="400958471814422770">"ਬੈਟਰੀ ਮੀਟਰ ਨੂੰ ਪੜ੍ਹਨ ਵਿੱਚ ਸਮੱਸਿਆ ਹੋ ਰਹੀ ਹੈ।"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3245,7 +3252,7 @@
<string name="data_usage_limit_dialog_mobile" product="default" msgid="4942895670789168024">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਤੁਹਾਡੇ ਵੱਲੋਂ ਸੈੱਟ ਕੀਤੀ ਮੋਬਾਈਲ ਡਾਟੇ ਦੀ ਸੀਮਾ ਉੱਤੇ ਪਹੁੰਚਣ \'ਤੇ ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ ਕਰ ਦੇਵੇਗਾ।\n\nਕਿਉਂਕਿ ਡਾਟਾ ਵਰਤੋਂ ਨੂੰ ਤੁਹਾਡੇ ਫ਼ੋਨ ਵੱਲੋਂ ਮਾਪਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਹਾਡਾ ਕੈਰੀਅਰ ਵਰਤੋਂ ਦਾ ਹਿਸਾਬ ਵੱਖਰੇ ਢੰਗ ਨਾਲ ਲਗਾਵੇ, ਇਸ ਕਰਕੇ ਕੋਈ ਸਰਫ਼ੇ ਵਾਲੀ ਸੀਮਾ ਸੈੱਟ ਕਰਨ ਬਾਰੇ ਵਿਚਾਰ ਕਰੋ।"</string>
<string name="data_usage_restrict_background_title" msgid="2745551538820692821">"ਕੀ ਪਿਛੋਕੜ ਡਾਟਾ ਤੇ ਪ੍ਰਤਿਬੰਧ ਲਾਉਣਾ ਹੈ?"</string>
<string name="data_usage_restrict_background" msgid="1893102079135282794">"ਜੇਕਰ ਤੁਸੀਂ ਬੈਕਗ੍ਰਾਊਂਡ ਮੋਬਾਈਲ ਡਾਟੇ \'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦੇ ਹੋ, ਤਾਂ ਕੁਝ ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਉਦੋਂ ਤੱਕ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਵਾਈ‑ਫਾਈ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਹੁੰਦੇ।"</string>
- <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="5588623586867665419">"ਜੇਕਰ ਤੁਸੀਂ ਬੈਕਗ੍ਰਾਊਂਡ ਮੋਬਾਈਲ ਡਾਟੇ \'ਤੇ ਪ੍ਰਤੀਬੰਧ ਲਗਾਉਂਦੇ ਹੋ, ਤਾਂ ਕੁਝ ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਉਦੋਂ ਤੱਕ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਵਾਈ‑ਫਾਈ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਹੁੰਦੇ।\n\nਇਹ ਸੈਟਿੰਗ ਇਸ ਟੈਬਲੈੱਟ \'ਤੇ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦੀ ਹੈ।"</string>
+ <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="5588623586867665419">"ਜੇਕਰ ਤੁਸੀਂ ਬੈਕਗ੍ਰਾਊਂਡ ਮੋਬਾਈਲ ਡਾਟੇ \'ਤੇ ਪ੍ਰਤਿਬੰਧ ਲਗਾਉਂਦੇ ਹੋ, ਤਾਂ ਕੁਝ ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਉਦੋਂ ਤੱਕ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਵਾਈ‑ਫਾਈ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਹੁੰਦੇ।\n\nਇਹ ਸੈਟਿੰਗ ਇਸ ਟੈਬਲੈੱਟ \'ਤੇ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦੀ ਹੈ।"</string>
<string name="data_usage_restrict_background_multiuser" product="default" msgid="6402714504088590463">"ਜੇਕਰ ਤੁਸੀਂ ਬੈਕਗ੍ਰਾਊਂਡ ਮੋਬਾਈਲ ਡਾਟੇ \'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦੇ ਹੋ, ਤਾਂ ਕੁਝ ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਉਦੋਂ ਤੱਕ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਵਾਈ-ਫਾਈ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਹੁੰਦੇ।\n\nਇਹ ਸੈਟਿੰਗ ਇਸ ਫ਼ੋਨ \'ਤੇ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦੀ ਹੈ।"</string>
<string name="data_usage_sweep_warning" msgid="2072854703184614828"><font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font>" "<font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font>\n<font size="12">"ਚਿਤਾਵਨੀ"</font></string>
<string name="data_usage_sweep_limit" msgid="6947019190890086284"><font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font>" "<font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font>\n<font size="12">"ਸੀਮਾ"</font></string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5G, VoNR, ਉੱਨਤ ਕਾਲਿੰਗ, 5G ਕਾਲਿੰਗ"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ਭਾਸ਼ਾ ਸ਼ਾਮਲ ਕਰੋ, ਕੋਈ ਭਾਸ਼ਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ਲਿਖਤ ਦਾ ਆਕਾਰ, ਵੱਡਾ ਪ੍ਰਿੰਟ, ਵੱਡਾ ਫ਼ੌਂਟ, ਵੱਡੀ ਲਿਖਤ, ਘੱਟ ਨਜ਼ਰ, ਲਿਖਤ ਵੱਡੀ ਕਰੋ, ਫ਼ੌਂਟ ਵੱਡਾ ਕਰੋ, ਫ਼ੌਂਟ ਵੱਡਾ ਕਰਨਾ"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ਹਮੇਸ਼ਾਂ-ਚਾਲੂ ਡਿਸਪਲੇ, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਧੁਨੀ"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"ਘੰਟੀ ਅਤੇ ਸੂਚਨਾ ਦੀ ਅਵਾਜ਼ <xliff:g id="PERCENTAGE">%1$s</xliff:g> ਹੈ"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ਅਵਾਜ਼, ਥਰਥਰਾਹਟ, ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string>
@@ -3750,7 +3756,7 @@
<string name="zen_mode_automation_settings_page_title" msgid="6217433860514433311">"ਸਮਾਂ-ਸੂਚੀਆਂ"</string>
<string name="zen_mode_automatic_rule_settings_page_title" msgid="5264835276518295033">"ਸਮਾਂ-ਸੂਚੀ"</string>
<string name="zen_mode_schedule_category_title" msgid="1381879916197350988">"ਸਮਾਂ-ਸੂਚੀ"</string>
- <string name="zen_mode_automation_suggestion_title" msgid="7776129050500707960">"ਕੁਝ ਖਾਸ ਸਮਿਆਂ \'ਤੇ ਫ਼ੋਨ ਖਾਮੋਸ਼ ਰੱਖੋ"</string>
+ <string name="zen_mode_automation_suggestion_title" msgid="7776129050500707960">"ਕੁਝ ਖਾਸ ਸਮਿਆਂ \'ਤੇ ਫ਼ੋਨ ਸ਼ਾਂਤ ਰੱਖੋ"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="1946750790084170826">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਦੇ ਨਿਯਮ ਸੈੱਟ ਕਰੋ"</string>
<string name="zen_mode_schedule_title" msgid="7064866561892906613">"ਸਮਾਂ-ਸੂਚੀ"</string>
<string name="zen_mode_use_automatic_rule" msgid="733850322530002484">"ਸਮਾਂ-ਸੂਚੀ ਵਰਤੋ"</string>
@@ -3911,7 +3917,7 @@
<string name="gentle_notifications_also_display" msgid="8617545395880297691">"ਇਸ ਵਿੱਚ ਵੀ ਦਿਸਦੀਆਂ ਹਨ"</string>
<string name="gentle_notifications_display_status" msgid="7410244447768694856">"ਸਥਿਤੀ ਪੱਟੀ"</string>
<string name="gentle_notifications_display_lock" msgid="1914245082527924144">"ਲਾਕ ਸਕ੍ਰੀਨ"</string>
- <string name="gentle_notifications_education" msgid="5957509621826384362">"ਸਰਲ ਸੂਚਨਾਵਾਂ ਹਮੇਸ਼ਾਂ ਖਾਮੋਸ਼ ਰਹਿੰਦੀਆਂ ਹਨ ਅਤੇ ਹਮੇਸ਼ਾਂ ਹੇਠਾਂ ਖਿੱਚੀ ਜਾਣ ਵਾਲੀ ਸੂਚੀ ਵਿੱਚ ਦਿਸਦੀਆਂ ਹਨ"</string>
+ <string name="gentle_notifications_education" msgid="5957509621826384362">"ਸਰਲ ਸੂਚਨਾਵਾਂ ਹਮੇਸ਼ਾਂ ਸ਼ਾਂਤ ਰਹਿੰਦੀਆਂ ਹਨ ਅਤੇ ਹਮੇਸ਼ਾਂ ਹੇਠਾਂ ਖਿੱਚੀ ਜਾਣ ਵਾਲੀ ਸੂਚੀ ਵਿੱਚ ਦਿਸਦੀਆਂ ਹਨ"</string>
<string name="gentle_notifications_display_summary_shade" msgid="7616926954719310445">"ਸਿਰਫ਼ ਹੇਠਾਂ ਖਿੱਚੀ ਜਾਣ ਵਾਲੀ ਸੂਚੀ ਵਿੱਚ ਦਿਸਦੀਆਂ ਹਨ"</string>
<string name="gentle_notifications_display_summary_shade_lock" msgid="3936088046873705625">"ਹੇਠਾਂ ਖਿੱਚੀ ਜਾਣ ਵਾਲੀ ਸੂਚੀ ਅਤੇ ਲਾਕ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਸਦੀਆਂ ਹਨ"</string>
<string name="gentle_notifications_display_summary_shade_status" msgid="3363137853729359907">"ਹੇਠਾਂ ਖਿੱਚੀ ਜਾਣ ਵਾਲੀ ਸੂਚੀ ਅਤੇ ਸਥਿਤੀ ਪੱਟੀ \'ਤੇ ਦਿਸਦੀਆਂ ਹਨ"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ਕਦੇ ਵੀ ਨਹੀਂ"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"ਡੀਵਾਈਸ ਅਤੇ ਐਪ ਸੂਚਨਾਵਾਂ"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"ਕੰਟਰੋਲ ਕਰੋ ਕਿ ਕਿਹੜੀਆਂ ਐਪਾਂ ਅਤੇ ਡੀਵਾਈਸਾਂ ਵੱਲੋਂ ਸੂਚਨਾਵਾਂ ਪੜ੍ਹੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ"</string>
@@ -4286,7 +4286,7 @@
<string name="zen_mode_summary_alarms_only_by_time" msgid="8140619669703968810">"ਅਲਾਰਮ ਨੂੰ ਸਿਰਫ਼ <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> ਤੱਕ ਬਦਲੋ"</string>
<string name="zen_mode_summary_always" msgid="722093064250082317">"ਹਮੇਸ਼ਾਂ ਵਿਘਨ ਪਾਓ ਵਿੱਚ ਬਦਲੋ"</string>
<string name="zen_mode_screen_on" msgid="7312758100468915319">"ਜਦੋਂ ਸਕ੍ਰੀਨ ਚਾਲੂ ਹੋਵੇ"</string>
- <string name="zen_mode_screen_on_summary" msgid="510055058460316698">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਵੱਲੋਂ ਖਾਮੋਸ਼ ਕਰਵਾਈਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਣ ਦਿਓ ਅਤੇ ਇੱਕ ਸਥਿਤੀ ਪੱਟੀ ਪ੍ਰਤੀਕ ਦਿਖਾਉਣ ਦਿਓ"</string>
+ <string name="zen_mode_screen_on_summary" msgid="510055058460316698">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਵੱਲੋਂ ਸ਼ਾਂਤ ਕਰਵਾਈਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਸਣ ਦਿਓ ਅਤੇ ਇੱਕ ਸਥਿਤੀ ਪੱਟੀ ਪ੍ਰਤੀਕ ਦਿਖਾਉਣ ਦਿਓ"</string>
<string name="zen_mode_screen_off" msgid="7069798697669366075">"ਜਦੋਂ ਸਕ੍ਰੀਨ ਬੰਦ ਹੋਵੇ"</string>
<string name="zen_mode_screen_off_summary" msgid="4698018253505406152">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਵੱਲੋਂ ਚੁੱਪ ਕਰਵਾਈਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸਕ੍ਰੀਨ ਚਾਲੂ ਕਰਨ ਅਤੇ ਰੋਸ਼ਨੀ ਨੂੰ ਟਿਮ-ਟਿਮਾਉਣ ਦਿਓ"</string>
<string name="zen_mode_screen_off_summary_no_led" msgid="1958271859408992636">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਵੱਲੋਂ ਚੁੱਪ ਕਰਵਾਈਆਂ ਸੂਚਨਾਵਾਂ ਨੂੰ ਸਕ੍ਰੀਨ ਚਾਲੂ ਕਰਨ ਦਿਓ"</string>
@@ -4852,8 +4852,8 @@
<string name="overlay_toast_failed_to_apply" msgid="4839587811338164960">"ਓਵਰਲੇ ਨੂੰ ਲਾਗੂ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
<string name="special_access" msgid="1767980727423395147">"ਵਿਸ਼ੇਸ਼ ਐਪ ਪਹੁੰਚ"</string>
<plurals name="special_access_summary" formatted="false" msgid="4995506406763570815">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਐਪ ਅਣ-ਪ੍ਰਤੀਬੰਧਿਤ ਡਾਟੇ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੀ ਹੈ</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਐਪਾਂ ਅਣ-ਪ੍ਰਤੀਬੰਧਿਤ ਡਾਟੇ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੀਆਂ ਹਨ</item>
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਐਪ ਅਣ-ਪ੍ਰਤਿਬੰਧਿਤ ਡਾਟੇ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੀ ਹੈ</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਐਪਾਂ ਅਣ-ਪ੍ਰਤਿਬੰਧਿਤ ਡਾਟੇ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੀਆਂ ਹਨ</item>
</plurals>
<string name="special_access_more" msgid="132919514147475846">"ਹੋਰ ਦੇਖੋ"</string>
<string name="reset_shortcut_manager_throttling" msgid="2183940254903144298">"ShortcutManager ਰੇਟ-ਲਿਮਿਟਿੰਗ ਰੀਸੈੱਟ ਕਰੋ"</string>
@@ -5071,7 +5071,7 @@
<string name="toast_allows_restricted_settings_successfully" msgid="1219116121291466102">"<xliff:g id="APP_NAME">%s</xliff:g> ਲਈ ਪ੍ਰਤਿਬੰਧਿਤ ਸੈਟਿੰਗਾਂ ਦੀ ਆਗਿਆ ਹੈ"</string>
<string name="blocked_by_restricted_settings_content" msgid="3628660029601161080">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਫ਼ਿਲਹਾਲ ਇਹ ਸੈਟਿੰਗ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string>
<string name="financed_privacy_settings" msgid="2575114436197204145">"ਵਿੱਤ ਪ੍ਰਬੰਧਿਤ ਡੀਵਾਈਸ ਬਾਰੇ ਜਾਣਕਾਰੀ"</string>
- <string name="financed_privacy_intro" msgid="7836497475568741579">"ਤੁਹਾਡਾ ਕ੍ਰੈਡਿਟ ਪ੍ਰਦਾਨਕ ਸੈੱਟਅੱਪ ਦੌਰਾਨ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬਦਲ ਕੇ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਸਾਫ਼ਟਵੇਅਰ ਸਥਾਪਤ ਕਰ ਸਕਦਾ ਹੈ।\n\nਜੇ ਤੁਸੀਂ ਕੋਈ ਭੁਗਤਾਨ ਖੁੰਝਾ ਦਿੰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ ਕ੍ਰੈਡਿਟ ਪ੍ਰਦਾਨਕ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਲਾਕ ਕਰ ਸਕਦਾ ਹੈ ਅਤੇ ਡੀਵਾਈਸ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬਦਲ ਸਕਦਾ ਹੈ।\n\nਰ ਜਾਣਨ ਲਈ, ਆਪਣੇ ਕ੍ਰੈਡਿਟ ਪ੍ਰਦਾਨਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+ <string name="financed_privacy_intro" msgid="7836497475568741579">"ਤੁਹਾਡਾ ਕ੍ਰੈਡਿਟ ਪ੍ਰਦਾਨਕ ਸੈੱਟਅੱਪ ਦੌਰਾਨ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬਦਲ ਕੇ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਸਾਫ਼ਟਵੇਅਰ ਸਥਾਪਤ ਕਰ ਸਕਦਾ ਹੈ।\n\nਜੇ ਤੁਸੀਂ ਕੋਈ ਭੁਗਤਾਨ ਖੁੰਝਾ ਦਿੰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ ਕ੍ਰੈਡਿਟ ਪ੍ਰਦਾਨਕ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਲਾਕ ਕਰ ਸਕਦਾ ਹੈ ਅਤੇ ਡੀਵਾਈਸ ਸੈਟਿੰਗਾਂ ਨੂੰ ਬਦਲ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਨ ਲਈ, ਆਪਣੇ ਕ੍ਰੈਡਿਟ ਪ੍ਰਦਾਨਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
<string name="financed_privacy_restrictions_category" msgid="2472659467919651602">"ਜੇ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਵਿੱਤ ਪ੍ਰਬੰਧਿਤ ਹੈ, ਤਾਂ ਤੁਸੀਂ ਇਹ ਨਹੀਂ ਕਰ ਸਕਦੇ:"</string>
<string name="financed_privacy_install_apps" msgid="7381718005710210851">"ਐਪਾਂ ਨੂੰ Play Store ਦੇ ਬਾਹਰੋਂ ਸਥਾਪਤ ਕਰਨਾ"</string>
<string name="financed_privacy_safe_mode" msgid="5362149445732602578">"ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਸੁਰੱਖਿਅਤ ਮੋਡ ਵਿੱਚ ਰੀਬੂਟ ਕਰਨਾ"</string>
@@ -5365,9 +5365,9 @@
<string name="cdma_system_select_dialogtitle" msgid="6143586810486936984">"ਸਿਸਟਮ ਵੱਲੋਂ ਚੁਣਿਆ"</string>
<string name="network_operator_category" msgid="5309383730335681395">"ਨੈੱਟਵਰਕ"</string>
<string name="network_select_title" msgid="4532395144000206685">"ਨੈੱਟਵਰਕ"</string>
- <string name="cdma_subscription_title" msgid="3107207913315872336">"CDMA ਗਾਹਕੀ"</string>
+ <string name="cdma_subscription_title" msgid="3107207913315872336">"CDMA ਸਬਸਕ੍ਰਿਪਸ਼ਨ"</string>
<string name="cdma_subscription_summary" msgid="7134032708555561334">"RUIM/SIM ਅਤੇ NV ਵਿਚਾਲੇ ਬਦਲੋ"</string>
- <string name="cdma_subscription_dialogtitle" msgid="555971296756231647">"ਗਾਹਕੀ"</string>
+ <string name="cdma_subscription_dialogtitle" msgid="555971296756231647">"ਸਬਸਕ੍ਰਿਪਸ਼ਨ"</string>
<string name="register_automatically" msgid="5208258089316657167">"ਸਵੈਚਲਿਤ ਰਜਿਸਟਰੇਸ਼ਨ…"</string>
<string name="roaming_alert_title" msgid="9052791521868787985">"ਕੀ ਡਾਟਾ ਰੋਮਿੰਗ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="roaming_check_price_warning" msgid="5876977438036791361">"ਕੀਮਤਾਂ ਜਾਣਨ ਲਈ ਆਪਣੇ ਨੈੱਟਵਰਕ ਪ੍ਰਦਾਨਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index f2d2876..e661a95 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -275,7 +275,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Ustaw datę i godzinę"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Ustaw datę, godzinę, strefę czasową i formaty."</string>
<string name="date_time_auto" msgid="4239202185055225869">"Ustawiaj godzinę automatycznie"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Ustawiaj strefę czasową automatycznie"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Ustaw automatycznie"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Używaj ustawień domyślnych dla regionu"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Format 24-godzinny"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Format 24-godzinny"</string>
@@ -1932,7 +1932,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Usługi lokalizacyjne"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Usługi lokalizacyjne"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Usługi lokalizacyjne do pracy"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Używaj lokalizacji, aby ustawić strefę czasową"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Włącz lokalizację"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Wymagany dostęp do lokalizacji urządzenia"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Aby ustawić strefę czasową na podstawie lokalizacji, włącz lokalizację, a potem zaktualizuj ustawienia strefy czasowej"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Ustawienia lokalizacji"</string>
@@ -1941,6 +1941,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Wykrywanie strefy czasowej lokalizacji jest wyłączone"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Wykrywanie strefy czasowej lokalizacji nie jest obsługiwane"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Wprowadzanie zmian dotyczących wykrywania strefy czasowej lokalizacji nie jest dozwolone"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Lokalizacja może być używana do ustawienia strefy czasowej"</string>
<string name="location_network_based" msgid="5247042890080021887">"Przez Wi-Fi i sieć komórkową"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Zezwalaj aplikacjom na używanie usługi lokalizacji Google do szybszego określania Twojego położenia. Anonimowe dane o lokalizacji będą zbierane i przesyłane do Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Lokalizacja określona na podstawie Wi-Fi"</string>
@@ -1986,6 +1987,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2999,6 +3002,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>
@@ -3088,6 +3092,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>
@@ -3775,8 +3782,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5G, VoNR, połączenia zaawansowane, połączenia 5G"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"dodaj język, dodawanie języka"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"rozmiar tekstu, duży druk, duża czcionka, duży tekst, niedowidzenie, powiększenie tekstu, powiększenie czcionki"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"zawsze aktywny wyświetlacz, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Dźwięk domyślny"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Głośność dzwonka i powiadomień na poziomie <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Głośność, wibracje, Nie przeszkadzać"</string>
@@ -4089,18 +4095,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Zarządzaj uprawnieniami aplikacji do czytania powiadomień"</string>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 27d1ec6..c4d523a 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Configurar data e hora"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Definir data, hora, fuso horário e formatos"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Definir hora automaticamente"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Definir fuso horário automaticamente"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Definir automaticamente"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar o padrão do local"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Formato de 24 horas"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Formato de 24 horas"</string>
@@ -896,7 +896,7 @@
<string name="bluetooth_device_advanced_online_mode_summary" msgid="271856759516576615">"Conecta ao dispositivo Bluetooth"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="7892879890208207223">"Usar para"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="4798081898389041132">"Renomear"</string>
- <string name="bluetooth_device_advanced_enable_opp_title" msgid="7604726126703453984">"Permitir transfer. de arquivo"</string>
+ <string name="bluetooth_device_advanced_enable_opp_title" msgid="7604726126703453984">"Permitir transferência de arquivo"</string>
<string name="bluetooth_pan_user_profile_summary_connected" msgid="7851033200857999275">"Conectado ao dispositivo para acesso à Internet"</string>
<string name="bluetooth_pan_nap_profile_summary_connected" msgid="5563892893331988809">"Compartilhamento de conexão local de Internet c/ disposit."</string>
<string name="bluetooth_dock_settings" msgid="1709536202189755022">"Configurações de base"</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Serviços de localização"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Serviços de localização"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Serviços de localização para o trabalho"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Usar a localização para definir o fuso horário"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Usar a localização"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Localização do dispositivo necessária"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Para configurar o fuso horário usando seu local, ative a localização e atualize as configurações de fuso horário"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Configurações de localização"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"A detecção de fuso horário do local está desativada"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"A detecção de fuso horário do local está indisponível"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Não são permitidas mudanças na detecção de fuso horário do local"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"A localização pode ser usada para definir o fuso horário"</string>
<string name="location_network_based" msgid="5247042890080021887">"Local de rede móvel e Wi-Fi"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Permitir que apps usem o serviço de localização do Google para determinar seu local mais rapidamente. Dados de localização anônimos serão coletados e enviados ao Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Localização determinada por Wi-Fi"</string>
@@ -1944,6 +1945,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2925,6 +2928,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>
@@ -3014,6 +3018,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>
@@ -3691,8 +3698,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, chamada avançada, chamada 5G"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"adicionar idioma, adicionar um idioma"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tamanho do texto, letras grandes, fonte grande, texto grande, baixa visão, aumentar texto, ampliador de fonte, aumento de fonte"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"tela sempre ativada, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Som padrão"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volume de toque e notificação em <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibração, Não perturbe"</string>
@@ -4003,14 +4009,8 @@
<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">
- <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>
- <item quantity="other">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificações por semana</item>
- </plurals>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Nunca"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificações de apps e do dispositivo"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Controlar quais apps e dispositivos podem ler as notificações"</string>
@@ -4432,7 +4432,7 @@
<string name="advanced_apps" msgid="7643010673326578815">"Avançado"</string>
<string name="configure_apps" msgid="5468359087126598115">"Configurar apps"</string>
<string name="unknown_app" msgid="2027248925719898714">"App desconhecido"</string>
- <string name="app_permissions" msgid="8666537659217653626">"Gerenciador de permissões"</string>
+ <string name="app_permissions" msgid="8666537659217653626">"Gestão de permissões"</string>
<string name="app_permissions_summary" msgid="2709819220672938860">"Apps usando <xliff:g id="APPS">%1$s</xliff:g>"</string>
<string name="app_permissions_summary_more" msgid="6247952473615352350">"Apps usando <xliff:g id="APPS">%1$s</xliff:g> e mais"</string>
<string name="tap_to_wake" msgid="3313433536261440068">"Tocar para ativar"</string>
@@ -4860,7 +4860,7 @@
<string name="special_access_more" msgid="132919514147475846">"Ver mais"</string>
<string name="reset_shortcut_manager_throttling" msgid="2183940254903144298">"Redefinir limite de taxa do ShortcutManager"</string>
<string name="reset_shortcut_manager_throttling_complete" msgid="8949943009096885470">"O limite de taxa do ShortcutManager foi redefinido"</string>
- <string name="notification_suggestion_title" msgid="6309263655965785411">"Controlar informações na tela de bloqueio"</string>
+ <string name="notification_suggestion_title" msgid="6309263655965785411">"Informações na tela de bloqueio"</string>
<string name="notification_suggestion_summary" msgid="7615611244249276113">"Mostrar ou ocultar o conteúdo da notificação"</string>
<string name="page_tab_title_summary" msgid="7188875610123234454">"Todas as opções"</string>
<string name="page_tab_title_support" msgid="3235725053332345773">"Dicas e suporte"</string>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 2574015..c4b8695 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Definir data e hora"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Definir data, hora, fuso horário e formatos"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Definir a hora automaticamente"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Definir o fuso horário automaticamente"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Definir automaticamente"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Utilizar local predefinido"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Formato de 24 horas"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Utilizar formato de 24 horas"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Serviços de localização"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Serviços de localização"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Serviços de localização para o trabalho"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Utilize a localização para definir o fuso horário"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Usar localização"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Localização do dispositivo necessária"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Para definir o fuso horário através da sua localização, ative a localização e, em seguida, atualize as definições de fuso horário"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Definições de localização"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"A deteção do fuso horário da localização está desativada."</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"A deteção do fuso horário da localização não é suportada."</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Não são permitidas alterações à deteção do fuso horário da localização."</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"A localização pode ser usada para definir o fuso horário"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi e localização de rede de telemóvel"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Permitir que app usem o serv. localiz. Google p/ calcular mais rapida/ a sua localização. Dados localização recolhidos e enviados à Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Localização determinada por Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -1950,7 +1953,7 @@
<string name="lockpassword_confirm_your_password_header" msgid="6132312814563023990">"Reintroduza a palavra-passe"</string>
<string name="lockpassword_reenter_your_profile_password_header" msgid="3812040127714827685">"Reintroduza a palavra-passe de trabalho"</string>
<string name="lockpassword_confirm_your_work_password_header" msgid="4647071231702288305">"Introduza a palavra-passe de trabalho"</string>
- <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"Confirmar o padrão"</string>
+ <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"Confirme o padrão"</string>
<string name="lockpassword_confirm_your_work_pattern_header" msgid="2668883108969165844">"Introduza o padrão de trabalho"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="2241722970567131308">"Reintroduza o PIN"</string>
<string name="lockpassword_reenter_your_profile_pin_header" msgid="2890233614560435538">"Reintroduza o PIN de trabalho"</string>
@@ -1971,7 +1974,7 @@
<string name="lockpassword_forgot_password" msgid="5730587692489737223">"Esqueceu-se da sua palavra-passe?"</string>
<string name="lockpassword_forgot_pattern" msgid="1196116549051927516">"Esqueceu-se do seu padrão?"</string>
<string name="lockpassword_forgot_pin" msgid="7164232234705747672">"Esqueceu-se do seu PIN?"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"Utilize o padrão do dispositivo para continuar"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"Use o padrão do dispositivo para continuar"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="9206928587904701094">"Introduza o PIN do dispositivo para continuar"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="2616127423884477152">"Introduza a palavra-passe do dispositivo para continuar"</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="9110305410672321714">"Utilize o padrão de trabalho para continuar"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, chamadas avançadas, chamadas 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"adicionar idioma, adicionar um idioma"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tamanho do texto, formato·grande, tipo de letra grande, texto grande, visão reduzida, aumentar o texto, aumentar o tipo de letra, aumento do tipo de letra"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ecrã sempre ligado, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Som predefinido"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volume de notificações e de toque a <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibração, Não incomodar"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Controle que apps e dispositivos podem ler notificações"</string>
@@ -4063,7 +4063,7 @@
<string name="picture_in_picture_empty_text" msgid="9123600661268731579">"Nenhuma app instalada é compatível com Imagem na imagem"</string>
<string name="picture_in_picture_keywords" msgid="3605379820551656253">"pip picture in"</string>
<string name="picture_in_picture_app_detail_title" msgid="4442235098255164650">"Imagem na imagem"</string>
- <string name="picture_in_picture_app_detail_switch" msgid="8544190716075624017">"Permitir imagem na imagem"</string>
+ <string name="picture_in_picture_app_detail_switch" msgid="8544190716075624017">"Permitir ecrã no ecrã"</string>
<string name="picture_in_picture_app_detail_summary" msgid="2503211101305358849">"Permita que esta app crie uma janela de ecrã no ecrã enquanto a aplicação está aberta ou depois de sair da mesma (por exemplo, para continuar a ver um vídeo). Esta janela é apresentada sobre as outras aplicações que estiver a utilizar."</string>
<string name="interact_across_profiles_title" msgid="7285906999927669971">"Apps pessoais e de trabalho associadas"</string>
<string name="interact_across_profiles_summary_allowed" msgid="1365881452153799092">"Associadas"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 27d1ec6..c4d523a 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Configurar data e hora"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Definir data, hora, fuso horário e formatos"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Definir hora automaticamente"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Definir fuso horário automaticamente"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Definir automaticamente"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar o padrão do local"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Formato de 24 horas"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Formato de 24 horas"</string>
@@ -896,7 +896,7 @@
<string name="bluetooth_device_advanced_online_mode_summary" msgid="271856759516576615">"Conecta ao dispositivo Bluetooth"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="7892879890208207223">"Usar para"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="4798081898389041132">"Renomear"</string>
- <string name="bluetooth_device_advanced_enable_opp_title" msgid="7604726126703453984">"Permitir transfer. de arquivo"</string>
+ <string name="bluetooth_device_advanced_enable_opp_title" msgid="7604726126703453984">"Permitir transferência de arquivo"</string>
<string name="bluetooth_pan_user_profile_summary_connected" msgid="7851033200857999275">"Conectado ao dispositivo para acesso à Internet"</string>
<string name="bluetooth_pan_nap_profile_summary_connected" msgid="5563892893331988809">"Compartilhamento de conexão local de Internet c/ disposit."</string>
<string name="bluetooth_dock_settings" msgid="1709536202189755022">"Configurações de base"</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Serviços de localização"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Serviços de localização"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Serviços de localização para o trabalho"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Usar a localização para definir o fuso horário"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Usar a localização"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Localização do dispositivo necessária"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Para configurar o fuso horário usando seu local, ative a localização e atualize as configurações de fuso horário"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Configurações de localização"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"A detecção de fuso horário do local está desativada"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"A detecção de fuso horário do local está indisponível"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Não são permitidas mudanças na detecção de fuso horário do local"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"A localização pode ser usada para definir o fuso horário"</string>
<string name="location_network_based" msgid="5247042890080021887">"Local de rede móvel e Wi-Fi"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Permitir que apps usem o serviço de localização do Google para determinar seu local mais rapidamente. Dados de localização anônimos serão coletados e enviados ao Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Localização determinada por Wi-Fi"</string>
@@ -1944,6 +1945,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2925,6 +2928,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>
@@ -3014,6 +3018,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>
@@ -3691,8 +3698,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, chamada avançada, chamada 5G"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"adicionar idioma, adicionar um idioma"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"tamanho do texto, letras grandes, fonte grande, texto grande, baixa visão, aumentar texto, ampliador de fonte, aumento de fonte"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"tela sempre ativada, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Som padrão"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volume de toque e notificação em <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, vibração, Não perturbe"</string>
@@ -4003,14 +4009,8 @@
<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">
- <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>
- <item quantity="other">Cerca de <xliff:g id="NUMBER_1">%,d</xliff:g> notificações por semana</item>
- </plurals>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Nunca"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Notificações de apps e do dispositivo"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Controlar quais apps e dispositivos podem ler as notificações"</string>
@@ -4432,7 +4432,7 @@
<string name="advanced_apps" msgid="7643010673326578815">"Avançado"</string>
<string name="configure_apps" msgid="5468359087126598115">"Configurar apps"</string>
<string name="unknown_app" msgid="2027248925719898714">"App desconhecido"</string>
- <string name="app_permissions" msgid="8666537659217653626">"Gerenciador de permissões"</string>
+ <string name="app_permissions" msgid="8666537659217653626">"Gestão de permissões"</string>
<string name="app_permissions_summary" msgid="2709819220672938860">"Apps usando <xliff:g id="APPS">%1$s</xliff:g>"</string>
<string name="app_permissions_summary_more" msgid="6247952473615352350">"Apps usando <xliff:g id="APPS">%1$s</xliff:g> e mais"</string>
<string name="tap_to_wake" msgid="3313433536261440068">"Tocar para ativar"</string>
@@ -4860,7 +4860,7 @@
<string name="special_access_more" msgid="132919514147475846">"Ver mais"</string>
<string name="reset_shortcut_manager_throttling" msgid="2183940254903144298">"Redefinir limite de taxa do ShortcutManager"</string>
<string name="reset_shortcut_manager_throttling_complete" msgid="8949943009096885470">"O limite de taxa do ShortcutManager foi redefinido"</string>
- <string name="notification_suggestion_title" msgid="6309263655965785411">"Controlar informações na tela de bloqueio"</string>
+ <string name="notification_suggestion_title" msgid="6309263655965785411">"Informações na tela de bloqueio"</string>
<string name="notification_suggestion_summary" msgid="7615611244249276113">"Mostrar ou ocultar o conteúdo da notificação"</string>
<string name="page_tab_title_summary" msgid="7188875610123234454">"Todas as opções"</string>
<string name="page_tab_title_support" msgid="3235725053332345773">"Dicas e suporte"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 61d088b..6cfb004 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -273,7 +273,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Setați data și ora"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Setați data, ora, fusul orar și formatele."</string>
<string name="date_time_auto" msgid="4239202185055225869">"Setați ora automat"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Setați fusul orar automat"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Setați automat"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Folosiți codul local prestabilit"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Format de 24 de ore"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Utilizați formatul de 24 de ore"</string>
@@ -1912,7 +1912,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Servicii de localizare"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Servicii de localizare"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Servicii de localizare pentru serviciu"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Folosiți locația pentru a seta fusul orar"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Folosiți locația"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Este necesară locația dispozitivului"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Pentru a seta fusul orar folosind locația, activați-o, apoi actualizați setările de fus orar"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Setări privind locația"</string>
@@ -1921,6 +1921,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Detectarea fusului orar al locației este dezactivată"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Detectarea fusului orar al locației nu este acceptată"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Modificările detectării fusului orar al locației nu sunt permise"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Locația se poate folosi pentru a seta fusul orar"</string>
<string name="location_network_based" msgid="5247042890080021887">"Localizare prin Wi-Fi și mobil"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Aplicațiile estimează mai rapid locația cu serviciul de localizare Google. Se colectează/trimit la Google date anonime de localizare."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Locație stabilită prin Wi-Fi"</string>
@@ -1966,6 +1967,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2963,6 +2966,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>
@@ -3052,6 +3056,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>
@@ -3357,7 +3364,7 @@
<string name="vpn_create" msgid="7546073242936894638">"Adăugați un profil VPN"</string>
<string name="vpn_menu_edit" msgid="5100387853773792379">"Editați profilul"</string>
<string name="vpn_menu_delete" msgid="4455966182219039928">"Ștergeți profilul"</string>
- <string name="vpn_menu_lockdown" msgid="5284041663859541007">"Rețea VPN activată permanent"</string>
+ <string name="vpn_menu_lockdown" msgid="5284041663859541007">"VPN activat permanent"</string>
<string name="vpn_no_vpns_added" msgid="7387080769821533728">"Nicio rețea VPN adăugată"</string>
<string name="vpn_always_on_summary" msgid="2171252372476858166">"Mențineți conexiunea la rețelele VPN"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9084872130449368437">"Nu este acceptată de această aplicație"</string>
@@ -3734,8 +3741,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, apelare avansată, apelare 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"adăugare limbă, adăugați o limbă"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"dimensiunea textului, caractere mari, font mare, text mare, vedere slabă, măriți textul, instrument de mărire a fontului, mărirea fontului"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ecran mereu activ, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Sunet prestabilit"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volumul pentru sonerie și notificări la <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volum, vibrații, Nu deranja"</string>
@@ -4047,16 +4053,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Gestionați aplicațiile și dispozitivele care pot citi notificări"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index f52cb3a..683909e 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -275,7 +275,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Установить дату и время"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Установка даты, времени, часового пояса и формата"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Настраивать время автоматически"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Настраивать часовой пояс автоматически"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Автоматическое определение"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Региональные настройки по умолчанию"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-часовой формат"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-часовой формат"</string>
@@ -1932,7 +1932,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Сервисы геолокации"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Сервисы геолокации"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Геолокация для работы"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Определять часовой пояс по местоположению"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Использовать данные о местоположении"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Нет доступа к данным о местоположении"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Чтобы установить часовой пояс на основе вашего местоположения, включите функцию определения местоположения и обновите настройки часового пояса."</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Настройки геолокации"</string>
@@ -1941,6 +1941,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Определение часового пояса с помощью геолокации отключено."</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Определение часового пояса с помощью геолокации не поддерживается."</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Вы не можете изменить настройки определения часового пояса с помощью геолокации."</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Для определения часового пояса могут быть использованы данные о местоположении"</string>
<string name="location_network_based" msgid="5247042890080021887">"По координатам сети"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Разрешить отправлять анонимные геоданные и позволить приложениям определять ваше местоположение с помощью Wi-Fi и мобильных сетей"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"С помощью Wi-Fi"</string>
@@ -1986,6 +1987,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2999,6 +3002,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>
@@ -3088,6 +3092,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>
@@ -3775,8 +3782,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"Vo5G, VoNR, расширенные настройки звонков, звонки по сети 5G"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"добавить язык, добавление языка"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"размер текста, крупный шрифт, большой шрифт, большой текст, слабое зрение, увеличить текст, увеличить шрифт, увеличение шрифта"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"информация на заблокированном экране"</string>
<string name="default_sound" msgid="6604374495015245195">"Мелодия по умолчанию"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Громкость сигналов при входящих вызовах и уведомлениях: <xliff:g id="PERCENTAGE">%1$s</xliff:g>."</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Громкость, вибрация, режим \"Не беспокоить\""</string>
@@ -4089,18 +4095,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Никогда"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Уведомления на устройствах и в приложениях"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Выбрать приложения и устройства, у которых есть доступ к уведомлениям"</string>
@@ -4800,7 +4796,7 @@
<string name="users_summary" msgid="8473589474976307510">"Вы вошли как <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="payment_summary" msgid="5513009140568552693">"По умолчанию: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="backup_disabled" msgid="4503062265560959320">"Резервное копирование отключено"</string>
- <string name="android_version_summary" msgid="7818952662015042768">"Обновлено до Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
+ <string name="android_version_summary" msgid="7818952662015042768">"Система обновлена до Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
<string name="android_version_pending_update_summary" msgid="5404532347171027730">"Доступно обновление"</string>
<string name="disabled_by_policy_title" msgid="3635622338687810583">"Заблокировано вашим администратором"</string>
<string name="disabled_by_policy_title_adjust_volume" msgid="1669689058213728099">"Невозможно изменить громкость"</string>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 3efd048..1facaa0 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"දිනය සහ වේලාව සකසන්න"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"දිනය, වේලාව, වේලා කලාපය, සහ ආකෘති සකසන්න"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ස්වයංක්රියව වේලාව සකසන්න"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ස්වයංක්රියව වේලා කලාපය සකසන්න"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ස්වයංක්රීයව සකසන්න"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"පෙදෙසි පෙරනිමි භාවිත කරන්න"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"පැය 24 ආකාරය"</string>
<string name="date_time_24hour" msgid="286679379105653406">"පැය 24 ආකාරය භාවිත කරන්න"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"ස්ථාන සේවා"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"ස්ථාන සේවා"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"වැඩ සඳහා ස්ථානීය සේවා"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"වේලා කලාපය සැකසීමට ස්ථානය භාවිත කරන්න"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"ස්ථානය භාවිත කරන්න"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"උපාංග ස්ථානය අවශ්යයි"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"ඔබගේ ස්ථානය භාවිත කර වේලා කලාපය සැකසීමට, ස්ථානය ක්රියාත්මක කර, අනතුරුව වේලා කලාප සැකසීම් යාවත්කාලීන කරන්න"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"ස්ථාන සැකසීම්"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"ස්ථාන වේලා කලාපය අනාවරණය කර ගැනීම අබලයි"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"ස්ථාන වේලා කලාපය අනාවරණය කර ගැනීම සහාය නොදක්වයි"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"ස්ථාන වේලා කලාපය අනාවරණය කර ගැනීමේ වෙනස් කිරීම් ඉඩ නොදේ"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"වේලා කලාපය සැකසීමට ස්ථානය භාවිත කරනු ලැබිය හැක"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi සහ ජංගම ජාල ස්ථාන"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"ඔබගේ ස්ථානය ඉක්මනින් තීරණය කිරීමට යෙදුම් හට Google හි ස්ථාන සේවා භාවිතා කිරීමට ඉඩ දෙන්න. නිර්නාමික ස්ථාන දත්ත එකතු කර Google වෙත යැවෙනු ඇත."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi‑Fi මඟින් ස්ථානය හඳුනාගන්නා ලදි"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, උසස් ඇමතුම, 5g ඇමතුම"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"භාෂාව එක් කරන්න, භාෂාවක් එක් කරන්න"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"පෙළ ප්රමාණය, විශාල මුද්රණය, විශාල අකුරු, විශාල පෙළ, අඩු දෘශ්යතාව, පෙළ වඩා විශාල කරන්න, අකුරු වඩා විශාල කරන්න, අකුරු විශාල කිරීම"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"සෑම විට ක්රියාත්මක සංදර්ශකය, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"සුපුරුදු හඬ"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"නාද සහ දැනුම්දීම හඬ <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"හඬ, කම්පනය, බාධා නොකරන්න"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"කිසි විටක නැත"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"උපාංගය සහ යෙදුම් දැනුම්දීම්"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"දැනුම්දීම් කියවිය හැකි යෙදුම් සහ උපාංග පාලනය කරන්න"</string>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index b570f27..03ce069 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -275,7 +275,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Nastaviť dátum a čas"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Nastaviť dátum, čas, časové pásmo a formáty"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Nastaviť čas automaticky"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Nastaviť časové pásmo automaticky"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Nastavovať automaticky"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Používať miestny predvolený formát"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-hodinový formát"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Používať 24-hodinový formát"</string>
@@ -481,7 +481,7 @@
<string name="security_settings_fingerprint_v2_enroll_acquire_too_fast" msgid="5891227328100822018">"Keď zacítite vibráciu, zdvihnite prst"</string>
<string name="security_settings_fingerprint_v2_enroll_acquire_too_bright" msgid="769646735950329315">"Prejdite na miesto s jemnejším osvetlením a skúste to znova"</string>
<string name="security_settings_fingerprint_v2_enroll_error_max_attempts" msgid="1464972470750764128">"Dosiahli ste maximálny počet pokusov"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Odomykajte tablet alebo overujte svoju totožnosť odtlačkom prsta, napríklad pri prihlasovaní do aplikácií"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Odtlačkom prsta môžete odomknúť tablet alebo overiť svoju totožnosť, napríklad pri prihlasovaní do nejakej aplikácie"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Odomykajte zariadenie alebo overujte svoju totožnosť odtlačkom prsta, napríklad pri prihlasovaní do aplikácií"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Odomykajte telefón alebo overujte svoju totožnosť odtlačkom prsta, napríklad pri prihlasovaní do aplikácií"</string>
<string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Odomknutie tvárou a odtlačkom prsta"</string>
@@ -749,7 +749,7 @@
<string name="unlock_footer_high_complexity_requested" msgid="4471274783909915352">"<xliff:g id="APP_NAME">%1$s</xliff:g> odporúča silný kód PIN alebo heslo, bez ktorého nemusí fungovať podľa očakávaní"</string>
<string name="unlock_footer_medium_complexity_requested" msgid="5515870066751600640">"<xliff:g id="APP_NAME">%1$s</xliff:g> odporúča nový kód PIN alebo heslo, bez ktorého nemusí fungovať podľa očakávaní"</string>
<string name="unlock_footer_low_complexity_requested" msgid="2517656037576567971">"<xliff:g id="APP_NAME">%1$s</xliff:g> odporúča nový vzor, PIN alebo heslo, bez ktorého nemusí fungovať podľa očakávaní"</string>
- <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> odporúča nová zámku obrazovky"</string>
+ <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"Aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g> odporúča novú zámku obrazovky"</string>
<string name="lock_failed_attempts_before_wipe" msgid="6874652886647631418">"Skúste to znova. <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g>. z <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g> pokusov."</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="7450322567217745999">"Vaše dáta budú odstránené"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="5816668400104558952">"Ak pri ďalšom pokuse zadáte nesprávny vzor, dáta tohto zariadenia budú odstránené"</string>
@@ -1934,7 +1934,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Služby určovania polohy"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Služby určovania polohy"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Služby určovania polohy pre prácu"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Nastaviť časové pásmo pomocou polohy"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Používať polohu"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Vyžaduje sa poloha zariadenia"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Ak chcete pomocou polohy nastaviť časové pásmo, zapnite polohu a aktualizujte nastavenia časového pásma"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Nastavenia polohy"</string>
@@ -1943,6 +1943,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Zisťovanie časového pásma podľa polohy je deaktivované"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Zisťovanie časového pásma podľa polohy nie je podporované"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Zmeny zisťovania časového pásma podľa polohy nie sú povolené"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Nastavenie časového pásma môže vyžadovať polohu"</string>
<string name="location_network_based" msgid="5247042890080021887">"Poloha Wi‑Fi a mobilnej siete"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Povoliť apl. používať službu urč. polohy Google a rýchl. odhad. vašu polohu. Anonym. údaje o polohe sa budú odosielať spol. Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Poloha je určená podľa siete Wi‑Fi"</string>
@@ -1988,6 +1989,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -3001,6 +3004,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>
@@ -3090,6 +3094,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>
@@ -3777,8 +3784,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, rozšírené hovory, volanie cez 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"pridať jazyk, pridať určitý jazyk"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"veľkosť textu, veľkoformátová tlač, veľké písmo, veľký text, slabozrakosť, zväčšenie textu, zväčšovač písma, zväčšenie písma"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"vždy zapnutá obrazovka"</string>
<string name="default_sound" msgid="6604374495015245195">"Predvolený zvuk"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Hlasitosť zvonenia a upozornení je na <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Hlasitosť, vibrovanie, režim bez vyrušení"</string>
@@ -4091,17 +4097,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>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 31a7552..193f011 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -275,7 +275,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Nastavitev datuma in ure"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Nastavi datum, uro, časovni pas in oblike"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Samodejna nastavitev ure"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Samodejno nastavi časovni pas"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Nastavi samodejno"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Uporabi privzete območne nastavitve"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-urna oblika"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Uporabi 24-urni zapis časa"</string>
@@ -749,7 +749,7 @@
<string name="unlock_footer_high_complexity_requested" msgid="4471274783909915352">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> priporoča močno kodo PIN ali geslo, sicer morda ne bo delovala, kot je pričakovano"</string>
<string name="unlock_footer_medium_complexity_requested" msgid="5515870066751600640">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> priporoča novo kodo PIN ali geslo, sicer morda ne bo delovala, kot je pričakovano"</string>
<string name="unlock_footer_low_complexity_requested" msgid="2517656037576567971">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> priporoča nov vzorec, kodo PIN ali geslo, sicer morda ne bo delovala, kot je pričakovano"</string>
- <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> priporoča novo zaklepanje zaslona"</string>
+ <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"Aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> priporoča novo zaklepanje zaslona."</string>
<string name="lock_failed_attempts_before_wipe" msgid="6874652886647631418">"Poskusite znova. Poskus <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g> od <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="7450322567217745999">"Vaši podatki bodo izbrisani"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="5816668400104558952">"Če pri naslednjem poskusu vnesete napačen vzorec, bodo podatki v napravi izbrisani."</string>
@@ -1934,7 +1934,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Lokacijske storitve"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Lokacijske storitve"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Lokacijske storitve za službo"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Uporabi lokacijo za nastavitev časovnega pasu"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Uporabi lokacijo"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Potrebno je dovoljenje za lokacijo naprave"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Če želite nastaviti časovni pas na podlagi lokacije, vklopite lokacijo in nato posodobite nastavitve časovnega pasu."</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Nastavitve lokacije"</string>
@@ -1943,6 +1943,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Uporaba lokacije za zaznavanje časovnega pasu je onemogočeno"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Uporaba lokacije za zaznavanje časovnega pasu ni podprta"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Spremembe uporabe lokacije za zaznavanje časovnega pasu niso dovoljene"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Lokacija se lahko uporabi za nastavitev časovnega pasu."</string>
<string name="location_network_based" msgid="5247042890080021887">"Lokacija Wi-Fi-ja in mob. omr."</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Aplikacijam omogočite hitrejše določanje lokacije z Googlovo storitvijo za določanje lokacije. Anonimni podatki o lokaciji bodo zbrani in poslani Googlu."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Določanje lokacije z Wi‑Fi-jem"</string>
@@ -1988,6 +1989,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -3001,6 +3004,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>
@@ -3090,6 +3094,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>
@@ -3777,8 +3784,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, napredno klicanje, klicanje 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"dodajanje jezika, dodajte jezik"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"velikost besedila, velika pisava, velike črke, veliko besedilo, slabovidnost, povečaj besedilo, povečevalnik pisave, povečanje pisave"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"stalno vklopljen zaslon"</string>
<string name="default_sound" msgid="6604374495015245195">"Privzeti zvok"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Glasnost zvonjenja in obvestil na <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Glasnost, vibriranje, ne moti"</string>
@@ -4091,18 +4097,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Nikoli"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Obvestila naprave in aplikacij"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Upravljajte, katere aplikacije in naprave lahko berejo obvestila."</string>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 725b06d..cbb1ce3 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Vendos datën dhe orën"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Vendos datën, orën, brezin orar dhe formatet"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Cakto automatikisht orën"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Cakto automatikisht brezin orar"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Cakto automatikisht"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Përdor parazgjedhjen e lokalitetit"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Formati \"24 orë\""</string>
<string name="date_time_24hour" msgid="286679379105653406">"Përdor formatin 24 orë"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Shërbimet e vendndodhjes"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Shërbimet e vendndodhjes"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Shërbimet e vendndodhjes për punë"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Përdor vendndodhjen për të caktuar brezin orar"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Përdor vendndodhjen"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Nevojitet vendndodhja e pajisjes"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Për të caktuar brezin orar duke përdorur vendndodhjen tënde, aktivizo vendndodhjen, pastaj përditëso cilësimet e brezit orar"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Cilësimet e vendndodhjes"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Zbulimi i brezit orar të vendndodhjes është çaktivizuar"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Zbulimi i brezit orar të vendndodhjes nuk mbështetet"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Nuk lejohen ndryshimet në zbulimin e brezit orar të vendndodhjes"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Vendndodhja mund të përdoret për të caktuar brezin orar"</string>
<string name="location_network_based" msgid="5247042890080021887">"Vend. rrjetit Wi‑Fi e celular"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Lejo aplikacionet të përdorin shërbimin e vendndodhjes së Google për të llogaritur më shpejt vendndodhjen tënde. Të dhënat e vendndodhjes do të jenë anonime dhe do të mblidhen e do t\'i dërgohen Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Vendndodhja u përcaktua nga Wi‑Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, telefonatat e përparuara, telefonatat 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"shto gjuhën, shto një gjuhë"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"madhësia e tekstit, shkronja të mëdha, fonti i madh, teksti i madh, shikim i dobët, bëje tekstin më të madh, zmadhuesi i fontit, zmadhimi i fontit"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ekrani gjithmonë aktiv, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Tingulli i parazgjedhur"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volumi i ziles dhe njoftimeve në <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volum, dridhje, \"Mos shqetëso\""</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Asnjëherë"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Njoftimet e pajisjes dhe aplikacioneve"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Kontrollo se cilat aplikacione dhe pajisje mund të lexojnë njoftime"</string>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index b4f258b..eb76507 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -273,7 +273,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Подешавање датума и времена"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Подешавање датума, времена, временске зоне и формата"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Подеси време аутоматски"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Подеси временску зону аутоматски"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Подеси аутоматски"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Користи подразумевану вредност за локалитет"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-часовни формат"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Користи 24-часовни формат"</string>
@@ -1910,7 +1910,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Услуге локације"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Услуге локације"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Услуге локације за посао"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Користи локацију за подешавање временске зоне"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Користи локацију"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Потребна је локација уређаја"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Да бисте подесили временску зону помоћу локације, укључите локацију, па ажурирајте подешавања временске зоне"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Подешавања локације"</string>
@@ -1919,6 +1919,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Откривање временске зоне локације је онемогућено"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Откривање временске зоне локације није подржано"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Промене откривања временске зоне локације нису дозвољене"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Локација може да се користи за подешавање временске зоне"</string>
<string name="location_network_based" msgid="5247042890080021887">"Локац. на основу WiFi и моб. мреже"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Нека апл. користе Google-ову услугу лоцирања за брже одређивање локације. Анонимни подаци о локацији прикупљаће се и слати Google-у."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Локација се одређује помоћу WiFi-а"</string>
@@ -1964,6 +1965,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2961,6 +2964,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>
@@ -3050,6 +3054,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>
@@ -3732,8 +3739,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, напредно позивање, 5g позивање"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"додај језик, додајте језик"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"величина текста, велика слова, велик фонт, велик текст, слабовидост, повећање текста, увећавање фонта, повећање фонта"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"увек укључен екран, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Подразумевани звук"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Јачина звука за звоно и обавештења је на <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Јачина звука, вибрација, Не узнемиравај"</string>
@@ -4045,16 +4051,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Никад"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Обавештења на уређајима и у апликацијама"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Контролишите које апликације и уређаји могу да читају обавештења"</string>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index d2aac84..6bbdb62 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Ange datum och tid"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Ange datum, tidszon och format"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Ange tiden automatiskt"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Ange tidszon automatiskt"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Ange automatiskt"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Använd lokal standard"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-timmarsformat"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Använd 24-timmarsformat"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Platstjänster"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Platstjänster"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Platstjänster för jobbet"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Ställ in tidszon utifrån plats"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Använd plats"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Enhetsplats behövs"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Om du vill ställa in tidszon utifrån din plats aktiverar du plats och uppdaterar inställningarna för tidszon"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Platsinställningar"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Identifiering av tidzon utifrån plats har inaktiverats"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Identifiering av tidzon utifrån plats stöds inte"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Det är inte tillåtet med ändringar i samband med identifiering av tidszon utifrån plats"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Platsen kan användas för att ställa in tidszon"</string>
<string name="location_network_based" msgid="5247042890080021887">"Plats från wifi/mobilnätverk"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Ge appar möjlighet att snabbare se var du är med Googles platstjänst. Anonym platsinformation samlas in och skickas till Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Platsen fastställs via wifi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2554,7 +2557,7 @@
<string name="reduce_bright_colors_preference_summary" product="default" msgid="7878756844769221647">"Gör skärmen mer dimmad än telefonens lägsta ljusstyrka"</string>
<string name="reduce_bright_colors_preference_summary" product="tablet" msgid="8959794720356934888">"Gör skärmen mer dimmad än surfplattans lägsta ljusstyrka"</string>
<string name="reduce_bright_colors_preference_intro_text" msgid="3502290826747650566">"Dämpa skärmens ljusstyrka ytterligare så att det blir behagligare för ögonen att läsa"</string>
- <string name="reduce_bright_colors_preference_subtitle" product="default" msgid="8573408446901659333">"Extradimmat kan vara användbart när <ol> <li> telefonens lägsta ljusstyrka fortfarande är för ljus</li> <li> du använder telefonen i mörker, t.ex. på natten eller i ett mörkt rum innan du ska sova.</li> </ol>"</string>
+ <string name="reduce_bright_colors_preference_subtitle" product="default" msgid="8573408446901659333">"Extradimmat kan vara användbart när <ol> <li> telefonens lägsta ljusstyrka fortfarande är för ljus</li> <li> du använder telefonen i mörker, t.ex. på natten eller i ett mörkt rum innan du ska sova.</li> </ol>"</string>
<string name="reduce_bright_colors_preference_subtitle" product="tablet" msgid="5158211121482010799">"Extradimmat kan vara användbart när <ol> <li> surfplattans lägsta ljusstyrka fortfarande är för ljus</li> <li> du använder surfplattan i mörker, t.ex. på natten eller i ett mörkt rum innan du ska sova.</li> </ol>"</string>
<string name="reduce_bright_colors_intensity_preference_title" msgid="7455443033955118267">"Intensitet"</string>
<string name="reduce_bright_colors_intensity_start_label" msgid="930387498396426039">"Svagare"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, avancerade samtal, 5g-samtal"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"lägg till språk, lägg till ett språk"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"textstorlek, stora tecken, stort teckensnitt, stor text, nedsatt syn, göra texten större, teckenförstoring, förstora teckensnitt"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"alltid på, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Standardsignal"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Volymen för samtal och aviseringar är inställd på <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volym, vibrera, stör ej"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Aldrig"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Enhets- och appaviseringar"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Styr vilka appar och enheter som kan läsa aviseringar"</string>
@@ -5080,7 +5080,7 @@
<string name="financed_privacy_developer_options" msgid="7602001474669831672">"Använda utvecklaralternativ"</string>
<string name="financed_privacy_credit_provider_capabilities_category" msgid="8737902277892987998">"Långivaren kan göra följande:"</string>
<string name="financed_privacy_IMEI" msgid="1852413860963824799">"Få åtkomst till ditt IMEI-nummer"</string>
- <string name="financed_privacy_factory_reset" msgid="5505016667590160732">"Återställ standardinställningarna på enheten om något blir fel"</string>
+ <string name="financed_privacy_factory_reset" msgid="5505016667590160732">"Återställa standardinställningarna på enheten om något blir fel"</string>
<string name="financed_privacy_locked_mode_category" msgid="3708288398912647751">"Om enheten är låst kan du använda den endast för att göra följande:"</string>
<string name="financed_privacy_emergency_calls" msgid="1108183987142736497">"Ringa nödsamtal"</string>
<string name="financed_privacy_system_info" msgid="4158031444108708927">"Visa systeminformation som datum, tid, nätverksstatus och batteri"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index a953240..ebe7e97 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Weka tarehe na saa"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Weka tarehe, saa, saa za eneo na fomati"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Weka saa kiotomatiki"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Weka saa za eneo kiotomatiki"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Weka saa za eneo kiotomatiki"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Tumia chaguomsingi la eneo"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Mfumo wa saa 24"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Tumia mpangilio wa saa 24"</string>
@@ -486,7 +486,7 @@
<string name="biometric_settings_use_biometric_for_apps" msgid="6201168728906364189">"Kuthibitisha ni wewe katika programu"</string>
<string name="biometric_settings_use_face_preference_summary" msgid="1821648836899408477">"Kutumia uso"</string>
<string name="biometric_settings_use_fingerprint_preference_summary" msgid="6077762097826050165">"Ukitumia alama ya kidole"</string>
- <string name="biometric_settings_use_face_or_fingerprint_preference_summary" msgid="3029102492674234728">"Kutumia uso au alama ya kidole"</string>
+ <string name="biometric_settings_use_face_or_fingerprint_preference_summary" msgid="3029102492674234728">"Ukitumia uso au alama ya kidole"</string>
<string name="biometric_settings_hand_back_to_guardian" product="tablet" msgid="1498542470242509989">"Rudisha kompyuta kibao kwa mzazi wako"</string>
<string name="biometric_settings_hand_back_to_guardian" product="device" msgid="3837001353226852511">"Rudisha kifaa kwa mzazi wako"</string>
<string name="biometric_settings_hand_back_to_guardian" product="default" msgid="3747619291972376153">"Mrejeshee mzazi wako simu"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Huduma za mahali"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Huduma za mahali"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Huduma za Mahali za kazini"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Tumia mahali ili uweke saa za eneo"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Tumia data ya mahali"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Maelezo ya mahali kilipo kifaa yanahitajika"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Ili uweke saa za eneo ukitumia eneo uliko, washa mipangilio ya mahali, kisha usasishe mipangilio ya saa za eneo"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Mipangilio ya mahali"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Utambuzi wa saa za eneo umezimwa"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Utambuzi wa saa za eneo hautumiki"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Huruhusiwi kufanya mabadiliko kwenye utambuzi wa saa za eneo"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Huenda data ya mahali ikatumika kuweka saa za eneo"</string>
<string name="location_network_based" msgid="5247042890080021887">"Eneo la mtandao wa Wi-Fi na wa simu"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Ruhusu programu zitumie huduma ya Google ya mahali ili kukadiria ulipo kwa haraka. Data ya mahali isiyokutambulisha itakusanywa na kutumwa kwa Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Eneo limethibitishwa na Wi-Fi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, upigaji simu ulioimarishwa, upigaji simu kupitia mtandao wa 5G"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"ongeza lugha, ongeza lugha"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ukubwa wa maandishi, chapa kubwa, fonti kubwa, maandishi makubwa, uwezo mdogo wa kuona, ongeza ukubwa wa maandishi, kikuza fonti, kuongeza ukubwa wa fonti"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"skrini msingi, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Sauti chaguomsingi"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Kiwango cha sauti ya arifa na mlio wa simu ni <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Kiwango cha sauti, mtetemo, Usinisumbue"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Kamwe"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Arifa za programu na vifaa"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Dhibiti programu na vifaa vinavyoweza kusoma arifa"</string>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 8516b69..d36be33 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"தேதி மற்றும் நேரத்தை அமை"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"தேதி, நேரம், நேரமண்டலம் & வடிவமைப்புகளை அமை"</string>
<string name="date_time_auto" msgid="4239202185055225869">"தானாக நேரத்தை அமை"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"தானாக நேர மண்டலத்தை அமை"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"தானாக அமைத்தல்"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"இயல்பாகத் தேர்ந்தெடுத்துள்ள மொழியைப் பயன்படுத்தவும்"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 மணிநேர வடிவம்"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-மணிநேர வடிவமைப்பில்"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"இருப்பிடச் சேவைகள்"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"இருப்பிடச் சேவைகள்"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"பணிக் கணக்கிற்கான இருப்பிடச் சேவைகள்"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"நேர மண்டலத்தை அமைக்க இருப்பிடத்தைப் பயன்படுத்துக"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"இருப்பிடத்தைப் பயன்படுத்துதல்"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"சாதனத்தின் இருப்பிடம் தேவை"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"இருப்பிடத்தைப் பயன்படுத்தி நேர மண்டலத்தை அமைக்க, இருப்பிடத்தை ஆன் செய்தபிறகு நேர மண்டல அமைப்புகளை மாற்றவும்"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"இருப்பிட அமைப்புகள்"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"இருப்பிட நேர மண்டலத்தைக் கண்டறிதல் முடக்கப்பட்டுள்ளது"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"இருப்பிட நேர மண்டலத்தைக் கண்டறிதல் ஆதரிக்கப்படவில்லை"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"இருப்பிட நேர மண்டலத்தைக் கண்டறிதல் தொடர்பான மாற்றங்கள் அனுமதிக்கப்படவில்லை"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"நேர மண்டலத்தை அமைக்க இருப்பிடம் பயன்படுத்தப்படலாம்"</string>
<string name="location_network_based" msgid="5247042890080021887">"வைஃபை & மொபைல் நெட்வொர்க்கின் இருப்பிடம்"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"உங்கள் இருப்பிடத்தை விரைவாகக் கணிக்கும் வகையில் ஆப்ஸ், Google இன் இருப்பிடச் சேவையைப் பயன்படுத்தலாம். அநாமதேய இருப்பிடத் தரவு சேகரிக்கப்பட்டு Google க்கு அனுப்பப்படும்."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"வைஃபை மூலம் இருப்பிடம் கண்டறியப்பட்டது"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, மேம்பட்ட அழைப்பு, 5g அழைப்பு"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"மொழியைச் சேர்க்கவும், ஒரு மொழியைச் சேர்க்கவும்"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"உரை அளவு, பெரிய அச்சு, பெரிய எழுத்து, பெரிய உரை, குறைந்த பார்வைத்திறன், உரையைப் பெரிதாக்குதல், எழுத்துப் பெரிதாக்கி, எழுத்தைப் பெரிதாக்குவது"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"திரையை எப்போதும் இயக்கத்தில் வை, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"இயல்பு ஒலி"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"ஒலி & அறிவிப்பு ஒலியளவு: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ஒலியளவு, அதிர்வு, தொந்தரவு செய்யாதே"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ஒருபோதும் அனுப்பியதில்லை"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"சாதனம் & ஆப்ஸ் அறிவிப்புகள்"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"எந்தெந்த ஆப்ஸும் சாதனங்களும் அறிவிப்புகளைப் படிக்கலாம் என்பதைக் கட்டுப்படுத்தலாம்"</string>
diff --git a/res/values-te/arrays.xml b/res/values-te/arrays.xml
index f860079..45b26a9 100644
--- a/res/values-te/arrays.xml
+++ b/res/values-te/arrays.xml
@@ -216,7 +216,7 @@
<string-array name="app_install_location_entries">
<item msgid="3771157789865587832">"అంతర్గత పరికర నిల్వ"</item>
<item msgid="5501345333507193420">"తీసివేయదగిన SD కార్డు"</item>
- <item msgid="2362840341195111674">"సిస్టమ్ నిర్ణయించుకునేలా అనుమతించు"</item>
+ <item msgid="2362840341195111674">"సిస్టమ్ నిర్ణయించుకునేలా అనుమతించండి"</item>
</string-array>
<string-array name="app_ops_categories">
<item msgid="528483497841471005">"లొకేషన్"</item>
@@ -266,7 +266,7 @@
<item msgid="5272927168355895681">"అలారం వాల్యూమ్"</item>
<item msgid="4422070755065530548">"నోటిఫికేషన్ వాల్యూమ్"</item>
<item msgid="3250654589277825306">"బ్లూటూత్ వాల్యూమ్"</item>
- <item msgid="4212187233638382465">"సక్రియంగా ఉంచండి"</item>
+ <item msgid="4212187233638382465">"యాక్టివ్గా ఉంచండి"</item>
<item msgid="5099026183238335900">"లొకేషన్ను పర్యవేక్షించండి"</item>
<item msgid="2297727967385895059">"అధిక శక్తివంతమైన లొకేషన్ను పర్యవేక్షించండి"</item>
<item msgid="8700593962030471569">"వినియోగ గణాంకాలను పొందండి"</item>
@@ -298,7 +298,7 @@
<item msgid="5728662879095632194">"లొకేషన్"</item>
<item msgid="4104617224667554750">"వైబ్రేట్"</item>
<item msgid="1623646715189708947">"కాంటాక్ట్లను చదవండి"</item>
- <item msgid="5060760609109972207">"కాంటాక్ట్లను సవరించండి"</item>
+ <item msgid="5060760609109972207">"కాంటాక్ట్లను ఎడిట్ చేయండి"</item>
<item msgid="7451260062940797278">"కాల్ లాగ్ను చదవండి"</item>
<item msgid="2348589304974534308">"కాల్ లాగ్ను ఎడిట్ చేయండి"</item>
<item msgid="4089146706115315300">"క్యాలెండర్ను చదవండి"</item>
@@ -333,7 +333,7 @@
<item msgid="4266577290496513640">"అలారం వాల్యూమ్"</item>
<item msgid="8608084169623998854">"నోటిఫికేషన్ వాల్యూమ్"</item>
<item msgid="7948784184567841794">"బ్లూటూత్ వాల్యూమ్"</item>
- <item msgid="1148968792599973150">"సక్రియంగా ఉంచండి"</item>
+ <item msgid="1148968792599973150">"యాక్టివ్గా ఉంచండి"</item>
<item msgid="8482874682804856549">"లొకేషన్"</item>
<item msgid="5186169827582545242">"లొకేషన్"</item>
<item msgid="6122293931012635638">"వినియోగ గణాంకాలను పొందండి"</item>
@@ -447,7 +447,7 @@
<string-array name="security_settings_premium_sms_values">
<item msgid="3985605994234635072">"అడగండి"</item>
<item msgid="2358187544264718285">"ఎప్పటికీ అనుమతించవద్దు"</item>
- <item msgid="7043782324123900484">"ఎల్లప్పుడూ అనుమతించు"</item>
+ <item msgid="7043782324123900484">"ఎల్లప్పుడూ అనుమతించండి"</item>
</string-array>
<string-array name="ram_states">
<item msgid="335564863849202240">"సాధారణం"</item>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 8d68731..c9250f2 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -169,7 +169,7 @@
<string name="intent_sender_resource_label" msgid="5087385727740280207">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
<string name="intent_sender_account_label" msgid="36614006839665458">"ఖాతా:"</string>
<string name="proxy_settings_title" msgid="4201866858226087066">"ప్రాక్సీ"</string>
- <string name="proxy_clear_text" msgid="6529658759984031149">"క్లియర్ చేయి"</string>
+ <string name="proxy_clear_text" msgid="6529658759984031149">"క్లియర్ చేయండి"</string>
<string name="proxy_port_label" msgid="4647357286461712574">"ప్రాక్సీ పోర్ట్"</string>
<string name="proxy_exclusionlist_label" msgid="2598613986784917542">"దీని కోసం ప్రాక్సీని విస్మరించు"</string>
<string name="proxy_defaultView_text" msgid="6795150505379688451">"ఆటోమేటిక్ సెట్టింగ్లను రీస్టోర్ చేయండి"</string>
@@ -208,7 +208,7 @@
<string name="skip_label" msgid="6380034601349015895">"స్కిప్ చేయండి"</string>
<string name="next_label" msgid="1248293387735652187">"తర్వాత"</string>
<string name="language_picker_title" msgid="4271307478263345133">"భాషలు"</string>
- <string name="locale_remove_menu" msgid="3521546263421387474">"తీసివేయి"</string>
+ <string name="locale_remove_menu" msgid="3521546263421387474">"తీసివేయండి"</string>
<string name="add_a_language" msgid="2126220398077503271">"భాషను జోడించు"</string>
<string name="app_locale_preference_title" msgid="5513627099300360232">"భాష"</string>
<string name="locale_picker_category_title" msgid="6212064706962721255">"ప్రాధాన్యతనిచ్చే భాష"</string>
@@ -234,7 +234,7 @@
<string name="action_drag_label_move_down" msgid="9069518740553953426">"క్రిందికి తరలించు"</string>
<string name="action_drag_label_move_top" msgid="2430471023612171619">"ఎగువకు తరలించు"</string>
<string name="action_drag_label_move_bottom" msgid="6266165197792827003">"దిగువకు తరలించు"</string>
- <string name="action_drag_label_remove" msgid="1034900377796780568">"భాషను తీసివేయి"</string>
+ <string name="action_drag_label_remove" msgid="1034900377796780568">"భాషను తీసివేయండి"</string>
<string name="activity_picker_label" msgid="351250401590691126">"కార్యాచరణను ఎంచుకోండి"</string>
<string name="display_label" msgid="3056320781191343221">"స్క్రీన్"</string>
<string name="sd_card_settings_label" product="nosdcard" msgid="1850505156136467106">"USB నిల్వ"</string>
@@ -254,7 +254,7 @@
<string name="airplane_mode" msgid="3196085857882526817">"ఎయిర్ప్లేన్ మోడ్"</string>
<string name="wireless_networks_settings_title" msgid="8557542379234105369">"వైర్లెస్ & నెట్వర్క్లు"</string>
<string name="radio_controls_summary" msgid="9028430178697624501">"Wi‑Fi, బ్లూటూత్, ఎయిర్ప్లేన్ మోడ్, మొబైల్ నెట్వర్క్లు & VPNలను నిర్వహించు"</string>
- <string name="cellular_data_summary" msgid="6551434804367912367">"మొబైల్ నెట్వర్క్ ద్వారా డేటాని ఉపయోగించు"</string>
+ <string name="cellular_data_summary" msgid="6551434804367912367">"మొబైల్ నెట్వర్క్ ద్వారా డేటాను ఉపయోగించు"</string>
<string name="allow_data_usage_title" msgid="2645963379925196671">"రోమింగ్లో డేటా వినియో. అనుమతి"</string>
<string name="roaming" msgid="3055365654530847985">"రోమింగ్"</string>
<string name="roaming_enable" msgid="7845716016861535340">"రోమింగ్లో ఉన్నప్పుడు డేటా సర్వీసులకు కనెక్ట్ చేయండి"</string>
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"తేదీ మరియు సమయాన్ని సెట్ చేయండి"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"తేదీ, సమయం, టైమ్ జోన్, & ఫార్మాట్లను సెట్ చేయండి"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ఆటోమేటిక్గా టైమ్ను సెట్ చేయండి"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ఆటోమేటిక్గా టైమ్ జోన్ను సెట్ చేయండి"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ఆటోమేటిక్గా సెట్ చేయి"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ఆ భాషలో వాడే ఫార్మాట్ను ఉపయోగించు"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑గంటల ఫార్మాట్"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-గంటల ఫార్మాట్ను ఉపయోగించు"</string>
@@ -411,7 +411,7 @@
<string name="security_settings_face_settings_require_attention_details" msgid="2546230511769544074">"ఫోన్ను అన్లాక్ చేయడానికి, మీ కళ్లు తప్పనిసరిగా తెరిచి ఉంచాలి"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="6603039421004198334">"ఎల్లప్పుడూ నిర్ధారణ కోసం అడగాలి"</string>
<string name="security_settings_face_settings_require_confirmation_details" msgid="3498729789625461914">"యాప్లలో ఫేస్ అన్లాక్ను ఉపయోగించేటప్పుడు, నిర్ధారణ దశ అవసరమవుతుంది"</string>
- <string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"ఫేస్ మోడల్ను తొలగించు"</string>
+ <string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"ఫేస్ మోడల్ను తొలగించండి"</string>
<string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"ఫేస్ అన్లాక్ను సెటప్ చేయండి"</string>
<string name="security_settings_face_settings_footer" msgid="625696606490947189">"మీ ఫోన్ను అన్లాక్ చేయడానికి గానీ లేదా యాప్లకు సైన్ ఇన్ చేసినప్పుడు లేదా కొనుగోలును ఆమోదించడం లాంటి ప్రామాణీకరణ కోసం గానీ మీ ముఖాన్ని ఉపయోగించండి.\n\nఅలాగే, దీనిని గుర్తుంచుకోండి:\nమీరు ఒకేసారి ఒక ముఖాన్ని మాత్రమే సెట్ చేయవచ్చు. మరొక ముఖాన్ని జోడించడానికి, ప్రస్తుతం ఉన్న దానిని తొలగించండి.\n\nమీరు అనుకోకుండా ఫోన్ వైపు చూసినా కూడా అన్లాక్ అయ్యే అవకాశం ఉంటుంది.\n\nమీ ముఖాన్ని స్క్రీన్ వైపు చూపితే, ఇతరులు కూడా మీ ఫోన్ను అన్లాక్ చేయగలుగుతారు.\n\nమీలాంటి రూపం ఉన్న వ్యక్తులు, ఉదాహరణకు, మీ కవల తోబుట్టువు మీ ఫోన్ను అన్లాక్ చేయగలిగే అవకాశం ఉంది."</string>
<string name="security_settings_face_settings_footer_attention_not_supported" msgid="2071065435536235622">"మీ ఫోన్ను అన్లాక్ చేయడానికి గానీ లేదా యాప్లకు సైన్ ఇన్ చేసినప్పుడు లేదా కొనుగోలును ఆమోదించడం లాంటి ప్రామాణీకరణ కోసం గానీ మీ ముఖాన్ని ఉపయోగించండి.\n\nఅలాగే, దీనిని గుర్తుంచుకోండి:\nమీరు ఒకేసారి ఒక ముఖాన్ని మాత్రమే సెట్ చేయవచ్చు. మరొక ముఖాన్ని జోడించడానికి, ప్రస్తుతం ఉన్న దానిని తొలగించండి.\n\nమీరు అనుకోకుండా ఫోన్ వైపు చూసినా కూడా అన్లాక్ అయ్యే అవకాశం ఉంటుంది.\n\nమీ కళ్లు మూసి ఉన్నా కూడా, మీ ముఖాన్ని స్క్రీన్ వైపు చూపితే, ఇతరులు కూడా మీ ఫోన్ను అన్లాక్ చేయగలుగుతారు.\n\nమీలాంటి రూపం ఉన్న వ్యక్తులు, ఉదాహరణకు, మీ కవల తోబుట్టువు మీ ఫోన్ను అన్లాక్ చేయగలిగే అవకాశం ఉంది."</string>
@@ -614,7 +614,7 @@
<string name="fingerprint_v2_delete_message" msgid="4136720729608391131">"ఇది మీ పరికరంలో స్టోర్ చేయబడిన \'<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\'తో అనుబంధించబడిన వేలిముద్ర ఇమేజ్లను, మోడల్ను తొలగిస్తుంది"</string>
<string name="fingerprint_last_delete_message" msgid="7860374760549404410">"మీ ఫోన్ను అన్లాక్ చేయడానికి లేదా యాప్లలో ఉండేది మీరేనని వెరిఫై చేయడానికి మీరు మీ వేలిముద్రను ఉపయోగించలేరు."</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="4104208067277655068">"మీ వర్క్ ప్రొఫైల్ను అన్లాక్ చేయడానికి, కొనుగోళ్లను ప్రమాణీకరించడానికి లేదా వర్క్ యాప్లకు సైన్ ఇన్ చేయడానికి మీరు మీ వేలిముద్రను ఉపయోగించలేరు."</string>
- <string name="fingerprint_last_delete_confirm" msgid="3294910995598819259">"అవును, తీసివేయి"</string>
+ <string name="fingerprint_last_delete_confirm" msgid="3294910995598819259">"అవును, తీసివేయండి"</string>
<string name="encryption_settings_title" msgid="2848716008695618360">"ఎన్క్రిప్షన్"</string>
<string name="encrypt_title" product="tablet" msgid="6518642273119816435">"టాబ్లెట్ను ఎన్క్రిప్ట్ చేయండి"</string>
<string name="encrypt_title" product="default" msgid="7337365190988321100">"ఫోన్ను ఎన్క్రిప్ట్ చేయండి"</string>
@@ -861,8 +861,8 @@
<string name="bluetooth_device_context_connect" msgid="4913860372216815855">"కనెక్ట్ చేయి"</string>
<string name="bluetooth_device_context_disconnect" msgid="4464167389972513232">"డిస్కనెక్ట్ చేయండి"</string>
<string name="bluetooth_device_context_pair_connect" msgid="2406032703622371826">"పెయిర్ చేసి & కనెక్ట్ చేయి"</string>
- <string name="bluetooth_device_context_unpair" msgid="7525735305244087162">"జతను తీసివేయి"</string>
- <string name="bluetooth_device_context_disconnect_unpair" msgid="2001359431289794561">"డిస్కనెక్ట్ చేసి & జతను తీసివేయి"</string>
+ <string name="bluetooth_device_context_unpair" msgid="7525735305244087162">"జతను తీసివేయండి"</string>
+ <string name="bluetooth_device_context_disconnect_unpair" msgid="2001359431289794561">"డిస్కనెక్ట్ చేసి & జతను తీసివేయండి"</string>
<string name="bluetooth_device_context_connect_advanced" msgid="934657460643490773">"ఆప్షన్లు…"</string>
<string name="bluetooth_menu_advanced" msgid="7633682234855216066">"అధునాతన సెట్టింగ్లు"</string>
<string name="bluetooth_advanced_titlebar" msgid="5369701494951467257">"అధునాతన బ్లూటూత్"</string>
@@ -874,7 +874,7 @@
<string name="bluetooth_device_mac_address" msgid="4873325074786732703">"పరికర బ్లూటూత్ అడ్రస్: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_multuple_devices_mac_address" msgid="4974301550897923376">"పరికర బ్లూటూత్ అడ్రస్:\n<xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_title" msgid="6943633443716052995">"పరికరాన్ని మర్చిపోవాలా?"</string>
- <string name="remove_association_button" msgid="5004208145998061135">"అనుబంధాన్ని తీసివేయి"</string>
+ <string name="remove_association_button" msgid="5004208145998061135">"అనుబంధాన్ని తీసివేయండి"</string>
<string name="bluetooth_companion_app_remove_association_dialog_title" msgid="1344518601377991897">"యాప్ను డిస్కనెక్ట్ చేయాలా?"</string>
<string name="bluetooth_unpair_dialog_body" product="default" msgid="4730377171981539265">"మీ ఫోన్ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో పెయిర్ అవ్వలేదు"</string>
<string name="bluetooth_unpair_dialog_body" product="tablet" msgid="3428463407231980054">"మీ టాబ్లెట్ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో జత చేయబడి లేదు"</string>
@@ -894,7 +894,7 @@
<string name="bluetooth_device_advanced_online_mode_summary" msgid="271856759516576615">"బ్లూటూత్ పరికరానికి కనెక్ట్ చేయి"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="7892879890208207223">"దీని కోసం ఉపయోగించు"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="4798081898389041132">"పేరు మార్చు"</string>
- <string name="bluetooth_device_advanced_enable_opp_title" msgid="7604726126703453984">"ఇన్కమింగ్ ఫైల్ బదిలీలను అనుమతించు"</string>
+ <string name="bluetooth_device_advanced_enable_opp_title" msgid="7604726126703453984">"ఇన్కమింగ్ ఫైల్ బదిలీలను అనుమతించండి"</string>
<string name="bluetooth_pan_user_profile_summary_connected" msgid="7851033200857999275">"ఇంటర్నెట్ యాక్సెస్ కోసం పరికరానికి కనెక్ట్ చేయబడింది"</string>
<string name="bluetooth_pan_nap_profile_summary_connected" msgid="5563892893331988809">"స్థానిక ఇంటర్నెట్ కనెక్షన్ను పరికరంతో షేర్ చేయడం"</string>
<string name="bluetooth_dock_settings" msgid="1709536202189755022">"డాక్ సెట్టింగ్లు"</string>
@@ -932,8 +932,8 @@
<string name="link_speed" msgid="931786745741016446">"<xliff:g id="LINK_SPEED">%1$d</xliff:g> Mbps"</string>
<string name="wifi_ask_enable" msgid="6860056048266810769">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fiని ఆన్ చేయాలనుకుంటోంది"</string>
<string name="wifi_ask_disable" msgid="1663208096020309639">"<xliff:g id="REQUESTER">%s</xliff:g> Wi-Fiని ఆఫ్ చేయాలనుకుంటోంది"</string>
- <string name="art_verifier_for_debuggable_title" msgid="1926445785190030479">"డీబగ్ చేయగల యాప్ల బైట్కోడ్ను తనిఖీ చేయండి"</string>
- <string name="art_verifier_for_debuggable_summary" msgid="4802875841862652879">"డీబగ్ చేయదగిన యాప్ల బైట్కోడ్ తనిఖీ చేయడం కోసం ARTని అనుమతించండి"</string>
+ <string name="art_verifier_for_debuggable_title" msgid="1926445785190030479">"డీబగ్ చేయగల యాప్ల బైట్కోడ్ను చెక్ చేయండి"</string>
+ <string name="art_verifier_for_debuggable_summary" msgid="4802875841862652879">"డీబగ్ చేయదగిన యాప్ల బైట్కోడ్ చెక్ చేయడం కోసం ARTని అనుమతించండి"</string>
<string name="show_refresh_rate" msgid="5742688821872354973">"రిఫ్రెష్ రేటును చూపడం"</string>
<string name="show_refresh_rate_summary" msgid="3558118122374609663">"ప్రస్తుతం ప్రదర్శనలో వున్న రిఫ్రెష్ రేటును చూపడం"</string>
<string name="nfc_quick_toggle_title" msgid="3607620705230351666">"NFC"</string>
@@ -1213,7 +1213,7 @@
<string name="wifi_tether_stopping" msgid="4416492968019409188">"హాట్స్పాట్ను ఆపివేస్తోంది…"</string>
<string name="wifi_tether_carrier_unsupport_dialog_title" msgid="3089432578433978073">"టెథరింగ్ అందుబాటులో లేదు"</string>
<string name="wifi_tether_carrier_unsupport_dialog_content" msgid="5920421547607921112">"వివరాల కోసం మీ క్యారియర్ను కాంటాక్ట్ చేయండి"</string>
- <string name="wifi_tether_enabled_subtext" msgid="5085002421099821056">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> సక్రియంగా ఉంది"</string>
+ <string name="wifi_tether_enabled_subtext" msgid="5085002421099821056">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> యాక్టివ్గా ఉంది"</string>
<string name="wifi_tether_failed_subtext" msgid="437190628041885500">"పోర్టబుల్ Wi‑Fi హాట్స్పాట్ ఎర్రర్"</string>
<string name="wifi_tether_configure_ap_text" msgid="7072559431286459122">"Wi‑Fi హాట్స్పాట్ను సెటప్ చేయండి"</string>
<string name="wifi_hotspot_configure_ap_text" msgid="9027072969831022321">"Wi‑Fi హాట్స్పాట్ సెటప్"</string>
@@ -1258,7 +1258,7 @@
<string name="private_dns_help_message" msgid="851221502063782306">"ప్రైవేట్ DNS ఫీచర్ల గురించి "<annotation id="url">"మరింత తెలుసుకోండి"</annotation></string>
<string name="private_dns_mode_on" msgid="8878679071975375696">"ఆన్"</string>
<string name="wifi_calling_pref_managed_by_carrier" msgid="129524064888622179">"క్యారియర్ ద్వారా నిర్వహించబడుతున్న సెట్టింగ్"</string>
- <string name="wifi_calling_settings_activation_instructions" msgid="3936067355828542266">"Wi-Fi కాలింగ్ను సక్రియం చేయండి"</string>
+ <string name="wifi_calling_settings_activation_instructions" msgid="3936067355828542266">"Wi-Fi కాలింగ్ను యాక్టివేట్ చేయండి"</string>
<string name="wifi_calling_turn_on" msgid="7687886259199428823">"Wi-Fi కాలింగ్ను ఆన్ చేయండి"</string>
<string name="wifi_calling_not_supported" msgid="3303917737849393175">"%1$sలో Wi‑Fi కాలింగ్కు మద్దతు లేదు"</string>
<string name="wifi_disconnected_from" msgid="5249576734324159708">"<xliff:g id="SSID">%1$s</xliff:g> నుండి డిస్కనెక్ట్ చేయబడింది"</string>
@@ -1443,7 +1443,7 @@
<string name="wallpaper_suggestion_title" msgid="3812842717939877330">"వాల్పేపర్ను మార్చండి"</string>
<string name="wallpaper_suggestion_summary" msgid="9077061486716754784">"మీ స్క్రీన్ను వ్యక్తిగతీకరించండి"</string>
<string name="wallpaper_settings_fragment_title" msgid="8445963841717633149">"వీటిలో వాల్పేపర్ను ఎంచుకోండి"</string>
- <string name="style_suggestion_title" msgid="1213747484782364775">"మీ ఫోన్ను అనుకూలీకరించండి"</string>
+ <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>
@@ -1592,7 +1592,7 @@
<string name="sd_format" product="default" msgid="9085302892248732329">"SD కార్డుని ఎరేజ్ చేయండి"</string>
<string name="sd_format_summary" product="nosdcard" msgid="6179784504937189658">"అంతర్గత USB స్టోరేజ్లో ఉన్న మ్యూజిక్, ఫోటోల వంటి మొత్తం డేటాను ఎరేజ్ చేస్తుంది"</string>
<string name="sd_format_summary" product="default" msgid="60583152211068164">"SD కార్డులో ఉన్న మ్యూజిక్, ఫోటోల వంటి మొత్తం డేటాను ఎరేజ్ చేస్తుంది"</string>
- <string name="mtp_ptp_mode_summary" msgid="7969656567437639239">"MTP లేదా PTP ఫంక్షన్ సక్రియంగా ఉంది"</string>
+ <string name="mtp_ptp_mode_summary" msgid="7969656567437639239">"MTP లేదా PTP ఫంక్షన్ యాక్టివ్గా ఉంది"</string>
<string name="dlg_confirm_unmount_title" product="nosdcard" msgid="7694112411895701320">"USB నిల్వను అన్మౌంట్ చేయాలా?"</string>
<string name="dlg_confirm_unmount_title" product="default" msgid="8251329019960361646">"SD కార్డును అన్మౌంట్ చేయాలా?"</string>
<string name="dlg_confirm_unmount_text" product="nosdcard" msgid="1212025106709645023">"మీరు USB నిల్వను అన్మౌంట్ చేస్తే, మీరు ఉపయోగిస్తున్న కొన్ని యాప్లు USB నిల్వను రీమౌంట్ చేసే వరకు పని చేయకుండా ఆగిపోతాయి మరియు అందుబాటులో ఉండకపోవచ్చు."</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"లొకేషన్ సర్వీస్లు"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"లొకేషన్ సర్వీస్లు"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"ఆఫీస్ కోసం లొకేషన్ సర్వీస్లు"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"టైమ్ జోన్ను సెట్ చేయడానికి లొకేషన్ను ఉపయోగించండి"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"లొకేషన్ను ఉపయోగించండి"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"పరికర లొకేషన్ అవసరం"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"మీ లొకేషన్ను ఉపయోగించి టైమ్ జోన్ను సెట్ చేయడానికి, లొకేషన్ను ఆన్ చేసి, ఆపై టైమ్ జోన్ సెట్టింగ్లను అప్డేట్ చేయండి"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"లొకేషన్ సెట్టింగ్లు"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"లొకేషన్ టైమ్ జోన్ గుర్తింపు డిజేబుల్ చేయబడింది"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"లొకేషన్ టైమ్ జోన్ గుర్తింపుకు మద్దతు లేదు"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"లొకేషన్ టైమ్ జోన్ గుర్తింపు మార్పులు అనుమతించబడవు"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"టైమ్ జోన్ను సెట్ చేయడానికి లొకేషన్ను ఉపయోగించండి"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi & మొబైల్ నెట్వర్క్ లొకేషన్"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"మీ లొకేషన్ను వేగవంతంగా అంచనా వేయడం కోసం Google లొకేషన్ సర్వీస్ను ఉపయోగించడానికి యాప్లను అనుమతించండి. అనామక లొకేషన్ డేటా సేకరించబడి, Googleకు పంపబడుతుంది."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"లొకేషన్ Wi‑Fi ద్వారా గుర్తించబడింది"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -1950,7 +1953,7 @@
<string name="lockpassword_confirm_your_password_header" msgid="6132312814563023990">"మీ పాస్వర్డ్ను మళ్ళీ ఎంటర్ చేయండి"</string>
<string name="lockpassword_reenter_your_profile_password_header" msgid="3812040127714827685">"మీ వర్క్ పాస్వర్డ్ను మళ్లీ ఎంటర్ చేయండి"</string>
<string name="lockpassword_confirm_your_work_password_header" msgid="4647071231702288305">"మీ కార్యాలయ పాస్వర్డ్ను నమోదు చేయండి"</string>
- <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"మీ నమూనాను నిర్ధారించండి"</string>
+ <string name="lockpassword_confirm_your_pattern_header" msgid="4037701363240138651">"మీ ఆకృతిని నిర్ధారించండి"</string>
<string name="lockpassword_confirm_your_work_pattern_header" msgid="2668883108969165844">"మీ కార్యాలయ నమూనాను నమోదు చేయి"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="2241722970567131308">"మీ పిన్ను మళ్లీ ఎంటర్ చేయండి"</string>
<string name="lockpassword_reenter_your_profile_pin_header" msgid="2890233614560435538">"మీ వర్క్ PINను మళ్లీ ఎంటర్ చేయండి"</string>
@@ -1971,7 +1974,7 @@
<string name="lockpassword_forgot_password" msgid="5730587692489737223">"మీ పాస్వర్డ్ను మరచిపోయారా?"</string>
<string name="lockpassword_forgot_pattern" msgid="1196116549051927516">"మీ ఆకృతిని మర్చిపోయారా?"</string>
<string name="lockpassword_forgot_pin" msgid="7164232234705747672">"మీ పిన్ను మర్చిపోయారా?"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"కొనసాగడానికి మీ పరికరం నమూనాను ఉపయోగించండి"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"కొనసాగించడానికి మీ పరికరం ఆకృతిని ఉపయోగించండి"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="9206928587904701094">"కొనసాగడానికి మీ డివైజ్ పిన్ను ఎంటర్ చేయండి"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="2616127423884477152">"కొనసాగడానికి మీ పరికర పాస్వర్డ్ను నమోదు చేయండి"</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="9110305410672321714">"కొనసాగడానికి మీ కార్యాలయ నమూనాను ఉపయోగించండి"</string>
@@ -2004,7 +2007,7 @@
<string name="lockpattern_pattern_confirmed_header" msgid="2969990617475456153">"మీ కొత్త అన్లాక్ ఆకృతి"</string>
<string name="lockpattern_confirm_button_text" msgid="6122815520373044089">"నిర్ధారించు"</string>
<string name="lockpattern_restart_button_text" msgid="255339375151895998">"మళ్లీ గీయి"</string>
- <string name="lockpattern_retry_button_text" msgid="4229668933251849760">"తీసివేయి"</string>
+ <string name="lockpattern_retry_button_text" msgid="4229668933251849760">"తీసివేయండి"</string>
<string name="lockpattern_continue_button_text" msgid="5253269556259503537">"కొనసాగించండి"</string>
<string name="lockpattern_settings_title" msgid="9223165804553269083">"అన్లాక్ ఆకృతి"</string>
<string name="lockpattern_settings_enable_title" msgid="7401197111303283723">"ఆకృతి అవసరం"</string>
@@ -2033,7 +2036,7 @@
<string name="applications_settings" msgid="1941993743933425622">"యాప్ సమాచారం"</string>
<string name="applications_settings_header" msgid="3154670675856048015">"యాప్ సెట్టింగ్లు"</string>
<string name="install_applications" msgid="3921609656584369901">"తెలియని మూలాలు"</string>
- <string name="install_applications_title" msgid="7890233747559108106">"అన్ని అనువ. మూలాలను అనుమతించు"</string>
+ <string name="install_applications_title" msgid="7890233747559108106">"అన్ని అనువ. మూలాలను అనుమతించండి"</string>
<string name="recent_app_category_title" msgid="189758417804427533">"ఇటీవల తెరిచిన యాప్లు"</string>
<plurals name="see_all_apps_title" formatted="false" msgid="6864581406735745400">
<item quantity="other">మొత్తం %1$d యాప్లను చూడండి</item>
@@ -2043,7 +2046,7 @@
<string name="forgot_password_text" msgid="2583194470767613163">"పిన్ను, ఆకృతిని, లేదా పాస్వర్డ్ను రీసెట్ చేయడానికి వారు సహాయపడతారు"</string>
<string name="install_all_warning" product="tablet" msgid="7010749217925069520">"మీ టాబ్లెట్ మరియు వ్యక్తిగత డేటా తెలియని మూలాల్లోని యాప్ల ద్వారా దాడికి గురి కావడానికి ఎక్కువ అవకాశం ఉంటుంది. ఈ మూలం నుండి యాప్లను ఇన్స్టాల్ చేయడం ద్వారా, ఈ యాప్లను ఉపయోగించడం ద్వారా మీ టాబ్లెట్కు సంభవించే ఏదైనా నష్టానికి లేదా కోల్పోయే డేటాకి బాధ్యత వహించడానికి మీరు అంగీకరిస్తున్నారు."</string>
<string name="install_all_warning" product="default" msgid="652516435709047343">"తెలియని యాప్లు మీ ఫోన్ పైన, వ్యక్తిగత డేటా పైన దాడి చేయడానికి ఎక్కువగా అవకాశం ఉంటుంది. ఈ సోర్స్ నుండి యాప్లను ఇన్స్టాల్ చేయడం ద్వారా, వాటి వినియోగంతో మీ ఫోన్కు ఏదైనా నష్టం జరిగితే లేదా మీ డేటాను కోల్పోతే అందుకు మీరే బాధ్యత వహిస్తారని అంగీకరిస్తున్నారు."</string>
- <string name="install_all_warning" product="device" msgid="2348262609815354500">"మీ పరికరం మరియు వ్యక్తిగత డేటాపై తెలియని మూలాధారాల నుండి పొందిన యాప్లు దాడి చేసే అవకాశం ఎక్కువగా ఉంది. ఈ మూలాధారం నుండి పొందిన యాప్లను ఇన్స్టాల్ చేయడం ద్వారా, వాటి ఉపయోగం కారణంగా మీ పరికరానికి జరిగే హాని లేదా డేటాని కోల్పోవడం వంటి వాటికి మీరే పూర్తి బాధ్యత వహించడానికి మీరు అంగీకరించాలి."</string>
+ <string name="install_all_warning" product="device" msgid="2348262609815354500">"మీ పరికరం మరియు వ్యక్తిగత డేటాపై తెలియని మూలాధారాల నుండి పొందిన యాప్లు దాడి చేసే అవకాశం ఎక్కువగా ఉంది. ఈ మూలాధారం నుండి పొందిన యాప్లను ఇన్స్టాల్ చేయడం ద్వారా, వాటి ఉపయోగం కారణంగా మీ పరికరానికి జరిగే హాని లేదా డేటాను కోల్పోవడం వంటి వాటికి మీరే పూర్తి బాధ్యత వహించడానికి మీరు అంగీకరించాలి."</string>
<string name="advanced_settings" msgid="2368905204839169094">"అధునాతన సెట్టింగ్లు"</string>
<string name="advanced_settings_summary" msgid="1823765348195530035">"మరిన్ని సెట్టింగ్ల ఎంపికలను ప్రారంభించు"</string>
<string name="application_info_label" msgid="1015706497694165866">"యాప్ సమాచారం"</string>
@@ -2053,13 +2056,13 @@
<string name="screen_compatibility_label" msgid="7549658546078613431">"స్క్రీన్ అనుకూలత"</string>
<string name="permissions_label" msgid="1708927634370314404">"అనుమతులు"</string>
<string name="cache_header_label" msgid="2441967971921741047">"కాష్"</string>
- <string name="clear_cache_btn_text" msgid="8597272828928143723">"కాష్ను క్లియర్ చేయి"</string>
+ <string name="clear_cache_btn_text" msgid="8597272828928143723">"కాష్ను క్లియర్ చేయండి"</string>
<string name="cache_size_label" msgid="313456088966822757">"కాష్"</string>
<plurals name="uri_permissions_text" formatted="false" msgid="8212425823423508096">
<item quantity="other">%d అంశాలు</item>
<item quantity="one">1 అంశం</item>
</plurals>
- <string name="clear_uri_btn_text" msgid="4828117421162495134">"యాక్సెస్ను తీసివేయి"</string>
+ <string name="clear_uri_btn_text" msgid="4828117421162495134">"యాక్సెస్ను తీసివేయండి"</string>
<string name="controls_label" msgid="8671492254263626383">"నియంత్రణలు"</string>
<string name="force_stop" msgid="2681771622136916280">"ఫోర్స్ స్టాప్"</string>
<string name="total_size_label" msgid="2052185048749658866">"మొత్తం"</string>
@@ -2175,7 +2178,7 @@
<string name="running_processes_header_cached_prefix" msgid="839132595831993521">"కాష్ చేయబడినది"</string>
<string name="running_processes_header_ram" msgid="3014991380467004685">"RAMలో <xliff:g id="RAM_0">%1$s</xliff:g>"</string>
<string name="runningservicedetails_settings_title" msgid="1057845389092757121">"అమలవుతున్న యాప్"</string>
- <string name="no_services" msgid="3898812785511572899">"సక్రియంగా లేవు"</string>
+ <string name="no_services" msgid="3898812785511572899">"యాక్టివ్గా లేవు"</string>
<string name="runningservicedetails_services_title" msgid="11853795112787355">"సర్వీస్లు"</string>
<string name="runningservicedetails_processes_title" msgid="5292271587797234038">"ప్రాసెస్లు"</string>
<string name="service_stop" msgid="5712522600201308795">"ఆపివేయండి"</string>
@@ -2290,7 +2293,7 @@
<string name="accessibility_settings_title" msgid="6739115703615065716">"యాక్సెస్ సామర్థ్య సెట్టింగ్లు"</string>
<string name="accessibility_settings_summary" msgid="2366627644570558503">"ప్రదర్శన, పరస్పర చర్య, ఆడియో"</string>
<string name="vision_settings_title" msgid="8919983801864103069">"విజన్ సెట్టింగ్లు"</string>
- <string name="vision_settings_description" msgid="7614894785054441991">"మీ అవసరాలకు అనుగుణంగా ఈ పరికరాన్ని అనుకూలీకరించవచ్చు. ఈ యాక్సెస్ చేయగల ఫీచర్లను సెట్టింగ్స్లో తర్వాత మార్చవచ్చు."</string>
+ <string name="vision_settings_description" msgid="7614894785054441991">"మీ అవసరాలకు అనుగుణంగా ఈ పరికరాన్ని అనుకూలంగా మార్చవచ్చు. ఈ యాక్సెస్ చేయగల ఫీచర్లను సెట్టింగ్స్లో తర్వాత మార్చవచ్చు."</string>
<string name="vision_settings_suggestion_title" msgid="4689275412658803919">"ఫాంట్ సైజ్ను మార్చండి"</string>
<string name="screen_reader_category_title" msgid="5825700839731107803">"స్క్రీన్ రీడర్"</string>
<string name="captions_category_title" msgid="574490148949400274">"క్యాప్షన్లు"</string>
@@ -2784,7 +2787,7 @@
<string name="battery_tip_restrict_app_dialog_ok" msgid="7025027696689301916">"పరిమితం చేేయి"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="5501997201160532301">"పరిమితిని తీసివేయాలా?"</string>
<string name="battery_tip_unrestrict_app_dialog_message" msgid="215449637818582819">"ఈ యాప్ బ్యాక్గ్రౌండ్లో బ్యాటరీని ఉపయోగించగలదు. మీ బ్యాటరీ ఛార్జింగ్ త్వరగా ఖాళీ కావచ్చు."</string>
- <string name="battery_tip_unrestrict_app_dialog_ok" msgid="7940183167721998470">"తీసివేయి"</string>
+ <string name="battery_tip_unrestrict_app_dialog_ok" msgid="7940183167721998470">"తీసివేయండి"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="4968135709160207507">"రద్దు చేయండి"</string>
<string name="battery_tip_dialog_summary_message" product="default" msgid="6097167058237891756">"యాప్ల బ్యాటరీ వినియోగం సాధారణంగా ఉంది. యాప్లు చాలా ఎక్కువ బ్యాటరీని వాడుతుంటే ఏం చేయాలనేది మీ ఫోన్ సూచిస్తుంది. \n\nబ్యాటరీ తక్కువగా ఉంటే బ్యాటరీ సేవర్ ఆన్ చేయవచ్చు."</string>
<string name="battery_tip_dialog_summary_message" product="tablet" msgid="573297655597451123">"మీ యాప్లు సాధారణ స్థాయిలో బ్యాటరీను వినియోగిస్తున్నాయి. యాప్లు చాలా ఎక్కువ బ్యాటరీని వినియోగిస్తున్నట్లయితే, మీ టాబ్లెట్, మీరు తీసుకోగల చర్యలను సూచిస్తుంది. \n\nమీరు తక్కువ బ్యాటరీను కలిగి ఉంటే, ఎప్పుడైనా మీరు బ్యాటరీ సేవర్ను ఆన్ చేయవచ్చు."</string>
@@ -2822,9 +2825,9 @@
<string name="dialog_stop_message_wakeup_alarm" product="device" msgid="1820679795932901383">"<xliff:g id="APP_0">%1$s</xliff:g> మీ పరికరాన్ని మేల్కొల్పి ఉంచుతుంది, కనుక బ్యాటరీని మీ పరికరం సాధారణ రీతిలో నిర్వహించడం సాధ్యం కాదు.\n\nఈ సమస్యను పరిష్కరించేందుకు ప్రయత్నించడానికి, మీరు <xliff:g id="APP_1">%1$s</xliff:g>ని ఆపివేయవచ్చు.\n\nఈ సమస్య కొనసాగితే, బ్యాటరీ పనితీరును మెరుగుపరచడం కోసం మీరు యాప్ను అన్ఇన్స్టాల్ చేయాల్సి రావచ్చు."</string>
<string name="dialog_stop_ok" msgid="1171516542217183180">"యాప్ని ఆపివేయి"</string>
<string name="dialog_background_check_title" msgid="8571605969100408762">"నేపథ్య వినియోగాన్ని ఆఫ్ చేసి, యాప్ను ఆపివేయాలా?"</string>
- <string name="dialog_background_check_message" product="default" msgid="6203374578970183277">"<xliff:g id="APP_0">%1$s</xliff:g> మీ ఫోన్ను సక్రియంగా ఉంచుతుంది, కనుక బ్యాటరీని మీ ఫోన్ సాధారణ రీతిలో నిర్వహించడం సాధ్యం కాదు.\n\nఈ సమస్యను పరిష్కరించేందుకు ప్రయత్నించాలంటే, మీరు <xliff:g id="APP_1">%1$s</xliff:g>ని ఆపివేసి, దానిని బ్యాక్గ్రౌండ్లో అమలు కాకుండా నిరోధించవచ్చు."</string>
- <string name="dialog_background_check_message" product="tablet" msgid="1282389215667916176">"<xliff:g id="APP_0">%1$s</xliff:g> మీ టాబ్లెట్ను సక్రియంగా ఉంచుతుంది, కనుక బ్యాటరీని మీ టాబ్లెట్ సాధారణ రీతిలో నిర్వహించడం సాధ్యం కాదు.\n\nఈ సమస్యను పరిష్కరించేందుకు ప్రయత్నించాలంటే, మీరు <xliff:g id="APP_1">%1$s</xliff:g>ని ఆపివేసి, దానిని బ్యాక్గ్రౌండ్లో అమలు కాకుండా నిరోధించవచ్చు."</string>
- <string name="dialog_background_check_message" product="device" msgid="8005524265739819577">"<xliff:g id="APP_0">%1$s</xliff:g> మీ పరికరాన్ని సక్రియంగా ఉంచుతుంది, కనుక బ్యాటరీని మీ పరికరం సాధారణ రీతిలో నిర్వహించడం సాధ్యం కాదు.\n\nఈ సమస్యను పరిష్కరించేందుకు ప్రయత్నించాలంటే, మీరు <xliff:g id="APP_1">%1$s</xliff:g>ని ఆపివేసి, దానిని బ్యాక్గ్రౌండ్లో అమలు కాకుండా నిరోధించవచ్చు."</string>
+ <string name="dialog_background_check_message" product="default" msgid="6203374578970183277">"<xliff:g id="APP_0">%1$s</xliff:g> మీ ఫోన్ను యాక్టివ్గా ఉంచుతుంది, కనుక బ్యాటరీని మీ ఫోన్ సాధారణ రీతిలో నిర్వహించడం సాధ్యం కాదు.\n\nఈ సమస్యను పరిష్కరించేందుకు ప్రయత్నించాలంటే, మీరు <xliff:g id="APP_1">%1$s</xliff:g>ని ఆపివేసి, దానిని బ్యాక్గ్రౌండ్లో అమలు కాకుండా నిరోధించవచ్చు."</string>
+ <string name="dialog_background_check_message" product="tablet" msgid="1282389215667916176">"<xliff:g id="APP_0">%1$s</xliff:g> మీ టాబ్లెట్ను యాక్టివ్గా ఉంచుతుంది, కనుక బ్యాటరీని మీ టాబ్లెట్ సాధారణ రీతిలో నిర్వహించడం సాధ్యం కాదు.\n\nఈ సమస్యను పరిష్కరించేందుకు ప్రయత్నించాలంటే, మీరు <xliff:g id="APP_1">%1$s</xliff:g>ని ఆపివేసి, దానిని బ్యాక్గ్రౌండ్లో అమలు కాకుండా నిరోధించవచ్చు."</string>
+ <string name="dialog_background_check_message" product="device" msgid="8005524265739819577">"<xliff:g id="APP_0">%1$s</xliff:g> మీ పరికరాన్ని యాక్టివ్గా ఉంచుతుంది, కనుక బ్యాటరీని మీ పరికరం సాధారణ రీతిలో నిర్వహించడం సాధ్యం కాదు.\n\nఈ సమస్యను పరిష్కరించేందుకు ప్రయత్నించాలంటే, మీరు <xliff:g id="APP_1">%1$s</xliff:g>ని ఆపివేసి, దానిని బ్యాక్గ్రౌండ్లో అమలు కాకుండా నిరోధించవచ్చు."</string>
<string name="dialog_background_check_ok" msgid="5792934035264144797">"ఆఫ్ చేయండి"</string>
<string name="dialog_location_title" msgid="1323400468370901875">"లొకేషన్ను ఆఫ్ చేయాలా?"</string>
<string name="dialog_location_message" product="default" msgid="5597959072209122057">"మీరు యాప్ను ఉపయోగించని సమయంలో కూడా <xliff:g id="APP">%1$s</xliff:g> మీ లొకేషన్ను రిక్వెస్ట్ చేస్తోంది, కనుక బ్యాటరీని మీ ఫోన్ సాధారణ రీతిలో మేనేజ్ చేయడం సాధ్యం కాదు.\n\nఈ సమస్యను పరిష్కరించడం కోసం, ఈ యాప్నకు మీరు లొకేషన్ను ఆఫ్ చేయవచ్చు."</string>
@@ -2844,14 +2847,14 @@
<string name="power_overcounted" msgid="3681101460287472876">"అధిక గణన"</string>
<string name="usage_type_cpu" msgid="8544148642836549011">"CPU మొత్తం"</string>
<string name="usage_type_cpu_foreground" msgid="6120871498122604239">"CPU ముందుభాగం"</string>
- <string name="usage_type_wake_lock" msgid="3442487584173668904">"సక్రియంగా ఉంచండి"</string>
+ <string name="usage_type_wake_lock" msgid="3442487584173668904">"యాక్టివ్గా ఉంచండి"</string>
<string name="usage_type_gps" msgid="4118035982288964651">"GPS"</string>
<string name="usage_type_wifi_running" msgid="5573404832197356206">"Wi‑Fi అమలవుతున్నది"</string>
<string name="usage_type_phone" product="tablet" msgid="4527092861928972130">"టాబ్లెట్"</string>
<string name="usage_type_phone" product="default" msgid="4149330237181984782">"ఫోన్"</string>
<string name="usage_type_data_send" msgid="4375755152437282184">"పంపబడిన మొబైల్ ప్యాకెట్లు"</string>
<string name="usage_type_data_recv" msgid="7821924049621005218">"స్వీకరించబడిన మొబైల్ ప్యాకెట్లు"</string>
- <string name="usage_type_radio_active" msgid="1876069445855950097">"మొబైల్ రేడియో సక్రియంగా ఉన్నది"</string>
+ <string name="usage_type_radio_active" msgid="1876069445855950097">"మొబైల్ రేడియో యాక్టివ్గా ఉన్నది"</string>
<string name="usage_type_data_wifi_send" msgid="6154038607322769558">"పంపబడిన Wi‑Fi ప్యాకెట్లు"</string>
<string name="usage_type_data_wifi_recv" msgid="4821128213012023100">"స్వీకరించబడిన Wi‑Fi ప్యాకెట్లు"</string>
<string name="usage_type_audio" msgid="1100651355357912864">"ఆడియో"</string>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3110,7 +3117,7 @@
<string name="device_admin_status" msgid="6332571781623084064">"ఈ అడ్మిన్ యాప్ యాక్టివ్గా ఉంది. కింది చర్యలు చేయడానికి <xliff:g id="APP_NAME">%1$s</xliff:g> యాప్ను అనుమతిస్తుంది:"</string>
<string name="profile_owner_add_title" msgid="2774489881662331549">"ప్రొఫైల్ నిర్వాహకుడిని సక్రియం చేయాలా?"</string>
<string name="profile_owner_add_title_simplified" msgid="2320828996993774182">"పర్యవేక్షణను అనుమతించాలా?"</string>
- <string name="adding_profile_owner_warning" msgid="6868275476058020513">"కొనసాగిస్తే, మీ యూజర్ను మీ అడ్మిన్ మేనేజ్ చేయగలరు, దాని వలన మీ వ్యక్తిగత డేటాతో పాటు అనుబంధితంగా ఉన్న డేటా కూడా స్టోర్ చేయబడవచ్చు.\n\nమీ అడ్మిన్ నెట్వర్క్ యాక్టివిటీ, మీ డివైజ్ యొక్క లొకేషన్ సమాచారంతో పాటు ఈ యూజర్కు అనుబంధితంగా ఉన్న సెట్టింగ్లు, యాక్సెస్, యాప్లు మరియు డేటాని పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు."</string>
+ <string name="adding_profile_owner_warning" msgid="6868275476058020513">"కొనసాగిస్తే, మీ యూజర్ను మీ అడ్మిన్ మేనేజ్ చేయగలరు, దాని వలన మీ వ్యక్తిగత డేటాతో పాటు అనుబంధితంగా ఉన్న డేటా కూడా స్టోర్ చేయబడవచ్చు.\n\nమీ అడ్మిన్ నెట్వర్క్ యాక్టివిటీ, మీ డివైజ్ యొక్క లొకేషన్ సమాచారంతో పాటు ఈ యూజర్కు అనుబంధితంగా ఉన్న సెట్టింగ్లు, యాక్సెస్, యాప్లు మరియు డేటాను పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు."</string>
<string name="admin_disabled_other_options" msgid="8122039047419172139">"ఇతర ఎంపికలను మీ నిర్వాహకులు నిలిపివేసారు"</string>
<string name="admin_more_details" msgid="4928985331640193758">"మరింత తెలుసుకోండి"</string>
<string name="notification_log_title" msgid="2812594935014664891">"నోటిఫికేషన్ లాగ్"</string>
@@ -3129,7 +3136,7 @@
<string name="accessibility_sync_in_progress" msgid="3229428197779196660">"ఇప్పుడు సింక్ చేస్తోంది"</string>
<string name="accessibility_sync_error" msgid="7248490045013170437">"సింక్ ఎర్రర్."</string>
<string name="sync_failed" msgid="3806495232114684984">"సింక్ విఫలమైంది"</string>
- <string name="sync_active" msgid="5787407579281739975">"సింక్ సక్రియంగా ఉంది"</string>
+ <string name="sync_active" msgid="5787407579281739975">"సింక్ యాక్టివ్గా ఉంది"</string>
<string name="account_sync_settings_title" msgid="2684888109902800966">"సింక్"</string>
<string name="sync_is_failing" msgid="6738004111400633331">"సింక్ ప్రస్తుతం సమస్యలను ఎదుర్కొంటోంది. ఇది త్వరలో అందుబాటులోకి వస్తుంది."</string>
<string name="add_account_label" msgid="7134707140831385869">"ఖాతాను జోడించండి"</string>
@@ -3186,7 +3193,7 @@
<string name="data_usage_app_items_header_text" msgid="7513812163443595033">"యాప్ వినియోగం"</string>
<string name="data_usage_menu_roaming" msgid="6864561338842056939">"డేటా రోమింగ్"</string>
<string name="data_usage_menu_restrict_background" msgid="1414574366645086133">"నేపథ్య డేటాను పరిమితం చేయి"</string>
- <string name="data_usage_menu_allow_background" msgid="6242931073390680432">"నేపథ్య డేటాను అనుమతించు"</string>
+ <string name="data_usage_menu_allow_background" msgid="6242931073390680432">"నేపథ్య డేటాను అనుమతించండి"</string>
<string name="data_usage_menu_split_4g" msgid="3391899816926640583">"4G వినియోగాన్ని వేరుచేయి"</string>
<string name="data_usage_menu_show_wifi" msgid="6380926350184939975">"Wi‑Fiని చూపు"</string>
<string name="data_usage_menu_hide_wifi" msgid="4694889089278302691">"Wi‑Fiని దాచు"</string>
@@ -3205,7 +3212,7 @@
<string name="data_usage_label_foreground" msgid="8782117644558473624">"ముందుభాగం"</string>
<string name="data_usage_label_background" msgid="8862781660427421859">"బ్యాక్గ్రౌండ్"</string>
<string name="data_usage_app_restricted" msgid="312065316274378518">"పరిమితం చేయబడింది"</string>
- <string name="data_usage_disable_mobile" msgid="6183809500102606801">"మొబైల్ డేటాని ఆఫ్ చేయాలా?"</string>
+ <string name="data_usage_disable_mobile" msgid="6183809500102606801">"మొబైల్ డేటాను ఆఫ్ చేయాలా?"</string>
<string name="data_usage_disable_mobile_limit" msgid="1370147078938479538">"మొబైల్ డేటా పరిమితిని సెట్ చేయండి"</string>
<string name="data_usage_disable_4g_limit" msgid="3084868504051520840">"4G డేటా పరిమితిని సెట్ చేయి"</string>
<string name="data_usage_disable_3g_limit" msgid="8867555130268898044">"2G-3G డేటా పరిమితిని సెట్ చేయి"</string>
@@ -3291,7 +3298,7 @@
<string name="vpn_always_on_invalid_reason_dns" msgid="3934369594591801587">"ఎల్లప్పుడూ ఆన్లో ఉండే VPN కోసం DNS సర్వర్ అడ్రస్లు తప్పనిసరిగా సంఖ్యలు అయి ఉండాలి"</string>
<string name="vpn_always_on_invalid_reason_other" msgid="4571905303713233321">"ఎంటర్ చేసిన సమాచారానికి ఎల్లప్పుడూ ఆన్లో ఉండే VPN సపోర్ట్ చేయదు"</string>
<string name="vpn_cancel" msgid="5929410618112404383">"రద్దు చేయండి"</string>
- <string name="vpn_done" msgid="5137858784289564985">"తీసివేయి"</string>
+ <string name="vpn_done" msgid="5137858784289564985">"తీసివేయండి"</string>
<string name="vpn_save" msgid="683868204634860888">"సేవ్ చేయండి"</string>
<string name="vpn_connect" msgid="7102335248484045354">"కనెక్ట్ చేయి"</string>
<string name="vpn_replace" msgid="1533147558671640341">"భర్తీ చేయి"</string>
@@ -3366,8 +3373,8 @@
<string name="ssl_ca_cert_info_message" msgid="3111724430981667845">"{numberOfCertificates,plural, =1{మీ వర్క్ ప్రొఫైల్ కోసం {orgName} సర్టిఫికెట్ అధికారాన్ని ఇన్స్టాల్ చేసింది. దీని వల్ల వారు ఈమెయిల్స్, యాప్లు ఇంకా సురక్షితమైన వెబ్సైట్లతో సహా వర్క్ నెట్వర్క్ యాక్టివిటీని పర్యవేక్షించడానికి అనుమతించబడవచ్చు.\n\nఈ సర్టిఫికెట్ గురించి మరింత సమాచారం కోసం, మీ అడ్మిన్ను కాంటాక్ట్ చేయండి.}other{మీ వర్క్ ప్రొఫైల్ కోసం {orgName} సర్టిఫికెట్ అధికారాలను ఇన్స్టాల్ చేసింది. దీని వల్ల వారు ఈమెయిల్స్, యాప్లు ఇంకా సురక్షితమైన వెబ్సైట్లతో సహా వర్క్ నెట్వర్క్ యాక్టివిటీని పర్యవేక్షించడానికి అనుమతించబడవచ్చు.\n\nఈ సర్టిఫికెట్ల గురించి మరింత సమాచారం కోసం, మీ అడ్మిన్ను కాంటాక్ట్ చేయండి.}}"</string>
<string name="ssl_ca_cert_warning_message" msgid="4374052724815563051">"మూడవ పక్షం ఈమెయిళ్లు, యాప్లు మరియు సురక్షిత వెబ్సైట్లతో సహా మీ నెట్వర్క్ కార్యాచరణను పర్యవేక్షించగలిగే సామర్థ్యాన్ని కలిగి ఉంటారు.\n\nమీ పరికరంలో ఇన్స్టాల్ చేయబడిన విశ్వసనీయ ఆధారాల వలన ఇది సాధ్యపడుతుంది."</string>
<plurals name="ssl_ca_cert_settings_button" formatted="false" msgid="125941406175485894">
- <item quantity="other">ప్రమాణపత్రాలను తనిఖీ చేయి</item>
- <item quantity="one">ప్రమాణపత్రాన్ని తనిఖీ చేయి</item>
+ <item quantity="other">ప్రమాణపత్రాలను చెక్ చేయండి</item>
+ <item quantity="one">ప్రమాణపత్రాన్ని చెక్ చేయండి</item>
</plurals>
<string name="user_settings_title" msgid="6550866465409807877">"మల్టిపుల్ యూజర్లు"</string>
<string name="user_settings_footer_text" product="device" msgid="7523914344521302179">"కొత్త వినియోగదారులను జోడించడం ద్వారా మీ పరికరాన్ని షేర్ చేయండి. మీ పరికరంలోని అనుకూల హోమ్ స్క్రీన్లు, ఖాతాలు, యాప్ల సెట్టింగ్లు మరియు మరిన్నింటి కోసం ప్రతి వినియోగదారుకి వ్యక్తిగత స్థలం ఉంటుంది."</string>
@@ -3402,7 +3409,7 @@
<string name="user_delete_user_description" msgid="7764153465503821011">"వినియోగదారుని తొలగించండి"</string>
<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="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>
@@ -3410,7 +3417,7 @@
<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="enable_guest_calling" msgid="8300355036005240911">"ఫోన్ ఉపయోగించడానికి గెస్ట్ను అనుమతించు"</string>
+ <string name="enable_guest_calling" msgid="8300355036005240911">"ఫోన్ ఉపయోగించడానికి గెస్ట్ను అనుమతించండి"</string>
<string name="enable_guest_calling_summary" msgid="4748224917641204782">"కాల్ హిస్టరీ గెస్ట్ యూజర్తో షేర్ చేయబడుతుంది"</string>
<string name="user_enable_calling_sms" msgid="8546430559552381324">"ఫోన్ కాల్స్ & SMS ఆన్ చేయి"</string>
<string name="user_remove_user" msgid="8468203789739693845">"వినియోగదారుని తొలగించు"</string>
@@ -3455,7 +3462,7 @@
<string name="nfc_payment_btn_text_update" msgid="5159700960497443832">"అప్డేట్ చేయండి"</string>
<string name="nfc_work_text" msgid="2496515165821504077">"వర్క్ యాప్లు"</string>
<string name="restriction_settings_title" msgid="4293731103465972557">"పరిమితులు"</string>
- <string name="restriction_menu_reset" msgid="92859464456364092">"పరిమితులను తీసివేయి"</string>
+ <string name="restriction_menu_reset" msgid="92859464456364092">"పరిమితులను తీసివేయండి"</string>
<string name="restriction_menu_change_pin" msgid="2505923323199003718">"పిన్ను మార్చు"</string>
<string name="help_label" msgid="2896538416436125883">"సహాయం & ఫీడ్బ్యాక్"</string>
<string name="support_summary" product="default" msgid="6137136608018134563">"సహాయక ఆర్టికల్స్, ఫోన్ & చాట్"</string>
@@ -3469,7 +3476,7 @@
<string name="severe_threats_summary" msgid="4982256198071601484">"ప్రాణానికి, ఆస్తికి తీవ్ర నష్టం కలిగితే హెచ్చరికలు పొందండి"</string>
<string name="amber_alerts_title" msgid="5238275758191804575">"AMBER హెచ్చరికలు"</string>
<string name="amber_alerts_summary" msgid="5755221775246075883">"పిల్లల అపహరణల గురించి వార్తలను స్వీకరించండి"</string>
- <string name="repeat_title" msgid="8676570486899483606">"పునరావృతం చేయండి"</string>
+ <string name="repeat_title" msgid="8676570486899483606">"రిపీట్ చేయండి"</string>
<string name="call_manager_enable_title" msgid="1214301265395158720">"కాల్ నిర్వాహికిని ప్రారంభించు"</string>
<string name="call_manager_enable_summary" msgid="7362506369604163030">"మీరు కాల్స్ను ఎలా చేయాలో నిర్వహించడానికి ఈ సేవను అనుమతించండి."</string>
<string name="call_manager_title" msgid="3397433159509629466">"కాల్ నిర్వాహికి"</string>
@@ -3511,11 +3518,11 @@
<string name="restriction_wifi_config_title" msgid="2630656989926554685">"Wi‑Fi మరియు మొబైల్"</string>
<string name="restriction_wifi_config_summary" msgid="920419010472168694">"Wi‑Fi మరియు మొబైల్ సెట్టింగ్ల ఎడిట్ను అనుమతించండి"</string>
<string name="restriction_bluetooth_config_title" msgid="220586273589093821">"బ్లూటూత్"</string>
- <string name="restriction_bluetooth_config_summary" msgid="7558879931011271603">"బ్లూటూత్ జతలు మరియు సెట్టింగ్ల యొక్క ఎడిట్ను అనుమతించు"</string>
+ <string name="restriction_bluetooth_config_summary" msgid="7558879931011271603">"బ్లూటూత్ జతలు మరియు సెట్టింగ్ల యొక్క ఎడిట్ను అనుమతించండి"</string>
<string name="restriction_nfc_enable_title" msgid="525512312298242911">"NFC"</string>
- <string name="restriction_nfc_enable_summary_config" msgid="8065688740509581028">"ఈ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> మరో NFC పరికరాన్ని తాకినప్పుడు డేటా మార్పిడి అనుమతించు"</string>
- <string name="restriction_nfc_enable_summary" product="tablet" msgid="6397567147629410131">"టాబ్లెట్ మరో పరికరాన్ని తాకినప్పుడు డేటా మార్పిడిని అనుమతించు"</string>
- <string name="restriction_nfc_enable_summary" product="default" msgid="3331800894734678808">"ఫోన్ మరో పరికరాన్ని తాకినప్పుడు డేటా మార్పిడిని అనుమతించు"</string>
+ <string name="restriction_nfc_enable_summary_config" msgid="8065688740509581028">"ఈ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> మరో NFC పరికరాన్ని తాకినప్పుడు డేటా మార్పిడి అనుమతించండి"</string>
+ <string name="restriction_nfc_enable_summary" product="tablet" msgid="6397567147629410131">"టాబ్లెట్ మరో పరికరాన్ని తాకినప్పుడు డేటా మార్పిడిని అనుమతించండి"</string>
+ <string name="restriction_nfc_enable_summary" product="default" msgid="3331800894734678808">"ఫోన్ మరో పరికరాన్ని తాకినప్పుడు డేటా మార్పిడిని అనుమతించండి"</string>
<string name="restriction_location_enable_title" msgid="4872281754836538066">"లొకేషన్"</string>
<string name="restriction_location_enable_summary" msgid="7139292323897390221">"మీ లొకేషన్ సమాచారాన్ని ఉపయోగించడానికి యాప్లను అనుమతించండి"</string>
<string name="wizard_back" msgid="8257697435061870191">"వెనుకకు"</string>
@@ -3621,7 +3628,7 @@
<string name="keywords_text_to_speech_output" msgid="6728080502619011668">"రేటు, భాష, ఆటోమేటిక్, చదివి వినిపించు, చదివి వినిపించడం, tts, యాక్సెసిబిలిటీ, స్క్రీన్ రీడర్, అంధులు"</string>
<string name="keywords_date_and_time" msgid="4402136313104901312">"గడియారం, మిలిటరీ"</string>
<string name="keywords_network_reset" msgid="4075670452112218042">"రీసెట్ చేయి, పునరుద్ధరించు, ఫ్యాక్టరీ"</string>
- <string name="keywords_factory_data_reset" msgid="4979623326958976773">"తొలగించు, పునరుద్ధరించు, క్లియర్ చేయి, తీసివేయి, ఫ్యాక్టరీ రీసెట్"</string>
+ <string name="keywords_factory_data_reset" msgid="4979623326958976773">"తొలగించు, పునరుద్ధరించు, క్లియర్ చేయండి, తీసివేయండి, ఫ్యాక్టరీ రీసెట్"</string>
<string name="keywords_printing" msgid="3528250034669909466">"ప్రింటర్"</string>
<string name="keywords_sounds" msgid="187191900698371911">"స్పీకర్ బీప్, స్పీకర్, వాల్యూమ్, మ్యూట్, మ్యూట్ చేయండి, ఆడియో, మ్యూజిక్, హ్యాప్టిక్, వైబ్రేటర్, వైబ్రేట్"</string>
<string name="keywords_sounds_and_notifications_interruptions" msgid="1500312884808362467">"ఆటంకం కలిగించవద్దు, అంతరాయం కలిగించు, అంతరాయం, విరామం"</string>
@@ -3665,9 +3672,9 @@
<string name="keywords_display_adaptive_sleep" msgid="4905300860114643966">"స్మార్ట్, మసక స్క్రీన్ స్లీప్, బ్యాటరీ, గడువు ముగింపు, అటెన్షన్, ప్రదర్శన, స్క్రీన్, ఇన్యాక్టివిటీ"</string>
<string name="keywords_auto_rotate" msgid="7288697525101837071">"కెమెరా, స్మార్ట్, ఆటో రొటేట్, ఆటో-రొటేట్, రొటేట్, తిప్పండి, రొటేషన్, పోర్ట్రెయిట్, ల్యాండ్స్కేప్, ఓరియంటేషన్, వర్టికల్, హారిజాంటల్"</string>
<string name="keywords_system_update_settings" msgid="5769003488814164931">"అప్గ్రేడ్, android"</string>
- <string name="keywords_zen_mode_settings" msgid="7810203406522669584">"dnd, షెడ్యూల్, నోటిఫికేషన్లు, బ్లాక్ చేయి, నిశ్శబ్దం, వైబ్రేట్, స్లీప్, కార్యాలయం, దృష్టి సారించడం, ధ్వని, మ్యూట్, రోజు, వారంలో రోజు, వారాంతం, వారంలో రాత్రి, ఈవెంట్"</string>
+ <string name="keywords_zen_mode_settings" msgid="7810203406522669584">"dnd, షెడ్యూల్, నోటిఫికేషన్లు, బ్లాక్ చేయండి, నిశ్శబ్దం, వైబ్రేట్, స్లీప్, కార్యాలయం, దృష్టి సారించడం, ధ్వని, మ్యూట్, రోజు, వారంలో రోజు, వారాంతం, వారంలో రాత్రి, ఈవెంట్"</string>
<string name="keywords_screen_timeout" msgid="8921857020437540572">"స్క్రీన్, లాక్ సమయం, గడువు ముగింపు, లాక్స్క్రీన్"</string>
- <string name="keywords_storage_settings" msgid="6018856193950281898">"మెమరీ, కాష్, డేటా, తొలగించు, క్లియర్ చేయి, ఖాళీ, స్థలం"</string>
+ <string name="keywords_storage_settings" msgid="6018856193950281898">"మెమరీ, కాష్, డేటా, తొలగించు, క్లియర్ చేయండి, ఖాళీ, స్థలం"</string>
<string name="keywords_bluetooth_settings" msgid="2588159530959868188">"కనెక్ట్ అయింది, పరికరం, హెడ్ఫోన్లు, హెడ్సెట్, స్పీకర్, వైర్లెస్, జత చేయి, ఇయర్బడ్లు, సంగీతం, మీడియా"</string>
<string name="keywords_wallpaper" msgid="7332890404629446192">"బ్యాక్గ్రౌండ్, రూపం, గ్రిడ్, అనుకూలంగా మార్చండి, వ్యక్తిగతీకరించు"</string>
<string name="keywords_styles" msgid="5291614313348476068">"చిహ్నం, యాస, రంగు"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, అధునాతన కాలింగ్, 5g కాలింగ్"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"భాషను జోడించు, ఒక భాషను జోడించు"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"టెక్స్ట్ సైజ్, పెద్ద ప్రింట్, పెద్ద ఫాంట్, పెద్ద టెక్స్ట్, తక్కువ విజన్, టెక్స్ట్ను పెద్దగా చేయి, ఫాంట్ పెద్దగా చేసేది, పెద్ద ఫాంట్"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ఎల్లప్పుడూ ఆన్లో ఉండే ప్రదర్శన, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ఆటోమేటిక్ సౌండ్"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"రింగ్ & నోటిఫికేషన్ వాల్యూమ్ <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"వాల్యూమ్, వైబ్రేషన్, అంతరాయం కలిగించవద్దు"</string>
@@ -3755,7 +3761,7 @@
<string name="zen_mode_schedule_title" msgid="7064866561892906613">"షెడ్యూల్"</string>
<string name="zen_mode_use_automatic_rule" msgid="733850322530002484">"షెడ్యూల్ ఉపయోగించు"</string>
<string name="zen_mode_summary_combination" msgid="5944689309915947828">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
- <string name="zen_mode_settings_category" msgid="3794956668816783447">"శబ్దాలు చేసే అంతరాయాలను అనుమతించు"</string>
+ <string name="zen_mode_settings_category" msgid="3794956668816783447">"శబ్దాలు చేసే అంతరాయాలను అనుమతించండి"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="7806181124566937214">"దృశ్య అంతరాయాలను బ్లాక్ చేయండి"</string>
<string name="zen_mode_visual_signals_settings_subtitle" msgid="7433077540895876672">"విజిబిలిటీ సంకేతాలను అనుమతించండి"</string>
<string name="zen_mode_restrict_notifications_title" msgid="4169952466106040297">"దాగి వుండే నోటిఫికేషన్లకు ప్రదర్శన ఆప్షన్లు"</string>
@@ -3878,7 +3884,7 @@
<string name="history_toggled_on_summary" msgid="9034278971358282728">"మీ నోటిఫికేషన్లలో ఇటీవలి వాటితో పాటు, తాత్కాలికంగా స్నూజ్ చేయబడినవి ఇక్కడ కనిపిస్తాయి"</string>
<string name="notification_history_view_settings" msgid="5269317798670449002">"నోటిఫికేషన్ సెట్టింగ్లను చూడండి"</string>
<string name="notification_history_open_notification" msgid="2655071846911258371">"నోటిఫికేషన్ను తెరువు"</string>
- <string name="snooze_options_title" msgid="2109795569568344617">"నోటిఫికేషన్లను తాత్కాలికంగా ఆపివేయడాన్ని అనుమతించు"</string>
+ <string name="snooze_options_title" msgid="2109795569568344617">"నోటిఫికేషన్లను తాత్కాలికంగా ఆపివేయడాన్ని అనుమతించండి"</string>
<string name="hide_silent_icons_title" msgid="5951392023601167577">"సాధారణ నోటిఫికేషన్ల చిహ్నాలను దాచి పెట్టు"</string>
<string name="hide_silent_icons_summary" msgid="623763437631637232">"సాధారణ నోటిఫికేషన్లకు సంబంధించిన చిహ్నాలు స్టేటస్ పట్టీలో చూపబడవు"</string>
<string name="notification_badging_title" msgid="5469616894819568917">"యాప్ చిహ్నంపై నోటిఫికేషన్ డాట్"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ఎప్పటికీ వద్దు"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"పరికరం & యాప్ నోటిఫికేషన్లు"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"ఎటువంటి యాప్లు, పరికరాలు నోటిఫికేషన్లను చదవవచ్చో కంట్రోల్ చేయండి"</string>
@@ -4022,7 +4022,7 @@
<string name="notification_assistant_summary" msgid="1957783114840908887">"సూచించిన చర్యలు, రిప్లయిలు, అలాగే మరిన్ని పొందండి"</string>
<string name="no_notification_assistant" msgid="2533323397091834096">"ఏమీ లేవు"</string>
<string name="no_notification_listeners" msgid="2839354157349636000">"ఇన్స్టాల్ చేసిన అనువర్తనాలేవీ నోటిఫికేషన్ యాక్సెస్ను రిక్వెస్ట్ చేయలేదు."</string>
- <string name="notification_access_detail_switch" msgid="46386786409608330">"నోటిఫికేషన్ యాక్సెస్ను అనుమతించు"</string>
+ <string name="notification_access_detail_switch" msgid="46386786409608330">"నోటిఫికేషన్ యాక్సెస్ను అనుమతించండి"</string>
<string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"<xliff:g id="SERVICE">%1$s</xliff:g> కోసం నోటిఫికేషన్ యాక్సెస్ అనుమతించాలా?"</string>
<string name="notification_assistant_security_warning_summary" msgid="4846559755787348129">"Android 12లో Android అనుకూల నోటిఫికేషన్లను, \'మెరుగైన నోటిఫికేషన్లు\' రీప్లేస్ చేశాయి. ఈ ఫీచర్, సూచించిన చర్యలను, రిప్లయిలను చూపించి, మీ నోటిఫికేషన్లను ఆర్గనైజ్ చేస్తుంది. \n\nకాంటాక్ట్ పేర్లు, మెసేజ్లు లాంటి వ్యక్తిగత సమాచారంతో సహా నోటిఫికేషన్ కంటెంట్ను \'మెరుగైన నోటిఫికేషన్లు\' యాక్సెస్ చేయవచ్చు. ఫోన్ కాల్స్కు సమాధానమివ్వడం, \'అంతరాయం కలిగించవద్దు\' ఆప్షన్ను కంట్రోల్ చేయడం లాంటి నోటిఫికేషన్లను విస్మరించడం లేదా ప్రతిస్పందించడం కూడా ఈ ఫీచర్ చేయగలదు."</string>
<string name="notification_listener_security_warning_title" msgid="5791700876622858363">"<xliff:g id="SERVICE">%1$s</xliff:g> కోసం నోటిఫికేషన్ యాక్సెస్ను అనుమతించాలా?"</string>
@@ -4063,7 +4063,7 @@
<string name="picture_in_picture_empty_text" msgid="9123600661268731579">"చిత్రంలో చిత్రానికి మద్దతిచ్చే యాప్లు ఏవీ ఇన్స్టాల్ చేయబడలేదు"</string>
<string name="picture_in_picture_keywords" msgid="3605379820551656253">"pip picture in"</string>
<string name="picture_in_picture_app_detail_title" msgid="4442235098255164650">"పిక్చర్-ఇన్-పిక్చర్"</string>
- <string name="picture_in_picture_app_detail_switch" msgid="8544190716075624017">"పిక్చర్-ఇన్-పిక్చర్ను అనుమతించు"</string>
+ <string name="picture_in_picture_app_detail_switch" msgid="8544190716075624017">"పిక్చర్-ఇన్-పిక్చర్ను అనుమతించండి"</string>
<string name="picture_in_picture_app_detail_summary" msgid="2503211101305358849">"యాప్ తెరిచి ఉన్నప్పుడు లేదా మీరు దాని నుండి బయటకు వెళ్లిపోయినప్పుడు \'పిక్చర్-ఇన్-పిక్చర్\' విండోను క్రియేట్ చేయడానికి ఈ యాప్ను అనుమతించండి (ఉదాహరణకు, వీడియోను చూడటం కొనసాగించడానికి). మీరు ఉపయోగించే ఇతర యాప్ల ఎగువున ఈ విండో డిస్ప్లే అవుతుంది."</string>
<string name="interact_across_profiles_title" msgid="7285906999927669971">"కనెక్టెడ్ వర్క్ & పర్సనల్ యాప్స్"</string>
<string name="interact_across_profiles_summary_allowed" msgid="1365881452153799092">"కనెక్ట్ అయ్యింది"</string>
@@ -4091,7 +4091,7 @@
<string name="interact_across_profiles_install_personal_app_title" msgid="4790651223324866344">"ఈ యాప్లను కనెక్ట్ చేయడానికి, మీ వ్యక్తిగత ప్రొఫైల్లో <xliff:g id="NAME">%1$s</xliff:g>ను ఇన్స్టాల్ చేయండి"</string>
<string name="interact_across_profiles_install_app_summary" msgid="7715324358034968657">"యాప్ను పొందడానికి ట్యాప్ చేయండి"</string>
<string name="manage_zen_access_title" msgid="1562322900340107269">"అంతరాయం కలిగించవద్దు యాక్సెస్"</string>
- <string name="zen_access_detail_switch" msgid="4183681772666138993">"\'అంతరాయం కలిగించవద్దు\' ఫీచర్ను అనుమతించు"</string>
+ <string name="zen_access_detail_switch" msgid="4183681772666138993">"\'అంతరాయం కలిగించవద్దు\' ఫీచర్ను అనుమతించండి"</string>
<string name="zen_access_empty_text" msgid="3779921853282293080">"ఇన్స్టాల్ చేసిన యాప్లేవీ అంతరాయం కలిగించవద్దు యాక్సెస్ రిక్వెస్ట్ చేయలేదు"</string>
<string name="loading_notification_apps" msgid="5139471829295287945">"అప్లికేషన్లను లోడ్ చేస్తోంది…"</string>
<string name="app_notifications_off_desc" msgid="6691342160980435901">"మీ అభ్యర్ధన మేరకు Android, ఈ పరికరంలో ఈ యాప్ యొక్క నోటిఫికేషన్లను కనిపించకుండా బ్లాక్ చేస్తోంది"</string>
@@ -4236,7 +4236,7 @@
<string name="zen_mode_events_summary" msgid="3241903481309766428">"రానున్న క్యాలెండర్ ఈవెంట్ల నుంచి"</string>
<string name="zen_mode_events_list" msgid="7191316245742097229">"ఈవెంట్లు"</string>
<string name="zen_mode_events_list_first" msgid="7425369082835214361">"ఈవెంట్లు"</string>
- <string name="zen_mode_bypassing_apps" msgid="625309443389126481">"భర్తీ చేయడానికి యాప్లను అనుమతించు"</string>
+ <string name="zen_mode_bypassing_apps" msgid="625309443389126481">"భర్తీ చేయడానికి యాప్లను అనుమతించండి"</string>
<string name="zen_mode_bypassing_apps_header" msgid="60083006963906906">"అంతరాయం కలిగించగల యాప్లు"</string>
<string name="zen_mode_bypassing_apps_add_header" msgid="3201829605075172536">"మరిన్ని యాప్లను ఎంచుకోండి"</string>
<string name="zen_mode_bypassing_apps_none" msgid="7944221631721778096">"యాప్లు ఏవీ ఎంచుకోబడలేదు"</string>
@@ -4250,18 +4250,18 @@
<string name="zen_mode_bypassing_apps_all_summary" msgid="5197566190120503132">"అన్ని నోటిఫికేషన్లు"</string>
<string name="zen_mode_bypassing_apps_some_summary" msgid="1514572070650411509">"కొన్ని నోటిఫికేషన్లు"</string>
<string name="zen_mode_bypassing_app_channels_header" msgid="4011017798712587373">"అంతరాయం కలిగించ గల నోటిఫికేషన్లు"</string>
- <string name="zen_mode_bypassing_app_channels_toggle_all" msgid="1449462656358219116">"అన్ని నోటిఫికేషన్లను అనుమతించు"</string>
+ <string name="zen_mode_bypassing_app_channels_toggle_all" msgid="1449462656358219116">"అన్ని నోటిఫికేషన్లను అనుమతించండి"</string>
<string name="zen_mode_other_sounds_summary" msgid="8784400697494837032">"{count,plural,offset:2 =0{ఏదీ అంతరాయాన్ని కలిగించలేదు}=1{{sound_category_1} అంతరాయాన్ని కలిగించగలదు}=2{{sound_category_1}, {sound_category_2}లు అంతరాయాన్ని కలిగించగలవు}=3{{sound_category_1}, {sound_category_2}, అలాగే {sound_category_3}లు అంతరాయాన్ని కలిగించగలవు}other{{sound_category_1}, {sound_category_2}, మరో # అంతరాయాన్ని కలిగించగలవు}}"</string>
<string name="zen_mode_sounds_none" msgid="6557474361948269420">"ఏదీ అంతరాయాన్ని కలిగించలేదు"</string>
<string name="zen_mode_people_none" msgid="4613147461974255046">"ఎవ్వరూ అంతరాయాన్ని కలిగించలేరు"</string>
<string name="zen_mode_people_some" msgid="9101872681298810281">"కొంతమంది వ్యక్తులు అంతరాయాన్ని కలిగించగలరు"</string>
<string name="zen_mode_people_all" msgid="311036110283015205">"వ్యక్తులందరూ అంతరాయం కలిగించగలరు"</string>
- <string name="zen_mode_repeat_callers" msgid="2270356100287792138">"పునరావృత కాలర్లను అనుమతించు"</string>
- <string name="zen_mode_repeat_callers_title" msgid="8016699240338264781">"రిపీట్ కాలర్స్ను అనుమతించు"</string>
+ <string name="zen_mode_repeat_callers" msgid="2270356100287792138">"రిపీట్ కాలర్లను అనుమతించండి"</string>
+ <string name="zen_mode_repeat_callers_title" msgid="8016699240338264781">"రిపీట్ కాలర్స్ను అనుమతించండి"</string>
<string name="zen_mode_all_callers" msgid="8104755389401941875">"ఎవరైనా"</string>
<string name="zen_mode_contacts_callers" msgid="5429267704011896833">"కాంటాక్ట్లు"</string>
<string name="zen_mode_starred_callers" msgid="1002370699564211178">"స్టార్ గుర్తు ఉన్న కాంటాక్ట్లు"</string>
- <string name="zen_mode_repeat_callers_list" msgid="181819778783743847">"పునరావృత కాలర్లు"</string>
+ <string name="zen_mode_repeat_callers_list" msgid="181819778783743847">"రిపీట్ కాలర్లు"</string>
<!-- no translation found for zen_mode_calls_summary_one (1928015516061784276) -->
<skip />
<string name="zen_mode_calls_summary_two" msgid="6351563496898410742">"<xliff:g id="CALLER_TYPE_0">%1$s</xliff:g>, <xliff:g id="CALLER_TYPE_1">%2$s</xliff:g>"</string>
@@ -4286,7 +4286,7 @@
<string name="zen_mode_summary_alarms_only_by_time" msgid="8140619669703968810">"<xliff:g id="FORMATTEDTIME">%1$s</xliff:g> వరకు అలారాలు మాత్రమే ఎంపికకు మార్చుతుంది"</string>
<string name="zen_mode_summary_always" msgid="722093064250082317">"ఎల్లప్పుడూ అంతరాయం కలిగించు ఎంపికకు మార్చుతుంది"</string>
<string name="zen_mode_screen_on" msgid="7312758100468915319">"స్క్రీన్ ఆన్లో ఉన్నప్పుడు"</string>
- <string name="zen_mode_screen_on_summary" msgid="510055058460316698">"అంతరాయం కలిగించవద్దు నిశ్శబ్దం చేసిన నోటిఫికేషన్లు స్క్రీన్లో పాప్-అప్ లాగా కనిపించి, స్టేటస్ బార్ చిహ్నాన్ని చూపడానికి అనుమతించు"</string>
+ <string name="zen_mode_screen_on_summary" msgid="510055058460316698">"అంతరాయం కలిగించవద్దు నిశ్శబ్దం చేసిన నోటిఫికేషన్లు స్క్రీన్లో పాప్-అప్ లాగా కనిపించి, స్టేటస్ బార్ చిహ్నాన్ని చూపడానికి అనుమతించండి"</string>
<string name="zen_mode_screen_off" msgid="7069798697669366075">"స్క్రీన్ ఆఫ్లో ఉన్నప్పుడు"</string>
<string name="zen_mode_screen_off_summary" msgid="4698018253505406152">"అంతరాయం కలిగించవద్దు ద్వారా నిశ్శబ్దం చేయబడిన నోటిఫికేషన్లను స్క్రీన్ని ఆన్ అయ్యేలా మరియు కాంతి మిణుకుమిణుకుమనేలా చేయనివ్వండి"</string>
<string name="zen_mode_screen_off_summary_no_led" msgid="1958271859408992636">"అంతరాయం కలిగించవద్దు ద్వారా నిశ్శబ్దం చేయబడిన నోటిఫికేషన్లను స్క్రీన్ని ఆన్ చేయనివ్వండి"</string>
@@ -4322,7 +4322,7 @@
<string name="encryption_interstitial_message_pattern" msgid="726550613252236854">"ఈ పరికరాన్ని ప్రారంభించిన వెంటనే మీ ఆకృతిని అడిగే విధంగా సెట్ చేయడం ద్వారా మీరు దీనికి అదనపు రక్షణను అందించవచ్చు. పరికరాన్ని ప్రారంభించే వరకు, అది అలారాలతో సహా కాల్స్, మెసేజ్లు లేదా నోటిఫికేషన్లను స్వీకరించదు. \n\nపోగొట్టుకున్న లేదా దొంగిలించబడిన పరికరాలలో ఉన్న డేటాను రక్షించడంలో ఇది సహాయపడుతుంది. మీ పరికరాన్ని ప్రారంభించడం కోసం ఆకృతిని అడగాలా?"</string>
<string name="encryption_interstitial_message_password" msgid="6051054565294909975">"ఈ పరికరాన్ని ప్రారంభించిన వెంటనే మీ పాస్వర్డ్ను అడిగే విధంగా సెట్ చేయడం ద్వారా మీరు దీనికి అదనపు రక్షణను అందించవచ్చు. పరికరాన్ని ప్రారంభించే దాకా, అది అలారాలతో సహా కాల్స్, మెసేజ్లు లేదా నోటిఫికేషన్లను స్వీకరించదు. \n\nపోగొట్టుకున్న లేదా దొంగిలించబడిన పరికరాలలో ఉన్న డేటాను రక్షించడంలో ఇది సహాయపడుతుంది. మీ పరికరాన్ని ప్రారంభించడం కోసం పాస్వర్డ్ను అడగాలా?"</string>
<string name="encryption_interstitial_message_pin_for_fingerprint" msgid="7152770518093102916">"మీ డివైజ్ను అన్లాక్ చేయడానికి మీ వేలిముద్రను ఉపయోగించడంతో పాటు, దీనిని ప్రారంభించిన వెంటనే మీ PINను అడిగే విధంగా సెట్ చేయడం ద్వారా మీరు దీనికి అదనపు రక్షణను అందించవచ్చు. డివైజ్ను ప్రారంభించే వరకు, అది అలారాలతో సహా కాల్స్, మెసేజ్లు లేదా నోటిఫికేషన్లను స్వీకరించదు. \n\nపోగొట్టుకున్న లేదా దొంగిలించబడిన డివైజ్లలో ఉన్న డేటాను రక్షించడంలో ఇది సహాయపడుతుంది. మీ డివైజ్ను ప్రారంభించడం కోసం PINను అడగాలా?"</string>
- <string name="encryption_interstitial_message_pattern_for_fingerprint" msgid="6257856552043740490">"మీ పరికరాన్ని అన్లాక్ చేయడానికి మీ వేలిముద్రను ఉపయోగించడంతో పాటు, దీనిని ప్రారంభించిన వెంటనే మీ ఆకృతిని అడిగే విధంగా సెట్ చేయడం ద్వారా మీరు దీనికి అదనపు రక్షణను అందించవచ్చు. పరికరాన్ని ప్రారంభించే వరకు, అది అలారాలతో సహా కాల్స్, మెసేజ్లు లేదా నోటిఫికేషన్లను స్వీకరించదు. \n\nపోగొట్టుకున్న లేదా దొంగిలించబడిన పరికరాలలో ఉన్న డేటాని రక్షించడంలో ఇది సహాయపడుతుంది. మీ పరికరాన్ని ప్రారంభించడం కోసం ఆకృతిని అడగాలా?"</string>
+ <string name="encryption_interstitial_message_pattern_for_fingerprint" msgid="6257856552043740490">"మీ పరికరాన్ని అన్లాక్ చేయడానికి మీ వేలిముద్రను ఉపయోగించడంతో పాటు, దీనిని ప్రారంభించిన వెంటనే మీ ఆకృతిని అడిగే విధంగా సెట్ చేయడం ద్వారా మీరు దీనికి అదనపు రక్షణను అందించవచ్చు. పరికరాన్ని ప్రారంభించే వరకు, అది అలారాలతో సహా కాల్స్, మెసేజ్లు లేదా నోటిఫికేషన్లను స్వీకరించదు. \n\nపోగొట్టుకున్న లేదా దొంగిలించబడిన పరికరాలలో ఉన్న డేటాను రక్షించడంలో ఇది సహాయపడుతుంది. మీ పరికరాన్ని ప్రారంభించడం కోసం ఆకృతిని అడగాలా?"</string>
<string name="encryption_interstitial_message_password_for_fingerprint" msgid="7710804822643612867">"మీ పరికరాన్ని అన్లాక్ చేయడానికి మీ వేలిముద్రను ఉపయోగించడంతో పాటు, దీనిని ప్రారంభించిన వెంటనే మీ పాస్వర్డ్ను అడిగే విధంగా సెట్ చేయడం ద్వారా మీరు దీనికి అదనపు రక్షణను అందించవచ్చు. పరికరాన్ని ప్రారంభించే వరకు, అది అలారాలతో సహా కాల్స్, మెసేజ్లు లేదా నోటిఫికేషన్లను స్వీకరించదు. \n\nపోగొట్టుకున్న లేదా దొంగిలించబడిన పరికరాలలో ఉన్న డేటాను రక్షించడంలో ఇది సహాయపడుతుంది. మీ పరికరాన్ని ప్రారంభించడం కోసం పాస్వర్డ్ను అడగాలా?"</string>
<string name="encryption_interstitial_message_pin_for_face" msgid="8577135499926738241">"మీ పరికరాన్ని అన్లాక్ చేయడానికి మీ ముఖాన్ని ఉపయోగించడంతో పాటు, మీరు ఈ పరికరం ప్రారంభం కావడానికి ముందే మీ PINను అడిగేలా చేసి దాన్ని మరింత సురక్షితం చేసుకోవచ్చు. పరికరాన్ని ప్రారంభించే వరకు, ఇది అలారాలతో సహా, కాల్స్, మెసేజ్లు లేదా నోటిఫికేషన్లను స్వీకరించదు.\n\nదీనివల్ల పోగొట్టుకున్న లేదా దొంగలించబడిన పరికరాల డేటాను రక్షించడంలో సహాయకరంగా ఉంటుంది. మీ పరికరాన్ని ప్రారంభించడానికి PIN కావాలా?>"</string>
<string name="encryption_interstitial_message_pattern_for_face" msgid="5851725964283239644">"మీ పరికరాన్ని అన్లాక్ చేయడానికి మీ ముఖాన్ని ఉపయోగించడంతో పాటు, మీరు ఈ పరికరం ప్రారంభం కావడానికి ముందే మీ ఆకృతిని అడిగేలా చేసి దాన్ని మరింత సురక్షితం చేసుకోవచ్చు. పరికరాన్ని ప్రారంభించే వరకు, ఇది అలారాలతో సహా, కాల్స్, మెసేజ్లు లేదా నోటిఫికేషన్లను స్వీకరించదు.\n\nదీనివల్ల పోగొట్టుకున్న లేదా దొంగలించబడిన పరికరాల డేటాను రక్షించడంలో సహాయకరంగా ఉంటుంది. మీ పరికరాన్ని ప్రారంభించడానికి ఆకృతి కావాలా?"</string>
@@ -4470,7 +4470,7 @@
<string name="system_default_app" msgid="2647834628622214931">"(సిస్టమ్ ఆటోమేటిక్)"</string>
<string name="apps_storage" msgid="643866814746927111">"యాప్ల స్టోరేజ్"</string>
<string name="usage_access" msgid="5487993885373893282">"వినియోగ యాక్సెస్"</string>
- <string name="permit_usage_access" msgid="179630895262172674">"వినియోగ యాక్సెస్ను అనుమతించు"</string>
+ <string name="permit_usage_access" msgid="179630895262172674">"వినియోగ యాక్సెస్ను అనుమతించండి"</string>
<string name="app_usage_preference" msgid="7062447555623339120">"యాప్ వినియోగ ప్రాధాన్యతలు"</string>
<string name="time_spent_in_app_pref_title" msgid="25327097913383330">"స్క్రీన్ సమయం"</string>
<string name="usage_access_description" msgid="8547716253713890707">"\'వినియోగ యాక్సెస్\' ద్వారా యాప్, మీరు ఏయే ఇతర యాప్లను ఉపయోగిస్తున్నారో, వాటిని ఎంత తరచుగా ఉపయోగిస్తున్నారో, అలాగే మీ క్యారియర్, భాష సెట్టింగ్లు, ఇతర వివరాలను ట్రాక్ చేయగలదు."</string>
@@ -4599,7 +4599,7 @@
<string name="system_alert_window_settings" msgid="6458633954424862521">"ఇతర యాప్ల ఎగువున కనిపించు"</string>
<string name="system_alert_window_apps_title" msgid="1537949185175079866">"యాప్లు"</string>
<string name="system_alert_window_access_title" msgid="3074573819155116817">"ఇతర యాప్ల ఎగువన ప్రదర్శన"</string>
- <string name="permit_draw_overlay" msgid="4468994037192804075">"ఇతర యాప్ల ఎగువున కనిపించడానికి అనుమతించు"</string>
+ <string name="permit_draw_overlay" msgid="4468994037192804075">"ఇతర యాప్ల ఎగువున కనిపించడానికి అనుమతించండి"</string>
<string name="allow_overlay_description" msgid="1607235723669496298">"మీరు ఉపయోగించే ఇతర యాప్లలో పైభాగాన కనిపించడం కోసం ఈ యాప్ను అనుమతించండి. ఈ యాప్ మీరు ఎక్కడ ట్యాప్ చేసేది చూడగలుగుతుంది లేదా స్క్రీన్పై కనిపించే వాటిని మార్చగలుగుతుంది."</string>
<string name="manage_external_storage_title" msgid="8024521099838816100">"అన్ని ఫైళ్లకు యాక్సెస్"</string>
<string name="permit_manage_external_storage" msgid="6928847280689401761">"అన్ని ఫైళ్లను మేనేజ్ చేయడానికి అనుమతించండి"</string>
@@ -4680,7 +4680,7 @@
<string name="disabled_by_policy_content_biometric_parental_consent" msgid="7124116806784305206">"దీనిని సెటప్ చేయడం ప్రారంభించడానికి ఫోన్ను మీ తల్లి/తండ్రికి అప్పగించండి"</string>
<string name="default_admin_support_msg" msgid="8338570262037182531">"మీకు ఏవైనా సందేహాలు ఉంటే, మీ IT అడ్మిన్ను సంప్రదించండి"</string>
<string name="admin_support_more_info" msgid="8407433155725898290">"మరిన్ని వివరాలు"</string>
- <string name="admin_profile_owner_message" msgid="8860709969532649195">"సెట్టింగ్లు, అనుమతులు, కార్పొరేట్ యాక్సెస్, నెట్వర్క్ యాక్టివిటీ మరియు డివైజ్ యొక్క లొకేషన్ సమాచారంతో పాటు మీ కార్యాలయ ప్రొఫైల్కి అనుబంధితంగా ఉన్న యాప్లు మరియు డేటాని మీ అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు ."</string>
+ <string name="admin_profile_owner_message" msgid="8860709969532649195">"సెట్టింగ్లు, అనుమతులు, కార్పొరేట్ యాక్సెస్, నెట్వర్క్ యాక్టివిటీ మరియు డివైజ్ యొక్క లొకేషన్ సమాచారంతో పాటు మీ కార్యాలయ ప్రొఫైల్కి అనుబంధితంగా ఉన్న యాప్లు మరియు డేటాను మీ అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు ."</string>
<string name="admin_profile_owner_user_message" msgid="4929926887231544950">"సెట్టింగ్లు, అనుమతులు, కార్పొరేట్ యాక్సెస్, నెట్వర్క్ యాక్టివిటీ మరియు డివైజ్ యొక్క లొకేషన్ సమాచారంతో పాటు ఈ యూజర్కు అనుబంధితంగా ఉన్న యాప్లు, డేటాను మీ అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు."</string>
<string name="admin_device_owner_message" msgid="5503131744126520590">"సెట్టింగ్లు, అనుమతులు, కార్పొరేట్ యాక్సెస్, నెట్వర్క్ యాక్టివిటీ మరియు డివైజ్ యొక్క లొకేషన్ సమాచారంతో పాటు ఈ డివైజ్కు అనుబంధితంగా ఉన్న యాప్లు మరియు డేటాను మీ అడ్మిన్ పర్యవేక్షించగలరు, మేనేజ్ చేయగలరు."</string>
<string name="admin_financed_message" msgid="1156197630834947884">"మీ పరికర అడ్మినిస్ట్రేటర్ ఈ పరికరంతో అనుబంధించబడిన డేటాను యాక్సెస్ చేయవచ్చు, యాప్లను మేనేజ్ చేయవచ్చు అలాగే ఈ పరికరాల సెట్టింగ్లను మార్చవచ్చు."</string>
@@ -4901,7 +4901,7 @@
</plurals>
<string name="automatic_storage_manager_settings" msgid="519158151463974656">"నిల్వను నిర్వహించండి"</string>
<string name="automatic_storage_manager_text" msgid="6900593059927987273">"స్టోరేజ్ స్పేస్ను ఖాళీ చేయడంలో సహాయపడటానికి, స్టోరేజ్ మేనేజర్ మీ పరికరం నుండి బ్యాకప్ చేసిన ఫోటోలు, వీడియోలను తీసివేస్తుంది."</string>
- <string name="automatic_storage_manager_days_title" msgid="5077286114860539367">"ఫోటోలు & వీడియోలను తీసివేయి"</string>
+ <string name="automatic_storage_manager_days_title" msgid="5077286114860539367">"ఫోటోలు & వీడియోలను తీసివేయండి"</string>
<string name="automatic_storage_manager_preference_title" msgid="3483357910142595444">"నిల్వ నిర్వాహికి"</string>
<string name="automatic_storage_manager_primary_switch_title" msgid="9131959126462101994">"స్టోరేజ్ మేనేజర్ను ఉపయోగించండి"</string>
<string name="deletion_helper_automatic_title" msgid="597196990024769472">"ఆటోమేటిక్"</string>
@@ -4962,17 +4962,17 @@
<string name="one_handed_action_pull_down_screen_summary" msgid="7582432473450036628">"స్క్రీన్ పైభాగం మీ బొటనవేలు పైభాగానికి చేరుకుంటుంది."</string>
<string name="one_handed_action_show_notification_title" msgid="8789305491485437130">"నోటిఫికేషన్లను చూపండి"</string>
<string name="one_handed_action_show_notification_summary" msgid="8281689861222000436">"నోటిఫికేషన్లు, సెట్టింగ్లు కనిపిస్తాయి."</string>
- <string name="ambient_display_summary" msgid="2650326740502690434">"సమయం, నోటిఫికేషన్లు మరియు ఇతర సమాచారాన్ని తనిఖీ చేయడం కోసం, మీ స్క్రీన్ని రెండుసార్లు నొక్కండి."</string>
+ <string name="ambient_display_summary" msgid="2650326740502690434">"సమయం, నోటిఫికేషన్లు మరియు ఇతర సమాచారాన్ని చెక్ చేయడం కోసం, మీ స్క్రీన్ని రెండుసార్లు నొక్కండి."</string>
<string name="ambient_display_pickup_title" product="default" msgid="4418310591912877548">"ఫోన్ను తరచి చూడటానికి పైకి ఎత్తండి"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="8055486872070888377">"టాబ్లెట్ను తరచి చూడటానికి పైకి ఎత్తండి"</string>
<string name="ambient_display_pickup_title" product="device" msgid="8980156994848721455">"పరికరాన్ని తరచి చూడటానికి పైకి ఎత్తండి"</string>
<string name="ambient_display_wake_screen_title" msgid="7637678749035378085">"డిస్ప్లేను సక్రియపరచండి"</string>
<string name="ambient_display_pickup_summary" product="default" msgid="1087355013674109242">"టైమ్, నోటిఫికేషన్లతో పాటు ఇతర సమాచారాన్ని చెక్ చేయడానికి, మీ ఫోన్ను చేతిలోకి తీసుకోండి"</string>
- <string name="ambient_display_pickup_summary" product="tablet" msgid="2589556997034530529">"సమయం, నోటిఫికేషన్లు మరియు ఇతర సమాచారాన్ని తనిఖీ చేయడం కోసం, మీ టాబ్లెట్ని చేతిలోకి తీసుకోండి."</string>
- <string name="ambient_display_pickup_summary" product="device" msgid="1916011370011115627">"సమయం, నోటిఫికేషన్లు మరియు ఇతర సమాచారాన్ని తనిఖీ చేయడం కోసం, మీ పరికరాన్ని చేతిలోకి తీసుకోండి."</string>
+ <string name="ambient_display_pickup_summary" product="tablet" msgid="2589556997034530529">"సమయం, నోటిఫికేషన్లు మరియు ఇతర సమాచారాన్ని చెక్ చేయడం కోసం, మీ టాబ్లెట్ని చేతిలోకి తీసుకోండి."</string>
+ <string name="ambient_display_pickup_summary" product="device" msgid="1916011370011115627">"సమయం, నోటిఫికేషన్లు మరియు ఇతర సమాచారాన్ని చెక్ చేయడం కోసం, మీ పరికరాన్ని చేతిలోకి తీసుకోండి."</string>
<string name="ambient_display_tap_screen_title" product="default" msgid="2811332293938467179">"ఫోన్ను చెక్ చేయడానికి ట్యాప్ చేయండి"</string>
- <string name="ambient_display_tap_screen_title" product="tablet" msgid="6461531447715370632">"టాబ్లెట్ను తనిఖీ చేయడానికి నొక్కండి"</string>
- <string name="ambient_display_tap_screen_title" product="device" msgid="4423803387551153840">"పరికరాన్ని తనిఖీ చేయడానికి నొక్కండి"</string>
+ <string name="ambient_display_tap_screen_title" product="tablet" msgid="6461531447715370632">"టాబ్లెట్ను చెక్ చేయడానికి నొక్కండి"</string>
+ <string name="ambient_display_tap_screen_title" product="device" msgid="4423803387551153840">"పరికరాన్ని చెక్ చేయడానికి నొక్కండి"</string>
<string name="ambient_display_tap_screen_summary" msgid="4480489179996521405">"టైమ్, నోటిఫికేషన్లతో పాటు ఇతర సమాచారాన్ని చెక్ చేయడానికి మీ స్క్రీన్ను ట్యాప్ చేయండి."</string>
<string name="emergency_gesture_screen_title" msgid="3280543310204360902">"ఎమర్జెన్సీ సహాయం"</string>
<string name="emergency_gesture_switchbar_title" msgid="7421353963329899514">"ఎమర్జెన్సీ సహాయాన్ని ఉపయోగించండి"</string>
@@ -4987,8 +4987,8 @@
<string name="fingerprint_swipe_for_notifications_title" msgid="2271217256447175017">"నోటిఫికేషన్ల కోసం వేలిముద్రతో స్వైప్ చేయండి"</string>
<string name="fingerprint_gesture_screen_title" msgid="9086261338232806522">"వేలిముద్రతో స్వైప్ చేయి"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="286662791588779673">"మీ నోటిఫికేషన్లను చెక్ చేయడానికి, మీ ఫోన్ వెనుకవైపు ఉన్న వేలిముద్ర సెన్సార్పై కిందికి స్వైప్ చేయండి."</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="8642092907817554454">"మీ నోటిఫికేషన్లను తనిఖీ చేయడానికి, మీ టాబ్లెట్ వెనుకవైపు ఉన్న వేలిముద్ర సెన్సార్పై కిందికి స్వైప్ చేయండి."</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="3888927017311372398">"మీ నోటిఫికేషన్లను తనిఖీ చేయడానికి, మీ పరికరం వెనుకవైపు ఉన్న వేలిముద్ర సెన్సార్పై క్రిందికి స్వైప్ చేయండి."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="8642092907817554454">"మీ నోటిఫికేషన్లను చెక్ చేయడానికి, మీ టాబ్లెట్ వెనుకవైపు ఉన్న వేలిముద్ర సెన్సార్పై కిందికి స్వైప్ చేయండి."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="3888927017311372398">"మీ నోటిఫికేషన్లను చెక్ చేయడానికి, మీ పరికరం వెనుకవైపు ఉన్న వేలిముద్ర సెన్సార్పై క్రిందికి స్వైప్ చేయండి."</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="2956636269742745449">"నోటిఫికేషన్లను త్వరగా చూడండి"</string>
<string name="gesture_setting_on" msgid="3223448394997988591">"ఆన్"</string>
<string name="gesture_setting_off" msgid="3444029475726294919">"ఆఫ్"</string>
@@ -5007,8 +5007,8 @@
<string name="account_for_section_header" msgid="7466759342105251096">"<xliff:g id="USER_NAME">%1$s</xliff:g> యొక్క ఖాతాలు"</string>
<string name="configure_section_header" msgid="3126887329521705210">"కాన్ఫిగర్ చేయండి"</string>
<string name="auto_sync_account_title" msgid="1070908045600374254">"యాప్ డేటాను ఆటోమేటిక్గా సింక్ చేయండి"</string>
- <string name="auto_sync_personal_account_title" msgid="3544275021920818595">"వ్యక్తిగత డేటాని ఆటోమేటిక్గా సమకాలీకరించు"</string>
- <string name="auto_sync_work_account_title" msgid="6060310415978781885">"కార్యాలయ డేటాని ఆటోమేటిక్గా సమకాలీకరించు"</string>
+ <string name="auto_sync_personal_account_title" msgid="3544275021920818595">"వ్యక్తిగత డేటాను ఆటోమేటిక్గా సమకాలీకరించు"</string>
+ <string name="auto_sync_work_account_title" msgid="6060310415978781885">"కార్యాలయ డేటాను ఆటోమేటిక్గా సమకాలీకరించు"</string>
<string name="auto_sync_account_summary" msgid="7580352130028957346">"డేటాను ఆటోమేటిక్గా రిఫ్రెష్ చేసేలా యాప్లు అనుమతించబడతాయి"</string>
<string name="account_sync_title" msgid="7036067017433297574">"ఖాతా సింక్"</string>
<string name="account_sync_summary_some_on" msgid="911460286297968724">"<xliff:g id="ID_2">%2$d</xliff:g>లో <xliff:g id="ID_1">%1$d</xliff:g> అంశాలకు సింక్ ఆన్లో ఉంది"</string>
@@ -5056,9 +5056,9 @@
<item quantity="one">కనీసం <xliff:g id="COUNT_0">%d</xliff:g> CA ప్రమాణపత్రం</item>
</plurals>
<string name="enterprise_privacy_lock_device" msgid="464054894363899866">"నిర్వాహకులు పరికరాన్ని లాక్ చేయగలరు మరియు పాస్వర్డ్ని రీసెట్ చేయగలరు"</string>
- <string name="enterprise_privacy_wipe_device" msgid="869589182352244591">"పరికరంలో ఉన్న మొత్తం డేటాని నిర్వాహకులు తొలగించగలరు"</string>
- <string name="enterprise_privacy_failed_password_wipe_device" msgid="7045164901334821226">"మొత్తం పరికర డేటాని తొలగించడానికి ముందు పాస్వర్డ్ విఫలయత్నాలు"</string>
- <string name="enterprise_privacy_failed_password_wipe_work" msgid="2537582942554484170">"కార్యాలయ ప్రొఫైల్ డేటాని తొలగించడానికి ముందు పాస్వర్డ్ విఫలయత్నాలు"</string>
+ <string name="enterprise_privacy_wipe_device" msgid="869589182352244591">"పరికరంలో ఉన్న మొత్తం డేటాను నిర్వాహకులు తొలగించగలరు"</string>
+ <string name="enterprise_privacy_failed_password_wipe_device" msgid="7045164901334821226">"మొత్తం పరికర డేటాను తొలగించడానికి ముందు పాస్వర్డ్ విఫలయత్నాలు"</string>
+ <string name="enterprise_privacy_failed_password_wipe_work" msgid="2537582942554484170">"కార్యాలయ ప్రొఫైల్ డేటాను తొలగించడానికి ముందు పాస్వర్డ్ విఫలయత్నాలు"</string>
<plurals name="enterprise_privacy_number_failed_password_wipe" formatted="false" msgid="8811973918944217791">
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ప్రయత్నాలు</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ప్రయత్నం</item>
@@ -5129,7 +5129,7 @@
<string name="storage_percent_full" msgid="7211888326013020857">"ఉపయోగించబడింది"</string>
<string name="storage_usage_summary" msgid="4591121727356723463">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g> వినియోగించబడింది"</string>
<string name="storage_total_summary" msgid="7163360249534964272">"మొత్తం <xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
- <string name="clear_instant_app_data" msgid="5951258323364386357">"యాప్ను క్లియర్ చేయి"</string>
+ <string name="clear_instant_app_data" msgid="5951258323364386357">"యాప్ను క్లియర్ చేయండి"</string>
<string name="clear_instant_app_confirmation" msgid="3964731334459209482">"మీరు ఈ తక్షణ యాప్ను తీసివేయాలనుకుంటున్నారా?"</string>
<string name="launch_instant_app" msgid="8503927414339606561">"తెరువు"</string>
<string name="game_storage_settings" msgid="2521393115726178837">"గేమ్లు"</string>
@@ -5169,7 +5169,7 @@
<string name="automatic_storage_manager_deactivation_warning" msgid="4905106133215702099">"నిల్వ నిర్వాహికిని ఆఫ్ చేయాలా?"</string>
<string name="storage_movies_tv" msgid="7897612625450668593">"సినిమా & టీవీ యాప్లు"</string>
<string name="carrier_provisioning" msgid="7217868336140325816">"క్యారియర్ కేటాయింపు సమాచారం"</string>
- <string name="trigger_carrier_provisioning" msgid="3288805742683538597">"క్యారియర్ కేటాయింపు సక్రియం చేయండి"</string>
+ <string name="trigger_carrier_provisioning" msgid="3288805742683538597">"క్యారియర్ కేటాయింపు యాక్టివేట్ చేయండి"</string>
<string name="zen_suggestion_title" msgid="4555260320474465668">"అంతరాయం కలిగించవద్దును అప్డేట్ చేయి"</string>
<string name="zen_suggestion_summary" msgid="1984990920503217">"ఇతర వ్యాపకాలపై దృష్టి మరలకుండా ఉండడానికి నోటిఫికేషన్లను పాజ్ చేయండి"</string>
<string name="disabled_feature" msgid="7151433782819744211">"ఫీచర్ అందుబాటులో లేదు"</string>
@@ -5462,7 +5462,7 @@
<string name="privacy_dashboard_title" msgid="6845403825611829558">"గోప్యత"</string>
<string name="privacy_dashboard_summary" msgid="5775090172422786808">"అనుమతులు, ఖాతా యాక్టివిటీ, వ్యక్తిగత డేటా"</string>
<string name="privacy_controls_title" msgid="1383047169455206604">"కంట్రోల్లు"</string>
- <string name="contextual_card_dismiss_remove" msgid="8636557343011606722">"తీసివేయి"</string>
+ <string name="contextual_card_dismiss_remove" msgid="8636557343011606722">"తీసివేయండి"</string>
<string name="contextual_card_dismiss_keep" msgid="440516181066490747">"Keep"</string>
<string name="contextual_card_dismiss_confirm_message" msgid="6434344989238055188">"ఈ సూచనని తీసివేయలా?"</string>
<string name="contextual_card_removed_message" msgid="5755438207494260867">"సూచన తీసివేయబడింది"</string>
@@ -5493,7 +5493,7 @@
<string name="wfc_disclaimer_disagree_text" msgid="8424457394700137703">"వద్దు, ధన్యవాదాలు"</string>
<string name="wfc_disclaimer_location_title_text" msgid="7913919887475418423">"లొకేషన్"</string>
<string name="wfc_disclaimer_location_desc_text" msgid="1417004513415772582">"మీరు ఈ సర్వీస్ను ఎమర్జెన్సీ కాల్స్ కోసం ఉపయోగించినప్పుడు మీ క్యారియర్ మీ లొకేషన్ను సేకరించే అవకాశం ఉంది.\n\nవివరాల కోసం మీ క్యారియర్ గోప్యతా పాలసీని సందర్శించండి."</string>
- <string name="forget_passpoint_dialog_message" msgid="2433875063907365760">"మీరు ఏదైనా మిగిలిన సమయం లేదా డేటాకు యాక్సెస్ను కోల్పోవచ్చు. తీసివేసే ముందు మీ ప్రదాతతో తనిఖీ చేయండి."</string>
+ <string name="forget_passpoint_dialog_message" msgid="2433875063907365760">"మీరు ఏదైనా మిగిలిన సమయం లేదా డేటాకు యాక్సెస్ను కోల్పోవచ్చు. తీసివేసే ముందు మీ ప్రదాతతో చెక్ చేయండి."</string>
<string name="keywords_content_capture" msgid="7802155522681936956">"కంటెంట్ క్యాప్చర్, యాప్ కంటెంట్"</string>
<string name="content_capture" msgid="868372905432812238">"యాప్ కంటెంట్"</string>
<string name="content_capture_summary" msgid="49720773699715531">"Android సిస్టమ్కు కంటెంట్ను పంపడానికి యాప్లను అనుమతిస్తుంది"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 0488e1f..d43aa4c 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"ตั้งวันที่และเวลา"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"ตั้งวันที่ เวลา เขตเวลาและรูปแบบ"</string>
<string name="date_time_auto" msgid="4239202185055225869">"ตั้งเวลาอัตโนมัติ"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"ตั้งเขตเวลาอัตโนมัติ"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"ตั้งค่าอัตโนมัติ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ใช้เวลาเริ่มต้นในท้องถิ่น"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"รูปแบบ 24 ชั่วโมง"</string>
<string name="date_time_24hour" msgid="286679379105653406">"ใช้รูปแบบ 24 ชั่วโมง"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"บริการตำแหน่ง"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"บริการตำแหน่ง"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"บริการตำแหน่งสำหรับการทำงาน"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"ใช้ตำแหน่งเพื่อตั้งค่าเขตเวลา"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"ใช้ตำแหน่ง"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"ต้องใช้ตำแหน่งของอุปกรณ์"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"หากต้องการตั้งค่าเขตเวลาโดยใช้ตำแหน่ง ให้เปิดตำแหน่งแล้วอัปเดตการตั้งค่าเขตเวลา"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"การตั้งค่าตำแหน่ง"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"การตรวจหาเขตเวลาของสถานที่ปิดอยู่"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"ไม่รองรับการตรวจหาเขตเวลาของสถานที่"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"ไม่อนุญาตให้เปลี่ยนแปลงการตรวจหาเขตเวลาของสถานที่"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"ระบบอาจใช้ตำแหน่งเพื่อตั้งค่าเขตเวลา"</string>
<string name="location_network_based" msgid="5247042890080021887">"ตำแหน่ง WiFi และเครือข่าย"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"ให้แอปต่างๆ ใช้บริการระบุตำแหน่งของ Google เพื่อระบุตำแหน่งโดยประมาณของคุณรวดเร็วยิ่งขึ้น โดยจะมีการรวบรวมและส่งข้อมูลตำแหน่งที่ไม่ระบุชื่อให้ Google"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"ตำแหน่งที่กำหนดโดย WiFi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3427,7 +3434,7 @@
<string name="user_copy_apps_menu_title" msgid="5354300105759670300">"ติดตั้งแอปที่มี"</string>
<string name="nfc_payment_settings_title" msgid="2043139180030485500">"การชำระเงินแบบไม่ต้องสัมผัส"</string>
<string name="nfc_default_payment_settings_title" msgid="2150504446774382261">"แอปการชำระเงินเริ่มต้น"</string>
- <string name="nfc_default_payment_footer" msgid="978535088340021360">"หากต้องการชำระเงินโดยใช้แอปการชำระเงิน ให้นำด้านหลังของอุปกรณ์ไปจ่อไว้ที่เครื่องชำระเงิน"</string>
+ <string name="nfc_default_payment_footer" msgid="978535088340021360">"หากต้องการชำระเงินโดยใช้แอปการชำระเงิน ให้นำด้านหลังของอุปกรณ์ไปแตะที่เครื่องชำระเงิน"</string>
<string name="nfc_more_details" msgid="1700713533074275233">"ดูข้อมูลเพิ่มเติม"</string>
<string name="nfc_default_payment_workapp_confirmation_title" msgid="746921251872504687">"กำหนดให้แอปงานเป็นแอปชำระเงินเริ่มต้นไหม"</string>
<string name="nfc_default_payment_workapp_confirmation_message_title" msgid="1533022606333010329">"หากต้องการชำระเงินโดยใช้แอปงาน"</string>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, การโทรขั้นสูง, การโทรผ่าน 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"เพิ่มภาษา"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ขนาดข้อความ, ตัวอักษรขนาดใหญ่, แบบอักษรขนาดใหญ่, ข้อความขนาดใหญ่, สายตาเลือนราง, ทำให้ข้อความใหญ่ขึ้น, เครื่องมือขยายแบบอักษร, การขยายแบบอักษร"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"จอแสดงผลเปิดตลอดเวลาหรือ AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"เสียงเริ่มต้น"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"ระดับเสียงเรียกเข้าและการแจ้งเตือนอยู่ที่ <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"ระดับเสียง การสั่น ห้ามรบกวน"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"ไม่เลย"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"การแจ้งเตือนของอุปกรณ์และแอป"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"ควบคุมว่าจะให้แอปและอุปกรณ์ใดบ้างอ่านการแจ้งเตือนได้"</string>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 4acf69e..a684718 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"I-set ang petsa at oras"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Itakda ang petsa, oras, time zone, & mga format"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Awtomatikong itakda ang oras"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Awtomatikong itakda ang time zone"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Awtomatikong itakda"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Gamitin ang lokal na default"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-oras na format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Gamitin ang format na 24-oras"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Mga serbisyo ng lokasyon"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Mga serbisyo ng lokasyon"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Mga serbisyo ng lokasyon para sa trabaho"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Gamitin ang lokasyon para magtakda ng time zone"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Gamitin ang lokasyon"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Kailangan ang lokasyon ng device"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Para itakda ang time zone gamit ang iyong lokasyon, i-on ang lokasyon, pagkatapos ay i-update ang mga setting ng time zone"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Mga setting ng lokasyon"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Naka-disable ang pag-detect ng time zone gamit ang lokasyon"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Hindi sinusuportahan ang pag-detect ng time zone gamit ang lokasyon"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Hindi pinapayagan ang mga pagbabago sa pag-detect ng time zone gamit ang lokasyon"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Posibleng gamitin ang lokasyon para itakda ang time zone"</string>
<string name="location_network_based" msgid="5247042890080021887">"Lokasyon ng Wi-Fi, mobile network"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Ipagamit sa apps ang serbisyo ng lok. ng Google para mabilis na itantya ang iyong lok. Kokolektahin at ipapadala sa Google ang mga di alam na data ng lok."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Natukoy ng Wi-Fi ang lokasyon"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, advanced na pagtawag, 5g na pagtawag"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"idagdag ang wika, magdagdag ng wika"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"laki ng text, malaking print, malaking font, malaking text, malabong paningin, palakihin ang text, pampalaki ng font, pagpapalaki ng font"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"palaging naka-on na display, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Default na tunog"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Nasa <xliff:g id="PERCENTAGE">%1$s</xliff:g> ang volume ng pag-ring at notification"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Volume, pag-vibrate, Huwag Istorbohin"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Kontrolin kung aling mga app at device ang makakapagbasa ng mga notification"</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index e940da7..5b91e88 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Tarih ve saati ayarlayın"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Tarihi, saati, saat dilimini ve biçimleri ayarlayın"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Saati otomatik olarak ayarla"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Saat dilimini otomatik olarak ayarla"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Otomatik olarak ayarla"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Yerel ayar varsayılan değerini kullan"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 saat biçimi"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 saat biçimini kullan"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Konum hizmetleri"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Konum hizmetleri"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"İş için konum hizmetleri"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Saat dilimini ayarlamak için konumu kullan"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Konumu kullan"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Cihaz konumu gerekiyor"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Konumunuzu kullanarak saat dilimini ayarlamak için konumu açın, ardından saat dilimi ayarlarını güncelleyin"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Konum ayarları"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Konum saat dilimini algılama devre dışı bırakıldı"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Konum saat dilimini algılama desteklenmiyor"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Konum saat dilimini algılama değişikliğine izin verilmez"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Konum bilgisi, saat dilimini ayarlamak için kullanılabilir"</string>
<string name="location_network_based" msgid="5247042890080021887">"Kablosuz ve mobil ağ konumu"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Uygulamalar konumunuzu daha hızlı tahmin edebilmek için Google\'ın konum bilgilerini kullanabilsin. Anonim konum bilgileri toplanıp Google\'a gönderilir."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Konum, Kablosuz tarafından belirlendi"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, gelişmiş arama, 5g araması"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"dil ekle, bir dil ekle"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"metin boyutu, büyük baskı, büyük harfler, büyük metin, az görme, metni büyüt, yazı tipi büyütücü, yazı tipi büyütme"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"her zaman açık ekran, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Varsayılan ses"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Zil ve bildirim sesi <xliff:g id="PERCENTAGE">%1$s</xliff:g> düzeyinde"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Ses düzeyi, titreşim, Rahatsız Etmeyin"</string>
@@ -4001,14 +4007,8 @@
<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">
- <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">
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Hiçbir zaman"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Cihaz ve uygulama bildirimleri"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Bildirimlerin hangi uygulama ve cihazlar tarafından okunabileceğini kontrol edin"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index b5fbe36..c4bdd41 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -275,7 +275,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Установити дату та час"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Установити дату, час, часовий пояс і формати"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Установити час автоматично"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Установити часовий пояс автоматично"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Налаштовувати автоматично"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Використовувати місцеві налаштування за умовчанням"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24-годинний формат"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-годинний формат"</string>
@@ -418,7 +418,7 @@
<string name="security_settings_face_settings_require_confirmation" msgid="6603039421004198334">"Завжди просити підтвердження"</string>
<string name="security_settings_face_settings_require_confirmation_details" msgid="3498729789625461914">"Просити підтвердження під час використання фейсконтролю в додатках"</string>
<string name="security_settings_face_settings_remove_face_model" msgid="812920481303980846">"Видалити модель обличчя"</string>
- <string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Налаштування фейсконтролю"</string>
+ <string name="security_settings_face_settings_enroll" msgid="3726313826693825029">"Налаштувати фейсконтроль"</string>
<string name="security_settings_face_settings_footer" msgid="625696606490947189">"За допомогою фейсконтролю ви можете розблоковувати телефон або проходити автентифікацію в додатках, наприклад щоб увійти в обліковий запис або схвалити покупку.\n\nЗверніть увагу:\nза раз можна налаштувати фейсконтроль лише для одного обличчя. Щоб додати інше обличчя, видаліть поточне.\n\nПоглянувши на телефон, ви можете випадково розблокувати його в недоречний момент.\n\nБудь-хто може розблокувати телефон, якщо піднесе його до вашого обличчя.\n\nТелефон може розблокувати людина, схожа на вас, зокрема ваш близнюк."</string>
<string name="security_settings_face_settings_footer_attention_not_supported" msgid="2071065435536235622">"За допомогою фейсконтролю ви можете розблоковувати телефон або проходити автентифікацію в додатках, наприклад щоб увійти в обліковий запис або схвалити покупку.\n\nЗверніть увагу:\nза раз можна налаштувати фейсконтроль лише для одного обличчя. Щоб додати інше обличчя, видаліть поточне.\n\nПоглянувши на телефон, ви можете випадково розблокувати його в недоречний момент.\n\nБудь-хто може розблокувати телефон, якщо піднесе його до вашого обличчя, навіть коли у вас заплющені очі.\n\nТелефон може розблокувати людина, схожа на вас, зокрема ваш близнюк."</string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="2899669764446232715">"Видалити модель обличчя?"</string>
@@ -432,10 +432,10 @@
<string name="fingerprint_add_title" msgid="1837610443487902050">"Додати відбиток пальця"</string>
<string name="fingerprint_enable_keyguard_toggle_title" msgid="5451094461919440992">"блокування екрана"</string>
<plurals name="security_settings_fingerprint_preference_summary" formatted="false" msgid="6897454766137108776">
- <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> відбиток пальця додано</item>
- <item quantity="few"><xliff:g id="COUNT">%1$d</xliff:g> відбитки пальців додано</item>
- <item quantity="many"><xliff:g id="COUNT">%1$d</xliff:g> відбитків пальців додано</item>
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> відбитка пальця додано</item>
+ <item quantity="one">Додано <xliff:g id="COUNT">%1$d</xliff:g> відбиток пальця</item>
+ <item quantity="few">Додано <xliff:g id="COUNT">%1$d</xliff:g> відбитки пальців</item>
+ <item quantity="many">Додано <xliff:g id="COUNT">%1$d</xliff:g> відбитків пальців</item>
+ <item quantity="other">Додано <xliff:g id="COUNT">%1$d</xliff:g> відбитка пальця</item>
</plurals>
<string name="security_settings_fingerprint_preference_summary_none" msgid="1044059475710838504"></string>
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="7931650601996313070">"Налаштуйте \"Відбиток пальця\""</string>
@@ -665,7 +665,7 @@
<string name="unlock_set_unlock_launch_picker_enable_summary" msgid="1699993191343299179">"Вибрати спосіб блокування екрана"</string>
<string name="unlock_set_unlock_off_title" msgid="2831957685685921667">"Немає"</string>
<string name="unlock_set_unlock_off_summary" msgid="4578319976164001322"></string>
- <string name="unlock_set_unlock_none_title" msgid="2844029875174409728">"Проведення"</string>
+ <string name="unlock_set_unlock_none_title" msgid="2844029875174409728">"Провести по екрану"</string>
<string name="unlock_set_unlock_none_summary" msgid="641298008390890152">"Без захисту"</string>
<string name="unlock_set_unlock_pattern_title" msgid="8224895208452995332">"Ключ"</string>
<string name="unlock_set_unlock_pattern_summary" msgid="4482018884090552709">"Середній рівень захисту"</string>
@@ -692,7 +692,7 @@
<string name="biometrics_unlock_title" msgid="616524056055233041">"Телефон можна розблокувати за допомогою фейсконтролю чи відбитка пальця. З міркувань безпеки для цих функцій потрібно налаштувати резервний спосіб розблокування."</string>
<string name="unlock_set_unlock_disabled_summary" msgid="4022867760387966129">"Вимкнено адміністратором, правилом шифрування або сховищем облікових даних"</string>
<string name="unlock_set_unlock_mode_off" msgid="4632139864722236359">"Немає"</string>
- <string name="unlock_set_unlock_mode_none" msgid="5596049938457028214">"Проведення"</string>
+ <string name="unlock_set_unlock_mode_none" msgid="5596049938457028214">"Провести по екрану"</string>
<string name="unlock_set_unlock_mode_pattern" msgid="1926480143883094896">"Ключ"</string>
<string name="unlock_set_unlock_mode_pin" msgid="9028659554829888373">"PIN-код"</string>
<string name="unlock_set_unlock_mode_password" msgid="8810609692771987513">"Пароль"</string>
@@ -1932,7 +1932,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Геолокація"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Геолокація"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Служби локації для роботи"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Визначати часовий пояс за місцезнаходженням"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Використовувати геодані"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Потрібен доступ до геоданих пристрою"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Щоб установити часовий пояс за допомогою геоданих, увімкніть доступ до них, а потім оновіть налаштування часового поясу"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Доступ до моїх геоданих"</string>
@@ -1941,6 +1941,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Визначення часового поясу за допомогою геолокації вимкнено"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Визначення часового поясу за допомогою геолокації не підтримується"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Ви не можете змінити налаштування визначення часового поясу за допомогою геолокації"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Часовий пояс може визначатися за місцезнаходженням"</string>
<string name="location_network_based" msgid="5247042890080021887">"Місцезнах. Wi-Fi і моб. мережі"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Дозвольте програмам користуватися службою визначення місцезнаходження Google, щоб швидше оцінювати ваше місцезнаходження. Анонімна інформація про місцезнаходження збиратиметься та надсилатиметься в Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Місцезнаходження, визначене Wi-Fi"</string>
@@ -1986,6 +1987,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2999,6 +3002,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>
@@ -3088,6 +3092,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>
@@ -3775,8 +3782,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, дзвінки з розширеними можливостями, дзвінки 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"додати мову, додавання мови"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"розмір тексту, великі букви, великий шрифт, великий текст, поганий зір, зробити текст більшим, збільшити шрифт, збільшення шрифту"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"інформація на заблокованому екрані, always on display"</string>
<string name="default_sound" msgid="6604374495015245195">"Звук за умовчанням"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Гучність дзвінків і сповіщень: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Гучність, вібросигнал і режим \"Не турбувати\""</string>
@@ -4089,18 +4095,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Ніколи"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Сповіщення додатків і пристроїв"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Укажіть, які додатки та пристрої можуть переглядати сповіщення"</string>
@@ -5946,7 +5942,7 @@
<string name="ingress_rate_limit_title" msgid="2106694002836274350">"Ліміт швидкості завантаження в мережі"</string>
<string name="ingress_rate_limit_summary" msgid="1097811019742438371">"Налаштуйте ліміт вхідної пропускної спроможності мережі, який застосовуватиметься до всіх мереж, що забезпечують інтернет-з’єднання."</string>
<string name="ingress_rate_limit_dialog_title" msgid="5359461052422633789">"Налаштувати ліміт швидкості завантаження в мережі"</string>
- <string name="ingress_rate_limit_no_limit_entry" msgid="8741098826008012163">"Немає ліміту"</string>
+ <string name="ingress_rate_limit_no_limit_entry" msgid="8741098826008012163">"Немає обмеження"</string>
<string name="bluetooth_broadcast_dialog_title" msgid="9172775308463135884">"Трансляція"</string>
<string name="bluetooth_broadcast_dialog_broadcast_app" msgid="1016617579194329005">"Змінити додаток для трансляції на <xliff:g id="CURRENTAPP">%1$s</xliff:g>"</string>
<string name="bluetooth_broadcast_dialog_find_message" msgid="6621660851669953883">"Слухайте трансляції з пристроїв поблизу"</string>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 40c8b43..b3bce72 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"تاریخ اور وقت سیٹ کریں"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"تاریخ، وقت، ٹائم زون اور فارمیٹس کو سیٹ کریں"</string>
<string name="date_time_auto" msgid="4239202185055225869">"خودکار طور پر وقت سیٹ کریں"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"خودکار طور پر ٹائم زون سیٹ کریں"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"خودکار طور پر سیٹ کریں"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"مقامی ڈیفالٹ کا استعمال کریں"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 گھنٹے کا فارمیٹ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 گھنٹے کا فارمیٹ استعمال کریں"</string>
@@ -739,7 +739,7 @@
<string name="unlock_footer_high_complexity_requested" msgid="4471274783909915352">"<xliff:g id="APP_NAME">%1$s</xliff:g> مضبوط PIN یا پاس ورڈ کی تجویز کرتی ہے اور ہو سکتا ہے کہ ان میں سے کسی ایک کے بغیر توقع کے مطابق کام نہ کرے"</string>
<string name="unlock_footer_medium_complexity_requested" msgid="5515870066751600640">"<xliff:g id="APP_NAME">%1$s</xliff:g> نئے PIN یا پاس ورڈ کی تجویز کرتی ہے اور ہو سکتا ہے کہ ان میں سے کسی ایک کے بغیر توقع کے مطابق کام نہ کرے"</string>
<string name="unlock_footer_low_complexity_requested" msgid="2517656037576567971">"<xliff:g id="APP_NAME">%1$s</xliff:g> ایک نئے پیٹرن، PIN یا پاس ورڈ کی تجویز کرتی ہے اور ہو سکتا ہے کہ ان میں سے کسی ایک کے بغیر توقع کے مطابق کام نہ کرے"</string>
- <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> نئے اسکرین لاک کی تجویز کرتی ہے"</string>
+ <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> نئے اسکرین لاک کی تجویز کرتی ہے"</string>
<string name="lock_failed_attempts_before_wipe" msgid="6874652886647631418">"دوبارہ کوشش کریں۔ کوشش <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g> از <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>۔"</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="7450322567217745999">"آپ کا ڈیٹا حذف کر دیا جائے گا"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="5816668400104558952">"اگر آپ نے اگلی کوشش میں غلط پیٹرن درج کیا، تو اس آلے کا ڈیٹا حذف کر دیا جائے گا"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"مقام کی سروسز"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"مقام کی سروسز"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"دفتر کے لیے مقام کی سروسز"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"ٹائم زون سیٹ کرنے کے لئے مقام کا استعمال کریں"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"مقام استعمال کریں"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"آلہ کا مقام درکار ہے"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"اپنے مقام کا استعمال کرتے ہوئے ٹائم زون کو سیٹ کرنے کیلئے، مقام کو آن کریں پھر ٹائم زون کی ترتیبات کو اپ ڈیٹ کریں"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"مقام کی ترتیبات"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"مقام کے ٹائم زون کی شناخت غیر فعال ہے"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"مقام کے ٹائم زون کی شناخت تعاون یافتہ نہیں ہے"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"مقام کے ٹائم زون کی شناخت کی تبدیلیوں کی اجازت نہیں ہے"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"مقام کو ٹائم زون سیٹ کرنے کے لیے استعمال کیا جا سکتا ہے"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi اور موبائل نیٹ ورک مقام"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"اپنے مقام کا تیزی سے اندازہ لگانے کیلئے ایپس کو Google کی مقام کی سروس کا استعمال کرنے دیں۔ گمنام مقام کا ڈیٹا جمع کیا جائے گا اور Google کو بھیجا جائے گا۔"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi‑Fi کے ذریعہ مقام کا تعین کیا گیا"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g، vonr، اعلی درجے کی کالنگ، 5G کالنگ"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"زبان شامل کریں، ایک زبان شامل کریں"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"ٹیکسٹ کا سائز، بڑا پرنٹ، بڑا فونٹ، بڑا ٹیکسٹ، کم وژن، ٹیکسٹ کو بڑا کرنا، فونٹ کو بڑا کرنے والا ٹول، فونٹ بڑا کرنا"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"ہمیشہ آن ڈسپلے، AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"ڈیفالٹ ساؤنڈ"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"گھنٹی بجنے اور اطلاعات کا والیوم <xliff:g id="PERCENTAGE">%1$s</xliff:g> پر ہے"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"والیوم، ارتعاش، ڈسٹرب نہ کریں"</string>
@@ -4001,14 +4007,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"کبھی نہیں"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"آلے اور ایپ کی اطلاعات"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"کنٹرول کریں کہ کون سی ایپس اور آلات اطلاعات کو پڑھ سکتے ہیں"</string>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 3931700..d1e9f52 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Sana va vaqt o‘rnatish"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Sana, vaqt, vaqt zonasi, & formatlarini o‘rnatish"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Vaqtni avtomatik sozlash"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Vaqt mintaqasini avtomatik belgilash"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Avtomatik aniqlansin"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Birlamchi hududiy sozlamalar"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 soatlik format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 soatlik format"</string>
@@ -473,7 +473,7 @@
<string name="security_settings_fingerprint_v2_enroll_acquire_too_fast" msgid="5891227328100822018">"Barmoqni tebranishni sezganda oling"</string>
<string name="security_settings_fingerprint_v2_enroll_acquire_too_bright" msgid="769646735950329315">"Yoriqroq joyga borib, qaytadan urining"</string>
<string name="security_settings_fingerprint_v2_enroll_error_max_attempts" msgid="1464972470750764128">"Urinishlar soni qolmadi"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Planshetni qulfdan chiqarish yoki ilovalarga hisobingiz bilan kirishda shaxsingizni tasdiqlash uchun barmoq izingizdan foydalaning"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"Planshetingiz qulfini ochish yoki ilovalarga hisobingiz bilan kirishda shaxsingizni tasdiqlash uchun barmoq izingizdan foydalaning"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"Qurilmani qulfdan chiqarish yoki ilovalarga hisobingiz bilan kirishda shaxsingizni tasdiqlash uchun barmoq izingizdan foydalaning"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"Telefonni qulfdan chiqarish yoki ilovalarga hisobingiz bilan kirishda shaxsingizni tasdiqlash uchun barmoq izingizdan foydalaning"</string>
<string name="security_settings_biometric_preference_title" msgid="298146483579539448">"Yuz va barmoq izi bilan ochish"</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Joylashuvni aniqlash xizmatlari"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Joylashuvni aniqlash xizmatlari"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Ish uchun joylashuv xizmatlari"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Vaqt mintaqasini sozlash uchun geolokatsiyadan foydalanish"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Geolokatsiyani yoqish"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Qurilmaning joylashuvi haqidagi axborot zarur"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Joylashuv axborotingiz yordamida vaqt mintaqasini sozlash uchun geolokatsiyani yoqing, keyin vaqt mintaqasi sozlamalarini yangilang"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Joylashuv sozlamalari"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Vaqt mintaqasini joylashuv asosida aniqlash yoqilmagan"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Vaqt mintaqasini joylashuv asosida aniqlash imkonsiz"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Vaqt mintaqasini joylashuv asosida aniqlash mumkin emas"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Vaqt mintaqasini belgilash uchun joylashuvdan foydalanish mumkin"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi‑Fi & uyali tarmoq joylashuvi"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Joylashuvingizni tezroq aniqlash uchun ilovalarga Google joylashuv xizmatlaridan foydalanishga ruxsat berish. Joylashuv haqida anonim ma’lumot to‘planib, Google‘ga yuboriladi."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Wi‑Fi orqali aniqlangan joylashuv"</string>
@@ -1944,6 +1945,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>
@@ -2925,6 +2927,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>
@@ -3014,6 +3017,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>
@@ -3691,8 +3697,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, kengaytirilgan chaqiruv, 5g chaqiruv"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"til kiritish, tilni kiritish"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"matn oʻlchami, katta bosma, katta yozuv, katta matn, zaif koʻrish, matnni kattalashtirish, yozuvni kattalashtirish, katta yozuv"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"doim yoniq ekran, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Birlamchi ovoz"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Rington va bildirishnoma balandligi: 80<xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Tovush balandligi, tebranish, Bezovta qilinmasin rejimi"</string>
@@ -4003,13 +4008,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>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 080b0b4..cc3395f 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Đặt ngày giờ"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Đặt ngày, giờ, múi giờ & định dạng"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Tự động đặt giờ"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Tự động đặt múi giờ"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Đặt tự động"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Sử dụng định dạng của địa phương"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"Định dạng 24 giờ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Sử dụng định dạng 24 giờ"</string>
@@ -741,7 +741,7 @@
<string name="unlock_footer_high_complexity_requested" msgid="4471274783909915352">"<xliff:g id="APP_NAME">%1$s</xliff:g> đề xuất một mã PIN hoặc mật khẩu mạnh. Nếu không, ứng dụng này có thể không hoạt động như mong đợi"</string>
<string name="unlock_footer_medium_complexity_requested" msgid="5515870066751600640">"<xliff:g id="APP_NAME">%1$s</xliff:g> đề xuất một mã PIN hoặc mật khẩu mới. Nếu không, ứng dụng này có thể không hoạt động như mong đợi"</string>
<string name="unlock_footer_low_complexity_requested" msgid="2517656037576567971">"<xliff:g id="APP_NAME">%1$s</xliff:g> đề xuất một hình mở khóa, mã PIN hoặc mật khẩu mới. Nếu không, ứng dụng này có thể không hoạt động như mong đợi"</string>
- <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> đề xuất khóa màn hình mới"</string>
+ <string name="unlock_footer_none_complexity_requested" msgid="8534900170428140529">"<xliff:g id="APP_NAME">%1$s</xliff:g> đề xuất phương thức khóa màn hình mới"</string>
<string name="lock_failed_attempts_before_wipe" msgid="6874652886647631418">"Thử lại. Lần thử <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g>/<xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="7450322567217745999">"Dữ liệu của bạn sẽ bị xóa"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="5816668400104558952">"Nếu bạn nhập hình mở khóa không chính xác vào lần thử tiếp theo, dữ liệu trên thiết bị này sẽ bị xóa"</string>
@@ -1326,7 +1326,7 @@
<string name="auto_rotate_summary_a11y" msgid="1505094100328581685">"Khi bạn chuyển điện thoại giữa chế độ dọc và chế độ ngang"</string>
<string name="screen_resolution_title" msgid="2690518693139811486">"Độ phân giải màn hình"</string>
<string name="screen_resolution_option_high" msgid="2617496842852992853">"Độ phân giải cao"</string>
- <string name="screen_resolution_option_highest" msgid="9134161136319625840">"Độ phân giải cao"</string>
+ <string name="screen_resolution_option_highest" msgid="9134161136319625840">"Độ phân giải đầy đủ"</string>
<string name="screen_resolution_summary_high" msgid="5611896959631297437">"FHD+ 1080p"</string>
<string name="screen_resolution_summary_highest" msgid="2609112310453953756">"QHD+ 1440p"</string>
<string name="screen_resolution_footer" msgid="6772341522952795647">"Chế độ độ phân giải cao sử dụng nhiều pin hơn. Việc chuyển đổi độ phân giải của bạn có thể khiến một số ứng dụng khởi động lại."</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Dịch vụ vị trí"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Dịch vụ vị trí"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Dịch vụ vị trí cho công việc"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Sử dụng thông tin vị trí để đặt múi giờ"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Dùng thông tin vị trí"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Cần có thông tin vị trí của thiết bị"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Để đặt múi giờ bằng thông tin vị trí của bạn, hãy bật dịch vụ vị trí rồi cập nhật chế độ cài đặt múi giờ"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Cài đặt vị trí"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Tùy chọn Phát hiện múi giờ theo vị trí bị tắt"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Tùy chọn Phát hiện múi giờ theo vị trí không được hỗ trợ"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Không được phép thay đổi tùy chọn Phát hiện múi giờ theo vị trí"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Vị trí có thể dùng để đặt múi giờ"</string>
<string name="location_network_based" msgid="5247042890080021887">"Vị trí Wi‑Fi và mạng di động"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Cho phép ứng dụng dùng DV vị trí của Google để ước đoán vị trí nhanh hơn. Dữ liệu vị trí ẩn danh sẽ được thu thập và gửi tới Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Vị trí được xác định bằng Wi‑Fi"</string>
@@ -1944,6 +1945,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2752,7 +2755,7 @@
<string name="battery_tip_high_usage_title" msgid="9110720762506146697">"Mức sử dụng pin cao"</string>
<string name="battery_tip_high_usage_summary" msgid="3938999581403084551">"Xem các ứng dụng có mức sử dụng pin cao nhất"</string>
<string name="battery_tip_limited_temporarily_title" msgid="5231061779363606924">"Chức năng sạc tạm thời bị hạn chế"</string>
- <string name="battery_tip_limited_temporarily_summary" msgid="8504402301403419444">"Để kéo dài tuổi thọ pin. Tìm hiểu thêm."</string>
+ <string name="battery_tip_limited_temporarily_summary" msgid="8504402301403419444">"Để kéo dài thời lượng pin. Tìm hiểu thêm."</string>
<string name="battery_tip_limited_temporarily_dialog_resume_charge" msgid="2302295458913832342">"Tiếp tục sạc"</string>
<string name="battery_tip_limited_temporarily_dialog_msg" product="default" msgid="8125639486214812735">"Trong một số điều kiện, chẳng hạn như nhiệt độ cao và thời gian sạc lâu, mức sạc có thể bị hạn chế ở <xliff:g id="PERCENT">%1$s</xliff:g> để duy trì độ bền của pin.\n\nKhi các điều kiện đó chấm dứt, điện thoại của bạn sẽ tự động sạc như bình thường."</string>
<string name="battery_tip_limited_temporarily_dialog_msg" product="tablet" msgid="3890877885222574553">"Trong một số điều kiện, chẳng hạn như nhiệt độ cao và thời gian sạc lâu, mức sạc có thể bị hạn chế ở <xliff:g id="PERCENT">%1$s</xliff:g> để duy trì độ bền của pin.\n\nKhi các điều kiện đó chấm dứt, điện thoại của bạn sẽ tự động sạc như bình thường."</string>
@@ -2925,6 +2928,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>
@@ -3014,6 +3018,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>
@@ -3143,7 +3150,7 @@
<string name="background_data" msgid="321903213000101158">"Dữ liệu nền"</string>
<string name="background_data_summary" msgid="6572245922513522466">"Ứng dụng có thể đ.bộ hóa, gửi & nhận dữ liệu bất kỳ lúc nào"</string>
<string name="background_data_dialog_title" msgid="1692005302993229867">"Tắt dữ liệu nền?"</string>
- <string name="background_data_dialog_message" msgid="7760280837612824670">"Tắt dữ liệu nền sẽ kéo dài tuổi thọ pin và giảm mức sử dụng dữ liệu. Một số ứng dụng vẫn có thể sử dụng kết nối dữ liệu nền."</string>
+ <string name="background_data_dialog_message" msgid="7760280837612824670">"Tắt dữ liệu nền sẽ kéo dài thời lượng pin và giảm mức sử dụng dữ liệu. Một số ứng dụng vẫn có thể sử dụng kết nối dữ liệu nền."</string>
<string name="sync_automatically" msgid="4874122892765430304">"Tự động đồng bộ hóa dữ liệu ứng dụng"</string>
<string name="sync_enabled" msgid="5794103781356455043">"Tính năng đồng bộ hóa đang BẬT"</string>
<string name="sync_disabled" msgid="1636223106968593391">"Tính năng đồng bộ hóa đang TẮT"</string>
@@ -3691,8 +3698,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, tính năng gọi nâng cao, gọi qua 5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"thêm ngôn ngữ, thêm một ngôn ngữ"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"cỡ chữ, bản in lớn, phông chữ lớn, chữ lớn, thị lực kém, tăng cỡ chữ, tăng kích cỡ phông chữ, phóng to phông chữ"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"màn hình luôn bật, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Âm thanh mặc định"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Âm lượng chuông và thông báo ở mức <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Âm lượng, rung, Không làm phiền"</string>
@@ -4003,14 +4009,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<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>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Kiểm soát những ứng dụng và thiết bị nào có thể đọc thông báo"</string>
@@ -5073,7 +5073,7 @@
<string name="toast_allows_restricted_settings_successfully" msgid="1219116121291466102">"Đã cho phép <xliff:g id="APP_NAME">%s</xliff:g> sử dụng các chế độ cài đặt bị hạn chế"</string>
<string name="blocked_by_restricted_settings_content" msgid="3628660029601161080">"Để đảm bảo an toàn cho bạn, chế độ cài đặt này hiện bị vô hiệu hoá."</string>
<string name="financed_privacy_settings" msgid="2575114436197204145">"Thông tin về thiết bị trả góp"</string>
- <string name="financed_privacy_intro" msgid="7836497475568741579">"Tổ chức tín dụng có thể thay đổi các chế độ cài đặt và cài đặt phần mềm trên thiết bị này trong quá trình thiết lập.\n\nNếu bạn chưa thanh toán, tổ chức tín dụng có thể khoá thiết bị của bạn và thay đổi các chế độ cài đặt thiết bị.\n\nĐể tìm hiểu thêm, hãy liên hệ với tổ chức tín dụng."</string>
+ <string name="financed_privacy_intro" msgid="7836497475568741579">"Tổ chức tín dụng có thể thay đổi các chế độ cài đặt và cài đặt phần mềm trên thiết bị này trong quá trình thiết lập.\n\nNếu không thanh toán đúng hạn, tổ chức tín dụng có thể khoá thiết bị của bạn và thay đổi các chế độ cài đặt thiết bị.\n\nĐể tìm hiểu thêm, hãy liên hệ với tổ chức tín dụng."</string>
<string name="financed_privacy_restrictions_category" msgid="2472659467919651602">"Nếu mua trả góp thiết bị, bạn không thể:"</string>
<string name="financed_privacy_install_apps" msgid="7381718005710210851">"Cài đặt các ứng dụng không phải của Cửa hàng Play"</string>
<string name="financed_privacy_safe_mode" msgid="5362149445732602578">"Khởi động lại thiết bị ở chế độ an toàn"</string>
@@ -5090,7 +5090,7 @@
<string name="financed_privacy_notifications" msgid="5932303271274089968">"Xem thông báo và tin nhắn văn bản"</string>
<string name="financed_privacy_allowlisted_apps" msgid="8333040812194879963">"Truy cập các ứng dụng được tổ chức tín dụng cho phép"</string>
<string name="financed_privacy_fully_paid_category" msgid="9221763928564246923">"Sau khi bạn trả toàn bộ phí:"</string>
- <string name="financed_privacy_restrictions_removed" msgid="3182636815294595072">"Tất cả các hạn chế đều bị xoá khỏi thiết bị"</string>
+ <string name="financed_privacy_restrictions_removed" msgid="3182636815294595072">"Tất cả các hạn chế đều được dỡ bỏ khỏi thiết bị"</string>
<string name="financed_privacy_uninstall_creditor_app" msgid="6339004120497310705">"Bạn có thể gỡ cài đặt ứng dụng của tổ chức tín dụng"</string>
<plurals name="default_camera_app_title" formatted="false" msgid="8112432929729136399">
<item quantity="other">Ứng dụng Máy ảnh</item>
@@ -5233,9 +5233,9 @@
<string name="media_output_switching" msgid="7488216595474868546">"Đang chuyển đổi…"</string>
<string name="take_call_on_title" msgid="1159417893879946757">"Thực hiện cuộc gọi trên"</string>
<string name="cannot_change_apn_toast" msgid="296540724089240405">"Không thể thay đổi APN (Tên điểm truy cập) này."</string>
- <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Tăng tuổi thọ pin của máy tính bảng"</string>
- <string name="battery_suggestion_title" product="device" msgid="2280773774080720377">"Tăng tuổi thọ pin của thiết bị"</string>
- <string name="battery_suggestion_title" product="default" msgid="4811554469047272537">"Tăng tuổi thọ pin của điện thoại"</string>
+ <string name="battery_suggestion_title" product="tablet" msgid="1525940496459255289">"Tăng thời lượng pin của máy tính bảng"</string>
+ <string name="battery_suggestion_title" product="device" msgid="2280773774080720377">"Tăng thời lượng pin của thiết bị"</string>
+ <string name="battery_suggestion_title" product="default" msgid="4811554469047272537">"Tăng thời lượng pin của điện thoại"</string>
<string name="battery_suggestion_summary" msgid="8186720080540016197"></string>
<string name="gesture_prevent_ringing_screen_title" msgid="8293094715267769349">"Ngăn đổ chuông"</string>
<string name="gesture_prevent_ringing_title" msgid="5978577898997523581">"Nhấn đồng thời nút Nguồn và nút Tăng âm lượng để"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 65a8049..778bc96 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"设置日期和时间"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"设置日期、时间、时区和格式"</string>
<string name="date_time_auto" msgid="4239202185055225869">"自动设置时间"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"自动设置时区"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"自动设置"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"使用默认语言区域"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 小时制"</string>
<string name="date_time_24hour" msgid="286679379105653406">"使用 24 小时制"</string>
@@ -473,7 +473,7 @@
<string name="security_settings_fingerprint_v2_enroll_acquire_too_fast" msgid="5891227328100822018">"请在感觉到振动后抬起手指"</string>
<string name="security_settings_fingerprint_v2_enroll_acquire_too_bright" msgid="769646735950329315">"请移到光线较柔和的地方,然后重试"</string>
<string name="security_settings_fingerprint_v2_enroll_error_max_attempts" msgid="1464972470750764128">"您已达到尝试次数上限"</string>
- <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"您可以使用指纹解锁平板电脑或验证自己的身份,例如在登录应用时"</string>
+ <string name="security_settings_fingerprint_v2_home_screen_text" product="tablet" msgid="179325591887291180">"您可以使用指纹解锁平板电脑,或验证自己的身份(例如在登录应用时)"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="device" msgid="2503218139575057099">"您可以使用指纹解锁设备或验证自己的身份,例如在登录应用时"</string>
<string name="security_settings_fingerprint_v2_home_screen_text" product="default" msgid="481286891358925579">"您可以使用指纹解锁手机或验证自己的身份,例如在登录应用时"</string>
<string name="security_settings_biometric_preference_title" msgid="298146483579539448">"人脸解锁和指纹解锁"</string>
@@ -1888,7 +1888,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"位置信息服务"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"位置信息服务"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"工作用位置信息服务"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"使用位置信息设置时区"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"使用位置信息"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"需要设备位置信息"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"如需根据您的位置信息设置时区,请开启位置信息功能,然后更新时区设置"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"位置信息设置"</string>
@@ -1897,6 +1897,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"位置信息时区检测已停用"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"不支持位置信息时区检测"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"不允许更改位置信息时区检测"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"系统可能会根据位置信息设置时区"</string>
<string name="location_network_based" msgid="5247042890080021887">"WLAN和移动网络位置信息"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"允许应用使用Google位置信息服务更快地大致了解您所在的位置。系统将收集匿名位置数据并将其发送给Google。"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"通过WLAN确定位置"</string>
@@ -1942,6 +1943,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2923,6 +2926,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>
@@ -3012,6 +3016,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>
@@ -3689,8 +3696,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, 高级通话, 5g 通话, advanced calling, 5g calling"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"添加语言, 添加一种语言"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"文字大小, 大字版, 大字体, 大文字, 弱视, 放大文字, 字体放大工具, 字体放大, text size, large print, large font, large text, low vision, make text bigger, font enlarger, font enlargement"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"显示屏始终保持开启状态, always on display, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"默认铃声"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"铃声和通知音量为 <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"音量、振动、勿扰"</string>
@@ -3999,16 +4005,10 @@
<string name="notification_channel_summary_default" msgid="3674057458265438896">"可能会响铃或振动(取决于手机设置)"</string>
<string name="notification_channel_summary_high" msgid="3411637309360617621">"当设备处于解锁状态时,在屏幕顶端以横幅形式显示通知"</string>
<string name="notification_switch_label" msgid="8029371325967501557">"所有“<xliff:g id="APP_NAME">%1$s</xliff:g>”通知"</string>
- <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>的所有通知"</string>
+ <string name="notification_app_switch_label" msgid="4422902423925084193">"所有<xliff:g id="APP_NAME">%1$s</xliff:g>通知"</string>
<string name="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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"永不"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"设备和应用通知"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"控制哪些应用和设备能够读取通知"</string>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index aa2e167..c87663d 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"設定日期及時間"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"設定日期、時間、時區和格式"</string>
<string name="date_time_auto" msgid="4239202185055225869">"自動設定時間"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"自動設定時區"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"自動設定"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"使用地區設定預設值"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 小時格式"</string>
<string name="date_time_24hour" msgid="286679379105653406">"使用 24 小時格式"</string>
@@ -1891,7 +1891,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"定位服務"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"定位服務"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"工作用定位服務"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"使用位置設定時區"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"使用位置資訊"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"需要裝置位置權限"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"如要根據所在位置設定時區,請開啟位置,然後更新時區設定"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"位置設定"</string>
@@ -1900,6 +1900,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"位置時區偵測已停用"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"不支援位置時區偵測"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"不允許變更位置時區偵測"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"設定時區時可能需要位置資訊"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi 和流動網絡位置"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"允許應用程式使用 Google 的定位服務,藉此更快確定您的約略位置。系統會收集匿名的位置資料傳送給 Google。"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"根據 Wi-Fi 確定位置"</string>
@@ -1945,6 +1946,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2926,6 +2929,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>
@@ -3015,6 +3019,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>
@@ -3692,8 +3699,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, 進階通話, 5g 通話"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"新增語言、加入語言"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"文字大小, 大字, 大字體, 大型文字, 低視力, 放大字體, 字體放大工具, 字體放大"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"持續顯示畫面, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"預設音效"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"鈴聲和通知音量已設為 <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"音量、震動、請勿騷擾"</string>
@@ -4004,14 +4010,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"永不"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"裝置和應用程式通知"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"控制哪些應用程式和裝置可以讀取通知"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index db4dc8e..3109b1f 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"設定日期和時間"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"設定日期、時間、時區及時間格式"</string>
<string name="date_time_auto" msgid="4239202185055225869">"自動設定時間"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"自動設定時區"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"自動設定"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"使用地區設定預設值"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24 小時制"</string>
<string name="date_time_24hour" msgid="286679379105653406">"使用 24 小時格式"</string>
@@ -1890,7 +1890,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"定位服務"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"定位服務"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"工作用定位服務"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"使用位置資訊設定時區"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"使用定位功能"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"必須開啟裝置定位功能"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"如要根據所在位置設定時區,請開啟定位功能,然後更新時區設定"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"位置資訊設定"</string>
@@ -1899,6 +1899,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"位置時區偵測已停用"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"不支援位置時區偵測"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"不允許變更位置時區偵測"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"您可以使用位置資訊設定時區"</string>
<string name="location_network_based" msgid="5247042890080021887">"Wi-Fi 和行動網路位置"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"允許應用程式使用 Google 的定位服務加速判斷你的約略位置。系統會收集匿名的位置資料並傳送給 Google。"</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"根據 Wi-Fi 判定位置"</string>
@@ -1944,6 +1945,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -1973,7 +1976,7 @@
<string name="lockpassword_forgot_password" msgid="5730587692489737223">"忘記密碼了嗎?"</string>
<string name="lockpassword_forgot_pattern" msgid="1196116549051927516">"忘記解鎖圖案了嗎?"</string>
<string name="lockpassword_forgot_pin" msgid="7164232234705747672">"忘記 PIN 碼了嗎?"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"請用裝置解鎖圖案解鎖以繼續"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="7692794426682501482">"請用裝置解鎖圖案解鎖"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="9206928587904701094">"輸入裝置 PIN 碼即可繼續"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="2616127423884477152">"請輸入你的裝置密碼以繼續作業"</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="9110305410672321714">"請用工作資料夾的解鎖圖案解鎖以繼續"</string>
@@ -2077,7 +2080,7 @@
<string name="enable_text" msgid="8570798764647110430">"啟用"</string>
<string name="clear_user_data_text" msgid="6773186434260397947">"清除儲存空間"</string>
<string name="app_factory_reset" msgid="8974044931667015201">"解除安裝更新"</string>
- <string name="app_restricted_settings_lockscreen_title" msgid="5993061278264872648">"允許受限制的設定"</string>
+ <string name="app_restricted_settings_lockscreen_title" msgid="5993061278264872648">"解除受限制的設定"</string>
<string name="auto_launch_enable_text" msgid="8912714475823807798">"你選取的某些活動預設會在這個應用程式中開啟。"</string>
<string name="always_allow_bind_appwidgets_text" msgid="2069415023986858324">"你已選擇允許這個應用程式建立小工具並存取其資料。"</string>
<string name="auto_launch_disable_text" msgid="502648841250936209">"沒有預設值。"</string>
@@ -2925,6 +2928,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>
@@ -3014,6 +3018,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>
@@ -3691,8 +3698,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"vo5g, vonr, 進階通話, 5g 通話"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"新增語言, 新增一種語言"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"文字大小, 大字, 大字型, 大型文字, 低視能, 放大文字, 放大字型, 使用大字型"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"持續待機螢幕,AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"預設音效"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"鈴聲和通知音量為 <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"音量、震動、零打擾"</string>
@@ -4003,14 +4009,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"永遠不要"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"裝置和應用程式通知"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"控管可以讀取通知的應用程式和裝置"</string>
@@ -4025,7 +4025,7 @@
<string name="no_notification_assistant" msgid="2533323397091834096">"無"</string>
<string name="no_notification_listeners" msgid="2839354157349636000">"最近沒有已安裝的應用程式要求「通知」存取權。"</string>
<string name="notification_access_detail_switch" msgid="46386786409608330">"授予通知存取權"</string>
- <string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"要允許<xliff:g id="SERVICE">%1$s</xliff:g>存取通知嗎?"</string>
+ <string name="notification_assistant_security_warning_title" msgid="2972346436050925276">"要允許「<xliff:g id="SERVICE">%1$s</xliff:g>」存取通知嗎?"</string>
<string name="notification_assistant_security_warning_summary" msgid="4846559755787348129">"在 Android 12 中,加強型通知功能已取代 Android 自動調整通知。這項功能可以顯示建議的操作和回覆內容,也可以幫你整理通知訊息。\n\n加強型通知功能可存取通知內容,包括聯絡人名稱和訊息內文等個人資訊。此外,這項功能還能關閉或回覆通知,例如接聽來電及控管「零打擾」功能。"</string>
<string name="notification_listener_security_warning_title" msgid="5791700876622858363">"要授予「<xliff:g id="SERVICE">%1$s</xliff:g>」通知存取權嗎?"</string>
<string name="notification_listener_security_warning_summary" msgid="4317764112725749020">"「<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>」將可讀取所有通知 (包括聯絡人姓名、相片和你收到的訊息文字等個人資訊),也可延後或關閉通知,或是觸發通知中的按鈕 (包括接聽電話)。\n\n此外,這個應用程式還可開啟或關閉「零打擾」功能及變更相關設定。"</string>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 569d68f..2306a5e 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -271,7 +271,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1841717199409629742">"Setha idethi nesikhathi"</string>
<string name="date_and_time_settings_summary" msgid="334967758944498010">"Setha idethi, isikhathi, umkhwawulo wesikhathi; namafomethi"</string>
<string name="date_time_auto" msgid="4239202185055225869">"Setha isikhathi ngokuzenzekelayo"</string>
- <string name="zone_auto_title" msgid="3993580453604839924">"Setha izoni yesikhathi ngokuzenzekelayo"</string>
+ <string name="zone_auto_title" msgid="5141692422373097957">"Setha ngokuzenzekelayo"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Sebenzisa okuzenzakalelayo kwasendaweni"</string>
<string name="date_time_24hour_title" msgid="1445056824481243600">"24‑ihora ngefomethi"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Sebenzisa ifomethi ye-24 amahora"</string>
@@ -1889,7 +1889,7 @@
<string name="location_services_preference_title" msgid="604317859531782159">"Amasevisi endawo"</string>
<string name="location_services_screen_title" msgid="5640002489976602476">"Amasevisi Endawo"</string>
<string name="managed_profile_location_services" msgid="8172092734138341880">"Amasevisi endawo omsebenzi"</string>
- <string name="location_time_zone_detection_toggle_title" msgid="6518338597250564260">"Sebenzisa indawo ukusetha izoni yesikhathi"</string>
+ <string name="location_time_zone_detection_toggle_title" msgid="6478751613645015287">"Sebenzisa indawo"</string>
<string name="location_time_zone_detection_location_is_off_dialog_title" msgid="231698690198001146">"Indawo yedivayisi iyadingeka"</string>
<string name="location_time_zone_detection_location_is_off_dialog_message" msgid="5846316326139169523">"Ukuze usethe izoni yesikhathi usebenzisa indawo yakho, vula indawo, bese ubuyekeza amasethingi wezoni yesikhathi"</string>
<string name="location_time_zone_detection_location_is_off_dialog_ok_button" msgid="2685647335717750297">"Amasethingi endawo"</string>
@@ -1898,6 +1898,7 @@
<string name="location_time_zone_detection_not_applicable" msgid="6757964612836952714">"Ukutholwa kwendawo yezoni yesikhathi kukhutshaziwe"</string>
<string name="location_time_zone_detection_not_supported" msgid="3251181656388306501">"Ukutholwa kwendawo yezoni yesikhathi akusekelwe"</string>
<string name="location_time_zone_detection_not_allowed" msgid="8264525161514617051">"Izinguquko zokutholwa kwendayo yezoni yesikhathi azivunyelwe"</string>
+ <string name="location_time_zone_detection_auto_is_on" msgid="8797434659844659323">"Indawo ingasetshenziselwa ukusetha izoni yesikhathi"</string>
<string name="location_network_based" msgid="5247042890080021887">"I-Wi-Fi nendawo yenethiwekhi yeselula"</string>
<string name="location_neighborhood_level" msgid="3668890550358558267">"Vumela izinhlelo zokusebenza zisebenzise isevisi yendawo yakwa-Google ukucabangela indawo yakho ngokushesha. Idatha yendawo engaziwa izoqoqwa futhi ithunyelwe kwa-Google."</string>
<string name="location_neighborhood_level_wifi" msgid="6227393490651891977">"Indawo etholwe i-Wi-Fi"</string>
@@ -1943,6 +1944,8 @@
<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>
+ <!-- no translation found for lockpassword_choose_your_pattern_description (6808109256008481046) -->
+ <skip />
<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>
@@ -2924,6 +2927,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>
@@ -3013,6 +3017,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>
@@ -3690,8 +3697,7 @@
<string name="keywords_nr_advanced_calling" msgid="4157823099610141014">"I-vo5g, vonr, ukushaya okuthuthukile, ukushaya kwe-5g"</string>
<string name="keywords_add_language" msgid="1882751300359939436">"engeza ulimi, engeza ulimi"</string>
<string name="keywords_font_size" msgid="1643198841815006447">"usayizi wombhalo, ukuphrinta okukhulu, ifonti enkulu, umbhalo omkhulu, umbono ophansi, yenza umbhalo ube mkhulu, ukukhulisa ifonti, ukukhulisa ifonti"</string>
- <!-- no translation found for keywords_always_show_time_info (645658129239452778) -->
- <skip />
+ <string name="keywords_always_show_time_info" msgid="645658129239452778">"isibonisi esihlala sivuliwe, AOD"</string>
<string name="default_sound" msgid="6604374495015245195">"Umsindo owufica ukhona"</string>
<string name="sound_settings_summary" msgid="944761906531715109">"Ivolumu yokukhala neyesaziso ku-<xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="6574444810552643312">"Ivolomu, ukudlidliza, ungaphazamisi"</string>
@@ -4002,14 +4008,8 @@
<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>
- <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>
+ <!-- no translation found for notifications_sent_daily (1319135950258375284) -->
+ <!-- no translation found for notifications_sent_weekly (7604454969366376305) -->
<string name="notifications_sent_never" msgid="9081278709126812062">"Soze"</string>
<string name="manage_notification_access_title" msgid="6481256069087219982">"Idivayisi nezaziso ze-app"</string>
<string name="manage_notification_access_summary" msgid="2907135226478903997">"Lawula ukuthi yimaphi ama-app namadivayisi angafunda izaziso"</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 fb1859c..efde863 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -49,6 +49,10 @@
<string name="config_wallpaper_picker_class" translatable="false">com.android.settings.Settings$WallpaperSettingsActivity</string>
<!-- Fully-qualified class name for the styles & wallpaper picker activity. -->
<string name="config_styles_and_wallpaper_picker_class" translatable="false"></string>
+ <!-- Action name for the wallpaper picker activity. -->
+ <string name="config_wallpaper_picker_action" translatable="false"></string>
+ <!-- Action name for the styles & wallpaper picker activity. -->
+ <string name="config_styles_and_wallpaper_picker_action" translatable="false"></string>
<!-- Intent extra for wallpaper picker activity. -->
<string name="config_wallpaper_picker_launch_extra" translatable="false">com.android.wallpaper.LAUNCH_SOURCE</string>
@@ -592,6 +596,9 @@
<!-- Whether to aggregate for network selection list-->
<bool name="config_network_selection_list_aggregation_enabled">false</bool>
+ <!-- Max network scan search time in seconds -->
+ <integer name="config_network_scan_helper_max_search_time_sec">300</integer>
+
<!-- Whether to give option to add restricted profiles -->
<bool name="config_offer_restricted_profiles">false</bool>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index f03794a..33786cc 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -97,8 +97,8 @@
<dimen name="rect_button_radius">8dp</dimen>
- <!-- Default text size for caption preview samples. Uses dp rather than sp because captions are not scaled. -->
- <dimen name="caption_preview_text_size">48dp</dimen>
+ <!-- Default text size for captioning preview samples. Uses dp rather than sp because captions are not scaled. -->
+ <dimen name="captioning_preview_text_size">48dp</dimen>
<!-- ActionBar height -->
<dimen name="actionbar_size">56dip</dimen>
@@ -235,6 +235,7 @@
<item name="face_preview_translate_y" format="float" type="dimen">0</item>
<item name="face_preview_translate_x" format="float" type="dimen">0</item>
<item name="face_preview_scale" format="float" type="dimen">1.0</item>
+ <dimen name="face_enroll_intro_illustration_margin_bottom">0dp</dimen>
<!-- Confirm device credentials -->
<dimen name="confirm_credentials_security_method_margin">48dp</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 049da31..28055ab 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -115,27 +115,10 @@
<string name="bluetooth_not_visible_to_other_devices">Not visible to other Bluetooth devices</string>
<!-- Bluetooth settings screen, summary text when not discoverable with paired devices [CHAR LIMIT=50] -->
<string name="bluetooth_only_visible_to_paired_devices">Only visible to paired devices</string>
- <!-- Bluetooth settings screen, option name to pick discoverability timeout duration (a list dialog comes up) -->
- <string name="bluetooth_visibility_timeout">Visibility timeout</string>
- <!-- Bluetooth settings screen, check box label whether or not to allow
- bluetooth voice dialing when lock screen is up-->
- <string name="bluetooth_lock_voice_dialing">Lock voice dialing</string>
- <!-- Bluetooth settings screen, lock voice dialing checkbox summary text -->
- <string name="bluetooth_lock_voice_dialing_summary">
- Prevent use of the bluetooth dialer when the screen is locked
- </string>
<!-- Bluetooth settings screen, heading above the list of nearby bluetooth devices. [CHAR LIMIT=NONE] -->
<string name="bluetooth_devices">Bluetooth devices</string>
<!-- Bluetooth settings screen, title for the current bluetooth name setting -->
<string name="bluetooth_device_name">Device name</string>
- <!-- Bluetooth settings screen, image description for device details button. This opens the screen to rename, unpair, etc. a single device. -->
- <string name="bluetooth_device_details">Device settings</string>
- <!-- Bluetooth settings screen, image description for profile of a device details button. -->
- <string name="bluetooth_profile_details">Profile settings</string>
- <!-- Bluetooth settings screen, summary text when there isn't a name set (for the name setting) -->
- <string name="bluetooth_name_not_set">No name set, using account name</string>
- <!-- Bluetooth settings screen, menu item to scan for nearby bluetooth devices -->
- <string name="bluetooth_scan_for_devices">Scan for devices</string>
<!-- Bluetooth settings screen, menu item to change this device's Bluetooth name. [CHAR LIMIT=30] -->
<string name="bluetooth_rename_device">Rename this device</string>
<!-- Bluetooth settings screen, confirmation button for rename device dialog. [CHAR LIMIT=20] -->
@@ -148,10 +131,6 @@
<string name="bluetooth_disconnect_all_profiles" product="tablet">Your tablet will disconnect from "<xliff:g id="device_name">%1$s</xliff:g>."</string>
<!-- Bluetooth settings. Message for disconnecting from all profiles of a bluetooth device. [CHAR LIMIT=NONE] -->
<string name="bluetooth_disconnect_all_profiles" product="device">Your device will disconnect from "<xliff:g id="device_name">%1$s</xliff:g>."</string>
- <!-- dialog ok button for disconnect dialog [CHAR LIMIT=20] -->
- <string name="bluetooth_disconnect_dialog_ok">Disconnect</string>
- <!-- Bluetooth Settings. text displayed when user has restriction DISALLOW_CONFIG_BLUETOOTH [CHAR LIMIT=NONE]-->
- <string name="bluetooth_empty_list_user_restricted">You don\u2019t have permission to change Bluetooth settings.</string>
<!-- Title for bluetooth pairing item [CHAR LIMIT=60] -->
<string name="bluetooth_pairing_pref_title">Pair new device</string>
<!-- Keywords for bluetooth pairing item [CHAR LIMIT=30] -->
@@ -170,8 +149,6 @@
<!-- Title for related tools section. This section will list related tools below. [CHAR LIMIT=15] -->
<string name="bluetooth_screen_related">Related</string>
- <!-- Bluetooth Visibility message. This message informs the user that their device is now visible to other bluetooth devices. [CHAR LIMIT=NONE] -->
- <string name="bluetooth_is_visible_message"><xliff:g id="device_name">%1$s</xliff:g> is visible to nearby devices while Bluetooth settings is open.</string>
<!-- Bluetooth mac address message. This message shows the bluetooth mac address for this device. [CHAR LIMIT=120] -->
<string name="bluetooth_footer_mac_message" product="default">Phone\'s Bluetooth address: <xliff:g id="bluetooth_mac_address">%1$s</xliff:g></string>
<!-- Bluetooth mac address message. This message shows the bluetooth mac address for this device. [CHAR LIMIT=120] -->
@@ -179,11 +156,6 @@
<!-- Bluetooth mac address message. This message shows the bluetooth mac address for this device. [CHAR LIMIT=120] -->
<string name="bluetooth_footer_mac_message" product="device">Device\'s Bluetooth address: <xliff:g id="bluetooth_mac_address">%1$s</xliff:g></string>
- <!-- Bluetooth Visibility disconnect question. Asks the user if they wish to disconnect a paired bluetooth device. [CHAR LIMIT=50] -->
- <string name="bluetooth_is_disconnect_question">Disconnect <xliff:g id="device_name">%1$s</xliff:g>?</string>
- <!-- Bluetooth broadcasting settings, option to enable/disable broadcasting -->
- <string name="bluetooth_broadcasting">Broadcasting</string>
-
<!--Bluetooth settings screen, summary text for Bluetooth device with no name -->
<string name="bluetooth_device">Unnamed Bluetooth device</string>
<!--Bluetooth settings screen, text that appears in heading bar when scanning for devices -->
@@ -196,8 +168,6 @@
<string name="bluetooth_notif_title">Pairing request</string>
<!-- Notification message when a Bluetooth device wants to pair with us -->
<string name="bluetooth_notif_message">Tap to pair with <xliff:g id="device_name">%1$s</xliff:g>.</string>
- <!-- Item in bluetooth settings screen, used to show the list of received files [CHAR LIMIT=30] -->
- <string name="bluetooth_show_received_files">Received files</string>
<!-- Title for contextual Bluetooth devices card when Bluetooth is off [CHAR LIMIT=NONE]-->
<string name="bluetooth_devices_card_off_title">Bluetooth is off</string>
@@ -266,37 +236,12 @@
<!-- Activity label of BluetoothPermissionActivity [CHAR LIMIT=none]-->
<string name="bluetooth_connection_permission_request">"Bluetooth connection request"</string>
- <!-- Notification message when a remote Bluetooth device wants to connect to a Bluetooth profile [CHAR LIMIT=none]-->
- <string name="bluetooth_connection_notif_message">"Tap to connect to \u0022<xliff:g id="device_name">%1$s</xliff:g>\u0022."</string>
-
- <!-- Bluetooth connection permission Alert Activity text [CHAR LIMIT=none]-->
- <string name="bluetooth_connection_dialog_text">"Do you want to connect to \u0022<xliff:g id="device_name">%1$s</xliff:g>\u0022?"</string>
-
<!-- Activity label of BluetoothPbPermissionActivity, also used as Strings in the permission dialog [CHAR LIMIT=none] -->
<string name="bluetooth_phonebook_request">"Phone book access request"</string>
- <!-- Bluetooth phone book permission Alert Activity text [CHAR LIMIT=none] -->
- <string name="bluetooth_pb_acceptance_dialog_text">
- <xliff:g id="device_name">%1$s</xliff:g> wants to access your contacts and call history. Give access to <xliff:g id="device_name">%2$s</xliff:g>?
- </string>
-
- <!-- Bluetooth phone book permission Alert Activity checkbox text [CHAR LIMIT=none] -->
- <string name="bluetooth_remember_choice">Don\u2019t ask again</string>
- <!--FIXME SHOULD BE REMOVED AND ALL LANG VERSIONS FIXED TO ABOVE NAME -->
- <string name="bluetooth_pb_remember_choice">Don\u2019t ask again</string>
-
<!-- Activity label of BluetoothMessagePermissionActivity, also used as Strings in the permission dialog [CHAR LIMIT=none] -->
<string name="bluetooth_map_request">"Message access request"</string>
- <!-- Bluetooth message permission Alert Activity text [CHAR LIMIT=none] -->
- <string name="bluetooth_map_acceptance_dialog_text">%1$s wants to access your messages. Give access to %2$s?</string>
-
- <!-- Activity label of BluetoothMessagePermissionActivity for SIM access profile. Also used as Strings in the permission dialog [CHAR LIMIT=none] -->
- <string name="bluetooth_sap_request">"SIM access request"</string>
-
- <!-- Bluetooth SIM access permission Alert Activity text [CHAR LIMIT=none] -->
- <string name="bluetooth_sap_acceptance_dialog_text"><xliff:g id="device_name">%1$s</xliff:g> wants to access your SIM card. Granting access to the SIM card will disable data connectivity on your device for the duration of the connection. Give access to <xliff:g id="device_name">%2$s?</xliff:g></string>
-
<!-- Description for bluetooth device name summary [CHAR LIMIT=none] -->
<string name="bluetooth_device_name_summary">Visible as \u201C<xliff:g id="device_name">^1</xliff:g>\u201D to other devices</string>
<!-- Footer description for discoverable mode in bluetooth off state [CHAR LIMIT=none] -->
@@ -306,12 +251,6 @@
<string name="bluetooth_paired_device_title">Your devices</string>
<!-- Title for pairing bluetooth device page [CHAR LIMIT=none] -->
<string name="bluetooth_pairing_page_title">Pair new device</string>
- <!-- Summary for bluetooth item in connection detail page. (tablet)-->
- <string name="bluetooth_pref_summary" product="tablet">Allow your tablet to communicate with nearby Bluetooth devices</string>
- <!-- Summary for bluetooth item in connection detail page. (device)-->
- <string name="bluetooth_pref_summary" product="device">Allow your device to communicate with nearby Bluetooth devices</string>
- <!-- Summary for bluetooth item in connection detail page. (phone)-->
- <string name="bluetooth_pref_summary" product="default">Allow your phone to communicate with nearby Bluetooth devices</string>
<!-- UI debug setting: Disable Bluetooth A2DP hardware offload [CHAR LIMIT=none] -->
<string name="bluetooth_disable_a2dp_hw_offload">Disable Bluetooth A2DP hardware offload</string>
@@ -3573,12 +3512,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]-->
@@ -3651,8 +3592,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>
@@ -3676,16 +3619,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>
@@ -3740,13 +3686,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>
@@ -3776,26 +3720,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>
@@ -3804,6 +3748,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>
@@ -3847,12 +3794,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>
@@ -4386,6 +4332,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>
@@ -4973,12 +4921,6 @@
<!-- Languages Settings --> <skip />
<!-- Title of Language, input & gestures setting on main settings screen. -->
<string name="language_input_gesture_title">Languages, input & gestures</string>
- <!-- Summary of Language, input & gestures setting on main settings screen when both gesture setting and assistant feature is on. -->
- <string name="language_input_gesture_summary_on_with_assist"></string>
- <!-- Summary of Language, input & gestures setting on main settings screen when both gesture setting and non-assistant feature is on. -->
- <string name="language_input_gesture_summary_on_non_assist"></string>
- <!-- Summary of Language, input & gestures setting on main settings screen when gesture setting is off. -->
- <string name="language_input_gesture_summary_off"></string>
<!-- Title of setting on main settings screen. This item will take the user to the screen to tweak settings realted to locale and text -->
<string name="language_settings">Languages & input</string>
@@ -5657,20 +5599,20 @@
<string name="accessibility_color_inversion_about_title">About color inversion</string>
<!-- Color correction footer link content description [CHAR LIMIT=NONE] -->
<string name="accessibility_color_inversion_footer_learn_more_content_description">Learn more about color inversion</string>
- <!-- Title for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=60] -->
- <string name="accessibility_caption_primary_switch_title">Show captions</string>
- <!-- Summary for Captions settings screen to control turning on/off the feature entirely [CHAR LIMIT=NONE] -->
- <string name="accessibility_caption_primary_switch_summary">For supported app only</string>
- <!-- Title for Caption preference settings screen for configuring font style. [CHAR LIMIT=NONE] -->
- <string name="captioning_caption_appearance_title">Caption size and style</string>
- <!-- Summary for Captions settings, explaining important settings under it. [CHAR LIMIT=NONE] -->
- <string name="captioning_caption_appearance_summary"><xliff:g id="accessibility_font_size" example="Large">%1$s</xliff:g> text size</string>
- <!-- Title for Caption preference settings screen for configuring language. [CHAR LIMIT=NONE] -->
+ <!-- Title for captioning settings screen to control turning on/off the feature entirely [CHAR LIMIT=60] -->
+ <string name="accessibility_captioning_primary_switch_title">Show captions</string>
+ <!-- Summary for captioning settings screen to control turning on/off the feature entirely [CHAR LIMIT=NONE] -->
+ <string name="accessibility_captioning_primary_switch_summary">For supported app only</string>
+ <!-- Title for captioning preference settings screen for configuring font style. [CHAR LIMIT=NONE] -->
+ <string name="captioning_appearance_title">Caption size and style</string>
+ <!-- Summary for captioning settings, explaining important settings under it. [CHAR LIMIT=NONE] -->
+ <string name="captioning_appearance_summary"><xliff:g id="accessibility_font_size" example="Large">%1$s</xliff:g> text size</string>
+ <!-- Title for captioning preference settings screen for configuring language. [CHAR LIMIT=NONE] -->
<string name="captioning_more_options_title">More options</string>
- <!-- Introduction for the captions preference page. [CHAR LIMIT=NONE] -->
- <string name="accessibility_caption_preference_intro">Customize caption size and style to make them easier to read</string>
- <!-- Summary for the captions preference page. [CHAR LIMIT=NONE] -->
- <string name="accessibility_caption_preference_summary">These caption preferences aren\u2019t supported by all media apps</string>
+ <!-- Introduction for the captioning preference page. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_captioning_preference_intro">Customize caption size and style to make them easier to read</string>
+ <!-- Summary for the captioning preference page. [CHAR LIMIT=NONE] -->
+ <string name="accessibility_captioning_preference_summary">These caption preferences aren\u2019t supported by all media apps</string>
<!-- Summary for accessibility shortcut preference for software shortcut type. [CHAR LIMIT=NONE] -->
<string name="accessibility_shortcut_type_software">Accessibility button</string>
<!-- Summary for accessibility shortcut preference for software shortcut type when gesture mode is on. [CHAR LIMIT=NONE] -->
@@ -5851,7 +5793,7 @@
<string name="captioning_edge_type">Edge type</string>
<!-- Title for the preference to change video caption font family (ex. monospace, sans-serif). [CHAR LIMIT=35] -->
<string name="captioning_typeface">Font family</string>
- <!-- Sample text for previewing video caption preferences. [CHAR LIMIT=NONE] -->
+ <!-- Sample text for previewing video captioning preferences. [CHAR LIMIT=NONE] -->
<string name="captioning_preview_text">Captions will look like this</string>
<!-- Sample characters for previewing video caption preferences. [CHAR LIMIT=2] -->
<string name="captioning_preview_characters">Aa</string>
@@ -6152,42 +6094,6 @@
<string name="power_usage_enhanced_debug" translatable="false"><xliff:g id="time">%1$s</xliff:g> left (New ML est)</string>
<!-- Temp string used to debug old battery estimates [DO NOT TRANSLATE] -->
<string name="power_usage_old_debug" translatable="false"><xliff:g id="time">%1$s</xliff:g> left (Old est)</string>
- <!-- Description for the screen usage item [CHAR_LIMIT=120] -->
- <string name="screen_usage_summary">Amount of time screen has been on since full charge</string>
- <!-- Label for list of different types using battery in power use UI [CHAR_LIMIT=60] -->
- <string name="device_usage_list_summary">Device usage since full charge</string>
- <!-- Battery usage since unplugged -->
- <string name="battery_since_unplugged">Battery use since unplugged</string>
- <!-- Battery usage since user reset the stats -->
- <string name="battery_since_reset">Battery use since reset</string>
- <!-- Battery usage on battery duration -->
- <string name="battery_stats_on_battery"><xliff:g id="time">%1$s</xliff:g> on battery</string>
- <!-- Battery usage duration -->
- <string name="battery_stats_duration"><xliff:g id="time">%1$s</xliff:g> since unplugged</string>
- <!-- [CHAR LIMIT=25] Label for battery stats charging state graph -->
- <string name="battery_stats_charging_label">Charging</string>
- <!-- [CHAR LIMIT=25] Label for battery stats screen on state graph -->
- <string name="battery_stats_screen_on_label">Screen on</string>
- <!-- [CHAR LIMIT=25] Label for battery stats gps on state graph -->
- <string name="battery_stats_gps_on_label">GPS on</string>
- <!-- [CHAR LIMIT=25] Label for battery stats camera on state graph -->
- <string name="battery_stats_camera_on_label">Camera on</string>
- <!-- [CHAR LIMIT=25] Label for battery stats flashlight on state graph -->
- <string name="battery_stats_flashlight_on_label">Flashlight on</string>
- <!-- [CHAR LIMIT=25] Label for battery stats wifi running state graph -->
- <string name="battery_stats_wifi_running_label">Wi\u2011Fi</string>
- <!-- [CHAR LIMIT=25] Label for battery stats wake lock state graph -->
- <string name="battery_stats_wake_lock_label">Awake</string>
- <!-- [CHAR LIMIT=25] Label for battery stats phone signal strength graph -->
- <string name="battery_stats_phone_signal_label">Mobile network signal</string>
- <!-- Battery usage during last unplugged period -->
- <string name="battery_stats_last_duration">@string/menu_stats_last_unplugged</string>
- <!-- CPU awake time title -->
- <string name="awake">Device awake time</string>
- <!-- Wifi on time -->
- <string name="wifi_on_time">Wi\u2011Fi on time</string>
- <!-- Bluetooth on time -->
- <string name="bluetooth_on_time">Wi\u2011Fi on time</string>
<!-- Activity title for advanced battery usage page [CHAR LIMIT=25] -->
<string name="advanced_battery_title">Battery usage</string>
@@ -6339,8 +6245,6 @@
<!-- Summary for battery manager when it is on. [CHAR LIMIT=NONE] -->
<string name="battery_manager_summary_unsupported">Detecting when apps drain battery</string>
- <!-- Summary for battery manager when it is off -->
- <string name="battery_manager_off">Off</string>
<!-- Summary for battery manager, showing app restricted -->
<plurals name="battery_manager_app_restricted">
<item quantity="one">%1$d app restricted</item>
@@ -6357,48 +6261,6 @@
<!-- Accessibility description for battery missing link. [CHAR LIMIT=NONE] -->
<string name="battery_missing_link_a11y_message">Tap to learn more about this error</string>
- <!-- Title for force stop dialog [CHAR LIMIT=30] -->
- <string name="dialog_stop_title">Stop app?</string>
- <!-- Message body for force stop dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_stop_message" product="default">Your phone can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> is keeping your phone awake.\n\nTo try to fix this issue, you can stop the app.\n\nIf this keeps happening, you may need to uninstall the app to improve battery performance.</string>
- <!-- Message body for force stop dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_stop_message" product="tablet">Your tablet can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> is keeping your tablet awake.\n\nTo try to fix this issue, you can stop the app.\n\nIf this keeps happening, you may need to uninstall the app to improve battery performance.</string>
- <!-- Message body for force stop dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_stop_message" product="device">Your device can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> is keeping your device awake.\n\nTo try to fix this issue, you can stop the app.\n\nIf this keeps happening, you may need to uninstall the app to improve battery performance.</string>
-
- <!-- Message body for force stop dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_stop_message_wakeup_alarm" product="default">Your phone can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> keeps waking up your phone.\n\nTo try to fix this issue, you can stop <xliff:g id="app">%1$s</xliff:g>.\n\nIf this keeps happening, you may need to uninstall the app to improve battery performance.</string>
- <!-- Message body for force stop dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_stop_message_wakeup_alarm" product="tablet">Your tablet can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> keeps waking up your tablet.\n\nTo try to fix this issue, you can stop <xliff:g id="app">%1$s</xliff:g>.\n\nIf this keeps happening, you may need to uninstall the app to improve battery performance.</string>
- <!-- Message body for force stop dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_stop_message_wakeup_alarm" product="device">Your device can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> keeps waking up your device.\n\nTo try to fix this issue, you can stop <xliff:g id="app">%1$s</xliff:g>.\n\nIf this keeps happening, you may need to uninstall the app to improve battery performance.</string>
-
- <!-- Text for OK button in force stop dialog [CHAR LIMIT=30] -->
- <string name="dialog_stop_ok">Stop app</string>
-
- <!-- Title for background usage dialog [CHAR LIMIT=70] -->
- <string name="dialog_background_check_title">Turn off background usage & stop app?</string>
- <!-- Message body for background usage dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_background_check_message" product="default">Your phone can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> keeps waking up your phone.\n\nTo try to fix this issue, you can stop <xliff:g id="app">%1$s</xliff:g> and prevent it from running in the background.</string>
- <!-- Message body for background usage dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_background_check_message" product="tablet">Your tablet can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> keeps waking up your tablet.\n\nTo try to fix this issue, you can stop <xliff:g id="app">%1$s</xliff:g> and prevent it from running in the background.</string>
- <!-- Message body for background usage dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_background_check_message" product="device">Your device can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> keeps waking up your device.\n\nTo try to fix this issue, you can stop <xliff:g id="app">%1$s</xliff:g> and prevent it from running in the background.</string>
- <!-- Text for OK button in background usage dialog [CHAR LIMIT=30] -->
- <string name="dialog_background_check_ok">Turn off</string>
-
- <!-- Title for location dialog [CHAR LIMIT=60] -->
- <string name="dialog_location_title">Turn off location?</string>
- <!-- Message body for location dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_location_message" product="default">Your phone can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> keeps requesting your location when you\'re not using the app.\n\nTo fix this issue, you can turn off location for this app.</string>
- <!-- Message body for location dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_location_message" product="tablet">Your tablet can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> keeps requesting your location when you\'re not using the app.\n\nTo fix this issue, you can turn off location for this app.</string>
- <!-- Message body for location dialog [CHAR LIMIT=NONE] -->
- <string name="dialog_location_message" product="device">Your device can\'t manage battery normally because <xliff:g id="app">%1$s</xliff:g> keeps requesting your location when you\'re not using the app.\n\nTo fix this issue, you can turn off location for this app.</string>
-
- <!-- Text for OK button in location dialog [CHAR LIMIT=30] -->
- <string name="dialog_location_ok">Turn off</string>
-
<!-- Label for power consumed by the screen -->
<string name="power_screen">Screen</string>
<!-- Label for power consumed by the flashlight -->
@@ -6417,126 +6279,6 @@
<string name="power_idle" product="tablet">Tablet idle</string>
<!-- Label for power consumed when Idle -->
<string name="power_idle" product="default">Phone idle</string>
- <!-- Label for power that we aren't able to account for -->
- <string name="power_unaccounted">Miscellaneous</string>
- <!-- Label for power that we computed too much for -->
- <string name="power_overcounted">Over-counted</string>
-
- <!-- Label for CPU usage time -->
- <string name="usage_type_cpu">CPU total</string>
- <!-- Label for CPU usage in foreground -->
- <string name="usage_type_cpu_foreground">CPU foreground</string>
- <!-- [CHAR LIMIT=25] Label for keeping device from sleeping -->
- <string name="usage_type_wake_lock">Keep awake</string>
- <!-- Label for GPS usage time -->
- <string name="usage_type_gps">GPS</string>
- <!-- [CHAR LIMIT=25] Label for WIFI usage time -->
- <string name="usage_type_wifi_running">Wi\u2011Fi running</string>
- <!-- Label for Phone usage time -->
- <string name="usage_type_phone" product="tablet">Tablet</string>
- <!-- Label for Phone usage time -->
- <string name="usage_type_phone" product="default">Phone</string>
- <!-- Label for mobile network data sent [CHAR LIMIT=32] -->
- <string name="usage_type_data_send">Mobile packets sent</string>
- <!-- Label for mobile network data received [CHAR LIMIT=32] -->
- <string name="usage_type_data_recv">Mobile packets received</string>
- <!-- Label for mobile network radio active time [CHAR LIMIT=32] -->
- <string name="usage_type_radio_active">Mobile radio active</string>
- <!-- Label for Wi-Fi network data sent [CHAR LIMIT=32] -->
- <string name="usage_type_data_wifi_send">Wi\u2011Fi packets sent</string>
- <!-- Label for Wi-Fi network data received [CHAR LIMIT=32] -->
- <string name="usage_type_data_wifi_recv">Wi\u2011Fi packets received</string>
- <!-- Label for Audio usage time -->
- <string name="usage_type_audio">Audio</string>
- <!-- Label for Video usage time -->
- <string name="usage_type_video">Video</string>
- <!-- Label for Camera usage time -->
- <string name="usage_type_camera">Camera</string>
- <!-- Label for Flashlight usage time -->
- <string name="usage_type_flashlight">Flashlight</string>
- <!-- Label for time that a feature has been on -->
- <string name="usage_type_on_time">Time on</string>
- <!-- Label for time that there was no cell coverage -->
- <string name="usage_type_no_coverage">Time without a signal</string>
- <!-- Label for the total power capacity of the device's battery -->
- <string name="usage_type_total_battery_capacity">Total battery capacity</string>
- <!-- [CHAR_LIMIT=NONE] Label for amount of power use that was computed -->
- <string name="usage_type_computed_power">Computed power use</string>
- <!-- [CHAR_LIMIT=NONE] Label for amount of power use that was actually observed (though
- the change in battery level) -->
- <string name="usage_type_actual_power">Observed power use</string>
- <!-- Label for force stop action -->
- <string name="battery_action_stop">Force stop</string>
- <!-- Label for app details action -->
- <string name="battery_action_app_details">App info</string>
- <!-- Label for app settings action -->
- <string name="battery_action_app_settings">App settings</string>
- <!-- Label for display settings -->
- <string name="battery_action_display">Screen settings</string>
- <!-- Label for wifi settings -->
- <string name="battery_action_wifi">Wi\u2011Fi settings</string>
- <!-- Label for bluetooth settings -->
- <string name="battery_action_bluetooth">Bluetooth settings</string>
-
- <!-- Description for voice call detail -->
- <string name="battery_desc_voice">Battery used by voice calls</string>
-
- <!-- Description for standby detail -->
- <string name="battery_desc_standby" product="tablet">Battery used when tablet is idle</string>
- <!-- Description for standby detail -->
- <string name="battery_desc_standby" product="default">Battery used when phone is idle</string>
-
- <!-- Description for cell radio detail -->
- <string name="battery_desc_radio">Battery used by cell radio</string>
- <!-- Suggestion to switch to airplane mode to save power -->
- <string name="battery_sugg_radio">Switch to airplane mode to save power in areas with no cell coverage</string>
-
- <!-- [CHAR_LIMIT=NONE] Description for power consumed by the flashlight -->
- <string name="battery_desc_flashlight">Battery used by the flashlight</string>
-
- <!-- [CHAR_LIMIT=NONE] Description for power consumed by the camera -->
- <string name="battery_desc_camera">Battery used by the camera</string>
-
- <!-- Description for power consumed by display -->
- <string name="battery_desc_display">Battery used by the display and backlight</string>
- <!-- Suggestion for reducing display power -->
- <string name="battery_sugg_display">Reduce the screen brightness and/or screen timeout</string>
-
- <!-- Description for wifi connectivity -->
- <string name="battery_desc_wifi">Battery used by Wi\u2011Fi</string>
- <!-- Suggestion for wifi connectivity power drain -->
- <string name="battery_sugg_wifi">Turn off Wi\u2011Fi when not using it or when it isn\u2019t available</string>
-
- <!-- Description for bluetooth power consumption detail -->
- <string name="battery_desc_bluetooth">Battery used by Bluetooth</string>
- <!-- Suggestion for bluetooth -->
- <string name="battery_sugg_bluetooth_basic">Turn off Bluetooth when you aren\u2019t using it</string>
- <!-- Suggestion for bluetooth headset -->
- <string name="battery_sugg_bluetooth_headset">Try connecting to a different Bluetooth device</string>
-
- <!-- [CHAR LIMIT=50] Description for power consumed by applications -->
- <string name="battery_desc_apps">Battery used by app</string>
- <!-- Suggestion for exploring application info to stop or uninstall -->
- <string name="battery_sugg_apps_info">Stop or uninstall the app</string>
- <!-- [CHAR LIMIT=100] Suggestion for getting apps to consume less power due to GPS-->
- <string name="battery_sugg_apps_gps">Select battery-saving mode</string>
- <!-- Suggestion for getting apps to consume less power -->
- <string name="battery_sugg_apps_settings">The app may offer settings to reduce battery use</string>
-
- <!-- [CHAR LIMIT=50] Description for power consumed by users -->
- <string name="battery_desc_users">Battery used by user</string>
-
- <!-- [CHAR LIMIT=50] Description for unaccounted power use -->
- <string name="battery_desc_unaccounted">Miscellaneous power use</string>
- <!-- [CHAR LIMIT=NONE] Description for unaccounted power use -->
- <string name="battery_msg_unaccounted">Battery use is an approximation of power
- use and does not include every source of battery drain. Miscellaneous is the difference
- between the computed approximate power use and the actual drain observed on the
- battery.</string>
- <!-- [CHAR LIMIT=50] Description for over-counted power use -->
- <string name="battery_desc_overcounted">Over-counted power use</string>
- <!-- Representation of a mAh value. [CHAR LIMIT=NONE] -->
- <string name="mah"><xliff:g id="number" example="30">%d</xliff:g> mAh</string>
<!-- Description for battery usage time for an app, i.e. Used for 30min. Note: ^1 should be used in all translations [CHAR LIMIT=60] -->
<string name="battery_used_for">Used for <xliff:g id="time">^1</xliff:g></string>
@@ -6607,6 +6349,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>
@@ -6620,15 +6364,6 @@
<!-- Description for estimated time. [CHAR LIMIT=80]-->
<string name="estimated_time_description">Estimate may change based on usage</string>
- <!-- Menu label for viewing battery usage since unplugged -->
- <string name="menu_stats_unplugged"><xliff:g id="unplugged">%1$s</xliff:g> since unplugged</string>
- <!-- Menu label for viewing battery usage since unplugged -->
- <string name="menu_stats_last_unplugged">While last unplugged for <xliff:g id="unplugged">%1$s</xliff:g></string>
- <!-- Menu label for viewing battery usage total -->
- <string name="menu_stats_total">Usage totals</string>
- <!-- Menu label for refreshing with latest usage numbers -->
- <string name="menu_stats_refresh">Refresh</string>
-
<!-- Label for mediaserver process in battery usage [CHAR_LIMIT=NONE] -->
<string name="process_mediaserver_label">Mediaserver</string>
<!-- Label for dex2oat process in battery usage used for the optimization of one or more apps -->
@@ -7193,12 +6928,6 @@
<!-- the following are for Settings Storage screen -->
<!-- Menu item/button 'delete' -->
<string name="delete">Delete</string>
- <!-- Misc files [CHAR LIMIT=25] -->
- <string name="misc_files">Misc files</string>
- <!-- number of misc files selected [CHAR LIMIT=40] -->
- <string name="misc_files_selected_count">selected <xliff:g id="number" example="3">%1$d</xliff:g> out of <xliff:g id="total" example="15">%2$d</xliff:g></string>
- <!-- number of bytes represented by the selected misc files [CHAR LIMIT=40] -->
- <string name="misc_files_selected_count_bytes"><xliff:g id="number" example="3.25MB">%1$s</xliff:g> out of <xliff:g id="total" example="15.25MB">%2$s</xliff:g></string>
<!-- action to select all [CHAR LIMIT=30] -->
<string name="select_all">Select all</string>
@@ -7206,44 +6935,6 @@
<string name="data_usage_summary_title">Data usage</string>
<!-- Activity title Mobile data & WI-FI summary. [CHAR LIMIT=40] -->
<string name="data_usage_app_summary_title">Mobile data & Wi\u2011Fi</string>
- <!-- Message about carrier data accounting. [CHAR LIMIT=100] -->
- <string name="data_usage_accounting">Carrier data accounting may differ from your device.</string>
- <!-- Title for app usage. [CHAR LIMIT=40] -->
- <string name="data_usage_app">App usage</string>
- <!-- Title for app usage. [CHAR LIMIT=40] -->
- <string name="data_usage_app_info_label">APP INFO</string>
- <!-- Title for cellular data usage. [CHAR LIMIT=40] -->
- <string name="data_usage_cellular_data">Mobile data</string>
- <!-- Title for setting data limit. [CHAR LIMIT=40] -->
- <string name="data_usage_data_limit">Set data limit</string>
- <!-- Title for option to pick visible time range from a list available usage periods. [CHAR LIMIT=25] -->
- <string name="data_usage_cycle">Data usage cycle</string>
- <!-- Title for application data usage separator in data usage list. [CHAR LIMIT=25] -->
- <string name="data_usage_app_items_header_text">App usage</string>
- <!-- Title for menu option to enable mobile data when roaming. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_roaming">Data roaming</string>
- <!-- Title for menu option to restrict background data usage. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_restrict_background">Restrict background data</string>
- <!-- Title for menu option to allow background data usage. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_allow_background">Allow background data</string>
- <!-- Title for menu option to show 4G mobile data usage separate from other mobile data usage. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_split_4g">Separate 4G usage</string>
- <!-- Title for menu option to show Wi-Fi data usage. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_show_wifi">Show Wi\u2011Fi</string>
- <!-- Title for menu option to hide Wi-Fi data usage. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_hide_wifi">Hide Wi\u2011Fi</string>
- <!-- Title for menu option to show Ethernet data usage. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_show_ethernet">Show Ethernet usage</string>
- <!-- Title for menu option to hide Ethernet data usage. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_hide_ethernet">Hide Ethernet usage</string>
- <!-- Title for menu option to configure metered networks. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_metered">Network restrictions</string>
- <!-- Title for menu option to enable global auto-sync of account data -->
- <string name="data_usage_menu_auto_sync">Auto-sync data</string>
- <!-- Title for menu option to show details for all SIM cards. [CHAR LIMIT=26] -->
- <string name="data_usage_menu_sim_cards">SIM cards</string>
- <!-- Summary String for Cellular data enable toggle. [CHAR LIMIT=33] -->
- <string name="data_usage_cellular_data_summary">Paused at limit</string>
<!-- Title for menu option to enable global auto-sync of personal account data [CHAR LIMIT=30] -->
<string name="account_settings_menu_auto_sync">Auto-sync data</string>
@@ -8152,6 +7843,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>
@@ -8316,8 +8011,6 @@
<string name="keywords_wifi_data_usage">data usage</string>
<!-- Search keyword for "Time format" settings. [CHAR_LIMIT=NONE]-->
<string name="keywords_time_format">Use 24-hour format</string>
- <!-- Search keyword for "Files" settings under Settings > Storage. [CHAR_LIMIT=NONE]-->
- <string name="keywords_storage_files">Download</string>
<!-- Search keyword for "Default Apps" settings [CHAR_LIMIT=NONE]-->
<string name="keywords_app_default">Open with</string>
<!-- Search keyword for "App info" settings [CHAR_LIMIT=NONE]-->
@@ -9419,12 +9112,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>
@@ -12273,18 +11966,9 @@
<!-- Storage Settings dropdown option of default internal storage [CHAR LIMIT=30] -->
<string name="storage_default_internal_storage">This device</string>
- <!-- Preference label for the Photos & Videos storage section. [CHAR LIMIT=50] -->
- <string name="storage_photos_videos">Photos & videos</string>
-
- <!-- Preference label for the Music & Audio storage section. [CHAR LIMIT=50] -->
- <string name="storage_music_audio">Music & audio</string>
-
<!-- Preference label for the Games storage section. [CHAR LIMIT=50] -->
<string name="storage_games">Games</string>
- <!-- Preference label for the Other apps storage section. [CHAR LIMIT=50] -->
- <string name="storage_other_apps">Other apps</string>
-
<!-- Preference label for the Files storage section. [CHAR LIMIT=50] -->
<string name="storage_files">Files</string>
@@ -12322,13 +12006,6 @@
<string name="storage_trash_dialog_confirm">Empty trash</string>
<!-- Summary of a single storage volume used space. [CHAR LIMIT=24] -->
- <string name="storage_size_large_alternate"><xliff:g id="number" example="128">^1</xliff:g><small> <font size="20"><xliff:g id="unit" example="KB">^2</xliff:g></font></small></string>
- <!-- Summary of a single storage volume total space. [CHAR LIMIT=48]-->
- <string name="storage_volume_total">Used of <xliff:g id="total" example="32GB">%1$s</xliff:g></string>
- <!-- Follows the percent of storage used by a storage volume. Exposed inside of a donut graph. [CHAR LIMIT=7]-->
- <string name="storage_percent_full">used</string>
-
- <!-- Summary of a single storage volume used space. [CHAR LIMIT=24] -->
<string name="storage_usage_summary"><xliff:g id="number" example="128">%1$s</xliff:g> <xliff:g id="unit" example="KB">%2$s</xliff:g> used</string>
<!-- Summary of a single storage volume total space. [CHAR LIMIT=24] -->
<string name="storage_total_summary"><xliff:g id="number" example="128">%1$s</xliff:g> <xliff:g id="unit" example="KB">%2$s</xliff:g> total</string>
@@ -12431,29 +12108,12 @@
<!-- Switch summary to show operator name in the status bar [CHAR LIMIT=NONE] -->
<string name="show_operator_name_summary">Display network name in status bar</string>
- <!-- Indicates if the automatic storage manager is enabled or not. [CHAR_LIMIT=40] -->
- <string name="storage_manager_indicator">Storage Manager: <xliff:g id="status" example="on">^1</xliff:g></string>
-
- <!-- Off status for the automatic storage manager. [CHAR_LIMIT=10] -->
- <string name="storage_manager_indicator_off">Off</string>
-
- <!-- On status for the automatic storage manager. [CHAR_LIMIT=10] -->
- <string name="storage_manager_indicator_on">On</string>
-
<!-- Added as the value of a header field indicating this is an instant app (as opposed to installed normally) -->
<string name="install_type_instant">Instant app</string>
<!-- Warning for when the automatic storage manager is turned off. [CHAR LIMIT=NONE] -->
<string name="automatic_storage_manager_deactivation_warning">Turn off the storage manager?</string>
- <!-- Preference label for the Movies & TV apps section [CHAR LIMIT=50] -->
- <string name="storage_movies_tv">Movie & TV apps</string>
-
- <!-- Carrier Provisioning Info [CHAR LIMIT=NONE] -->
- <string name="carrier_provisioning">Carrier Provisioning Info</string>
- <!-- Trigger Carrier Provisioning [CHAR LIMIT=NONE] -->
- <string name="trigger_carrier_provisioning">Trigger Carrier Provisioning</string>
-
<!-- Help URI, USB Audio [DO NOT TRANSLATE] -->
<string name="help_url_audio_accessory_not_supported" translatable="false"></string>
@@ -12620,51 +12280,15 @@
<!-- Summary for media output default settings. (this device) [CHAR LIMIT=30] -->
<string name="media_output_default_summary">This device</string>
- <!-- Summary for media output settings. (phone) -->
- <string name="media_output_summary" product="default">Phone</string>
-
- <!-- Summary for media output settings. (tablet) -->
- <string name="media_output_summary" product="tablet">Tablet</string>
-
- <!-- Summary for media output settings. (device) -->
- <string name="media_output_summary" product="device">Device</string>
-
<!-- Summary for media output settings when device is in ongoing call state. -->
<string name="media_out_summary_ongoing_call_state">Unavailable during calls</string>
- <!-- Summary for media output settings when the media stream is being captured by something else. -->
- <string name="media_output_summary_unavailable">Unavailable</string>
-
- <!-- Title for the media output group dialog with media related devices [CHAR LIMIT=50] -->
- <string name="media_output_group_panel_title">Add outputs</string>
-
- <!-- Title for the media output slice with group devices [CHAR LIMIT=50] -->
- <string name="media_output_group">Group</string>
-
- <!-- Summary for media output group with only one device which is active [CHAR LIMIT=NONE] -->
- <string name="media_output_group_panel_single_device_summary">1 device selected</string>
-
- <!-- Summary for media output group with the active device count [CHAR LIMIT=NONE] -->
- <string name="media_output_group_panel_multiple_devices_summary"><xliff:g id="count" example="2">%1$d</xliff:g> devices selected</string>
-
- <!-- Summary for media output switching output [CHAR LIMIT=50] -->
- <string name="media_output_switching">Switching\u2026</string>
-
<!-- Title for HFP(hands free profile) output switch button in settings. -->
<string name="take_call_on_title">Take call on</string>
<!-- Toast that appears when users tap an APN for which parameters cannot be viewed. [CHAR LIMIT=NONE] -->
<string name="cannot_change_apn_toast">This APN cannot be changed.</string>
- <!-- Title for battery Suggestion. (tablet) [CHAR LIMIT=46] -->
- <string name="battery_suggestion_title" product="tablet" >Improve tablet\'s battery life</string>
- <!-- Title for battery Suggestion. (device) [CHAR LIMIT=46] -->
- <string name="battery_suggestion_title" product="device" >Improve device\'s battery life</string>
- <!-- Title for battery Suggestion. (phone) [CHAR LIMIT=46] -->
- <string name="battery_suggestion_title" product="default" >Improve phone\'s battery life</string>
- <!-- Summary for battery Suggestion. [CHAR LIMIT=55] -->
- <string name="battery_suggestion_summary"></string>
-
<!-- Title for prevent ringing gesture screen [CHAR LIMIT=60]-->
<string name="gesture_prevent_ringing_screen_title">Prevent ringing</string>
<!-- Title for prevent ringing setting [CHAR LIMIT=60]-->
@@ -12682,7 +12306,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>
@@ -13337,8 +12961,6 @@
<!-- Message for forget passpoint dialog [CHAR LIMIT=none] -->
<string name="forget_passpoint_dialog_message">You may lose access to any remaining time or data. Check with your provider before removing.</string>
- <!-- Keywords for Content Capture feature [CHAR_LIMIT=none] -->
- <string name="keywords_content_capture">content capture, app content</string>
<!-- Title of the 'Content Capture' feature toggle in the Settings -> Privacy screen [CHAR LIMIT=none]-->
<string name="content_capture">App content</string>
<!-- Description of the 'Content Capture' feature toggle in the Settings -> Privacy screen [CHAR LIMIT=NONE]-->
@@ -13432,38 +13054,28 @@
<!-- Developer settings: text for the bug report handler selection toast shown if an invalid bug report handler was chosen. [CHAR LIMIT=NONE] -->
<string name="select_invalid_bug_report_handler_toast_text">This choice is no longer valid. Try again.</string>
- <!-- Device controls name lower case [CHAR LIMIT=40] -->
- <string name="quick_controls_lower">device controls</string>
+ <!-- Power menu setting name [CHAR LIMIT=60] -->
+ <string name="power_menu_setting_name">Press & hold power button</string>
- <!-- Cards and passes name sentence case [CHAR LIMIT=40] -->
- <string name="cards_passes_sentence">Cards & passes</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>
- <!-- 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 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 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>
@@ -13579,9 +13191,6 @@
<string name="calls_and_sms_category">Wi\u2011Fi calling</string>
<!-- Provider Model: Summary for calling preference -->
<string name="calls_sms_wfc_summary">Make and receive calls over Wi\u2011Fi</string>
- <!-- Provider Model: Label for footnote on calling preference -->
- <string name="calls_sms_footnote">With Wi\u2011Fi calling, calls are made and received over non\u2011carrier Wi\u2011Fi networks.
- <annotation id="url">Learn more</annotation></string>
<!-- Provider Model: Calls preference title -->
<string name="calls_preference_title">Calls</string>
<!-- Provider Model: SMS preference title -->
diff --git a/res/xml/accessibility_control_timeout_settings.xml b/res/xml/accessibility_control_timeout_settings.xml
index 3cd0dd6..5a1bd17 100644
--- a/res/xml/accessibility_control_timeout_settings.xml
+++ b/res/xml/accessibility_control_timeout_settings.xml
@@ -18,13 +18,11 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/accessibility_control_timeout_preference_title"
- android:persistent="false" >
+ android:title="@string/accessibility_control_timeout_preference_title">
<com.android.settingslib.widget.TopIntroPreference
android:key="accessibility_control_timeout_intro"
- android:persistent="false"
- android:title="@string/accessibility_control_timeout_preference_intro_text" />
+ android:title="@string/accessibility_control_timeout_preference_intro_text"/>
<com.android.settingslib.widget.IllustrationPreference
android:key="accessibility_control_timeout_banner"
@@ -33,32 +31,31 @@
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_default"
android:title="@string/accessibility_timeout_default"
- android:persistent="false" />
+ settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_10secs"
android:title="@string/accessibility_timeout_10secs"
- android:persistent="false" />
+ settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_30secs"
android:title="@string/accessibility_timeout_30secs"
- android:persistent="false" />
+ settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_1min"
android:title="@string/accessibility_timeout_1min"
- android:persistent="false" />
+ settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_timeout_2mins"
android:title="@string/accessibility_timeout_2mins"
- android:persistent="false" />
+ settings:controller="com.android.settings.accessibility.AccessibilityTimeoutController"/>
<com.android.settings.accessibility.AccessibilityFooterPreference
android:key="accessibility_control_timeout_footer"
android:title="@string/accessibility_control_timeout_preference_summary"
- android:persistent="false"
android:selectable="false"
settings:searchable="false"
settings:controller="com.android.settings.accessibility.AccessibilityControlTimeoutFooterPreferenceController"/>
diff --git a/res/xml/accessibility_settings.xml b/res/xml/accessibility_settings.xml
index 0287fc6..caba415 100644
--- a/res/xml/accessibility_settings.xml
+++ b/res/xml/accessibility_settings.xml
@@ -119,10 +119,9 @@
settings:controller="com.android.settings.accessibility.LiveCaptionPreferenceController"/>
<Preference
- android:fragment="com.android.settings.accessibility.CaptionPropertiesFragment"
+ android:fragment="com.android.settings.accessibility.CaptioningPropertiesFragment"
android:key="captioning_preference_screen"
android:icon="@drawable/ic_captioning"
- android:persistent="false"
android:title="@string/accessibility_captioning_title"
settings:controller="com.android.settings.accessibility.CaptioningPreferenceController"/>
diff --git a/res/xml/accessibility_text_reading_options.xml b/res/xml/accessibility_text_reading_options.xml
index 513920b..8a09f67 100644
--- a/res/xml/accessibility_text_reading_options.xml
+++ b/res/xml/accessibility_text_reading_options.xml
@@ -57,9 +57,8 @@
android:summary="@string/accessibility_toggle_high_text_contrast_preference_summary"
android:title="@string/accessibility_toggle_high_text_contrast_preference_title" />
- <com.android.settingslib.widget.LayoutPreference
+ <com.android.settings.accessibility.TextReadingResetPreference
android:key="reset"
- android:layout="@layout/accessibility_text_reading_reset_button"
android:persistent="false"
android:selectable="false" />
</PreferenceScreen>
diff --git a/res/xml/bluetooth_settings.xml b/res/xml/bluetooth_settings.xml
deleted file mode 100644
index 86d6d01..0000000
--- a/res/xml/bluetooth_settings.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/bluetooth_settings">
-
- <Preference
- android:key="device_name" />
-
- <PreferenceCategory
- android:key="paired_devices"
- android:title="@string/bluetooth_paired_device_title" />
-
- <PreferenceCategory>
-
- <Preference
- android:key="bt_rename_device"
- android:title="@string/bluetooth_device_name"
- android:summary="@string/summary_placeholder" />
-
- <Preference
- android:key="bt_received_files"
- android:title="@string/bluetooth_show_received_files" />
-
- </PreferenceCategory>
-
- <com.android.settingslib.widget.FooterPreference />
-
-</PreferenceScreen>
diff --git a/res/xml/bluetooth_settings_obsolete.xml b/res/xml/bluetooth_settings_obsolete.xml
deleted file mode 100644
index 55a099c..0000000
--- a/res/xml/bluetooth_settings_obsolete.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<PreferenceScreen
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/bluetooth_settings" >
-
-</PreferenceScreen>
diff --git a/res/xml/captioning_appearance.xml b/res/xml/captioning_appearance.xml
index 7156630..d8220ef 100644
--- a/res/xml/captioning_appearance.xml
+++ b/res/xml/captioning_appearance.xml
@@ -18,80 +18,91 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/captioning_caption_appearance_title">
+ android:title="@string/captioning_appearance_title">
<com.android.settingslib.widget.LayoutPreference
- android:key="caption_preview"
+ android:key="captioning_preview"
android:title="@string/summary_placeholder"
android:layout="@layout/captioning_preview"
android:selectable="false"
- settings:searchable="false"/>
+ settings:searchable="false"
+ settings:controller="com.android.settings.accessibility.CaptioningPreviewPreferenceController"/>
<ListPreference
android:entries="@array/captioning_font_size_selector_titles"
android:entryValues="@array/captioning_font_size_selector_values"
android:key="captioning_font_size"
android:summary="%s"
- android:title="@string/captioning_text_size"/>
+ android:title="@string/captioning_text_size"
+ settings:controller="com.android.settings.accessibility.CaptioningFontSizeController"/>
<com.android.settings.accessibility.PresetPreference
android:key="captioning_preset"
- android:title="@string/captioning_preset"/>
+ android:title="@string/captioning_preset"
+ settings:controller="com.android.settings.accessibility.CaptioningPresetController"/>
<PreferenceCategory
android:key="custom"
- android:title="@string/captioning_custom_options_title">
+ android:title="@string/captioning_custom_options_title"
+ settings:controller="com.android.settings.accessibility.CaptioningCustomController">
<ListPreference
android:entries="@array/captioning_typeface_selector_titles"
android:entryValues="@array/captioning_typeface_selector_values"
android:key="captioning_typeface"
android:summary="%s"
- android:title="@string/captioning_typeface"/>
+ android:title="@string/captioning_typeface"
+ settings:controller="com.android.settings.accessibility.CaptioningTypefaceController"/>
<com.android.settings.accessibility.ColorPreference
android:key="captioning_foreground_color"
- android:title="@string/captioning_foreground_color"/>
+ android:title="@string/captioning_foreground_color"
+ settings:controller="com.android.settings.accessibility.CaptioningForegroundColorController"/>
<com.android.settings.accessibility.ColorPreference
android:dependency="captioning_foreground_color"
android:key="captioning_foreground_opacity"
- android:title="@string/captioning_foreground_opacity"/>
+ android:title="@string/captioning_foreground_opacity"
+ settings:controller="com.android.settings.accessibility.CaptioningForegroundOpacityController"/>
<com.android.settings.accessibility.EdgeTypePreference
android:key="captioning_edge_type"
- android:title="@string/captioning_edge_type"/>
+ android:title="@string/captioning_edge_type"
+ settings:controller="com.android.settings.accessibility.CaptioningEdgeTypeController"/>
<com.android.settings.accessibility.ColorPreference
android:dependency="captioning_edge_type"
android:key="captioning_edge_color"
- android:title="@string/captioning_edge_color"/>
+ android:title="@string/captioning_edge_color"
+ settings:controller="com.android.settings.accessibility.CaptioningEdgeColorController"/>
<com.android.settings.accessibility.ColorPreference
android:key="captioning_background_color"
- android:title="@string/captioning_background_color"/>
+ android:title="@string/captioning_background_color"
+ settings:controller="com.android.settings.accessibility.CaptioningBackgroundColorController"/>
<com.android.settings.accessibility.ColorPreference
android:dependency="captioning_background_color"
android:key="captioning_background_opacity"
- android:title="@string/captioning_background_opacity"/>
+ android:title="@string/captioning_background_opacity"
+ settings:controller="com.android.settings.accessibility.CaptioningBackgroundOpacityController"/>
<com.android.settings.accessibility.ColorPreference
android:key="captioning_window_color"
- android:title="@string/captioning_window_color"/>
+ android:title="@string/captioning_window_color"
+ settings:controller="com.android.settings.accessibility.CaptioningWindowColorController"/>
<com.android.settings.accessibility.ColorPreference
android:dependency="captioning_window_color"
android:key="captioning_window_opacity"
- android:title="@string/captioning_window_opacity"/>
-
+ android:title="@string/captioning_window_opacity"
+ settings:controller="com.android.settings.accessibility.CaptioningWindowOpacityController"/>
</PreferenceCategory>
<com.android.settings.accessibility.AccessibilityFooterPreference
android:key="captioning_appearance_footer"
- android:title="@string/accessibility_caption_preference_summary"
- android:persistent="false"
+ android:title="@string/accessibility_captioning_preference_summary"
android:selectable="false"
settings:searchable="false"
- settings:controller="com.android.settings.accessibility.CaptionFooterPreferenceController"/>
+ settings:controller="com.android.settings.accessibility.CaptioningFooterPreferenceController"/>
</PreferenceScreen>
diff --git a/res/xml/captioning_more_options.xml b/res/xml/captioning_more_options.xml
index b902c48..42c106b 100644
--- a/res/xml/captioning_more_options.xml
+++ b/res/xml/captioning_more_options.xml
@@ -23,14 +23,14 @@
<com.android.settings.accessibility.LocalePreference
android:key="captioning_locale"
android:summary="%s"
- android:title="@string/captioning_locale" />
+ android:title="@string/captioning_locale"
+ settings:controller="com.android.settings.accessibility.CaptioningLocalePreferenceController"/>
<com.android.settings.accessibility.AccessibilityFooterPreference
android:key="captioning_more_options_footer"
- android:title="@string/accessibility_caption_preference_summary"
- android:persistent="false"
+ android:title="@string/accessibility_captioning_preference_summary"
android:selectable="false"
settings:searchable="false"
- settings:controller="com.android.settings.accessibility.CaptionFooterPreferenceController"/>
+ settings:controller="com.android.settings.accessibility.CaptioningFooterPreferenceController"/>
</PreferenceScreen>
diff --git a/res/xml/captioning_settings.xml b/res/xml/captioning_settings.xml
index f9e9948..7fcc03d 100644
--- a/res/xml/captioning_settings.xml
+++ b/res/xml/captioning_settings.xml
@@ -18,46 +18,39 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:persistent="false"
android:title="@string/accessibility_captioning_title">
<com.android.settingslib.widget.TopIntroPreference
- android:key="captions_intro"
- android:persistent="false"
- android:title="@string/accessibility_caption_preference_intro"/>
+ android:key="captioning_intro"
+ android:title="@string/accessibility_captioning_preference_intro"/>
<com.android.settingslib.widget.IllustrationPreference
- android:key="captions_preview"
- android:persistent="false"
+ android:key="captioning_preview"
android:selectable="false"
- settings:lottie_rawRes="@drawable/accessibility_captions_banner"
+ settings:lottie_rawRes="@drawable/accessibility_captioning_banner"
settings:searchable="false" />
<com.android.settings.widget.SettingsMainSwitchPreference
android:key="captioning_preference_switch"
- android:persistent="false"
- android:summary="@string/accessibility_caption_primary_switch_summary"
- android:title="@string/accessibility_caption_primary_switch_title" />
+ android:title="@string/accessibility_captioning_primary_switch_title"
+ settings:controller="com.android.settings.accessibility.CaptioningTogglePreferenceController"/>
<Preference
- android:fragment="com.android.settings.accessibility.CaptionAppearanceFragment"
- android:key="captioning_caption_appearance"
- android:persistent="false"
- android:title="@string/captioning_caption_appearance_title"
- settings:controller="com.android.settings.accessibility.CaptionAppearancePreferenceController" />
+ android:fragment="com.android.settings.accessibility.CaptioningAppearanceFragment"
+ android:key="captioning_appearance"
+ android:title="@string/captioning_appearance_title"
+ settings:controller="com.android.settings.accessibility.CaptioningAppearancePreferenceController" />
<Preference
- android:fragment="com.android.settings.accessibility.CaptionMoreOptionsFragment"
+ android:fragment="com.android.settings.accessibility.CaptioningMoreOptionsFragment"
android:key="captioning_more_options"
- android:persistent="false"
android:title="@string/captioning_more_options_title" />
<com.android.settings.accessibility.AccessibilityFooterPreference
android:key="captioning_settings_footer"
- android:title="@string/accessibility_caption_preference_summary"
- android:persistent="false"
+ android:title="@string/accessibility_captioning_preference_summary"
android:selectable="false"
settings:searchable="false"
- settings:controller="com.android.settings.accessibility.CaptionFooterPreferenceController"/>
+ settings:controller="com.android.settings.accessibility.CaptioningFooterPreferenceController"/>
</PreferenceScreen>
diff --git a/res/xml/dream_fragment_overview.xml b/res/xml/dream_fragment_overview.xml
index a7b5492..db8f4fd 100644
--- a/res/xml/dream_fragment_overview.xml
+++ b/res/xml/dream_fragment_overview.xml
@@ -27,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
@@ -36,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/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/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/src/com/android/settings/SettingsApplication.java b/src/com/android/settings/SettingsApplication.java
index fc56e93..333fc27 100644
--- a/src/com/android/settings/SettingsApplication.java
+++ b/src/com/android/settings/SettingsApplication.java
@@ -17,11 +17,19 @@
package com.android.settings;
import android.app.Application;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.provider.Settings;
+import android.util.FeatureFlagUtils;
+
+import androidx.window.embedding.SplitController;
import com.android.settings.activityembedding.ActivityEmbeddingRulesController;
import com.android.settings.homepage.SettingsHomepageActivity;
import com.android.settingslib.applications.AppIconCacheManager;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
import java.lang.ref.WeakReference;
/** Settings application which sets up activity embedding rules for the large screen device. */
@@ -33,9 +41,14 @@
public void onCreate() {
super.onCreate();
- final ActivityEmbeddingRulesController controller =
- new ActivityEmbeddingRulesController(this);
- controller.initRules();
+ if (FeatureFlagUtils.isEnabled(this, FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN)
+ && SplitController.getInstance().isSplitSupported()) {
+ if (WizardManagerHelper.isUserSetupComplete(this)) {
+ new ActivityEmbeddingRulesController(this).initRules();
+ } else {
+ new DeviceProvisionedObserver().registerContentObserver();
+ }
+ }
}
public void setHomeActivity(SettingsHomepageActivity homeActivity) {
@@ -51,4 +64,30 @@
super.onLowMemory();
AppIconCacheManager.getInstance().release();
}
+
+ private class DeviceProvisionedObserver extends ContentObserver {
+ private final Uri mDeviceProvisionedUri = Settings.Secure.getUriFor(
+ Settings.Secure.USER_SETUP_COMPLETE);
+
+ DeviceProvisionedObserver() {
+ super(null /* handler */);
+ }
+
+ @Override
+ public void onChange(boolean selfChange, Uri uri, int flags) {
+ if (!mDeviceProvisionedUri.equals(uri)) {
+ return;
+ }
+
+ SettingsApplication.this.getContentResolver().unregisterContentObserver(this);
+ new ActivityEmbeddingRulesController(SettingsApplication.this).initRules();
+ }
+
+ public void registerContentObserver() {
+ SettingsApplication.this.getContentResolver().registerContentObserver(
+ mDeviceProvisionedUri,
+ false /* notifyForDescendants */,
+ this);
+ }
+ }
}
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 012996b..561fde8 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -324,13 +324,13 @@
mStartTetheringCallback = new OnStartTetheringCallback(this);
- mTetheringEventCallback = new TetheringEventCallback();
+ mTetheringEventCallback = new TetheringEventCallback(this);
mTm.registerTetheringEventCallback(r -> mHandler.post(r), mTetheringEventCallback);
mMassStorageActive = Environment.MEDIA_SHARED.equals(Environment.getExternalStorageState());
registerReceiver();
- mEthernetListener = new EthernetListener();
+ mEthernetListener = new EthernetListener(this);
if (mEm != null)
mEm.addInterfaceStateListener(r -> mHandler.post(r), mEthernetListener);
@@ -640,25 +640,56 @@
}
}
- private final class TetheringEventCallback implements TetheringManager.TetheringEventCallback {
+ private static final class TetheringEventCallback implements
+ TetheringManager.TetheringEventCallback {
+ final WeakReference<TetherSettings> mTetherSettings;
+
+ TetheringEventCallback(TetherSettings settings) {
+ mTetherSettings = new WeakReference<>(settings);
+ }
+
@Override
public void onTetheredInterfacesChanged(List<String> interfaces) {
- Log.d(TAG, "onTetheredInterfacesChanged() interfaces : " + interfaces.toString());
- String[] tethered = interfaces.toArray(new String[interfaces.size()]);
- updateUsbState(tethered);
- updateBluetoothAndEthernetState(tethered);
+ final TetherSettings tetherSettings = mTetherSettings.get();
+ if (tetherSettings == null) {
+ return;
+ }
+ tetherSettings.onTetheredInterfacesChanged(interfaces);
}
}
- private final class EthernetListener implements EthernetManager.InterfaceStateListener {
+ void onTetheredInterfacesChanged(List<String> interfaces) {
+ Log.d(TAG, "onTetheredInterfacesChanged() interfaces : " + interfaces.toString());
+ final String[] tethered = interfaces.toArray(new String[interfaces.size()]);
+ updateUsbState(tethered);
+ updateBluetoothAndEthernetState(tethered);
+ }
+
+ private static final class EthernetListener implements EthernetManager.InterfaceStateListener {
+ final WeakReference<TetherSettings> mTetherSettings;
+
+ EthernetListener(TetherSettings settings) {
+ mTetherSettings = new WeakReference<>(settings);
+ }
+
+ @Override
public void onInterfaceStateChanged(@NonNull String iface, int state, int role,
@NonNull IpConfiguration configuration) {
- if (state == EthernetManager.STATE_LINK_UP) {
- mAvailableInterfaces.add(iface);
- } else {
- mAvailableInterfaces.remove(iface);
+ final TetherSettings tetherSettings = mTetherSettings.get();
+ if (tetherSettings == null) {
+ return;
}
- updateBluetoothAndEthernetState();
+ tetherSettings.onInterfaceStateChanged(iface, state, role, configuration);
}
}
+
+ void onInterfaceStateChanged(@NonNull String iface, int state, int role,
+ @NonNull IpConfiguration configuration) {
+ if (state == EthernetManager.STATE_LINK_UP) {
+ mAvailableInterfaces.add(iface);
+ } else {
+ mAvailableInterfaces.remove(iface);
+ }
+ updateBluetoothAndEthernetState();
+ }
}
diff --git a/src/com/android/settings/UserCredentialsSettings.java b/src/com/android/settings/UserCredentialsSettings.java
index 80b97e4..c45b5ef 100644
--- a/src/com/android/settings/UserCredentialsSettings.java
+++ b/src/com/android/settings/UserCredentialsSettings.java
@@ -48,7 +48,6 @@
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
-import com.android.internal.widget.LockPatternUtils;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -297,7 +296,6 @@
private SortedMap<String, Credential> getCredentialsForUid(KeyStore keyStore, int uid) {
try {
final SortedMap<String, Credential> aliasMap = new TreeMap<>();
- boolean isSystem = UserHandle.getAppId(uid) == Process.SYSTEM_UID;
Enumeration<String> aliases = keyStore.aliases();
while (aliases.hasMoreElements()) {
String alias = aliases.nextElement();
@@ -315,19 +313,6 @@
// We don't display any symmetric key entries.
continue;
}
- if (isSystem) {
- // Do not show work profile keys in user credentials
- if (alias.startsWith(LockPatternUtils.PROFILE_KEY_NAME_ENCRYPT) ||
- alias.startsWith(LockPatternUtils.PROFILE_KEY_NAME_DECRYPT)) {
- continue;
- }
- // Do not show synthetic password keys in user credential
- // We should never reach this point because the synthetic password key
- // is symmetric.
- if (alias.startsWith(LockPatternUtils.SYNTHETIC_PASSWORD_KEY_PREFIX)) {
- continue;
- }
- }
// At this point we have determined that we have an asymmetric key.
// so we have at least a USER_KEY and USER_CERTIFICATE.
c.storedTypes.add(Credential.Type.USER_KEY);
diff --git a/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragment.java
index c7a9b10..d7e33ae 100644
--- a/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragment.java
@@ -17,55 +17,17 @@
package com.android.settings.accessibility;
import android.app.settings.SettingsEnums;
-import android.content.Context;
-import android.content.res.Resources;
-
-import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.search.SearchIndexable;
-import java.util.ArrayList;
-import java.util.List;
-
/** Settings fragment containing accessibility control timeout preference. */
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public final class AccessibilityControlTimeoutPreferenceFragment extends DashboardFragment
- implements AccessibilityTimeoutController.OnChangeListener {
+public final class AccessibilityControlTimeoutPreferenceFragment extends DashboardFragment {
static final String TAG = "AccessibilityControlTimeoutPreferenceFragment";
- private static final List<AbstractPreferenceController> sControllers = new ArrayList<>();
-
- @Override
- public void onCheckedChanged(Preference preference) {
- for (AbstractPreferenceController controller : sControllers) {
- controller.updateState(preference);
- }
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- for (AbstractPreferenceController controller :
- buildPreferenceControllers(getPrefContext(), getSettingsLifecycle())) {
- ((AccessibilityTimeoutController)controller).setOnChangeListener(this);
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
-
- for (AbstractPreferenceController controller :
- buildPreferenceControllers(getPrefContext(), getSettingsLifecycle())) {
- ((AccessibilityTimeoutController)controller).setOnChangeListener(null);
- }
- }
@Override
public int getMetricsCategory() {
@@ -83,38 +45,10 @@
}
@Override
- protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- return buildPreferenceControllers(context, getSettingsLifecycle());
- }
-
- @Override
public int getHelpResource() {
return R.string.help_url_timeout;
}
- private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
- Lifecycle lifecycle) {
- if (sControllers.size() == 0) {
- Resources resources = context.getResources();
-
- String[] timeoutKeys = resources.getStringArray(
- R.array.accessibility_timeout_control_selector_keys);
-
- for (int i=0; i < timeoutKeys.length; i++) {
- sControllers.add(new AccessibilityTimeoutController(
- context, lifecycle, timeoutKeys[i]));
- }
- }
- return sControllers;
- }
-
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.accessibility_control_timeout_settings) {
-
- @Override
- public List<AbstractPreferenceController> createPreferenceControllers(
- Context context) {
- return buildPreferenceControllers(context, null);
- }
- };
+ new BaseSearchIndexProvider(R.xml.accessibility_control_timeout_settings);
}
diff --git a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
index 95469d4..dd8a3ea 100644
--- a/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
+++ b/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorial.java
@@ -24,7 +24,6 @@
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.text.Spannable;
import android.text.SpannableString;
@@ -43,7 +42,6 @@
import android.widget.TextView;
import androidx.annotation.AnimRes;
-import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
@@ -51,7 +49,6 @@
import androidx.annotation.RawRes;
import androidx.annotation.VisibleForTesting;
import androidx.appcompat.app.AlertDialog;
-import androidx.core.content.ContextCompat;
import androidx.core.util.Preconditions;
import androidx.core.widget.TextViewCompat;
import androidx.viewpager.widget.PagerAdapter;
@@ -98,27 +95,18 @@
* Displays a dialog that guides users to use accessibility features with accessibility
* gestures under system gesture navigation mode.
*/
- public static void showGestureNavigationTutorialDialog(Context context,
+ public static AlertDialog showGestureNavigationTutorialDialog(Context context,
DialogInterface.OnDismissListener onDismissListener) {
final AlertDialog alertDialog = new AlertDialog.Builder(context)
.setView(createTutorialDialogContentView(context,
DialogType.GESTURE_NAVIGATION_SETTINGS))
- .setNegativeButton(R.string.accessibility_tutorial_dialog_button, mOnClickListener)
+ .setPositiveButton(R.string.accessibility_tutorial_dialog_button, mOnClickListener)
.setOnDismissListener(onDismissListener)
.create();
alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
alertDialog.setCanceledOnTouchOutside(false);
alertDialog.show();
- }
-
- static AlertDialog showAccessibilityButtonTutorialDialog(Context context) {
- final AlertDialog alertDialog = createDialog(context,
- DialogType.LAUNCH_SERVICE_BY_ACCESSIBILITY_BUTTON);
-
- if (!AccessibilityUtil.isGestureNavigateEnabled(context)) {
- updateMessageWithIcon(context, alertDialog);
- }
return alertDialog;
}
@@ -142,10 +130,10 @@
.launch();
final AlertDialog alertDialog = new AlertDialog.Builder(context)
- .setNegativeButton(R.string.accessibility_tutorial_dialog_link_button,
- linkButtonListener)
.setPositiveButton(R.string.accessibility_tutorial_dialog_button,
actionButtonListener)
+ .setNegativeButton(R.string.accessibility_tutorial_dialog_link_button,
+ linkButtonListener)
.create();
final TutorialPageChangeListener.OnPageSelectedCallback callback =
@@ -208,7 +196,7 @@
private static AlertDialog createDialog(Context context, int dialogType) {
final AlertDialog alertDialog = new AlertDialog.Builder(context)
.setView(createTutorialDialogContentView(context, dialogType))
- .setNegativeButton(R.string.accessibility_tutorial_dialog_button, mOnClickListener)
+ .setPositiveButton(R.string.accessibility_tutorial_dialog_button, mOnClickListener)
.create();
alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
@@ -218,50 +206,6 @@
return alertDialog;
}
- private static void updateMessageWithIcon(Context context, AlertDialog alertDialog) {
- final TextView gestureTutorialMessage = alertDialog.findViewById(
- R.id.button_tutorial_message);
-
- // Get the textView line height to update [icon] size. Must be called after show()
- final int lineHeight = gestureTutorialMessage.getLineHeight();
- gestureTutorialMessage.setText(getMessageStringWithIcon(context, lineHeight));
- }
-
- private static SpannableString getMessageStringWithIcon(Context context, int lineHeight) {
- final String messageString = context
- .getString(R.string.accessibility_tutorial_dialog_message_button);
- final SpannableString spannableMessage = SpannableString.valueOf(messageString);
-
- // Icon
- final int indexIconStart = messageString.indexOf("%s");
- final int indexIconEnd = indexIconStart + 2;
- final Drawable icon = context.getDrawable(R.drawable.ic_accessibility_new);
- final ImageSpan imageSpan = new ImageSpan(icon);
- imageSpan.setContentDescription("");
- icon.setBounds(0, 0, lineHeight, lineHeight);
- spannableMessage.setSpan(
- imageSpan, indexIconStart, indexIconEnd,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-
- return spannableMessage;
- }
-
- /** Returns the color associated with the specified attribute in the context's theme. */
- @ColorInt
- private static int getThemeAttrColor(final Context context, final int attributeColor) {
- final int colorResId = getAttrResourceId(context, attributeColor);
- return ContextCompat.getColor(context, colorResId);
- }
-
- /** Returns the identifier of the resolved resource assigned to the given attribute. */
- private static int getAttrResourceId(final Context context, final int attributeColor) {
- final int[] attrs = {attributeColor};
- final TypedArray typedArray = context.obtainStyledAttributes(attrs);
- final int colorResId = typedArray.getResourceId(0, 0);
- typedArray.recycle();
- return colorResId;
- }
-
private static class TutorialPagerAdapter extends PagerAdapter {
private final List<TutorialPage> mTutorialPages;
private TutorialPagerAdapter(List<TutorialPage> tutorialPages) {
diff --git a/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java
index d272a0b..429fd9d 100644
--- a/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceController.java
@@ -102,6 +102,11 @@
}
private void showQuickSettingsTooltipIfNeeded() {
+ if (mPreference == null) {
+ // Returns if no preference found by slice highlight menu.
+ return;
+ }
+
final ComponentName tileComponentName = getTileComponentName();
if (tileComponentName == null) {
// Returns if no tile service assigned.
diff --git a/src/com/android/settings/accessibility/AccessibilityTimeoutController.java b/src/com/android/settings/accessibility/AccessibilityTimeoutController.java
index 2d624c3..b306cd8 100644
--- a/src/com/android/settings/accessibility/AccessibilityTimeoutController.java
+++ b/src/com/android/settings/accessibility/AccessibilityTimeoutController.java
@@ -19,79 +19,114 @@
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
+import android.os.Handler;
+import android.os.Looper;
import android.provider.Settings;
-import androidx.lifecycle.LifecycleObserver;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
-import com.google.common.primitives.Ints;
-
+import java.util.Arrays;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
-/**
- * Controller class that control accessibility time out settings.
- */
-public class AccessibilityTimeoutController extends AbstractPreferenceController implements
- LifecycleObserver, SelectorWithWidgetPreference.OnClickListener, PreferenceControllerMixin {
- static final String CONTENT_TIMEOUT_SETTINGS_SECURE =
- Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS;
- static final String CONTROL_TIMEOUT_SETTINGS_SECURE =
- Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS;
+/** Controller class that control accessibility timeout settings. */
+public class AccessibilityTimeoutController extends BasePreferenceController implements
+ LifecycleObserver, OnStart, OnStop , SelectorWithWidgetPreference.OnClickListener {
+
+ private static final List<String> ACCESSIBILITY_TIMEOUT_FEATURE_KEYS = Arrays.asList(
+ Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS,
+ Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS
+ );
// pair the preference key and timeout value.
private final Map<String, Integer> mAccessibilityTimeoutKeyToValueMap = new HashMap<>();
-
// RadioButtonPreference key, each preference represent a timeout value.
- private final String mPreferenceKey;
private final ContentResolver mContentResolver;
private final Resources mResources;
- private OnChangeListener mOnChangeListener;
private SelectorWithWidgetPreference mPreference;
private int mAccessibilityUiTimeoutValue;
+ private AccessibilitySettingsContentObserver mSettingsContentObserver;
- public AccessibilityTimeoutController(Context context, Lifecycle lifecycle,
- String preferenceKey) {
- super(context);
-
+ public AccessibilityTimeoutController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
mContentResolver = context.getContentResolver();
mResources = context.getResources();
-
- if (lifecycle != null) {
- lifecycle.addObserver(this);
- }
- mPreferenceKey = preferenceKey;
+ mSettingsContentObserver = new AccessibilitySettingsContentObserver(
+ new Handler(Looper.getMainLooper()));
+ mSettingsContentObserver.registerKeysToObserverCallback(ACCESSIBILITY_TIMEOUT_FEATURE_KEYS,
+ key -> updateState(mPreference));
}
- protected static int getSecureAccessibilityTimeoutValue(ContentResolver resolver, String name) {
- String timeOutSec = Settings.Secure.getString(resolver, name);
- if (timeOutSec == null) {
- return 0;
- }
- Integer timeOutValue = Ints.tryParse(timeOutSec);
- return timeOutValue == null ? 0 : timeOutValue;
+ @VisibleForTesting
+ AccessibilityTimeoutController(Context context, String preferenceKey,
+ AccessibilitySettingsContentObserver contentObserver) {
+ this(context, preferenceKey);
+ mSettingsContentObserver = contentObserver;
}
- public void setOnChangeListener(OnChangeListener listener) {
- mOnChangeListener = listener;
+ @Override
+ public void onStart() {
+ mSettingsContentObserver.register(mContentResolver);
+ }
+
+ @Override
+ public void onStop() {
+ mSettingsContentObserver.unregister(mContentResolver);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
+ mPreference.setOnClickListener(this);
+ }
+
+ @Override
+ public void onRadioButtonClicked(SelectorWithWidgetPreference preference) {
+ final String value = String.valueOf(getTimeoutValueToKeyMap().get(mPreferenceKey));
+
+ // save value to both content and control timeout setting.
+ Settings.Secure.putString(mContentResolver,
+ Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, value);
+ Settings.Secure.putString(mContentResolver,
+ Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, value);
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ super.updateState(preference);
+ mAccessibilityUiTimeoutValue = AccessibilityTimeoutUtils.getSecureAccessibilityTimeoutValue(
+ mContentResolver);
+
+ // reset RadioButton
+ mPreference.setChecked(false);
+ final int preferenceValue = getTimeoutValueToKeyMap().get(mPreference.getKey());
+ if (mAccessibilityUiTimeoutValue == preferenceValue) {
+ mPreference.setChecked(true);
+ }
}
private Map<String, Integer> getTimeoutValueToKeyMap() {
if (mAccessibilityTimeoutKeyToValueMap.size() == 0) {
-
String[] timeoutKeys = mResources.getStringArray(
R.array.accessibility_timeout_control_selector_keys);
-
- int[] timeoutValues = mResources.getIntArray(
+ final int[] timeoutValues = mResources.getIntArray(
R.array.accessibility_timeout_selector_values);
-
final int timeoutValueCount = timeoutValues.length;
for (int i = 0; i < timeoutValueCount; i++) {
mAccessibilityTimeoutKeyToValueMap.put(timeoutKeys[i], timeoutValues[i]);
@@ -99,77 +134,4 @@
}
return mAccessibilityTimeoutKeyToValueMap;
}
-
- private void putSecureString(String name, String value) {
- Settings.Secure.putString(mContentResolver, name, value);
- }
-
- private void handlePreferenceChange(String value) {
- // save value to both content and control timeout setting.
- putSecureString(Settings.Secure.ACCESSIBILITY_NON_INTERACTIVE_UI_TIMEOUT_MS, value);
- putSecureString(Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, value);
- }
-
- @Override
- public boolean isAvailable() {
- return true;
- }
-
- @Override
- public String getPreferenceKey() {
- return mPreferenceKey;
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
-
- mPreference = (SelectorWithWidgetPreference)
- screen.findPreference(getPreferenceKey());
- mPreference.setOnClickListener(this);
- }
-
- @Override
- public void onRadioButtonClicked(SelectorWithWidgetPreference preference) {
- int value = getTimeoutValueToKeyMap().get(mPreferenceKey);
- handlePreferenceChange(String.valueOf(value));
- if (mOnChangeListener != null) {
- mOnChangeListener.onCheckedChanged(mPreference);
- }
- }
-
- private int getAccessibilityTimeoutValue() {
- // get accessibility control timeout value
- int timeoutValue = getSecureAccessibilityTimeoutValue(mContentResolver,
- CONTROL_TIMEOUT_SETTINGS_SECURE);
- return timeoutValue;
- }
-
- protected void updatePreferenceCheckedState(int value) {
- if (mAccessibilityUiTimeoutValue == value) {
- mPreference.setChecked(true);
- }
- }
-
- @Override
- public void updateState(Preference preference) {
- super.updateState(preference);
-
- mAccessibilityUiTimeoutValue = getAccessibilityTimeoutValue();
-
- // reset RadioButton
- mPreference.setChecked(false);
- int preferenceValue = getTimeoutValueToKeyMap().get(mPreference.getKey());
- updatePreferenceCheckedState(preferenceValue);
- }
-
- /**
- * Listener interface handles checked event.
- */
- public interface OnChangeListener {
- /**
- * A hook that is called when preference checked.
- */
- void onCheckedChanged(Preference preference);
- }
}
diff --git a/src/com/android/settings/accessibility/AccessibilityTimeoutPreferenceController.java b/src/com/android/settings/accessibility/AccessibilityTimeoutPreferenceController.java
index e7b0e3c..d703a92 100644
--- a/src/com/android/settings/accessibility/AccessibilityTimeoutPreferenceController.java
+++ b/src/com/android/settings/accessibility/AccessibilityTimeoutPreferenceController.java
@@ -16,17 +16,25 @@
package com.android.settings.accessibility;
+import android.content.ContentResolver;
import android.content.Context;
+import android.content.res.Resources;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.google.common.primitives.Ints;
+/** Preference controller for accessibility timeout. */
public class AccessibilityTimeoutPreferenceController extends BasePreferenceController {
+ private final ContentResolver mContentResolver;
+ private final Resources mResources;
+
public AccessibilityTimeoutPreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
+ mContentResolver = mContext.getContentResolver();
+ mResources = mContext.getResources();
}
@Override
@@ -36,14 +44,13 @@
@Override
public CharSequence getSummary() {
- final String[] timeoutSummarys = mContext.getResources().getStringArray(
+ final String[] timeoutSummaries = mResources.getStringArray(
R.array.accessibility_timeout_summaries);
- final int[] timeoutValues = mContext.getResources().getIntArray(
+ final int[] timeoutValues = mResources.getIntArray(
R.array.accessibility_timeout_selector_values);
- final int timeoutValue = AccessibilityTimeoutController.getSecureAccessibilityTimeoutValue(
- mContext.getContentResolver(),
- AccessibilityTimeoutController.CONTROL_TIMEOUT_SETTINGS_SECURE);
+ final int timeoutValue = AccessibilityTimeoutUtils.getSecureAccessibilityTimeoutValue(
+ mContentResolver);
final int idx = Ints.indexOf(timeoutValues, timeoutValue);
- return timeoutSummarys[idx == -1 ? 0 : idx];
+ return timeoutSummaries[idx == -1 ? 0 : idx];
}
}
diff --git a/src/com/android/settings/accessibility/AccessibilityTimeoutUtils.java b/src/com/android/settings/accessibility/AccessibilityTimeoutUtils.java
new file mode 100644
index 0000000..b738688
--- /dev/null
+++ b/src/com/android/settings/accessibility/AccessibilityTimeoutUtils.java
@@ -0,0 +1,44 @@
+/*
+ * 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.accessibility;
+
+import android.content.ContentResolver;
+import android.provider.Settings;
+
+import com.google.common.primitives.Ints;
+
+/** Provides utility methods to accessibility timeout. */
+public final class AccessibilityTimeoutUtils {
+
+ /**
+ * Gets accessibility control timeout value.
+ *
+ * @param resolver the resolver to use
+ * @return accessibility control timeout value
+ */
+ public static int getSecureAccessibilityTimeoutValue(ContentResolver resolver) {
+ final String timeOutSec = Settings.Secure.getString(resolver,
+ Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS);
+ if (timeOutSec == null) {
+ return 0;
+ }
+ Integer timeOutValue = Ints.tryParse(timeOutSec);
+ return timeOutValue == null ? 0 : timeOutValue;
+ }
+
+ private AccessibilityTimeoutUtils(){}
+}
diff --git a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java b/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
deleted file mode 100644
index 53c1dd0..0000000
--- a/src/com/android/settings/accessibility/CaptionAppearanceFragment.java
+++ /dev/null
@@ -1,443 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.settings.accessibility;
-
-import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
-
-import android.app.settings.SettingsEnums;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.provider.Settings;
-import android.view.View;
-import android.view.accessibility.CaptioningManager;
-
-import androidx.preference.ListPreference;
-import androidx.preference.Preference;
-import androidx.preference.Preference.OnPreferenceChangeListener;
-import androidx.preference.PreferenceCategory;
-
-import com.android.internal.widget.SubtitleView;
-import com.android.settings.R;
-import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.accessibility.AccessibilityUtils;
-import com.android.settingslib.search.SearchIndexable;
-import com.android.settingslib.widget.LayoutPreference;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-/** Settings fragment containing font style of captioning properties. */
-@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public class CaptionAppearanceFragment extends DashboardFragment
- implements OnPreferenceChangeListener, OnValueChangedListener {
-
- private static final String TAG = "CaptionAppearanceFragment";
- private static final String PREF_CAPTION_PREVIEW = "caption_preview";
- private static final String PREF_BACKGROUND_COLOR = "captioning_background_color";
- private static final String PREF_BACKGROUND_OPACITY = "captioning_background_opacity";
- private static final String PREF_FOREGROUND_COLOR = "captioning_foreground_color";
- private static final String PREF_FOREGROUND_OPACITY = "captioning_foreground_opacity";
- private static final String PREF_WINDOW_COLOR = "captioning_window_color";
- private static final String PREF_WINDOW_OPACITY = "captioning_window_opacity";
- private static final String PREF_EDGE_COLOR = "captioning_edge_color";
- private static final String PREF_EDGE_TYPE = "captioning_edge_type";
- private static final String PREF_FONT_SIZE = "captioning_font_size";
- private static final String PREF_TYPEFACE = "captioning_typeface";
- private static final String PREF_PRESET = "captioning_preset";
- private static final String PREF_CUSTOM = "custom";
-
- /* WebVtt specifies line height as 5.3% of the viewport height. */
- private static final float LINE_HEIGHT_RATIO = 0.0533f;
-
- private CaptioningManager mCaptioningManager;
- private SubtitleView mPreviewText;
- private View mPreviewWindow;
- private View mPreviewViewport;
-
- // Standard options.
- private ListPreference mFontSize;
- private PresetPreference mPreset;
-
- // Custom options.
- private ListPreference mTypeface;
- private ColorPreference mForegroundColor;
- private ColorPreference mForegroundOpacity;
- private EdgeTypePreference mEdgeType;
- private ColorPreference mEdgeColor;
- private ColorPreference mBackgroundColor;
- private ColorPreference mBackgroundOpacity;
- private ColorPreference mWindowColor;
- private ColorPreference mWindowOpacity;
- private PreferenceCategory mCustom;
-
- private boolean mShowingCustom;
-
- private final List<Preference> mPreferenceList = new ArrayList<>();
-
- private final Handler mHandler = new Handler(Looper.getMainLooper());
- private final View.OnLayoutChangeListener mLayoutChangeListener =
- new View.OnLayoutChangeListener() {
- @Override
- public void onLayoutChange(View v, int left, int top, int right, int bottom,
- int oldLeft, int oldTop, int oldRight, int oldBottom) {
- // Remove the listener once the callback is triggered.
- mPreviewViewport.removeOnLayoutChangeListener(this);
- mHandler.post(() ->refreshPreviewText());
- }
- };
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.ACCESSIBILITY_CAPTION_APPEARANCE;
- }
-
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- super.onCreatePreferences(savedInstanceState, rootKey);
-
- mCaptioningManager = (CaptioningManager) getSystemService(Context.CAPTIONING_SERVICE);
-
- initializeAllPreferences();
- updateAllPreferences();
- refreshShowingCustom();
- installUpdateListeners();
- refreshPreviewText();
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.captioning_appearance;
- }
-
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- private void refreshPreviewText() {
- final Context context = getActivity();
- if (context == null) {
- // We've been destroyed, abort!
- return;
- }
-
- final SubtitleView preview = mPreviewText;
- if (preview != null) {
- final int styleId = mCaptioningManager.getRawUserStyle();
- applyCaptionProperties(mCaptioningManager, preview, mPreviewViewport, styleId);
-
- final Locale locale = mCaptioningManager.getLocale();
- if (locale != null) {
- final CharSequence localizedText = AccessibilityUtils.getTextForLocale(
- context, locale, R.string.captioning_preview_text);
- preview.setText(localizedText);
- } else {
- preview.setText(R.string.captioning_preview_text);
- }
-
- final CaptioningManager.CaptionStyle style = mCaptioningManager.getUserStyle();
- if (style.hasWindowColor()) {
- mPreviewWindow.setBackgroundColor(style.windowColor);
- } else {
- final CaptioningManager.CaptionStyle defStyle =
- CaptioningManager.CaptionStyle.DEFAULT;
- mPreviewWindow.setBackgroundColor(defStyle.windowColor);
- }
- }
- }
-
- /**
- * Updates font style of captioning properties for preview screen.
- *
- * @param manager caption manager
- * @param previewText preview text
- * @param previewWindow preview window
- * @param styleId font style id
- */
- public static void applyCaptionProperties(CaptioningManager manager, SubtitleView previewText,
- View previewWindow, int styleId) {
- previewText.setStyle(styleId);
-
- final Context context = previewText.getContext();
- final ContentResolver cr = context.getContentResolver();
- final float fontScale = manager.getFontScale();
- if (previewWindow != null) {
- // Assume the viewport is clipped with a 16:9 aspect ratio.
- final float virtualHeight = Math.max(9 * previewWindow.getWidth(),
- 16 * previewWindow.getHeight()) / 16.0f;
- previewText.setTextSize(virtualHeight * LINE_HEIGHT_RATIO * fontScale);
- } else {
- final float textSize = context.getResources().getDimension(
- R.dimen.caption_preview_text_size);
- previewText.setTextSize(textSize * fontScale);
- }
-
- final Locale locale = manager.getLocale();
- if (locale != null) {
- final CharSequence localizedText = AccessibilityUtils.getTextForLocale(
- context, locale, R.string.captioning_preview_characters);
- previewText.setText(localizedText);
- } else {
- previewText.setText(R.string.captioning_preview_characters);
- }
- }
-
- private void initializeAllPreferences() {
- final LayoutPreference captionPreview = findPreference(PREF_CAPTION_PREVIEW);
-
- mPreviewText = captionPreview.findViewById(R.id.preview_text);
-
- mPreviewWindow = captionPreview.findViewById(R.id.preview_window);
-
- mPreviewViewport = captionPreview.findViewById(R.id.preview_viewport);
- mPreviewViewport.addOnLayoutChangeListener(mLayoutChangeListener);
-
- final Resources res = getResources();
- final int[] presetValues = res.getIntArray(R.array.captioning_preset_selector_values);
- final String[] presetTitles = res.getStringArray(R.array.captioning_preset_selector_titles);
- mPreset = (PresetPreference) findPreference(PREF_PRESET);
- mPreset.setValues(presetValues);
- mPreset.setTitles(presetTitles);
-
- mFontSize = (ListPreference) findPreference(PREF_FONT_SIZE);
-
- // Initialize the preference list
- mPreferenceList.add(mFontSize);
- mPreferenceList.add(mPreset);
-
- mCustom = (PreferenceCategory) findPreference(PREF_CUSTOM);
- mShowingCustom = true;
-
- final int[] colorValues = res.getIntArray(R.array.captioning_color_selector_values);
- final String[] colorTitles = res.getStringArray(R.array.captioning_color_selector_titles);
- mForegroundColor = (ColorPreference) mCustom.findPreference(PREF_FOREGROUND_COLOR);
- mForegroundColor.setTitles(colorTitles);
- mForegroundColor.setValues(colorValues);
-
- final int[] opacityValues = res.getIntArray(R.array.captioning_opacity_selector_values);
- final String[] opacityTitles = res.getStringArray(
- R.array.captioning_opacity_selector_titles);
- mForegroundOpacity = (ColorPreference) mCustom.findPreference(PREF_FOREGROUND_OPACITY);
- mForegroundOpacity.setTitles(opacityTitles);
- mForegroundOpacity.setValues(opacityValues);
-
- mEdgeColor = (ColorPreference) mCustom.findPreference(PREF_EDGE_COLOR);
- mEdgeColor.setTitles(colorTitles);
- mEdgeColor.setValues(colorValues);
-
- // Add "none" as an additional option for backgrounds.
- final int[] bgColorValues = new int[colorValues.length + 1];
- final String[] bgColorTitles = new String[colorTitles.length + 1];
- System.arraycopy(colorValues, 0, bgColorValues, 1, colorValues.length);
- System.arraycopy(colorTitles, 0, bgColorTitles, 1, colorTitles.length);
- bgColorValues[0] = Color.TRANSPARENT;
- bgColorTitles[0] = getString(R.string.color_none);
- mBackgroundColor = (ColorPreference) mCustom.findPreference(PREF_BACKGROUND_COLOR);
- mBackgroundColor.setTitles(bgColorTitles);
- mBackgroundColor.setValues(bgColorValues);
-
- mBackgroundOpacity = (ColorPreference) mCustom.findPreference(PREF_BACKGROUND_OPACITY);
- mBackgroundOpacity.setTitles(opacityTitles);
- mBackgroundOpacity.setValues(opacityValues);
-
- mWindowColor = (ColorPreference) mCustom.findPreference(PREF_WINDOW_COLOR);
- mWindowColor.setTitles(bgColorTitles);
- mWindowColor.setValues(bgColorValues);
-
- mWindowOpacity = (ColorPreference) mCustom.findPreference(PREF_WINDOW_OPACITY);
- mWindowOpacity.setTitles(opacityTitles);
- mWindowOpacity.setValues(opacityValues);
-
- mEdgeType = (EdgeTypePreference) mCustom.findPreference(PREF_EDGE_TYPE);
- mTypeface = (ListPreference) mCustom.findPreference(PREF_TYPEFACE);
- }
-
- private void installUpdateListeners() {
- mPreset.setOnValueChangedListener(this);
- mForegroundColor.setOnValueChangedListener(this);
- mForegroundOpacity.setOnValueChangedListener(this);
- mEdgeColor.setOnValueChangedListener(this);
- mBackgroundColor.setOnValueChangedListener(this);
- mBackgroundOpacity.setOnValueChangedListener(this);
- mWindowColor.setOnValueChangedListener(this);
- mWindowOpacity.setOnValueChangedListener(this);
- mEdgeType.setOnValueChangedListener(this);
-
- mTypeface.setOnPreferenceChangeListener(this);
- mFontSize.setOnPreferenceChangeListener(this);
- }
-
- private void updateAllPreferences() {
- final int preset = mCaptioningManager.getRawUserStyle();
- mPreset.setValue(preset);
-
- final float fontSize = mCaptioningManager.getFontScale();
- mFontSize.setValue(Float.toString(fontSize));
-
- final ContentResolver cr = getContentResolver();
- final CaptioningManager.CaptionStyle attrs = CaptioningManager.CaptionStyle.getCustomStyle(
- cr);
- mEdgeType.setValue(attrs.edgeType);
- mEdgeColor.setValue(attrs.edgeColor);
-
- final int foregroundColor = attrs.hasForegroundColor() ? attrs.foregroundColor
- : CaptioningManager.CaptionStyle.COLOR_UNSPECIFIED;
- parseColorOpacity(mForegroundColor, mForegroundOpacity, foregroundColor);
-
- final int backgroundColor = attrs.hasBackgroundColor() ? attrs.backgroundColor
- : CaptioningManager.CaptionStyle.COLOR_UNSPECIFIED;
- parseColorOpacity(mBackgroundColor, mBackgroundOpacity, backgroundColor);
-
- final int windowColor = attrs.hasWindowColor() ? attrs.windowColor
- : CaptioningManager.CaptionStyle.COLOR_UNSPECIFIED;
- parseColorOpacity(mWindowColor, mWindowOpacity, windowColor);
-
- final String rawTypeface = attrs.mRawTypeface;
- mTypeface.setValue(rawTypeface == null ? "" : rawTypeface);
- }
-
- /**
- * Unpacks the specified color value and update the preferences.
- *
- * @param color color preference
- * @param opacity opacity preference
- * @param value packed value
- */
- private void parseColorOpacity(ColorPreference color, ColorPreference opacity, int value) {
- final int colorValue;
- final int opacityValue;
- if (!CaptioningManager.CaptionStyle.hasColor(value)) {
- // "Default" color with variable alpha.
- colorValue = CaptioningManager.CaptionStyle.COLOR_UNSPECIFIED;
- opacityValue = (value & 0xFF) << 24;
- } else if ((value >>> 24) == 0) {
- // "None" color with variable alpha.
- colorValue = Color.TRANSPARENT;
- opacityValue = (value & 0xFF) << 24;
- } else {
- // Normal color.
- colorValue = value | 0xFF000000;
- opacityValue = value & 0xFF000000;
- }
-
- // Opacity value is always white.
- opacity.setValue(opacityValue | 0xFFFFFF);
- color.setValue(colorValue);
- }
-
- private int mergeColorOpacity(ColorPreference color, ColorPreference opacity) {
- final int colorValue = color.getValue();
- final int opacityValue = opacity.getValue();
- final int value;
- // "Default" is 0x00FFFFFF or, for legacy support, 0x00000100.
- if (!CaptioningManager.CaptionStyle.hasColor(colorValue)) {
- // Encode "default" as 0x00FFFFaa.
- value = 0x00FFFF00 | Color.alpha(opacityValue);
- } else if (colorValue == Color.TRANSPARENT) {
- // Encode "none" as 0x000000aa.
- value = Color.alpha(opacityValue);
- } else {
- // Encode custom color normally.
- value = colorValue & 0x00FFFFFF | opacityValue & 0xFF000000;
- }
- return value;
- }
-
- private void refreshShowingCustom() {
- final boolean customPreset =
- mPreset.getValue() == CaptioningManager.CaptionStyle.PRESET_CUSTOM;
- if (!customPreset && mShowingCustom) {
- getPreferenceScreen().removePreference(mCustom);
- mShowingCustom = false;
- } else if (customPreset && !mShowingCustom) {
- getPreferenceScreen().addPreference(mCustom);
- mShowingCustom = true;
- }
- }
-
- @Override
- public void onValueChanged(ListDialogPreference preference, int value) {
- final ContentResolver cr = getActivity().getContentResolver();
- if (mForegroundColor == preference || mForegroundOpacity == preference) {
- final int merged = mergeColorOpacity(mForegroundColor, mForegroundOpacity);
- Settings.Secure.putInt(
- cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, merged);
- } else if (mBackgroundColor == preference || mBackgroundOpacity == preference) {
- final int merged = mergeColorOpacity(mBackgroundColor, mBackgroundOpacity);
- Settings.Secure.putInt(
- cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, merged);
- } else if (mWindowColor == preference || mWindowOpacity == preference) {
- final int merged = mergeColorOpacity(mWindowColor, mWindowOpacity);
- Settings.Secure.putInt(
- cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_WINDOW_COLOR, merged);
- } else if (mEdgeColor == preference) {
- Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_COLOR, value);
- } else if (mPreset == preference) {
- Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET, value);
- refreshShowingCustom();
- } else if (mEdgeType == preference) {
- Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_TYPE, value);
- }
-
- refreshPreviewText();
- enableCaptioningManager();
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object value) {
- final ContentResolver cr = getActivity().getContentResolver();
- if (mTypeface == preference) {
- Settings.Secure.putString(
- cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_TYPEFACE, (String) value);
- refreshPreviewText();
- enableCaptioningManager();
- } else if (mFontSize == preference) {
- Settings.Secure.putFloat(
- cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_FONT_SCALE,
- Float.parseFloat((String) value));
- refreshPreviewText();
- enableCaptioningManager();
- }
-
- return true;
- }
-
- private void enableCaptioningManager() {
- if (mCaptioningManager.isEnabled()) {
- return;
- }
- Settings.Secure.putInt(getContentResolver(),
- Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, ON);
- }
-
- @Override
- public int getHelpResource() {
- return R.string.help_url_caption;
- }
-
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.captioning_appearance);
-}
-
diff --git a/src/com/android/settings/accessibility/CaptionHelper.java b/src/com/android/settings/accessibility/CaptionHelper.java
new file mode 100644
index 0000000..36d833c
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptionHelper.java
@@ -0,0 +1,214 @@
+/*
+ * 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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+import android.view.View;
+import android.view.accessibility.CaptioningManager;
+import android.view.accessibility.CaptioningManager.CaptionStyle;
+
+import com.android.internal.widget.SubtitleView;
+import com.android.settings.R;
+import com.android.settingslib.accessibility.AccessibilityUtils;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.Locale;
+
+/** Helper class for caption. */
+public class CaptionHelper {
+
+ /* WebVtt specifies line height as 5.3% of the viewport height. */
+ @VisibleForTesting
+ static final float LINE_HEIGHT_RATIO = 0.0533f;
+
+ private final Context mContext;
+ private final ContentResolver mContentResolver;
+ private final CaptioningManager mCaptioningManager;
+
+ public CaptionHelper(Context context) {
+ mContext = context;
+ mContentResolver = mContext.getContentResolver();
+ mCaptioningManager = context.getSystemService(CaptioningManager.class);
+ }
+
+ /**
+ * Sets the user's preferred captioning enabled state.
+ *
+ * @param enabled Whether to enable or disable captioning manager.
+ */
+ public void setEnabled(boolean enabled) {
+ if (isEnabled() == enabled) {
+ return;
+ }
+
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, enabled ? ON : OFF);
+ }
+
+ /**
+ * Gets if the captioning manager is enabled.
+ *
+ * @return True if the captioning manager is enabled, false otherwise.
+ */
+ public boolean isEnabled() {
+ return mCaptioningManager.isEnabled();
+ }
+
+ /**
+ * Updates font style of captioning properties for preview screen.
+ *
+ * @param previewText preview text
+ * @param previewWindow preview window
+ * @param styleId font style id
+ */
+ public void applyCaptionProperties(SubtitleView previewText, View previewWindow,
+ int styleId) {
+ previewText.setStyle(styleId);
+
+ final float fontScale = mCaptioningManager.getFontScale();
+ if (previewWindow != null) {
+ // Assume the viewport is clipped with a 16:9 aspect ratio.
+ final float virtualHeight = Math.max(9 * previewWindow.getWidth(),
+ 16 * previewWindow.getHeight()) / 16.0f;
+ previewText.setTextSize(virtualHeight * LINE_HEIGHT_RATIO * fontScale);
+ } else {
+ final float textSize = mContext.getResources().getDimension(
+ R.dimen.captioning_preview_text_size);
+ previewText.setTextSize(textSize * fontScale);
+ }
+
+ final Locale locale = mCaptioningManager.getLocale();
+ if (locale != null) {
+ final CharSequence localizedText = AccessibilityUtils.getTextForLocale(
+ mContext, locale, R.string.captioning_preview_characters);
+ previewText.setText(localizedText);
+ } else {
+ previewText.setText(R.string.captioning_preview_characters);
+ }
+ }
+
+ /**
+ * Sets the user's preferred captioning background color.
+ *
+ * @param color The captioning background color
+ */
+ public void setBackgroundColor(int color) {
+ Settings.Secure.putInt(mContentResolver,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, color);
+ }
+
+ /** Returns the captioning background color.*/
+ public int getBackgroundColor() {
+ final CaptionStyle attrs = CaptionStyle.getCustomStyle(mContentResolver);
+ return attrs.hasBackgroundColor() ? attrs.backgroundColor : CaptionStyle.COLOR_UNSPECIFIED;
+ }
+
+ /**
+ * Sets the user's preferred captioning foreground color.
+ *
+ * @param color The captioning foreground color
+ */
+ public void setForegroundColor(int color) {
+ Settings.Secure.putInt(mContentResolver,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, color);
+ }
+
+ /** Returns the captioning foreground color.*/
+ public int getForegroundColor() {
+ final CaptionStyle attrs = CaptionStyle.getCustomStyle(mContentResolver);
+ return attrs.hasForegroundColor() ? attrs.foregroundColor : CaptionStyle.COLOR_UNSPECIFIED;
+ }
+
+ /**
+ * Sets the user's preferred captioning window color.
+ *
+ * @param color The captioning window color
+ */
+ public void setWindowColor(int color) {
+ Settings.Secure.putInt(mContentResolver,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_WINDOW_COLOR, color);
+ }
+
+ /** Returns the captioning window color.*/
+ public int getWindowColor() {
+ final CaptionStyle attrs = CaptionStyle.getCustomStyle(mContentResolver);
+ return attrs.hasWindowColor() ? attrs.windowColor : CaptionStyle.COLOR_UNSPECIFIED;
+ }
+
+ /**
+ * Sets the user's preferred captioning edge color.
+ *
+ * @param color The captioning edge color
+ */
+ public void setEdgeColor(int color) {
+ Settings.Secure.putInt(mContentResolver,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_COLOR, color);
+ }
+
+ /** Returns the captioning edge color.*/
+ public int getEdgeColor() {
+ final CaptionStyle attrs = CaptionStyle.getCustomStyle(mContentResolver);
+ return attrs.edgeColor;
+ }
+
+ /**
+ * Sets the user's preferred captioning edge type.
+ *
+ * @param type The captioning edge type
+ */
+ public void setEdgeType(int type) {
+ Settings.Secure.putInt(mContentResolver,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_TYPE, type);
+ }
+
+ /** Returns the captioning edge type.*/
+ public int getEdgeType() {
+ final CaptionStyle attrs = CaptionStyle.getCustomStyle(mContentResolver);
+ return attrs.edgeType;
+ }
+
+ /**
+ * Sets the captioning raw user style.
+ *
+ * @param type The captioning raw user style
+ */
+ public void setRawUserStyle(int type) {
+ Settings.Secure.putInt(mContentResolver,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET, type);
+ }
+
+ /** Returns the captioning raw preset number.*/
+ public int getRawUserStyle() {
+ return mCaptioningManager.getRawUserStyle();
+ }
+
+ /** Returns the captioning visual properties.*/
+ public CaptionStyle getUserStyle() {
+ return mCaptioningManager.getUserStyle();
+ }
+
+ /** Returns the captioning locale language.*/
+ public Locale getLocale() {
+ return mCaptioningManager.getLocale();
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java b/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
deleted file mode 100644
index 6aa69fa..0000000
--- a/src/com/android/settings/accessibility/CaptionMoreOptionsFragment.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.
- */
-
-package com.android.settings.accessibility;
-
-import android.app.settings.SettingsEnums;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.view.accessibility.CaptioningManager;
-
-import androidx.preference.Preference;
-
-import com.android.settings.R;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settingslib.search.SearchIndexable;
-
-/** Settings fragment containing more options of captioning properties. */
-@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public class CaptionMoreOptionsFragment extends DashboardFragment
- implements Preference.OnPreferenceChangeListener {
-
- private static final String TAG = "CaptionMoreOptionsFragment";
- private static final String PREF_LOCALE = "captioning_locale";
-
- private CaptioningManager mCaptioningManager;
- private LocalePreference mLocale;
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.ACCESSIBILITY_CAPTION_MORE_OPTIONS;
- }
-
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- super.onCreatePreferences(savedInstanceState, rootKey);
-
- mCaptioningManager = (CaptioningManager) getSystemService(Context.CAPTIONING_SERVICE);
-
- initializeAllPreferences();
- updateAllPreferences();
- installUpdateListeners();
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.captioning_more_options;
- }
-
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- private void initializeAllPreferences() {
- mLocale = (LocalePreference) findPreference(PREF_LOCALE);
- }
-
- private void installUpdateListeners() {
- mLocale.setOnPreferenceChangeListener(this);
- }
-
- private void updateAllPreferences() {
- final String rawLocale = mCaptioningManager.getRawLocale();
- mLocale.setValue(rawLocale == null ? "" : rawLocale);
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object value) {
- final ContentResolver cr = getActivity().getContentResolver();
- if (mLocale == preference) {
- Settings.Secure.putString(
- cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_LOCALE, (String) value);
- }
-
- return true;
- }
-
- @Override
- public int getHelpResource() {
- return R.string.help_url_caption;
- }
-
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.captioning_more_options);
-}
diff --git a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java b/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
deleted file mode 100644
index 2d4bb11..0000000
--- a/src/com/android/settings/accessibility/CaptionPropertiesFragment.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accessibility;
-
-import android.app.settings.SettingsEnums;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.view.accessibility.CaptioningManager;
-import android.widget.Switch;
-
-import androidx.preference.Preference;
-import androidx.preference.Preference.OnPreferenceChangeListener;
-
-import com.android.settings.R;
-import com.android.settings.dashboard.DashboardFragment;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.widget.SettingsMainSwitchPreference;
-import com.android.settingslib.search.SearchIndexable;
-import com.android.settingslib.widget.OnMainSwitchChangeListener;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/** Settings fragment containing captioning properties. */
-@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public class CaptionPropertiesFragment extends DashboardFragment
- implements OnPreferenceChangeListener, OnMainSwitchChangeListener {
-
- private static final String TAG = "CaptionPropertiesFragment";
- private static final String PREF_SWITCH = "captioning_preference_switch";
- private static final String PREF_TEXT = "captioning_caption_appearance";
- private static final String PREF_MORE = "captioning_more_options";
-
- private CaptioningManager mCaptioningManager;
-
- private SettingsMainSwitchPreference mSwitch;
- private Preference mTextAppearance;
- private Preference mMoreOptions;
-
- private final List<Preference> mPreferenceList = new ArrayList<>();
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.ACCESSIBILITY_CAPTION_PROPERTIES;
- }
-
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- super.onCreatePreferences(savedInstanceState, rootKey);
-
- mCaptioningManager = (CaptioningManager) getSystemService(Context.CAPTIONING_SERVICE);
-
- initializeAllPreferences();
- installUpdateListeners();
- }
-
- @Override
- public void onResume() {
- super.onResume();
- mSwitch.setChecked(mCaptioningManager.isEnabled());
- }
-
- @Override
- protected int getPreferenceScreenResId() {
- return R.xml.captioning_settings;
- }
-
- @Override
- protected String getLogTag() {
- return TAG;
- }
-
- private void initializeAllPreferences() {
- mSwitch = (SettingsMainSwitchPreference) findPreference(PREF_SWITCH);
- mTextAppearance = (Preference) findPreference(PREF_TEXT);
- mMoreOptions = (Preference) findPreference(PREF_MORE);
-
- mPreferenceList.add(mTextAppearance);
- mPreferenceList.add(mMoreOptions);
- }
-
- private void installUpdateListeners() {
- mSwitch.setOnPreferenceChangeListener(this);
- mSwitch.addOnSwitchChangeListener(this);
-
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object value) {
- final ContentResolver cr = getActivity().getContentResolver();
- if (mSwitch == preference) {
- Settings.Secure.putInt(
- cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, (boolean) value ? 1 : 0);
- }
-
- return true;
- }
-
- @Override
- public int getHelpResource() {
- return R.string.help_url_caption;
- }
-
- public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.captioning_settings);
-
- @Override
- public void onSwitchChanged(Switch switchView, boolean isChecked) {
- final ContentResolver cr = getActivity().getContentResolver();
- Settings.Secure.putInt(
- cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, isChecked ? 1 : 0);
- }
-}
diff --git a/src/com/android/settings/accessibility/CaptionUtils.java b/src/com/android/settings/accessibility/CaptionUtils.java
new file mode 100644
index 0000000..3a80133
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptionUtils.java
@@ -0,0 +1,88 @@
+/*
+ * 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.accessibility;
+
+import android.graphics.Color;
+import android.view.accessibility.CaptioningManager.CaptionStyle;
+
+/** Provides utility methods related caption. */
+public final class CaptionUtils {
+
+ /**
+ * Unpacks the specified color value to get the color value.
+ *
+ * @param value the specified color value.
+ */
+ public static int parseColor(int value) {
+ final int colorValue;
+ if (!CaptionStyle.hasColor(value)) {
+ // "Default" color with variable alpha.
+ colorValue = CaptionStyle.COLOR_UNSPECIFIED;
+ } else if ((value >>> 24) == 0) {
+ // "None" color with variable alpha.
+ colorValue = Color.TRANSPARENT;
+ } else {
+ // Normal color.
+ colorValue = value | 0xFF000000;
+ }
+ return colorValue;
+ }
+
+ /**
+ * Unpacks the specified color value to get the opacity value.
+ *
+ * @param value the specified color value.
+ */
+ public static int parseOpacity(int value) {
+ final int opacityValue;
+ if (!CaptionStyle.hasColor(value)) {
+ // "Default" color with variable alpha.
+ opacityValue = (value & 0xFF) << 24;
+ } else if ((value >>> 24) == 0) {
+ // "None" color with variable alpha.
+ opacityValue = (value & 0xFF) << 24;
+ } else {
+ // Normal color.
+ opacityValue = value & 0xFF000000;
+ }
+
+ // Opacity value is always white.
+ return opacityValue | 0xFFFFFF;
+ }
+
+ /**
+ * Packs the specified color value and specified opacity value into merged color value.
+ *
+ * @param colorValue the color value.
+ * @param opacityValue the opacity value.
+ */
+ public static int mergeColorOpacity(int colorValue, int opacityValue) {
+ final int value;
+ // "Default" is 0x00FFFFFF or, for legacy support, 0x00000100.
+ if (!CaptionStyle.hasColor(colorValue)) {
+ // Encode "default" as 0x00FFFFaa.
+ value = 0x00FFFF00 | Color.alpha(opacityValue);
+ } else if (colorValue == Color.TRANSPARENT) {
+ // Encode "none" as 0x000000aa.
+ value = Color.alpha(opacityValue);
+ } else {
+ // Encode custom color normally.
+ value = (colorValue & 0x00FFFFFF) | (opacityValue & 0xFF000000);
+ }
+ return value;
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningAppearanceFragment.java b/src/com/android/settings/accessibility/CaptioningAppearanceFragment.java
new file mode 100644
index 0000000..8b80de3
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningAppearanceFragment.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.accessibility;
+
+import android.app.settings.SettingsEnums;
+
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+
+/** Settings fragment containing font style of captioning properties. */
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
+public class CaptioningAppearanceFragment extends DashboardFragment {
+
+ private static final String TAG = "CaptioningAppearanceFragment";
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.ACCESSIBILITY_CAPTION_APPEARANCE;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.captioning_appearance;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ public int getHelpResource() {
+ return R.string.help_url_caption;
+ }
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.captioning_appearance);
+}
+
diff --git a/src/com/android/settings/accessibility/CaptionAppearancePreferenceController.java b/src/com/android/settings/accessibility/CaptioningAppearancePreferenceController.java
similarity index 91%
rename from src/com/android/settings/accessibility/CaptionAppearancePreferenceController.java
rename to src/com/android/settings/accessibility/CaptioningAppearancePreferenceController.java
index 4bcdceb..74cb534 100644
--- a/src/com/android/settings/accessibility/CaptionAppearancePreferenceController.java
+++ b/src/com/android/settings/accessibility/CaptioningAppearancePreferenceController.java
@@ -25,12 +25,12 @@
import com.google.common.primitives.Floats;
import com.google.common.primitives.Ints;
-/** Controller that shows the caption scale and style summary. */
-public class CaptionAppearancePreferenceController extends BasePreferenceController {
+/** Controller that shows the captioning scale and style summary. */
+public class CaptioningAppearancePreferenceController extends BasePreferenceController {
private final CaptioningManager mCaptioningManager;
- public CaptionAppearancePreferenceController(Context context, String preferenceKey) {
+ public CaptioningAppearancePreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
mCaptioningManager = context.getSystemService(CaptioningManager.class);
}
diff --git a/src/com/android/settings/accessibility/CaptioningBackgroundColorController.java b/src/com/android/settings/accessibility/CaptioningBackgroundColorController.java
new file mode 100644
index 0000000..ff093d5
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningBackgroundColorController.java
@@ -0,0 +1,76 @@
+/*
+ * 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.accessibility;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Color;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning background color. */
+public class CaptioningBackgroundColorController extends BasePreferenceController
+ implements OnValueChangedListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningBackgroundColorController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final ColorPreference preference = screen.findPreference(getPreferenceKey());
+ final Resources res = mContext.getResources();
+ final int[] colorValues = res.getIntArray(R.array.captioning_color_selector_values);
+ final String[] colorTitles = res.getStringArray(
+ R.array.captioning_color_selector_titles);
+ // Add "none" as an additional option for backgrounds.
+ final int[] backgroundColorValues = new int[colorValues.length + 1];
+ final String[] backgroundColorTitles = new String[colorTitles.length + 1];
+ System.arraycopy(colorValues, 0, backgroundColorValues, 1, colorValues.length);
+ System.arraycopy(colorTitles, 0, backgroundColorTitles, 1, colorTitles.length);
+ backgroundColorValues[0] = Color.TRANSPARENT;
+ backgroundColorTitles[0] = mContext.getString(R.string.color_none);
+ preference.setTitles(backgroundColorTitles);
+ preference.setValues(backgroundColorValues);
+ final int backBackgroundColor = mCaptionHelper.getBackgroundColor();
+ final int color = CaptionUtils.parseColor(backBackgroundColor);
+ preference.setValue(color);
+ preference.setOnValueChangedListener(this);
+ }
+
+ @Override
+ public void onValueChanged(ListDialogPreference preference, int value) {
+ final int backBackgroundColor = mCaptionHelper.getBackgroundColor();
+ final int opacity = CaptionUtils.parseOpacity(backBackgroundColor);
+ final int merged = CaptionUtils.mergeColorOpacity(value, opacity);
+ mCaptionHelper.setBackgroundColor(merged);
+ mCaptionHelper.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningBackgroundOpacityController.java b/src/com/android/settings/accessibility/CaptioningBackgroundOpacityController.java
new file mode 100644
index 0000000..405f6d9
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningBackgroundOpacityController.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.accessibility;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning background opacity. */
+public class CaptioningBackgroundOpacityController extends BasePreferenceController
+ implements OnValueChangedListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningBackgroundOpacityController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final ColorPreference preference = screen.findPreference(getPreferenceKey());
+ final Resources res = mContext.getResources();
+ final int[] opacityValues = res.getIntArray(R.array.captioning_opacity_selector_values);
+ final String[] opacityTitles = res.getStringArray(
+ R.array.captioning_opacity_selector_titles);
+ preference.setTitles(opacityTitles);
+ preference.setValues(opacityValues);
+ final int backBackgroundColor = mCaptionHelper.getBackgroundColor();
+ final int opacity = CaptionUtils.parseOpacity(backBackgroundColor);
+ preference.setValue(opacity);
+ preference.setOnValueChangedListener(this);
+ }
+
+ @Override
+ public void onValueChanged(ListDialogPreference preference, int value) {
+ final int backBackgroundColor = mCaptionHelper.getBackgroundColor();
+ final int color = CaptionUtils.parseColor(backBackgroundColor);
+ final int merged = CaptionUtils.mergeColorOpacity(color, value);
+ mCaptionHelper.setBackgroundColor(merged);
+ mCaptionHelper.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningCustomController.java b/src/com/android/settings/accessibility/CaptioningCustomController.java
new file mode 100644
index 0000000..28a99a7
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningCustomController.java
@@ -0,0 +1,96 @@
+/*
+ * 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.accessibility;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
+import android.provider.Settings;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+import java.util.Arrays;
+import java.util.List;
+
+/** Preference controller for captioning custom visibility. */
+public class CaptioningCustomController extends BasePreferenceController
+ implements LifecycleObserver, OnStart, OnStop {
+
+ private Preference mCustom;
+ private final CaptionHelper mCaptionHelper;
+ private final ContentResolver mContentResolver;
+ @VisibleForTesting
+ AccessibilitySettingsContentObserver mSettingsContentObserver;
+ @VisibleForTesting
+ static final List<String> CAPTIONING_FEATURE_KEYS = Arrays.asList(
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET
+ );
+
+ public CaptioningCustomController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ mContentResolver = context.getContentResolver();
+ mSettingsContentObserver = new AccessibilitySettingsContentObserver(
+ new Handler(Looper.getMainLooper()));
+ mSettingsContentObserver.registerKeysToObserverCallback(CAPTIONING_FEATURE_KEYS,
+ key -> refreshShowingCustom());
+ }
+
+ @VisibleForTesting
+ CaptioningCustomController(Context context, String preferenceKey,
+ AccessibilitySettingsContentObserver contentObserver) {
+ this(context, preferenceKey);
+ mSettingsContentObserver = contentObserver;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mCustom = screen.findPreference(getPreferenceKey());
+ refreshShowingCustom();
+ }
+
+ @Override
+ public void onStart() {
+ mSettingsContentObserver.register(mContentResolver);
+ }
+
+ @Override
+ public void onStop() {
+ mSettingsContentObserver.unregister(mContentResolver);
+ }
+
+ private void refreshShowingCustom() {
+ final boolean isCustomPreset =
+ mCaptionHelper.getRawUserStyle() == CaptioningManager.CaptionStyle.PRESET_CUSTOM;
+ mCustom.setVisible(isCustomPreset);
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningEdgeColorController.java b/src/com/android/settings/accessibility/CaptioningEdgeColorController.java
new file mode 100644
index 0000000..4903ff4
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningEdgeColorController.java
@@ -0,0 +1,63 @@
+/*
+ * 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.accessibility;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning edge color. */
+public class CaptioningEdgeColorController extends BasePreferenceController
+ implements OnValueChangedListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningEdgeColorController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final ColorPreference preference = screen.findPreference(getPreferenceKey());
+ final Resources res = mContext.getResources();
+ final int[] colorValues = res.getIntArray(R.array.captioning_color_selector_values);
+ final String[] colorTitles = res.getStringArray(
+ R.array.captioning_color_selector_titles);
+ preference.setTitles(colorTitles);
+ preference.setValues(colorValues);
+ preference.setValue(mCaptionHelper.getEdgeColor());
+ preference.setOnValueChangedListener(this);
+ }
+
+ @Override
+ public void onValueChanged(ListDialogPreference preference, int value) {
+ mCaptionHelper.setEdgeColor(value);
+ mCaptionHelper.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningEdgeTypeController.java b/src/com/android/settings/accessibility/CaptioningEdgeTypeController.java
new file mode 100644
index 0000000..adb66d3
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningEdgeTypeController.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.accessibility;
+
+import android.content.Context;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning edge type. */
+public class CaptioningEdgeTypeController extends BasePreferenceController
+ implements OnValueChangedListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningEdgeTypeController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final EdgeTypePreference preference = screen.findPreference(getPreferenceKey());
+ preference.setValue(mCaptionHelper.getEdgeType());
+ preference.setOnValueChangedListener(this);
+ }
+
+ @Override
+ public void onValueChanged(ListDialogPreference preference, int value) {
+ mCaptionHelper.setEdgeType(value);
+ mCaptionHelper.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningFontSizeController.java b/src/com/android/settings/accessibility/CaptioningFontSizeController.java
new file mode 100644
index 0000000..196117b
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningFontSizeController.java
@@ -0,0 +1,67 @@
+/*
+ * 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.accessibility;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning font size. */
+public class CaptioningFontSizeController extends BasePreferenceController
+ implements Preference.OnPreferenceChangeListener {
+
+ private final CaptioningManager mCaptioningManager;
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningFontSizeController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptioningManager = context.getSystemService(CaptioningManager.class);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final ListPreference listPreference = screen.findPreference(getPreferenceKey());
+ final float fontSize = mCaptioningManager.getFontScale();
+ listPreference.setValue(Float.toString(fontSize));
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final ListPreference listPreference = (ListPreference) preference;
+ final ContentResolver cr = mContext.getContentResolver();
+ Settings.Secure.putFloat(
+ cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_FONT_SCALE,
+ Float.parseFloat((String) newValue));
+ listPreference.setValue((String) newValue);
+ mCaptionHelper.setEnabled(true);
+ return false;
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java b/src/com/android/settings/accessibility/CaptioningFooterPreferenceController.java
similarity index 83%
rename from src/com/android/settings/accessibility/CaptionFooterPreferenceController.java
rename to src/com/android/settings/accessibility/CaptioningFooterPreferenceController.java
index b81b99d..def5620 100644
--- a/src/com/android/settings/accessibility/CaptionFooterPreferenceController.java
+++ b/src/com/android/settings/accessibility/CaptioningFooterPreferenceController.java
@@ -20,12 +20,10 @@
import com.android.settings.R;
-/**
- * Preference controller for caption footer.
- */
-public class CaptionFooterPreferenceController extends AccessibilityFooterPreferenceController {
+/** Preference controller for captioning footer. */
+public class CaptioningFooterPreferenceController extends AccessibilityFooterPreferenceController {
- public CaptionFooterPreferenceController(Context context, String key) {
+ public CaptioningFooterPreferenceController(Context context, String key) {
super(context, key);
}
diff --git a/src/com/android/settings/accessibility/CaptioningForegroundColorController.java b/src/com/android/settings/accessibility/CaptioningForegroundColorController.java
new file mode 100644
index 0000000..c867732
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningForegroundColorController.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.accessibility;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning foreground color. */
+public class CaptioningForegroundColorController extends BasePreferenceController
+ implements OnValueChangedListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningForegroundColorController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final ColorPreference preference = screen.findPreference(getPreferenceKey());
+ final Resources res = mContext.getResources();
+ final int[] colorValues = res.getIntArray(R.array.captioning_color_selector_values);
+ final String[] colorTitles = res.getStringArray(
+ R.array.captioning_color_selector_titles);
+ preference.setTitles(colorTitles);
+ preference.setValues(colorValues);
+ final int foregroundColor = mCaptionHelper.getForegroundColor();
+ final int color = CaptionUtils.parseColor(foregroundColor);
+ preference.setValue(color);
+ preference.setOnValueChangedListener(this);
+ }
+
+ @Override
+ public void onValueChanged(ListDialogPreference preference, int value) {
+ final int foregroundColor = mCaptionHelper.getForegroundColor();
+ final int opacity = CaptionUtils.parseOpacity(foregroundColor);
+ final int merged = CaptionUtils.mergeColorOpacity(value, opacity);
+ mCaptionHelper.setForegroundColor(merged);
+ mCaptionHelper.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningForegroundOpacityController.java b/src/com/android/settings/accessibility/CaptioningForegroundOpacityController.java
new file mode 100644
index 0000000..ab8a84b
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningForegroundOpacityController.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.accessibility;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning foreground opacity. */
+public class CaptioningForegroundOpacityController extends BasePreferenceController
+ implements OnValueChangedListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningForegroundOpacityController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final ColorPreference preference = screen.findPreference(getPreferenceKey());
+ final Resources res = mContext.getResources();
+ final int[] opacityValues = res.getIntArray(R.array.captioning_opacity_selector_values);
+ final String[] opacityTitles = res.getStringArray(
+ R.array.captioning_opacity_selector_titles);
+ preference.setTitles(opacityTitles);
+ preference.setValues(opacityValues);
+ final int foregroundColor = mCaptionHelper.getForegroundColor();
+ final int opacity = CaptionUtils.parseOpacity(foregroundColor);
+ preference.setValue(opacity);
+ preference.setOnValueChangedListener(this);
+ }
+
+ @Override
+ public void onValueChanged(ListDialogPreference preference, int value) {
+ final int foregroundColor = mCaptionHelper.getForegroundColor();
+ final int color = CaptionUtils.parseColor(foregroundColor);
+ final int merged = CaptionUtils.mergeColorOpacity(color, value);
+ mCaptionHelper.setForegroundColor(merged);
+ mCaptionHelper.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningLocalePreferenceController.java b/src/com/android/settings/accessibility/CaptioningLocalePreferenceController.java
new file mode 100644
index 0000000..8662bcc
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningLocalePreferenceController.java
@@ -0,0 +1,60 @@
+/*
+ * 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.accessibility;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+
+/** Controller that shows the captioning locale summary. */
+public class CaptioningLocalePreferenceController extends BasePreferenceController
+ implements Preference.OnPreferenceChangeListener {
+
+ private final CaptioningManager mCaptioningManager;
+
+ public CaptioningLocalePreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptioningManager = context.getSystemService(CaptioningManager.class);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final LocalePreference localePreference = screen.findPreference(getPreferenceKey());
+ final String rawLocale = mCaptioningManager.getRawLocale();
+ localePreference.setValue(rawLocale == null ? "" : rawLocale);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final LocalePreference localePreference = (LocalePreference) preference;
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_LOCALE, (String) newValue);
+ localePreference.setValue((String) newValue);
+ return true;
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java b/src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java
new file mode 100644
index 0000000..2895e75
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningMoreOptionsFragment.java
@@ -0,0 +1,54 @@
+/*
+ * 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.
+ */
+
+package com.android.settings.accessibility;
+
+import android.app.settings.SettingsEnums;
+
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+
+/** Settings fragment containing more options of captioning properties. */
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
+public class CaptioningMoreOptionsFragment extends DashboardFragment {
+
+ private static final String TAG = "CaptioningMoreOptionsFragment";
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.ACCESSIBILITY_CAPTION_MORE_OPTIONS;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.captioning_more_options;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ public int getHelpResource() {
+ return R.string.help_url_caption;
+ }
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.captioning_more_options);
+}
diff --git a/src/com/android/settings/accessibility/CaptioningPresetController.java b/src/com/android/settings/accessibility/CaptioningPresetController.java
new file mode 100644
index 0000000..f08a5f4
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningPresetController.java
@@ -0,0 +1,62 @@
+/*
+ * 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.accessibility;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning preset. */
+public class CaptioningPresetController extends BasePreferenceController
+ implements ListDialogPreference.OnValueChangedListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningPresetController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final PresetPreference preference = screen.findPreference(getPreferenceKey());
+ final Resources res = mContext.getResources();
+ final int[] presetValues = res.getIntArray(R.array.captioning_preset_selector_values);
+ final String[] presetTitles = res.getStringArray(R.array.captioning_preset_selector_titles);
+ preference.setTitles(presetTitles);
+ preference.setValues(presetValues);
+ final int preset = mCaptionHelper.getRawUserStyle();
+ preference.setValue(preset);
+ preference.setOnValueChangedListener(this);
+ }
+
+ @Override
+ public void onValueChanged(ListDialogPreference preference, int value) {
+ mCaptionHelper.setRawUserStyle(value);
+ mCaptionHelper.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningPreviewPreferenceController.java b/src/com/android/settings/accessibility/CaptioningPreviewPreferenceController.java
new file mode 100644
index 0000000..73ee846
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningPreviewPreferenceController.java
@@ -0,0 +1,130 @@
+/*
+ * 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.accessibility;
+
+import android.content.Context;
+import android.os.Handler;
+import android.os.Looper;
+import android.provider.Settings;
+import android.view.View;
+import android.view.accessibility.CaptioningManager.CaptionStyle;
+
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.PreferenceScreen;
+
+import com.android.internal.widget.SubtitleView;
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.accessibility.AccessibilityUtils;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+import com.android.settingslib.widget.LayoutPreference;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+/** Controller that shows the captioning locale summary. */
+public class CaptioningPreviewPreferenceController extends BasePreferenceController
+ implements LifecycleObserver, OnStart, OnStop {
+
+ @VisibleForTesting
+ static final List<String> CAPTIONING_FEATURE_KEYS = Arrays.asList(
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_WINDOW_COLOR,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_COLOR,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_TYPE,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_TYPEFACE,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_FONT_SCALE
+ );
+ private final Handler mHandler = new Handler(Looper.getMainLooper());
+ @VisibleForTesting
+ AccessibilitySettingsContentObserver mSettingsContentObserver;
+ private CaptionHelper mCaptionHelper;
+ private LayoutPreference mPreference;
+
+ public CaptioningPreviewPreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ mSettingsContentObserver = new AccessibilitySettingsContentObserver(mHandler);
+ mSettingsContentObserver.registerKeysToObserverCallback(CAPTIONING_FEATURE_KEYS,
+ key -> refreshPreviewText());
+ }
+
+ @Override
+ public void onStart() {
+ mSettingsContentObserver.register(mContext.getContentResolver());
+ }
+
+ @Override
+ public void onStop() {
+ mContext.getContentResolver().unregisterContentObserver(mSettingsContentObserver);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = screen.findPreference(getPreferenceKey());
+ final View previewViewport = mPreference.findViewById(R.id.preview_viewport);
+ previewViewport.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+ @Override
+ public void onLayoutChange(View v, int left, int top, int right,
+ int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+ if ((oldRight - oldLeft) != (right - left)) {
+ // Remove the listener once the callback is triggered.
+ previewViewport.removeOnLayoutChangeListener(this);
+ mHandler.post(() -> refreshPreviewText());
+ }
+ }
+ });
+ }
+
+ private void refreshPreviewText() {
+ final SubtitleView previewText = mPreference.findViewById(R.id.preview_text);
+ if (previewText != null) {
+ final View previewViewport = mPreference.findViewById(R.id.preview_viewport);
+ final int styleId = mCaptionHelper.getRawUserStyle();
+ mCaptionHelper.applyCaptionProperties(previewText, previewViewport, styleId);
+
+ final Locale locale = mCaptionHelper.getLocale();
+ if (locale != null) {
+ final CharSequence localizedText = AccessibilityUtils.getTextForLocale(
+ mContext, locale, R.string.captioning_preview_text);
+ previewText.setText(localizedText);
+ } else {
+ previewText.setText(R.string.captioning_preview_text);
+ }
+
+ final View previewWindow = mPreference.findViewById(R.id.preview_window);
+ final CaptionStyle style = mCaptionHelper.getUserStyle();
+ if (style.hasWindowColor()) {
+ previewWindow.setBackgroundColor(style.windowColor);
+ } else {
+ final CaptionStyle defStyle = CaptionStyle.DEFAULT;
+ previewWindow.setBackgroundColor(defStyle.windowColor);
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningPropertiesFragment.java b/src/com/android/settings/accessibility/CaptioningPropertiesFragment.java
new file mode 100644
index 0000000..95a3307
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningPropertiesFragment.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.accessibility;
+
+import android.app.settings.SettingsEnums;
+
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+
+/** Settings fragment containing captioning properties. */
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
+public class CaptioningPropertiesFragment extends DashboardFragment {
+
+ private static final String TAG = "CaptioningPropertiesFragment";
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.ACCESSIBILITY_CAPTION_PROPERTIES;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.captioning_settings;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ public int getHelpResource() {
+ return R.string.help_url_caption;
+ }
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.captioning_settings);
+}
diff --git a/src/com/android/settings/accessibility/CaptioningTogglePreferenceController.java b/src/com/android/settings/accessibility/CaptioningTogglePreferenceController.java
new file mode 100644
index 0000000..a9d2cdf
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningTogglePreferenceController.java
@@ -0,0 +1,76 @@
+/*
+ * 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.accessibility;
+
+import android.content.Context;
+import android.widget.Switch;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.TogglePreferenceController;
+import com.android.settings.widget.SettingsMainSwitchPreference;
+import com.android.settingslib.widget.OnMainSwitchChangeListener;
+
+/** Preference controller for captioning more options. */
+public class CaptioningTogglePreferenceController extends TogglePreferenceController
+ implements OnMainSwitchChangeListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningTogglePreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public boolean isChecked() {
+ return mCaptionHelper.isEnabled();
+ }
+
+ @Override
+ public boolean setChecked(boolean isChecked) {
+ mCaptionHelper.setEnabled(isChecked);
+ return true;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ SettingsMainSwitchPreference preference = screen.findPreference(getPreferenceKey());
+ preference.addOnSwitchChangeListener(this);
+ preference.setChecked(isChecked());
+ }
+
+ @Override
+ public void onSwitchChanged(Switch switchView, boolean isChecked) {
+ if (isChecked != isChecked()) {
+ setChecked(isChecked);
+ }
+ }
+
+ @Override
+ public int getSliceHighlightMenuRes() {
+ return R.string.menu_key_accessibility;
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningTypefaceController.java b/src/com/android/settings/accessibility/CaptioningTypefaceController.java
new file mode 100644
index 0000000..3876d39
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningTypefaceController.java
@@ -0,0 +1,66 @@
+/*
+ * 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.accessibility;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+import android.view.accessibility.CaptioningManager.CaptionStyle;
+
+import androidx.preference.ListPreference;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning type face. */
+public class CaptioningTypefaceController extends BasePreferenceController
+ implements Preference.OnPreferenceChangeListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningTypefaceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final ListPreference listPreference = screen.findPreference(getPreferenceKey());
+ final ContentResolver cr = mContext.getContentResolver();
+ final CaptionStyle attrs = CaptionStyle.getCustomStyle(cr);
+ final String rawTypeface = attrs.mRawTypeface;
+ listPreference.setValue(rawTypeface == null ? "" : rawTypeface);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final ListPreference listPreference = (ListPreference) preference;
+ final ContentResolver cr = mContext.getContentResolver();
+ Settings.Secure.putString(
+ cr, Settings.Secure.ACCESSIBILITY_CAPTIONING_TYPEFACE, (String) newValue);
+ listPreference.setValue((String) newValue);
+ mCaptionHelper.setEnabled(true);
+ return false;
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningWindowColorController.java b/src/com/android/settings/accessibility/CaptioningWindowColorController.java
new file mode 100644
index 0000000..ce68227
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningWindowColorController.java
@@ -0,0 +1,76 @@
+/*
+ * 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.accessibility;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Color;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning window color. */
+public class CaptioningWindowColorController extends BasePreferenceController
+ implements OnValueChangedListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningWindowColorController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final ColorPreference preference = screen.findPreference(getPreferenceKey());
+ final Resources res = mContext.getResources();
+ final int[] colorValues = res.getIntArray(R.array.captioning_color_selector_values);
+ final String[] colorTitles = res.getStringArray(
+ R.array.captioning_color_selector_titles);
+ // Add "none" as an additional option for window backgrounds.
+ final int[] backgroundColorValues = new int[colorValues.length + 1];
+ final String[] backgroundColorTitles = new String[colorTitles.length + 1];
+ System.arraycopy(colorValues, 0, backgroundColorValues, 1, colorValues.length);
+ System.arraycopy(colorTitles, 0, backgroundColorTitles, 1, colorTitles.length);
+ backgroundColorValues[0] = Color.TRANSPARENT;
+ backgroundColorTitles[0] = mContext.getString(R.string.color_none);
+ preference.setTitles(backgroundColorTitles);
+ preference.setValues(backgroundColorValues);
+ final int windowColor = mCaptionHelper.getWindowColor();
+ final int color = CaptionUtils.parseColor(windowColor);
+ preference.setValue(color);
+ preference.setOnValueChangedListener(this);
+ }
+
+ @Override
+ public void onValueChanged(ListDialogPreference preference, int value) {
+ final int windowColor = mCaptionHelper.getWindowColor();
+ final int opacity = CaptionUtils.parseOpacity(windowColor);
+ final int merged = CaptionUtils.mergeColorOpacity(value, opacity);
+ mCaptionHelper.setWindowColor(merged);
+ mCaptionHelper.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/accessibility/CaptioningWindowOpacityController.java b/src/com/android/settings/accessibility/CaptioningWindowOpacityController.java
new file mode 100644
index 0000000..ef28803
--- /dev/null
+++ b/src/com/android/settings/accessibility/CaptioningWindowOpacityController.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.accessibility;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.accessibility.ListDialogPreference.OnValueChangedListener;
+import com.android.settings.core.BasePreferenceController;
+
+/** Preference controller for captioning window opacity. */
+public class CaptioningWindowOpacityController extends BasePreferenceController
+ implements OnValueChangedListener {
+
+ private final CaptionHelper mCaptionHelper;
+
+ public CaptioningWindowOpacityController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ mCaptionHelper = new CaptionHelper(context);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ final ColorPreference preference = screen.findPreference(getPreferenceKey());
+ final Resources res = mContext.getResources();
+ final int[] opacityValues = res.getIntArray(R.array.captioning_opacity_selector_values);
+ final String[] opacityTitles = res.getStringArray(
+ R.array.captioning_opacity_selector_titles);
+ preference.setTitles(opacityTitles);
+ preference.setValues(opacityValues);
+ final int windowColor = mCaptionHelper.getWindowColor();
+ final int opacity = CaptionUtils.parseOpacity(windowColor);
+ preference.setValue(opacity);
+ preference.setOnValueChangedListener(this);
+ }
+
+ @Override
+ public void onValueChanged(ListDialogPreference preference, int value) {
+ final int windowColor = mCaptionHelper.getWindowColor();
+ final int color = CaptionUtils.parseColor(windowColor);
+ final int merged = CaptionUtils.mergeColorOpacity(color, value);
+ mCaptionHelper.setWindowColor(merged);
+ mCaptionHelper.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/accessibility/DividerAllowedBelowPreference.java b/src/com/android/settings/accessibility/DividerAllowedBelowPreference.java
deleted file mode 100644
index 1be281f..0000000
--- a/src/com/android/settings/accessibility/DividerAllowedBelowPreference.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accessibility;
-
-import android.content.Context;
-import android.util.AttributeSet;
-
-import androidx.preference.Preference;
-import androidx.preference.PreferenceViewHolder;
-
-/*
- * Preference that always has a divider below. Used for SUW Accessibility Settings Summary text.
- */
-public class DividerAllowedBelowPreference extends Preference {
- public DividerAllowedBelowPreference(Context context) {
- super(context);
- }
-
- public DividerAllowedBelowPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public DividerAllowedBelowPreference(Context context, AttributeSet attrs, int defStyleAttrs) {
- super(context, attrs, defStyleAttrs);
- }
-
- @Override
- public void onBindViewHolder(PreferenceViewHolder holder) {
- super.onBindViewHolder(holder);
- holder.setDividerAllowedBelow(true);
- }
-}
-
diff --git a/src/com/android/settings/accessibility/DividerSwitchPreference.java b/src/com/android/settings/accessibility/DividerSwitchPreference.java
deleted file mode 100644
index 2c44789..0000000
--- a/src/com/android/settings/accessibility/DividerSwitchPreference.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accessibility;
-
-import android.content.Context;
-import android.view.View;
-
-import androidx.preference.PreferenceViewHolder;
-import androidx.preference.SwitchPreference;
-
-/**
- * A switch preference that has a divider below and above. Used for Accessibility Settings use
- * service.
- */
-public final class DividerSwitchPreference extends SwitchPreference {
-
- private Boolean mDividerAllowedAbove;
- private Boolean mDividerAllowBelow;
- private int mSwitchVisibility;
-
- public DividerSwitchPreference(Context context) {
- super(context);
- mDividerAllowedAbove = true;
- mDividerAllowBelow = true;
- mSwitchVisibility = View.VISIBLE;
- }
-
- @Override
- public void onBindViewHolder(PreferenceViewHolder holder) {
- super.onBindViewHolder(holder);
- holder.setDividerAllowedAbove(mDividerAllowedAbove);
- holder.setDividerAllowedBelow(mDividerAllowBelow);
-
- final View switchView = holder.itemView.findViewById(android.R.id.widget_frame);
- if (switchView != null) {
- switchView.setVisibility(mSwitchVisibility);
- }
- }
-
- /**
- * Sets divider whether to show in preference above.
- *
- * @param allowed true will be drawn on above this item
- */
- public void setDividerAllowedAbove(boolean allowed) {
- if (mDividerAllowedAbove != allowed) {
- mDividerAllowedAbove = allowed;
- notifyChanged();
- }
- }
-
- /**
- * Sets divider whether to show in preference below.
- *
- * @param allowed true will be drawn on below this item
- */
- public void setDividerAllowedBelow(boolean allowed) {
- if (mDividerAllowedAbove != allowed) {
- mDividerAllowBelow = allowed;
- notifyChanged();
- }
- }
-
- /**
- * Sets the visibility state of Settings view.
- *
- * @param visibility one of {@link View#VISIBLE}, {@link View#INVISIBLE}, or {@link View#GONE}.
- */
- public void setSwitchVisibility(@View.Visibility int visibility) {
- if (mSwitchVisibility != visibility) {
- mSwitchVisibility = visibility;
- notifyChanged();
- }
- }
-}
diff --git a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
index 3adef6d..1f8374d 100644
--- a/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/LaunchAccessibilityActivityPreferenceFragment.java
@@ -49,9 +49,11 @@
/** Fragment for providing open activity button. */
public class LaunchAccessibilityActivityPreferenceFragment extends ToggleFeaturePreferenceFragment {
- private static final String TAG = "LaunchA11yActivity";
+
+ private static final String TAG = "LaunchAccessibilityActivityPreferenceFragment";
private static final String EMPTY_STRING = "";
protected static final String KEY_LAUNCH_PREFERENCE = "launch_preference";
+
private ComponentName mTileComponentName;
@Override
@@ -70,10 +72,10 @@
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- final View view = super.onCreateView(inflater, container, savedInstanceState);
-
// Init new preference to replace the switch preference instead.
initLaunchPreference();
+
+ final View view = super.onCreateView(inflater, container, savedInstanceState);
removePreference(KEY_USE_SERVICE_PREFERENCE);
return view;
}
@@ -173,6 +175,7 @@
/** Customizes the order by preference key. */
protected List<String> getPreferenceOrderList() {
final List<String> lists = new ArrayList<>();
+ lists.add(KEY_TOP_INTRO_PREFERENCE);
lists.add(KEY_ANIMATED_IMAGE);
lists.add(KEY_LAUNCH_PREFERENCE);
lists.add(KEY_GENERAL_CATEGORY);
@@ -230,4 +233,15 @@
return settingsIntent;
}
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ // TODO(b/171272809): Add back when controllers move to static type
+ return 0;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
}
diff --git a/src/com/android/settings/accessibility/PresetPreference.java b/src/com/android/settings/accessibility/PresetPreference.java
index 680fcbc..a0ef7b6 100644
--- a/src/com/android/settings/accessibility/PresetPreference.java
+++ b/src/com/android/settings/accessibility/PresetPreference.java
@@ -19,26 +19,24 @@
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
-import android.view.accessibility.CaptioningManager;
import android.view.accessibility.CaptioningManager.CaptionStyle;
import android.widget.TextView;
import com.android.internal.widget.SubtitleView;
import com.android.settings.R;
+/** Grid preference that allows the user to pick a captioning preset type. */
public class PresetPreference extends ListDialogPreference {
- private static final float DEFAULT_FONT_SIZE = 32f;
- private final CaptioningManager mCaptioningManager;
+ private static final float DEFAULT_FONT_SIZE = 32f;
+ private final CaptionHelper mCaptionHelper;
public PresetPreference(Context context, AttributeSet attrs) {
super(context, attrs);
+ mCaptionHelper = new CaptionHelper(context);
setDialogLayoutResource(R.layout.grid_picker_dialog);
setListItemLayoutResource(R.layout.preset_picker_item);
-
- mCaptioningManager = (CaptioningManager) context.getSystemService(
- Context.CAPTIONING_SERVICE);
}
@Override
@@ -50,17 +48,16 @@
@Override
protected void onBindListItem(View view, int index) {
final View previewViewport = view.findViewById(R.id.preview_viewport);
- final SubtitleView previewText = (SubtitleView) view.findViewById(R.id.preview);
+ final SubtitleView previewText = view.findViewById(R.id.preview);
final int value = getValueAt(index);
- CaptionAppearanceFragment.applyCaptionProperties(
- mCaptioningManager, previewText, previewViewport, value);
+ mCaptionHelper.applyCaptionProperties(previewText, previewViewport, value);
final float density = getContext().getResources().getDisplayMetrics().density;
previewText.setTextSize(DEFAULT_FONT_SIZE * density);
final CharSequence title = getTitleAt(index);
if (title != null) {
- final TextView summary = (TextView) view.findViewById(R.id.summary);
+ final TextView summary = view.findViewById(R.id.summary);
summary.setText(title);
}
}
diff --git a/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizard.java b/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizard.java
index 6ead390..b025cf5 100644
--- a/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizard.java
+++ b/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizard.java
@@ -27,10 +27,8 @@
import com.android.settings.R;
import com.android.settingslib.Utils;
-import com.android.settingslib.widget.LayoutPreference;
import com.google.android.setupdesign.GlifPreferenceLayout;
-import com.google.android.setupdesign.util.LayoutStyler;
/**
@@ -50,8 +48,6 @@
icon.setTintList(Utils.getColorAttr(getContext(), android.R.attr.colorPrimary));
AccessibilitySetupWizardUtils.updateGlifPreferenceLayout(getContext(), layout, title,
/* description= */ null, icon);
-
- updateResetButtonPadding();
}
@Override
@@ -71,14 +67,4 @@
// Hides help center in action bar and footer bar in SuW
return 0;
}
-
- /**
- * Updates the padding of the reset button to meet for SetupWizard style.
- */
- private void updateResetButtonPadding() {
- final LayoutPreference resetPreference = (LayoutPreference) findPreference(RESET_KEY);
- final ViewGroup parentView =
- (ViewGroup) resetPreference.findViewById(R.id.reset_button).getParent();
- LayoutStyler.applyPartnerCustomizationLayoutPaddingStyle(parentView);
- }
}
diff --git a/src/com/android/settings/accessibility/TextReadingResetController.java b/src/com/android/settings/accessibility/TextReadingResetController.java
index 30a94c2..b847591 100644
--- a/src/com/android/settings/accessibility/TextReadingResetController.java
+++ b/src/com/android/settings/accessibility/TextReadingResetController.java
@@ -22,11 +22,9 @@
import androidx.annotation.Nullable;
import androidx.preference.PreferenceScreen;
-import com.android.settings.R;
import com.android.settings.accessibility.TextReadingPreferenceFragment.EntryPoint;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.instrumentation.SettingsStatsLog;
-import com.android.settingslib.widget.LayoutPreference;
/**
* The controller of the reset button in the text and reading options page.
@@ -52,9 +50,9 @@
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- final LayoutPreference layoutPreference = screen.findPreference(getPreferenceKey());
- final View view = layoutPreference.findViewById(R.id.reset_button);
- view.setOnClickListener(v -> {
+ final TextReadingResetPreference resetPreference =
+ (TextReadingResetPreference) screen.findPreference(getPreferenceKey());
+ resetPreference.setOnResetClickListener(v -> {
if (mOnResetClickListener != null) {
mOnResetClickListener.onClick(v);
diff --git a/src/com/android/settings/accessibility/TextReadingResetPreference.java b/src/com/android/settings/accessibility/TextReadingResetPreference.java
new file mode 100644
index 0000000..9518de2
--- /dev/null
+++ b/src/com/android/settings/accessibility/TextReadingResetPreference.java
@@ -0,0 +1,52 @@
+/*
+ * 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.accessibility;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceViewHolder;
+
+import com.android.settings.R;
+
+/**
+ * The preference which is used for resetting the status of all preferences in the display size
+ * and text page.
+ */
+public class TextReadingResetPreference extends Preference {
+ private View.OnClickListener mOnResetClickListener;
+
+ public TextReadingResetPreference(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ setLayoutResource(R.layout.accessibility_text_reading_reset_button);
+ }
+
+ @Override
+ public void onBindViewHolder(PreferenceViewHolder holder) {
+ super.onBindViewHolder(holder);
+
+ final View view = holder.findViewById(R.id.reset_button);
+ view.setOnClickListener(mOnResetClickListener);
+ }
+
+ void setOnResetClickListener(View.OnClickListener resetClickListener) {
+ mOnResetClickListener = resetClickListener;
+ }
+}
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index e314036..f1c0202 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -61,9 +61,7 @@
private static final String TAG = "ToggleAccessibilityServicePreferenceFragment";
private static final String KEY_HAS_LOGGED = "has_logged";
- private AtomicBoolean mIsDialogShown = new AtomicBoolean(/* initialValue= */ false);
-
- private static final String EMPTY_STRING = "";
+ private final AtomicBoolean mIsDialogShown = new AtomicBoolean(/* initialValue= */ false);
private Dialog mWarningDialog;
private ComponentName mTileComponentName;
@@ -85,7 +83,7 @@
}
@Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater infalter) {
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// Do not call super. We don't want to see the "Help & feedback" option on this page so as
// not to confuse users who think they might be able to send feedback about a specific
// accessibility service from this page.
@@ -126,11 +124,6 @@
}
@Override
- public void onPause() {
- super.onPause();
- }
-
- @Override
public void onSaveInstanceState(Bundle outState) {
if (mStartTimeMillsForLogging > 0) {
outState.putBoolean(KEY_HAS_LOGGED, mDisabledStateLogged);
@@ -148,10 +141,8 @@
AccessibilityUtils.setAccessibilityServiceState(getPrefContext(), toggledService, enabled);
}
- // IMPORTANT: Refresh the info since there are dynamically changing
- // capabilities. For
- // example, before JellyBean MR2 the user was granting the explore by touch
- // one.
+ // IMPORTANT: Refresh the info since there are dynamically changing capabilities. For
+ // example, before JellyBean MR2 the user was granting the explore by touch one.
@Nullable
AccessibilityServiceInfo getAccessibilityServiceInfo() {
final List<AccessibilityServiceInfo> infos = AccessibilityManager.getInstance(
@@ -454,6 +445,17 @@
unregisterPackageRemoveReceiver();
}
+ @Override
+ protected int getPreferenceScreenResId() {
+ // TODO(b/171272809): Add back when controllers move to static type
+ return 0;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
private void onAllowButtonFromEnableToggleClicked() {
handleConfirmServiceEnabled(/* confirmed= */ true);
if (isServiceSupportAccessibilityButton()) {
diff --git a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
index 5b85c44..927729e 100644
--- a/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragment.java
@@ -34,19 +34,50 @@
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SettingsMainSwitchPreference;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
/** Settings page for color inversion. */
+@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class ToggleColorInversionPreferenceFragment extends ToggleFeaturePreferenceFragment {
+ private static final String TAG = "ToggleColorInversionPreferenceFragment";
private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED;
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
+ protected void registerKeysToObserverCallback(
+ AccessibilitySettingsContentObserver contentObserver) {
+ super.registerKeysToObserverCallback(contentObserver);
+
+ final List<String> enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1);
+ enableServiceFeatureKeys.add(ENABLED);
+ contentObserver.registerKeysToObserverCallback(enableServiceFeatureKeys,
+ key -> updateSwitchBarToggleSwitch());
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ mComponentName = COLOR_INVERSION_COMPONENT_NAME;
+ mPackageName = getText(R.string.accessibility_display_inversion_preference_title);
+ mHtmlDescription = getText(R.string.accessibility_display_inversion_preference_subtitle);
+ mTopIntroTitle = getText(R.string.accessibility_display_inversion_preference_intro_text);
+ mImageUri = new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
+ .authority(getPrefContext().getPackageName())
+ .appendPath(String.valueOf(R.raw.accessibility_color_inversion_banner))
+ .build();
+ final View view = super.onCreateView(inflater, container, savedInstanceState);
+ updateFooterPreference();
+ return view;
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
final View rootView = getActivity().getWindow().peekDecorView();
if (rootView != null) {
rootView.setAccessibilityPaneTitle(getString(
@@ -79,6 +110,11 @@
}
@Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
protected void onRemoveSwitchPreferenceToggleSwitch() {
super.onRemoveSwitchPreferenceToggleSwitch();
mToggleServiceSwitchPreference.setOnPreferenceClickListener(null);
@@ -94,33 +130,6 @@
return getText(R.string.accessibility_display_inversion_shortcut_title);
}
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- mComponentName = COLOR_INVERSION_COMPONENT_NAME;
- mPackageName = getText(R.string.accessibility_display_inversion_preference_title);
- mHtmlDescription = getText(R.string.accessibility_display_inversion_preference_subtitle);
- mTopIntroTitle = getText(R.string.accessibility_display_inversion_preference_intro_text);
- mImageUri = new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
- .authority(getPrefContext().getPackageName())
- .appendPath(String.valueOf(R.raw.accessibility_color_inversion_banner))
- .build();
- final View view = super.onCreateView(inflater, container, savedInstanceState);
- updateFooterPreference();
- return view;
- }
-
- @Override
- protected void registerKeysToObserverCallback(
- AccessibilitySettingsContentObserver contentObserver) {
- super.registerKeysToObserverCallback(contentObserver);
-
- final List<String> enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1);
- enableServiceFeatureKeys.add(ENABLED);
- contentObserver.registerKeysToObserverCallback(enableServiceFeatureKeys,
- key -> updateSwitchBarToggleSwitch());
- }
-
private void updateFooterPreference() {
final String title = getPrefContext().getString(
R.string.accessibility_color_inversion_about_title);
@@ -173,4 +182,7 @@
}
mToggleServiceSwitchPreference.setChecked(checked);
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.accessibility_color_inversion_settings);
}
diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
index 0e76a6c..5e36100 100644
--- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
@@ -51,6 +51,7 @@
public class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePreferenceFragment
implements DaltonizerRadioButtonPreferenceController.OnChangeListener {
+ private static final String TAG = "ToggleDaltonizerPreferenceFragment";
private static final String ENABLED = Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED;
private static final String KEY_PREVIEW = "daltonizer_preview";
@VisibleForTesting
@@ -70,29 +71,24 @@
final String[] daltonizerKeys = resources.getStringArray(
R.array.daltonizer_mode_keys);
- for (int i = 0; i < daltonizerKeys.length; i++) {
+ for (String daltonizerKey : daltonizerKeys) {
sControllers.add(new DaltonizerRadioButtonPreferenceController(
- context, lifecycle, daltonizerKeys[i]));
+ context, lifecycle, daltonizerKey));
}
}
return sControllers;
}
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- final View rootView = getActivity().getWindow().peekDecorView();
- if (rootView != null) {
- rootView.setAccessibilityPaneTitle(getString(
- R.string.accessibility_display_daltonizer_preference_title));
- }
- }
@Override
- public void onCheckedChanged(Preference preference) {
- for (AbstractPreferenceController controller : sControllers) {
- controller.updateState(preference);
- }
+ protected void registerKeysToObserverCallback(
+ AccessibilitySettingsContentObserver contentObserver) {
+ super.registerKeysToObserverCallback(contentObserver);
+
+ final List<String> enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1);
+ enableServiceFeatureKeys.add(ENABLED);
+ contentObserver.registerKeysToObserverCallback(enableServiceFeatureKeys,
+ key -> updateSwitchBarToggleSwitch());
}
@Override
@@ -108,14 +104,20 @@
}
@Override
- protected void registerKeysToObserverCallback(
- AccessibilitySettingsContentObserver contentObserver) {
- super.registerKeysToObserverCallback(contentObserver);
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ final View rootView = getActivity().getWindow().peekDecorView();
+ if (rootView != null) {
+ rootView.setAccessibilityPaneTitle(getString(
+ R.string.accessibility_display_daltonizer_preference_title));
+ }
+ }
- final List<String> enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1);
- enableServiceFeatureKeys.add(ENABLED);
- contentObserver.registerKeysToObserverCallback(enableServiceFeatureKeys,
- key -> updateSwitchBarToggleSwitch());
+ @Override
+ public void onCheckedChanged(Preference preference) {
+ for (AbstractPreferenceController controller : sControllers) {
+ controller.updateState(preference);
+ }
}
private void updateFooterPreference() {
@@ -180,6 +182,11 @@
}
@Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
final boolean isEnabled = Settings.Secure.getInt(getContentResolver(), ENABLED, OFF) == ON;
if (enabled == isEnabled) {
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index 39d20c9..e3b9e93 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -54,10 +54,10 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
-import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.accessibility.AccessibilityDialogUtils.DialogType;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.utils.LocaleUtils;
import com.android.settings.widget.SettingsMainSwitchBar;
import com.android.settings.widget.SettingsMainSwitchPreference;
@@ -76,9 +76,24 @@
* Base class for accessibility fragments with toggle, shortcut, some helper functions
* and dialog management.
*/
-public abstract class ToggleFeaturePreferenceFragment extends SettingsPreferenceFragment
+public abstract class ToggleFeaturePreferenceFragment extends DashboardFragment
implements ShortcutPreference.OnClickCallback, OnMainSwitchChangeListener {
+ public static final String KEY_GENERAL_CATEGORY = "general_categories";
+ public static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
+ public static final int NOT_SET = -1;
+ protected static final String KEY_TOP_INTRO_PREFERENCE = "top_intro";
+ protected static final String KEY_USE_SERVICE_PREFERENCE = "use_service";
+ protected static final String KEY_HTML_DESCRIPTION_PREFERENCE = "html_description";
+ protected static final String KEY_SAVED_USER_SHORTCUT_TYPE = "shortcut_type";
+ protected static final String KEY_SAVED_QS_TOOLTIP_RESHOW = "qs_tooltip_reshow";
+ protected static final String KEY_SAVED_QS_TOOLTIP_TYPE = "qs_tooltip_type";
+ protected static final String KEY_ANIMATED_IMAGE = "animated_image";
+ // For html description of accessibility service, must follow the rule, such as
+ // <img src="R.drawable.fileName"/>, a11y settings will get the resources successfully.
+ private static final String IMG_PREFIX = "R.drawable.";
+ private static final String DRAWABLE_FOLDER = "drawable";
+
protected TopIntroPreference mTopIntroPreference;
protected SettingsMainSwitchPreference mToggleServiceSwitchPreference;
protected ShortcutPreference mShortcutPreference;
@@ -86,28 +101,17 @@
protected AccessibilityFooterPreferenceController mFooterPreferenceController;
protected String mPreferenceKey;
protected Dialog mDialog;
-
protected CharSequence mSettingsTitle;
protected Intent mSettingsIntent;
// The mComponentName maybe null, such as Magnify
protected ComponentName mComponentName;
protected CharSequence mPackageName;
protected Uri mImageUri;
- private CharSequence mDescription;
protected CharSequence mHtmlDescription;
protected CharSequence mTopIntroTitle;
-
- private static final String DRAWABLE_FOLDER = "drawable";
- protected static final String KEY_TOP_INTRO_PREFERENCE = "top_intro";
- protected static final String KEY_USE_SERVICE_PREFERENCE = "use_service";
- public static final String KEY_GENERAL_CATEGORY = "general_categories";
- protected static final String KEY_HTML_DESCRIPTION_PREFERENCE = "html_description";
- public static final String KEY_SHORTCUT_PREFERENCE = "shortcut_preference";
- protected static final String KEY_SAVED_USER_SHORTCUT_TYPE = "shortcut_type";
- protected static final String KEY_SAVED_QS_TOOLTIP_RESHOW = "qs_tooltip_reshow";
- protected static final String KEY_SAVED_QS_TOOLTIP_TYPE = "qs_tooltip_type";
- protected static final String KEY_ANIMATED_IMAGE = "animated_image";
-
+ // Save user's shortcutType value when savedInstance has value (e.g. device rotated).
+ protected int mSavedCheckBoxValue = NOT_SET;
+ private CharSequence mDescription;
private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener;
private AccessibilitySettingsContentObserver mSettingsContentObserver;
@@ -117,18 +121,8 @@
private AccessibilityQuickSettingsTooltipWindow mTooltipWindow;
private boolean mNeedsQSTooltipReshow = false;
private int mNeedsQSTooltipType = QuickSettingsTooltipType.GUIDE_TO_EDIT;
-
- public static final int NOT_SET = -1;
- // Save user's shortcutType value when savedInstance has value (e.g. device rotated).
- protected int mSavedCheckBoxValue = NOT_SET;
private boolean mSavedAccessibilityFloatingMenuEnabled;
-
- // For html description of accessibility service, must follow the rule, such as
- // <img src="R.drawable.fileName"/>, a11y settings will get the resources successfully.
- private static final String IMG_PREFIX = "R.drawable.";
-
private ImageView mImageGetterCacheView;
-
private final Html.ImageGetter mImageGetter = (String str) -> {
if (str != null && str.startsWith(IMG_PREFIX)) {
final String fileName = str.substring(IMG_PREFIX.length());
@@ -143,6 +137,8 @@
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+
+ onProcessArguments(getArguments());
// Restore the user shortcut type and tooltip.
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(KEY_SAVED_USER_SHORTCUT_TYPE)) {
@@ -188,9 +184,6 @@
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- // Need to be called as early as possible. Protected variables will be assigned here.
- onProcessArguments(getArguments());
-
initTopIntroPreference();
initAnimatedImagePreference();
initToggleServiceSwitchPreference();
@@ -208,10 +201,34 @@
removeDialog(DialogEnums.EDIT_SHORTCUT);
mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));
};
+
+ updatePreferenceOrder();
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
+ public Dialog onCreateDialog(int dialogId) {
+ switch (dialogId) {
+ case DialogEnums.EDIT_SHORTCUT:
+ final int dialogType = WizardManagerHelper.isAnySetupWizard(getIntent())
+ ? DialogType.EDIT_SHORTCUT_GENERIC_SUW : DialogType.EDIT_SHORTCUT_GENERIC;
+ mDialog = AccessibilityDialogUtils.showEditShortcutDialog(
+ getPrefContext(), dialogType, getShortcutTitle(),
+ this::callOnAlertDialogCheckboxClicked);
+ setupEditShortcutDialog(mDialog);
+ return mDialog;
+ case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
+ mDialog = AccessibilityGestureNavigationTutorial
+ .createAccessibilityTutorialDialog(getPrefContext(),
+ getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
+ mDialog.setCanceledOnTouchOutside(false);
+ return mDialog;
+ default:
+ throw new IllegalArgumentException("Unsupported dialogId " + dialogId);
+ }
+ }
+
+ @Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
@@ -219,8 +236,6 @@
final SettingsMainSwitchBar switchBar = activity.getSwitchBar();
switchBar.hide();
- updatePreferenceOrder();
-
// Reshow tooltip when activity recreate, such as rotate device.
if (mNeedsQSTooltipReshow) {
getView().post(this::showQuickSettingsTooltipIfNeeded);
@@ -268,25 +283,9 @@
}
@Override
- public Dialog onCreateDialog(int dialogId) {
- switch (dialogId) {
- case DialogEnums.EDIT_SHORTCUT:
- final int dialogType = WizardManagerHelper.isAnySetupWizard(getIntent())
- ? DialogType.EDIT_SHORTCUT_GENERIC_SUW : DialogType.EDIT_SHORTCUT_GENERIC;
- mDialog = AccessibilityDialogUtils.showEditShortcutDialog(
- getPrefContext(), dialogType, getShortcutTitle(),
- this::callOnAlertDialogCheckboxClicked);
- setupEditShortcutDialog(mDialog);
- return mDialog;
- case DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL:
- mDialog = AccessibilityGestureNavigationTutorial
- .createAccessibilityTutorialDialog(getPrefContext(),
- getUserShortcutTypes(), this::callOnTutorialDialogButtonClicked);
- mDialog.setCanceledOnTouchOutside(false);
- return mDialog;
- default:
- throw new IllegalArgumentException("Unsupported dialogId " + dialogId);
- }
+ public void onDestroyView() {
+ super.onDestroyView();
+ removeActionBarToggleSwitch();
}
@Override
@@ -312,12 +311,6 @@
}
@Override
- public void onDestroyView() {
- super.onDestroyView();
- removeActionBarToggleSwitch();
- }
-
- @Override
public void onSwitchChanged(Switch switchView, boolean isChecked) {
onPreferenceToggled(mPreferenceKey, isChecked);
}
@@ -335,7 +328,7 @@
protected void updateToggleServiceTitle(SettingsMainSwitchPreference switchPreference) {
final CharSequence title =
- getString(R.string.accessibility_service_primary_switch_title, mPackageName);
+ getString(R.string.accessibility_service_primary_switch_title, mPackageName);
switchPreference.setTitle(title);
}
@@ -363,15 +356,6 @@
// Implement this to update the state of switch.
}
- private void installActionBarToggleSwitch() {
- onInstallSwitchPreferenceToggleSwitch();
- }
-
- private void removeActionBarToggleSwitch() {
- mToggleServiceSwitchPreference.setOnPreferenceClickListener(null);
- onRemoveSwitchPreferenceToggleSwitch();
- }
-
public void setTitle(String title) {
getActivity().setTitle(title);
}
@@ -405,15 +389,13 @@
}
}
- /** Customizes the order by preference key. */
- protected List<String> getPreferenceOrderList() {
- final List<String> lists = new ArrayList<>();
- lists.add(KEY_TOP_INTRO_PREFERENCE);
- lists.add(KEY_ANIMATED_IMAGE);
- lists.add(KEY_USE_SERVICE_PREFERENCE);
- lists.add(KEY_GENERAL_CATEGORY);
- lists.add(KEY_HTML_DESCRIPTION_PREFERENCE);
- return lists;
+ private void installActionBarToggleSwitch() {
+ onInstallSwitchPreferenceToggleSwitch();
+ }
+
+ private void removeActionBarToggleSwitch() {
+ mToggleServiceSwitchPreference.setOnPreferenceClickListener(null);
+ onRemoveSwitchPreferenceToggleSwitch();
}
private void updatePreferenceOrder() {
@@ -431,6 +413,17 @@
}
}
+ /** Customizes the order by preference key. */
+ protected List<String> getPreferenceOrderList() {
+ final List<String> lists = new ArrayList<>();
+ lists.add(KEY_TOP_INTRO_PREFERENCE);
+ lists.add(KEY_ANIMATED_IMAGE);
+ lists.add(KEY_USE_SERVICE_PREFERENCE);
+ lists.add(KEY_GENERAL_CATEGORY);
+ lists.add(KEY_HTML_DESCRIPTION_PREFERENCE);
+ return lists;
+ }
+
private Drawable getDrawableFromUri(Uri imageUri) {
if (mImageGetterCacheView == null) {
mImageGetterCacheView = new ImageView(getPrefContext());
@@ -551,7 +544,7 @@
// TODO(b/171272809): Migrate to DashboardFragment.
final String title = getString(R.string.accessibility_introduction_title, mPackageName);
mFooterPreferenceController = new AccessibilityFooterPreferenceController(
- screen.getContext(), htmlFooterPreference.getKey());
+ screen.getContext(), htmlFooterPreference.getKey());
mFooterPreferenceController.setIntroductionTitle(title);
mFooterPreferenceController.displayPreference(screen);
}
@@ -568,8 +561,8 @@
* Creates {@link AccessibilityFooterPreference} and append into {@link PreferenceScreen}
*
* @param screen The preference screen to add the footer preference
- * @param summary The summary of the preference summary.
- * @param introductionTitle The title of introduction in the footer.
+ * @param summary The summary of the preference summary
+ * @param introductionTitle The title of introduction in the footer
*/
@VisibleForTesting
void createFooterPreference(PreferenceScreen screen, CharSequence summary,
@@ -580,7 +573,7 @@
screen.addPreference(footerPreference);
mFooterPreferenceController = new AccessibilityFooterPreferenceController(
- screen.getContext(), footerPreference.getKey());
+ screen.getContext(), footerPreference.getKey());
mFooterPreferenceController.setIntroductionTitle(introductionTitle);
mFooterPreferenceController.displayPreference(screen);
}
@@ -649,18 +642,6 @@
return value;
}
- private static CharSequence getSoftwareShortcutTypeSummary(Context context) {
- int resId;
- if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
- resId = R.string.accessibility_shortcut_edit_summary_software;
- } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
- resId = R.string.accessibility_shortcut_edit_summary_software_gesture;
- } else {
- resId = R.string.accessibility_shortcut_edit_summary_software;
- }
- return context.getText(resId);
- }
-
protected CharSequence getShortcutTypeSummary(Context context) {
if (!mShortcutPreference.isSettingsEditable()) {
return context.getText(R.string.accessibility_shortcut_edit_dialog_title_hardware);
@@ -692,6 +673,18 @@
null, LocaleUtils.getConcatenatedString(list));
}
+ private static CharSequence getSoftwareShortcutTypeSummary(Context context) {
+ int resId;
+ if (AccessibilityUtil.isFloatingMenuEnabled(context)) {
+ resId = R.string.accessibility_shortcut_edit_summary_software;
+ } else if (AccessibilityUtil.isGestureNavigateEnabled(context)) {
+ resId = R.string.accessibility_shortcut_edit_summary_software_gesture;
+ } else {
+ resId = R.string.accessibility_shortcut_edit_summary_software;
+ }
+ return context.getText(resId);
+ }
+
/**
* This method will be invoked when a button in the tutorial dialog is clicked.
*
diff --git a/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java
index 4e990f4..4b7fffb 100644
--- a/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleReduceBrightColorsPreferenceFragment.java
@@ -49,19 +49,30 @@
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class ToggleReduceBrightColorsPreferenceFragment extends ToggleFeaturePreferenceFragment {
- private static final String REDUCE_BRIGHT_COLORS_ACTIVATED_KEY =
- Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED;
+ private static final String TAG = "ToggleReduceBrightColorsPreferenceFragment";
private static final String KEY_INTENSITY = "rbc_intensity";
private static final String KEY_PERSIST = "rbc_persist";
+ private static final String REDUCE_BRIGHT_COLORS_ACTIVATED_KEY =
+ Settings.Secure.REDUCE_BRIGHT_COLORS_ACTIVATED;
private ReduceBrightColorsIntensityPreferenceController mRbcIntensityPreferenceController;
private ReduceBrightColorsPersistencePreferenceController mRbcPersistencePreferenceController;
private ColorDisplayManager mColorDisplayManager;
@Override
+ protected void registerKeysToObserverCallback(
+ AccessibilitySettingsContentObserver contentObserver) {
+ super.registerKeysToObserverCallback(contentObserver);
+
+ final List<String> enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1);
+ enableServiceFeatureKeys.add(REDUCE_BRIGHT_COLORS_ACTIVATED_KEY);
+ contentObserver.registerKeysToObserverCallback(enableServiceFeatureKeys,
+ key -> updateSwitchBarToggleSwitch());
+ }
+
+ @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
-
mImageUri = new Uri.Builder().scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
.authority(getPrefContext().getPackageName())
.appendPath(String.valueOf(R.raw.extra_dim_banner))
@@ -85,17 +96,6 @@
return view;
}
- @Override
- protected void registerKeysToObserverCallback(
- AccessibilitySettingsContentObserver contentObserver) {
- super.registerKeysToObserverCallback(contentObserver);
-
- final List<String> enableServiceFeatureKeys = new ArrayList<>(/* initialCapacity= */ 1);
- enableServiceFeatureKeys.add(REDUCE_BRIGHT_COLORS_ACTIVATED_KEY);
- contentObserver.registerKeysToObserverCallback(enableServiceFeatureKeys,
- key -> updateSwitchBarToggleSwitch());
- }
-
private void updateGeneralCategoryOrder() {
final PreferenceCategory generalCategory = findPreference(KEY_GENERAL_CATEGORY);
final SeekBarPreference intensity = findPreference(KEY_INTENSITY);
@@ -115,29 +115,19 @@
}
@Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- }
-
- @Override
public void onResume() {
super.onResume();
updateSwitchBarToggleSwitch();
}
@Override
- public void onPause() {
- super.onPause();
- }
-
- @Override
public int getMetricsCategory() {
return SettingsEnums.REDUCE_BRIGHT_COLORS_SETTINGS;
}
@Override
public int getHelpResource() {
- // TODO(170973645): Link to help support page
+ // TODO(b/170973645): Link to help support page
return 0;
}
@@ -147,6 +137,11 @@
}
@Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
if (enabled) {
showQuickSettingsTooltipIfNeeded(QuickSettingsTooltipType.GUIDE_TO_DIRECT_USE);
@@ -186,8 +181,8 @@
@Override
CharSequence getTileTooltipContent(@QuickSettingsTooltipType int type) {
return getText(type == QuickSettingsTooltipType.GUIDE_TO_EDIT
- ? R.string.accessibility_reduce_bright_colors_qs_tooltip_content
- : R.string.accessibility_reduce_bright_colors_auto_added_qs_tooltip_content);
+ ? R.string.accessibility_reduce_bright_colors_qs_tooltip_content
+ : R.string.accessibility_reduce_bright_colors_auto_added_qs_tooltip_content);
}
@Override
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 3260cd1..8da190a 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -66,22 +66,22 @@
public class ToggleScreenMagnificationPreferenceFragment extends
ToggleFeaturePreferenceFragment implements
MagnificationModePreferenceController.DialogHelper {
- // TODO(b/147021230): Move duplicated functions with android/internal/accessibility into util.
- private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener;
- private CheckBox mSoftwareTypeCheckBox;
- private CheckBox mHardwareTypeCheckBox;
- private CheckBox mTripleTapTypeCheckBox;
-
+ private static final String TAG = "ToggleScreenMagnificationPreferenceFragment";
private static final char COMPONENT_NAME_SEPARATOR = ':';
private static final TextUtils.SimpleStringSplitter sStringColonSplitter =
new TextUtils.SimpleStringSplitter(COMPONENT_NAME_SEPARATOR);
+ protected SwitchPreference mFollowingTypingSwitchPreference;
+
+ // TODO(b/147021230): Move duplicated functions with android/internal/accessibility into util.
+ private TouchExplorationStateChangeListener mTouchExplorationStateChangeListener;
+ private CheckBox mSoftwareTypeCheckBox;
+ private CheckBox mHardwareTypeCheckBox;
+ private CheckBox mTripleTapTypeCheckBox;
private DialogCreatable mDialogDelegate;
private MagnificationFollowTypingPreferenceController mFollowTypingPreferenceController;
- protected SwitchPreference mFollowingTypingSwitchPreference;
-
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -126,6 +126,17 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ // TODO(b/171272809): Add back when controllers move to static type
+ return 0;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
public void onPause() {
final AccessibilityManager am = getPrefContext().getSystemService(
AccessibilityManager.class);
@@ -623,15 +634,6 @@
return false;
}
- private boolean isWindowMagnification(Context context) {
- final int mode = Settings.Secure.getIntForUser(
- context.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE,
- Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN,
- context.getContentResolver().getUserId());
- return mode == Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
- }
-
private static int getUserShortcutTypeFromSettings(Context context) {
int shortcutTypes = UserShortcutType.EMPTY;
if (hasMagnificationValuesInSettings(context, UserShortcutType.SOFTWARE)) {
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/activityembedding/ActivityEmbeddingUtils.java b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
index fdf1314..f00542d 100644
--- a/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
+++ b/src/com/android/settings/activityembedding/ActivityEmbeddingUtils.java
@@ -27,6 +27,8 @@
import com.android.settings.R;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
/** An util class collecting all common methods for the embedding activity features. */
public class ActivityEmbeddingUtils {
// The smallest value of current width of the window when the split should be used.
@@ -65,14 +67,16 @@
/** Whether to support embedding activity feature. */
public static boolean isEmbeddingActivityEnabled(Context context) {
- final boolean isFlagEnabled = FeatureFlagUtils.isEnabled(context,
+ boolean isFlagEnabled = FeatureFlagUtils.isEnabled(context,
FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN);
- final boolean isSplitSupported = SplitController.getInstance().isSplitSupported();
+ boolean isSplitSupported = SplitController.getInstance().isSplitSupported();
+ boolean isUserSetupComplete = WizardManagerHelper.isUserSetupComplete(context);
Log.d(TAG, "isFlagEnabled = " + isFlagEnabled);
Log.d(TAG, "isSplitSupported = " + isSplitSupported);
+ Log.d(TAG, "isUserSetupComplete = " + isUserSetupComplete);
- return isFlagEnabled && isSplitSupported;
+ return isFlagEnabled && isSplitSupported && isUserSetupComplete;
}
/** Whether to show the regular or simplified homepage layout. */
diff --git a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
index 1b270d6..4387f83 100644
--- a/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
+++ b/src/com/android/settings/applications/appinfo/AppButtonsPreferenceController.java
@@ -531,7 +531,8 @@
intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid));
Log.d(TAG, "Sending broadcast to query restart status for "
+ mAppEntry.info.packageName);
- mActivity.sendOrderedBroadcastAsUser(intent, UserHandle.CURRENT, null,
+ mActivity.sendOrderedBroadcastAsUser(intent, UserHandle.CURRENT,
+ android.Manifest.permission.HANDLE_QUERY_PACKAGE_RESTART,
mCheckKillProcessesReceiver, null, Activity.RESULT_CANCELED, null, null);
}
}
diff --git a/src/com/android/settings/biometrics/BiometricEnrollActivity.java b/src/com/android/settings/biometrics/BiometricEnrollActivity.java
index e682934..3f57f5d 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_IS_SINGLE_ENROLLING =
+ "is_single_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 mIsSingleEnrolling;
+ 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);
+ mIsSingleEnrolling = savedInstanceState.getBoolean(
+ SAVED_STATE_IS_SINGLE_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);
@@ -295,16 +305,16 @@
if (!setupWizard && authenticators == BiometricManager.Authenticators.DEVICE_CREDENTIAL) {
launchCredentialOnlyEnroll();
finish();
- } else if (canUseFace && canUseFingerprint) {
- if (mGkPwHandle != null) {
- launchFaceAndFingerprintEnroll();
- } else {
+ } else if (canUseFace || canUseFingerprint) {
+ if (mGkPwHandle == null) {
setOrConfirmCredentialsNow();
+ } else if (canUseFace && canUseFingerprint) {
+ launchFaceAndFingerprintEnroll();
+ } else if (canUseFingerprint) {
+ launchFingerprintOnlyEnroll();
+ } else {
+ launchFaceOnlyEnroll();
}
- } else if (canUseFingerprint) {
- launchFingerprintOnlyEnroll();
- } else if (canUseFace) {
- launchFaceOnlyEnroll();
} else { // no modalities available
if (mParentalOptionsRequired) {
Log.d(TAG, "No consent for any modality: skipping enrollment");
@@ -320,6 +330,9 @@
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(SAVED_STATE_CONFIRMING_CREDENTIALS, mConfirmingCredentials);
+ outState.putBoolean(SAVED_STATE_IS_SINGLE_ENROLLING, mIsSingleEnrolling);
+ 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 +346,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 +425,7 @@
}
} else {
Log.d(TAG, "Unknown or cancelled parental consent");
- setResult(RESULT_CANCELED);
+ setResult(RESULT_CANCELED, newResultIntent());
finish();
}
break;
@@ -432,18 +451,23 @@
mConfirmingCredentials = false;
final boolean isOk =
isSuccessfulConfirmOrChooseCredential(requestCode, resultCode);
- // single modality enrollment requests confirmation directly
- // via BiometricEnrollBase#onCreate and should never get here
- if (isOk && mHasFeatureFace && mHasFeatureFingerprint) {
+ if (isOk && (mHasFeatureFace || mHasFeatureFingerprint)) {
updateGatekeeperPasswordHandle(data);
- launchFaceAndFingerprintEnroll();
+ if (mHasFeatureFace && mHasFeatureFingerprint) {
+ launchFaceAndFingerprintEnroll();
+ } else if (mHasFeatureFingerprint) {
+ launchFingerprintOnlyEnroll();
+ } else {
+ launchFaceOnlyEnroll();
+ }
} else {
Log.d(TAG, "Unknown result for set/choose lock: " + resultCode);
- setResult(resultCode);
+ setResult(resultCode, newResultIntent());
finish();
}
break;
case REQUEST_SINGLE_ENROLL:
+ mIsSingleEnrolling = false;
finishOrLaunchHandToParent(resultCode);
break;
default:
@@ -466,25 +490,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,20 +608,26 @@
}
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 (!mIsSingleEnrolling) {
+ mIsSingleEnrolling = 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() {
- final Intent intent = BiometricUtils.getFaceIntroIntent(this, getIntent());
- launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL);
+ if (!mIsSingleEnrolling) {
+ mIsSingleEnrolling = true;
+ final Intent intent = BiometricUtils.getFaceIntroIntent(this, getIntent());
+ launchSingleSensorEnrollActivity(intent, REQUEST_SINGLE_ENROLL);
+ }
}
private void launchFaceAndFingerprintEnroll() {
diff --git a/src/com/android/settings/biometrics/BiometricEnrollBase.java b/src/com/android/settings/biometrics/BiometricEnrollBase.java
index eea1bad..75e4098 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollBase.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollBase.java
@@ -181,16 +181,6 @@
getWindow().setStatusBarColor(getBackgroundColor());
}
- @Override
- protected void onStop() {
- super.onStop();
- if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()
- && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
- setResult(RESULT_TIMEOUT);
- finish();
- }
- }
-
protected boolean shouldFinishWhenBackgrounded() {
return !WizardManagerHelper.isAnySetupWizard(getIntent());
}
diff --git a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
index acfe5a1..d9f8bd1 100644
--- a/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
+++ b/src/com/android/settings/biometrics/BiometricEnrollIntroduction.java
@@ -242,6 +242,16 @@
}
@Override
+ protected void onStop() {
+ if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()
+ && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
+ setResult(RESULT_TIMEOUT);
+ finish();
+ }
+ super.onStop();
+ }
+
+ @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(KEY_CONFIRMING_CREDENTIALS, mConfirmingCredentials);
diff --git a/src/com/android/settings/biometrics/BiometricHandoffActivity.java b/src/com/android/settings/biometrics/BiometricHandoffActivity.java
index 7f28ced..2b8d89b 100644
--- a/src/com/android/settings/biometrics/BiometricHandoffActivity.java
+++ b/src/com/android/settings/biometrics/BiometricHandoffActivity.java
@@ -49,6 +49,16 @@
mFooterBarMixin.setPrimaryButton(getPrimaryFooterButton());
}
+ @Override
+ protected void onStop() {
+ if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()
+ && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
+ setResult(RESULT_TIMEOUT);
+ finish();
+ }
+ super.onStop();
+ }
+
@NonNull
protected FooterButton getPrimaryFooterButton() {
if (mPrimaryFooterButton == null) {
diff --git a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java
index 3a61d5e..6f68f51 100644
--- a/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/BiometricsEnrollEnrolling.java
@@ -62,7 +62,11 @@
@Override
protected void onStop() {
- super.onStop();
+ if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()
+ && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
+ setResult(RESULT_TIMEOUT);
+ finish();
+ }
if (mSidecar != null) {
mSidecar.setListener(null);
@@ -80,6 +84,7 @@
}
finish();
}
+ super.onStop();
}
@Override
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
index d2d356b..cdd99a2 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollEducation.java
@@ -171,6 +171,16 @@
}
@Override
+ protected void onStop() {
+ if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()
+ && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
+ setResult(RESULT_TIMEOUT);
+ finish();
+ }
+ super.onStop();
+ }
+
+ @Override
protected boolean shouldFinishWhenBackgrounded() {
return super.shouldFinishWhenBackgrounded() && !mNextClicked;
}
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollFinish.java b/src/com/android/settings/biometrics/face/FaceEnrollFinish.java
index 6e99cdb..1351794 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollFinish.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollFinish.java
@@ -22,6 +22,7 @@
import com.android.settings.R;
import com.android.settings.biometrics.BiometricEnrollBase;
+import com.android.settings.biometrics.BiometricUtils;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
@@ -49,6 +50,16 @@
}
@Override
+ protected void onStop() {
+ if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()
+ && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
+ setResult(RESULT_TIMEOUT);
+ finish();
+ }
+ super.onStop();
+ }
+
+ @Override
public int getMetricsCategory() {
return SettingsEnums.FACE_ENROLL_FINISHED;
}
diff --git a/src/com/android/settings/biometrics/face/FaceSettings.java b/src/com/android/settings/biometrics/face/FaceSettings.java
index dc94376..3710528 100644
--- a/src/com/android/settings/biometrics/face/FaceSettings.java
+++ b/src/com/android/settings/biometrics/face/FaceSettings.java
@@ -203,6 +203,10 @@
if (savedInstanceState != null) {
mToken = savedInstanceState.getByteArray(KEY_TOKEN);
}
+
+ final boolean hasEnrolled = mFaceManager.hasEnrolledTemplates(mUserId);
+ mEnrollButton.setVisible(!hasEnrolled);
+ mRemoveButton.setVisible(hasEnrolled);
}
@Override
@@ -230,10 +234,6 @@
mEnrollController.setToken(mToken);
}
- final boolean hasEnrolled = mFaceManager.hasEnrolledTemplates(mUserId);
- mEnrollButton.setVisible(!hasEnrolled);
- mRemoveButton.setVisible(hasEnrolled);
-
if (!mFaceFeatureProvider.isAttentionSupported(getContext())) {
removePreference(FaceSettingsAttentionPreferenceController.KEY);
}
@@ -261,6 +261,10 @@
mEnrollController.setToken(mToken);
mConfirmingPassword = false;
});
+
+ final boolean hasEnrolled = mFaceManager.hasEnrolledTemplates(mUserId);
+ mEnrollButton.setVisible(!hasEnrolled);
+ mRemoveButton.setVisible(hasEnrolled);
}
} else if (requestCode == ENROLL_REQUEST) {
if (resultCode == RESULT_TIMEOUT) {
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index bf04d5f..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);
}
@@ -567,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("");
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
index 627a514..79a1065 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensor.java
@@ -249,10 +249,15 @@
@Override
protected void onStop() {
- super.onStop();
if (mAnimation != null) {
mAnimation.pauseAnimation();
}
+ if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()
+ && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
+ setResult(RESULT_TIMEOUT);
+ finish();
+ }
+ super.onStop();
}
@Override
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
index 16773d3..05ca39c 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFinish.java
@@ -109,6 +109,16 @@
}
@Override
+ protected void onStop() {
+ if (!isChangingConfigurations() && shouldFinishWhenBackgrounded()
+ && !BiometricUtils.isAnyMultiBiometricFlow(this)) {
+ setResult(RESULT_TIMEOUT);
+ finish();
+ }
+ super.onStop();
+ }
+
+ @Override
protected void onNextButtonClick(View view) {
updateFingerprintSuggestionEnableState();
setResult(RESULT_FINISHED);
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 cea44ba..9f9efdc 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintErrorDialog.java
@@ -18,11 +18,13 @@
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;
@@ -68,7 +70,11 @@
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
- getActivity().recreate();
+ Activity activity = getActivity();
+ Intent intent = activity.getIntent();
+ intent.putExtra(KEY_STATE_CANCELED, false);
+ activity.startActivity(intent);
+ activity.finish();
}
})
.setNegativeButton(
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/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
index 3e50049..d90e394 100644
--- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
+++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
@@ -27,6 +27,7 @@
import android.os.UserManager;
import android.text.Html;
import android.text.TextUtils;
+import android.util.Log;
import android.util.Pair;
import android.util.TypedValue;
import android.view.View;
@@ -41,13 +42,13 @@
import com.android.settings.R;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.GearPreference;
-import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.utils.ThreadUtils;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.concurrent.RejectedExecutionException;
/**
* BluetoothDevicePreference is the preference type used to display each remote
@@ -175,6 +176,7 @@
mHideSecondTarget = hideSecondTarget;
}
+ @SuppressWarnings("FutureReturnValueIgnored")
void onPreferenceAttributesChanged() {
Pair<Drawable, String> pair = mCachedDevice.getDrawableWithDescription();
setIcon(pair.first);
@@ -186,9 +188,15 @@
* any preference info has changed from the previous value.
*/
setTitle(mCachedDevice.getName());
- // Null check is done at the framework
- setSummary(mCachedDevice.getConnectionSummary());
-
+ try {
+ ThreadUtils.postOnBackgroundThread(() -> {
+ String summary = mCachedDevice.getConnectionSummary();
+ // Null check is done at the framework
+ ThreadUtils.postOnMainThread(() -> setSummary(summary));
+ });
+ } catch (RejectedExecutionException e) {
+ Log.w(TAG, "Handler thread unavailable, skipping getConnectionSummary!");
+ }
// Used to gray out the item
setEnabled(!mCachedDevice.isBusy());
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java b/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java
index 650267a..8dd00b3 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingDialogFragment.java
@@ -86,8 +86,12 @@
@Override
public void onDestroy() {
super.onDestroy();
- if (!mPositiveClicked) {
- mPairingController.onCancel();
+ if (mPairingController.getDialogType()
+ != BluetoothPairingController.DISPLAY_PASSKEY_DIALOG) {
+ /* Cancel pairing unless explicitly accepted by user */
+ if (!mPositiveClicked) {
+ mPairingController.onCancel();
+ }
}
}
diff --git a/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java b/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
index c8f71c4..7c5eb6b 100644
--- a/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
+++ b/src/com/android/settings/bluetooth/BluetoothPermissionActivity.java
@@ -151,13 +151,10 @@
public void onBackPressed() {
/*we need an answer so ignore back button presses during auth */
if(DEBUG) Log.i(TAG, "Back button pressed! ignoring");
- return;
}
// TODO(edjee): createConnectionDialogView, createPhonebookDialogView and createMapDialogView
// are similar. Refactor them into one method.
- // Also, the string resources bluetooth_remember_choice and bluetooth_pb_remember_choice should
- // be removed.
private View createConnectionDialogView() {
String mRemoteName = Utils.createRemoteName(this, mDevice);
mView = getLayoutInflater().inflate(R.layout.bluetooth_access, null);
diff --git a/src/com/android/settings/bluetooth/QrCodeScanModeBaseActivity.java b/src/com/android/settings/bluetooth/QrCodeScanModeBaseActivity.java
index af8a6e9..06f3619 100644
--- a/src/com/android/settings/bluetooth/QrCodeScanModeBaseActivity.java
+++ b/src/com/android/settings/bluetooth/QrCodeScanModeBaseActivity.java
@@ -18,14 +18,20 @@
import android.content.Intent;
import android.os.Bundle;
+import android.os.SystemProperties;
import androidx.fragment.app.FragmentManager;
import com.android.settingslib.R;
import com.android.settingslib.core.lifecycle.ObservableActivity;
+import com.google.android.setupdesign.util.ThemeHelper;
+import com.google.android.setupdesign.util.ThemeResolver;
+
public abstract class QrCodeScanModeBaseActivity extends ObservableActivity {
+ private static final String THEME_KEY = "setupwizard.theme";
+ private static final String THEME_DEFAULT_VALUE = "SudThemeGlifV3_DayNight";
protected FragmentManager mFragmentManager;
protected abstract void handleIntent(Intent intent);
@@ -34,7 +40,18 @@
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setTheme(R.style.SudThemeGlifV3_DayNight);
+ int defaultTheme =
+ ThemeHelper.isSetupWizardDayNightEnabled(this)
+ ? R.style.SudThemeGlifV3_DayNight
+ : R.style.SudThemeGlifV3_Light;
+ ThemeResolver themeResolver =
+ new ThemeResolver.Builder(ThemeResolver.getDefault())
+ .setDefaultTheme(defaultTheme)
+ .setUseDayNight(true)
+ .build();
+ setTheme(themeResolver.resolve(
+ SystemProperties.get(THEME_KEY, THEME_DEFAULT_VALUE),
+ /* suppressDayNight= */ !ThemeHelper.isSetupWizardDayNightEnabled(this)));
setContentView(R.layout.qrcode_scan_mode_activity);
mFragmentManager = getSupportFragmentManager();
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index dc746ce..5e17e0b 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -28,7 +28,7 @@
import com.android.settings.accessibility.AccessibilityDetailsSettingsFragment;
import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
-import com.android.settings.accessibility.CaptionPropertiesFragment;
+import com.android.settings.accessibility.CaptioningPropertiesFragment;
import com.android.settings.accessibility.TextReadingPreferenceFragmentForSetupWizard;
import com.android.settings.accessibility.ToggleColorInversionPreferenceFragment;
import com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment;
@@ -230,7 +230,7 @@
AccessibilitySettings.class.getName(),
AccessibilitySettingsForSetupWizard.class.getName(),
TextReadingPreferenceFragmentForSetupWizard.class.getName(),
- CaptionPropertiesFragment.class.getName(),
+ CaptioningPropertiesFragment.class.getName(),
ToggleDaltonizerPreferenceFragment.class.getName(),
ToggleColorInversionPreferenceFragment.class.getName(),
ToggleReduceBrightColorsPreferenceFragment.class.getName(),
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/datetime/DatePreferenceController.java b/src/com/android/settings/datetime/DatePreferenceController.java
index 66026d7..50feca1 100644
--- a/src/com/android/settings/datetime/DatePreferenceController.java
+++ b/src/com/android/settings/datetime/DatePreferenceController.java
@@ -18,15 +18,16 @@
import static android.app.time.Capabilities.CAPABILITY_POSSESSED;
-import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.time.TimeCapabilities;
import android.app.time.TimeManager;
import android.app.timedetector.ManualTimeSuggestion;
import android.app.timedetector.TimeDetector;
+import android.app.timedetector.TimeDetectorHelper;
import android.content.Context;
import android.text.TextUtils;
import android.text.format.DateFormat;
+import android.util.Log;
import android.widget.DatePicker;
import androidx.annotation.VisibleForTesting;
@@ -47,6 +48,7 @@
public static final int DIALOG_DATEPICKER = 0;
+ private static final String TAG = "DatePreferenceController";
private static final String KEY_DATE = "date";
private final DatePreferenceHost mHost;
@@ -96,22 +98,32 @@
mHost.updateTimeAndDateDisplay(mContext);
}
- public DatePickerDialog buildDatePicker(Activity activity) {
+ /**
+ * Builds a {@link DatePickerDialog} that can be used to request the current date from the user.
+ */
+ public DatePickerDialog buildDatePicker(
+ Context parentContext, TimeDetectorHelper timeDetectorHelper) {
final Calendar calendar = Calendar.getInstance();
- final DatePickerDialog d = new DatePickerDialog(
- activity,
+ final DatePickerDialog dialog = new DatePickerDialog(
+ parentContext,
this,
calendar.get(Calendar.YEAR),
calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH));
- // The system clock can't represent dates outside this range.
+
+ // Limit the dates the user can pick to a sensible range.
+ DatePicker datePicker = dialog.getDatePicker();
+
calendar.clear();
- calendar.set(2007, Calendar.JANUARY, 1);
- d.getDatePicker().setMinDate(calendar.getTimeInMillis());
+ int minYear = timeDetectorHelper.getManualDateSelectionYearMin();
+ calendar.set(minYear, Calendar.JANUARY, 1);
+ datePicker.setMinDate(calendar.getTimeInMillis());
+
+ int maxYear = timeDetectorHelper.getManualDateSelectionYearMax();
calendar.clear();
- calendar.set(2037, Calendar.DECEMBER, 31);
- d.getDatePicker().setMaxDate(calendar.getTimeInMillis());
- return d;
+ calendar.set(maxYear, Calendar.DECEMBER, 31);
+ datePicker.setMaxDate(calendar.getTimeInMillis());
+ return dialog;
}
@VisibleForTesting
@@ -121,13 +133,16 @@
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, day);
- long when = Math.max(c.getTimeInMillis(), DatePreferenceHost.MIN_DATE);
+ long when = c.getTimeInMillis();
- if (when / 1000 < Integer.MAX_VALUE) {
- TimeDetector timeDetector = mContext.getSystemService(TimeDetector.class);
- ManualTimeSuggestion manualTimeSuggestion =
- TimeDetector.createManualTimeSuggestion(when, "Settings: Set date");
- timeDetector.suggestManualTime(manualTimeSuggestion);
+ TimeDetector timeDetector = mContext.getSystemService(TimeDetector.class);
+ ManualTimeSuggestion manualTimeSuggestion =
+ TimeDetector.createManualTimeSuggestion(when, "Settings: Set date");
+ boolean success = timeDetector.suggestManualTime(manualTimeSuggestion);
+ if (!success) {
+ // This implies the system server is applying tighter bounds than the settings app or
+ // the date/time cannot be set for other reasons, e.g. perhaps "auto time" is turned on.
+ Log.w(TAG, "Unable to set date with suggestion=" + manualTimeSuggestion);
}
}
diff --git a/src/com/android/settings/datetime/DateTimeSettings.java b/src/com/android/settings/datetime/DateTimeSettings.java
index 3da4234..367146b 100644
--- a/src/com/android/settings/datetime/DateTimeSettings.java
+++ b/src/com/android/settings/datetime/DateTimeSettings.java
@@ -19,6 +19,7 @@
import android.app.Activity;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
+import android.app.timedetector.TimeDetectorHelper;
import android.content.Context;
import android.content.Intent;
@@ -104,7 +105,7 @@
switch (id) {
case DatePreferenceController.DIALOG_DATEPICKER:
return use(DatePreferenceController.class)
- .buildDatePicker(getActivity());
+ .buildDatePicker(getActivity(), TimeDetectorHelper.INSTANCE);
case TimePreferenceController.DIALOG_TIMEPICKER:
return use(TimePreferenceController.class)
.buildTimePicker(getActivity());
diff --git a/src/com/android/settings/datetime/TimePreferenceController.java b/src/com/android/settings/datetime/TimePreferenceController.java
index 368f1f2..09950fc 100644
--- a/src/com/android/settings/datetime/TimePreferenceController.java
+++ b/src/com/android/settings/datetime/TimePreferenceController.java
@@ -16,13 +16,13 @@
package com.android.settings.datetime;
-import android.app.Activity;
import android.app.TimePickerDialog;
import android.app.timedetector.ManualTimeSuggestion;
import android.app.timedetector.TimeDetector;
import android.content.Context;
import android.text.TextUtils;
import android.text.format.DateFormat;
+import android.util.Log;
import android.widget.TimePicker;
import androidx.preference.Preference;
@@ -42,6 +42,7 @@
public static final int DIALOG_TIMEPICKER = 1;
+ private static final String TAG = "TimePreferenceController";
private static final String KEY_TIME = "time";
private final DatePreferenceController mDatePreferenceController;
@@ -99,14 +100,17 @@
// SystemClock time.
}
- public TimePickerDialog buildTimePicker(Activity activity) {
+ /**
+ * Builds a {@link TimePickerDialog} that can be used to request the current time from the user.
+ */
+ public TimePickerDialog buildTimePicker(Context parentContext) {
final Calendar calendar = Calendar.getInstance();
return new TimePickerDialog(
- activity,
+ parentContext,
this,
calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE),
- DateFormat.is24HourFormat(activity));
+ DateFormat.is24HourFormat(parentContext));
}
void setTime(int hourOfDay, int minute) {
@@ -116,13 +120,16 @@
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
- long when = Math.max(c.getTimeInMillis(), TimePreferenceHost.MIN_DATE);
+ long when = c.getTimeInMillis();
- if (when / 1000 < Integer.MAX_VALUE) {
- TimeDetector timeDetector = mContext.getSystemService(TimeDetector.class);
- ManualTimeSuggestion manualTimeSuggestion =
- TimeDetector.createManualTimeSuggestion(when, "Settings: Set time");
- timeDetector.suggestManualTime(manualTimeSuggestion);
+ TimeDetector timeDetector = mContext.getSystemService(TimeDetector.class);
+ ManualTimeSuggestion manualTimeSuggestion =
+ TimeDetector.createManualTimeSuggestion(when, "Settings: Set time");
+ boolean success = timeDetector.suggestManualTime(manualTimeSuggestion);
+ if (!success) {
+ // This implies the system server is applying tighter bounds than the settings app or
+ // the date/time cannot be set for other reasons, e.g. perhaps "auto time" is turned on.
+ Log.w(TAG, "Unable to set time with suggestion=" + manualTimeSuggestion);
}
}
}
diff --git a/src/com/android/settings/datetime/UpdateTimeAndDateCallback.java b/src/com/android/settings/datetime/UpdateTimeAndDateCallback.java
index 333b9aa..aa1d64e 100644
--- a/src/com/android/settings/datetime/UpdateTimeAndDateCallback.java
+++ b/src/com/android/settings/datetime/UpdateTimeAndDateCallback.java
@@ -19,8 +19,5 @@
import android.content.Context;
public interface UpdateTimeAndDateCallback {
- // Minimum time is Nov 5, 2007, 0:00.
- long MIN_DATE = 1194220800000L;
-
void updateTimeAndDateDisplay(Context context);
}
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/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/StorageWizardFormatProgress.java b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
index ea4a2fd..c97d5c9 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardFormatProgress.java
@@ -36,6 +36,7 @@
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.TimeUnit;
+import android.view.WindowManager;
public class StorageWizardFormatProgress extends StorageWizardBase {
private static final String TAG = "StorageWizardFormatProgress";
@@ -54,6 +55,16 @@
return;
}
setContentView(R.layout.storage_wizard_progress);
+
+ // hide the navigation bar for this activity only. So that user can not press back button accidentally.
+ View decorView = getWindow().getDecorView();
+ int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ decorView.setSystemUiVisibility(uiOptions);
+
+ //disable touch in activity so user can not make the hidden navigation bar visible.
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
+ WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
+
setKeepScreenOn(true);
mFormatPrivate = getIntent().getBooleanExtra(EXTRA_FORMAT_PRIVATE, false);
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/StorageWizardMigrateProgress.java b/src/com/android/settings/deviceinfo/StorageWizardMigrateProgress.java
index 7e042c1..a4b29af 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMigrateProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMigrateProgress.java
@@ -31,6 +31,8 @@
import com.android.settings.R;
+import android.view.WindowManager;
+
public class StorageWizardMigrateProgress extends StorageWizardBase {
private static final String TAG = "StorageWizardMigrateProgress";
@@ -46,7 +48,16 @@
return;
}
setContentView(R.layout.storage_wizard_progress);
+
+ // hide the navigation bar for this activity only. So that user can not press back button accidentally.
+ View decorView = getWindow().getDecorView();
+ int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ decorView.setSystemUiVisibility(uiOptions);
+ //disable touch in activity so user can not make the hidden navigation bar visible.
+ getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
+ WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
+
mMoveId = getIntent().getIntExtra(EXTRA_MOVE_ID, -1);
setIcon(R.drawable.ic_swap_horiz);
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/deviceinfo/storage/StorageAsyncLoader.java b/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
index 611ee24..54935ec 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageAsyncLoader.java
@@ -85,13 +85,15 @@
for (UserInfo info : infos) {
final StorageResult result = getAppsAndGamesSize(info.id);
-
+ final Bundle media = new Bundle();
+ media.putString(ContentResolver.QUERY_ARG_SQL_SELECTION, MediaColumns.VOLUME_NAME
+ + "= '" + MediaStore.VOLUME_EXTERNAL_PRIMARY + "'");
result.imagesSize = getFilesSize(info.id, MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- null /* queryArgs */);
+ media /* queryArgs */);
result.videosSize = getFilesSize(info.id, MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
- null /* queryArgs */);
+ media /* queryArgs */);
result.audioSize = getFilesSize(info.id, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
- null /* queryArgs */);
+ media /* queryArgs */);
final Bundle documentsAndOtherQueryArgs = new Bundle();
documentsAndOtherQueryArgs.putString(ContentResolver.QUERY_ARG_SQL_SELECTION,
@@ -100,13 +102,14 @@
+ " AND " + FileColumns.MEDIA_TYPE + "!=" + FileColumns.MEDIA_TYPE_AUDIO
+ " AND " + FileColumns.MIME_TYPE + " IS NOT NULL");
result.documentsAndOtherSize = getFilesSize(info.id,
- MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL),
+ MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY),
documentsAndOtherQueryArgs);
final Bundle trashQueryArgs = new Bundle();
trashQueryArgs.putInt(MediaStore.QUERY_ARG_MATCH_TRASHED, MediaStore.MATCH_ONLY);
result.trashSize = getFilesSize(info.id,
- MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL), trashQueryArgs);
+ MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY),
+ trashQueryArgs);
results.put(info.id, result);
}
diff --git a/src/com/android/settings/display/ScreenResolutionFragment.java b/src/com/android/settings/display/ScreenResolutionFragment.java
index bc82514..b977703 100644
--- a/src/com/android/settings/display/ScreenResolutionFragment.java
+++ b/src/com/android/settings/display/ScreenResolutionFragment.java
@@ -26,6 +26,7 @@
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.hardware.display.DisplayManager;
+import android.provider.Settings;
import android.text.TextUtils;
import android.view.Display;
@@ -56,6 +57,7 @@
private Resources mResources;
private static final int FHD_INDEX = 0;
private static final int QHD_INDEX = 1;
+ private static final String SCREEN_RESOLUTION = "user_selected_resolution";
private Display mDefaultDisplay;
private String[] mScreenResolutionOptions;
private Set<Point> mResolutions;
@@ -156,8 +158,19 @@
/** Using display manager to set the display mode. */
@VisibleForTesting
public void setDisplayMode(final int width) {
+ Display.Mode mode = getPreferMode(width);
+
mDisplayObserver.startObserve();
- mDefaultDisplay.setUserPreferredDisplayMode(getPreferMode(width));
+
+ /** For store settings globally. */
+ /** TODO(b/238061217): Moving to an atom with the same string */
+ Settings.System.putString(
+ getContext().getContentResolver(),
+ SCREEN_RESOLUTION,
+ mode.getPhysicalWidth() + "x" + mode.getPhysicalHeight());
+
+ /** Apply the resolution change. */
+ mDefaultDisplay.setUserPreferredDisplayMode(mode);
}
/** Get the key corresponding to the resolution. */
@@ -186,7 +199,7 @@
protected boolean setDefaultKey(final String key) {
int width = getWidthForResoluitonKey(key);
if (width < 0) {
- return false;
+ return false;
}
setDisplayMode(width);
@@ -200,9 +213,8 @@
String selectedKey = selected.getKey();
int selectedWidth = getWidthForResoluitonKey(selectedKey);
if (!mDisplayObserver.setPendingResolutionChange(selectedWidth)) {
- return;
+ return;
}
-
super.onRadioButtonClicked(selected);
}
@@ -318,7 +330,7 @@
}
if (!isDensityChanged() || !isResolutionChangeApplied()) {
- return;
+ return;
}
restoreDensity();
@@ -353,10 +365,10 @@
int currentWidth = getCurrentWidth();
if (selectedWidth == currentWidth) {
- return false;
+ return false;
}
if (mPreviousWidth.get() != -1 && !isResolutionChangeApplied()) {
- return false;
+ return false;
}
mPreviousWidth.set(currentWidth);
@@ -366,7 +378,7 @@
private boolean isResolutionChangeApplied() {
if (mPreviousWidth.get() == getCurrentWidth()) {
- return false;
+ return false;
}
return true;
diff --git a/src/com/android/settings/display/WallpaperPreferenceController.java b/src/com/android/settings/display/WallpaperPreferenceController.java
index 00687b2..9972bf9 100644
--- a/src/com/android/settings/display/WallpaperPreferenceController.java
+++ b/src/com/android/settings/display/WallpaperPreferenceController.java
@@ -41,6 +41,8 @@
private final String mWallpaperPackage;
private final String mWallpaperClass;
private final String mStylesAndWallpaperClass;
+ private final String mWallpaperActionName;
+ private final String mStylesAndWallpaperActionName;
private final String mWallpaperLaunchExtra;
public WallpaperPreferenceController(Context context, String key) {
@@ -49,6 +51,9 @@
mWallpaperClass = mContext.getString(R.string.config_wallpaper_picker_class);
mStylesAndWallpaperClass =
mContext.getString(R.string.config_styles_and_wallpaper_picker_class);
+ mWallpaperActionName = mContext.getString(R.string.config_wallpaper_picker_action);
+ mStylesAndWallpaperActionName =
+ mContext.getString(R.string.config_styles_and_wallpaper_picker_action);
mWallpaperLaunchExtra = mContext.getString(R.string.config_wallpaper_picker_launch_extra);
}
@@ -72,6 +77,10 @@
return areStylesAvailable() ? mStylesAndWallpaperClass : mWallpaperClass;
}
+ public String getComponentActionName() {
+ return areStylesAvailable() ? mStylesAndWallpaperActionName : mWallpaperActionName;
+ }
+
public String getKeywords() {
StringBuilder sb = new StringBuilder(mContext.getString(R.string.keywords_wallpaper));
if (areStylesAvailable()) {
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 3f6c165..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,
diff --git a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
index 708ba5e..88241b6 100644
--- a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
@@ -53,16 +53,16 @@
return;
}
- if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
- Log.d(TAG, "is system or default app, disable pref");
- ((SelectorWithWidgetPreference) preference).setChecked(false);
- preference.setEnabled(false);
- } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
+ if (mBatteryOptimizeUtils.getAppOptimizationMode()
== BatteryOptimizeUtils.MODE_OPTIMIZED) {
Log.d(TAG, "is optimized states");
((SelectorWithWidgetPreference) preference).setChecked(true);
} else {
((SelectorWithWidgetPreference) preference).setChecked(false);
+ if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
+ Log.d(TAG, "is system or default app, disable pref");
+ preference.setEnabled(false);
+ }
}
}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index ee53d7f..83d7a33 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -150,6 +150,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 8c8fd96..1262641 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -166,6 +166,12 @@
}
@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/RestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
index 99e742b..fe896a6 100644
--- a/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/RestrictedPreferenceController.java
@@ -51,16 +51,16 @@
preference.setEnabled(true);
}
- if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
- Log.d(TAG, "is system or default app, disable pref");
- ((SelectorWithWidgetPreference) preference).setChecked(false);
- preference.setEnabled(false);
- } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
+ if (mBatteryOptimizeUtils.getAppOptimizationMode()
== BatteryOptimizeUtils.MODE_RESTRICTED) {
Log.d(TAG, "is restricted states");
((SelectorWithWidgetPreference) preference).setChecked(true);
} else {
((SelectorWithWidgetPreference) preference).setChecked(false);
+ if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
+ Log.d(TAG, "is system or default app, disable pref");
+ preference.setEnabled(false);
+ }
}
}
diff --git a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
index 244a33c..be4091c 100644
--- a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
@@ -50,15 +50,16 @@
preference.setEnabled(true);
}
- if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
- Log.d(TAG, "is system or default app, unrestricted states only");
- ((SelectorWithWidgetPreference) preference).setChecked(true);
- } else if (mBatteryOptimizeUtils.getAppOptimizationMode()
+ if (mBatteryOptimizeUtils.getAppOptimizationMode()
== BatteryOptimizeUtils.MODE_UNRESTRICTED) {
Log.d(TAG, "is unrestricted states");
((SelectorWithWidgetPreference) preference).setChecked(true);
} else {
((SelectorWithWidgetPreference) preference).setChecked(false);
+ if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
+ Log.d(TAG, "is system or default app, disable pref");
+ preference.setEnabled(false);
+ }
}
}
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java
index a441449..e6be684 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarController.java
@@ -20,6 +20,8 @@
import android.os.PowerManager;
import android.provider.Settings;
import android.provider.Settings.Global;
+import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceChangeListener;
@@ -42,22 +44,27 @@
* See {@link Settings.Global#AUTOMATIC_POWER_SAVE_MODE} for more details.
*/
public class BatterySaverScheduleSeekBarController implements
- OnPreferenceChangeListener {
+ OnPreferenceChangeListener, OnSeekBarChangeListener {
public static final int MAX_SEEKBAR_VALUE = 15;
public static final int MIN_SEEKBAR_VALUE = 2;
public static final String KEY_BATTERY_SAVER_SEEK_BAR = "battery_saver_seek_bar";
+ private static final int LEVEL_UNIT_SCALE = 5;
@VisibleForTesting
public SeekBarPreference mSeekBarPreference;
private Context mContext;
+ @VisibleForTesting
+ int mPercentage;
+
public BatterySaverScheduleSeekBarController(Context context) {
mContext = context;
mSeekBarPreference = new SeekBarPreference(context);
mSeekBarPreference.setLayoutResource(R.layout.preference_widget_seekbar_settings);
mSeekBarPreference.setIconSpaceReserved(false);
mSeekBarPreference.setOnPreferenceChangeListener(this);
+ mSeekBarPreference.setOnSeekBarChangeListener(this);
mSeekBarPreference.setContinuousUpdates(true);
mSeekBarPreference.setMax(MAX_SEEKBAR_VALUE);
mSeekBarPreference.setMin(MIN_SEEKBAR_VALUE);
@@ -68,16 +75,28 @@
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
- // The nits are in intervals of 5%
- final int percentage = ((Integer) newValue) * 5;
- Settings.Global.putInt(mContext.getContentResolver(), Global.LOW_POWER_MODE_TRIGGER_LEVEL,
- percentage);
- final CharSequence stateDescription = formatStateDescription(percentage);
+ mPercentage = ((Integer) newValue) * LEVEL_UNIT_SCALE;
+ final CharSequence stateDescription = formatStateDescription(mPercentage);
preference.setTitle(stateDescription);
mSeekBarPreference.overrideSeekBarStateDescription(stateDescription);
return true;
}
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {}
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ if (mPercentage > 0) {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Global.LOW_POWER_MODE_TRIGGER_LEVEL,
+ mPercentage);
+ }
+ }
+
public void updateSeekBar() {
final ContentResolver resolver = mContext.getContentResolver();
// Note: this can also be obtained via PowerManager.getPowerSaveModeTrigger()
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerV2.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerV2.java
new file mode 100644
index 0000000..45d145a
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerV2.java
@@ -0,0 +1,671 @@
+/*
+ * 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.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 BatteryChartPreferenceControllerV2 extends AbstractPreferenceController
+ implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnDestroy,
+ OnSaveInstanceState, OnResume, ExpandDividerPreference.OnExpandListener {
+ private static final String TAG = "BatteryChartPreferenceControllerV2";
+ private static final String KEY_FOOTER_PREF = "battery_graph_footer";
+ private static final String PACKAGE_NAME_NONE = "none";
+
+ private static final int TWENTY_FOUR_HOURS_TIME_SLOT_SIZE = 12;
+ 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
+ BatteryChartViewV2 mDailyChartView;
+ @VisibleForTesting
+ BatteryChartViewV2 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;
+ 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 BatteryChartPreferenceControllerV2(
+ 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_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 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) {
+ mDailyViewModel = null;
+ mHourlyViewModels = null;
+ addFooterPreferenceIfNeeded(false);
+ return;
+ }
+ mDailyViewModel = new BatteryChartViewModel(
+ batteryLevelData.getDailyBatteryLevels().getLevels(),
+ generateTimestampDayOfWeekTexts(
+ mContext, batteryLevelData.getDailyBatteryLevels().getTimestamps()),
+ mDailyChartIndex,
+ BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS);
+ mHourlyViewModels = new ArrayList<>();
+ for (BatteryLevelData.PeriodBatteryLevelData hourlyBatteryLevelsPerDay :
+ batteryLevelData.getHourlyBatteryLevelsPerDay()) {
+ mHourlyViewModels.add(new BatteryChartViewModel(
+ hourlyBatteryLevelsPerDay.getLevels(),
+ generateTimestampHourTexts(
+ mContext, hourlyBatteryLevelsPerDay.getTimestamps()),
+ mHourlyChartIndex,
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+ }
+ refreshUi();
+ }
+
+ void setBatteryChartView(@NonNull final BatteryChartViewV2 dailyChartView,
+ @NonNull final BatteryChartViewV2 hourlyChartView) {
+ if (mDailyChartView != dailyChartView || mHourlyChartView != hourlyChartView) {
+ mHandler.post(() -> setBatteryChartViewInner(dailyChartView, hourlyChartView));
+ }
+ }
+
+ private void setBatteryChartViewInner(@NonNull final BatteryChartViewV2 dailyChartView,
+ @NonNull final BatteryChartViewV2 hourlyChartView) {
+ mDailyChartView = dailyChartView;
+ mDailyChartView.setOnSelectListener(trapezoidIndex -> {
+ if (mDailyChartIndex == trapezoidIndex) {
+ return;
+ }
+ Log.d(TAG, "onDailyChartSelect:" + trapezoidIndex);
+ mDailyChartIndex = trapezoidIndex;
+ mHourlyChartIndex = BatteryChartView.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 (mBatteryUsageMap == null || mDailyChartView == null || mHourlyChartView == null) {
+ return false;
+ }
+
+ if (mDailyViewModel == null || mHourlyViewModels == null) {
+ // Fail to get battery level data, show an empty hourly chart view.
+ mDailyChartView.setVisibility(View.GONE);
+ mHourlyChartView.setViewModel(null);
+ 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_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() {
+ // TODO: Generate the right slot information from daily and hourly chart selection.
+ return null;
+ }
+
+ @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);
+ }
+
+ 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.size() == 1;
+ }
+
+ private static List<String> generateTimestampDayOfWeekTexts(
+ @NonNull final Context context, @NonNull final List<Long> timestamps) {
+ final ArrayList<String> texts = new ArrayList<>();
+ for (Long timestamp : timestamps) {
+ texts.add(ConvertUtils.utcToLocalTimeDayOfWeek(context, timestamp));
+ }
+ 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;
+ }
+
+ 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;
+ }
+
+ // TODO: Change this method to fromLastFullCharged.
+
+ /** 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 List<Long> batteryHistoryKeyList =
+ new ArrayList<>(batteryHistoryMap.keySet());
+ Collections.sort(batteryHistoryKeyList);
+ final long[] batteryHistoryKeys = new long[TWENTY_FOUR_HOURS_TIME_SLOT_SIZE + 1];
+ for (int index = 0; index < batteryHistoryKeys.length; index++) {
+ batteryHistoryKeys[index] = batteryHistoryKeyList.get(index);
+ }
+
+ final Map<Integer, List<BatteryDiffEntry>> batteryIndexedMap =
+ ConvertUtils.getIndexedUsageMap(
+ context,
+ /*timeSlotSize=*/ TWENTY_FOUR_HOURS_TIME_SLOT_SIZE,
+ batteryHistoryKeys,
+ batteryHistoryMap,
+ /*purgeLowPercentageAndFakeData=*/ true);
+ return batteryIndexedMap.get(BatteryChartViewModel.SELECTED_INDEX_ALL);
+ }
+
+ // TODO: Change this method to fromLastFullCharged.
+
+ /** 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;
+ }
+}
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..493891f
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewModel.java
@@ -0,0 +1,113 @@
+/*
+ * 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 BatteryChartViewV2} */
+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;
+
+ BatteryChartViewModel(
+ @NonNull List<Integer> levels, @NonNull List<String> texts, int selectedIndex,
+ @NonNull AxisLabelPosition axisLabelPosition) {
+ Preconditions.checkArgument(
+ levels.size() == texts.size()
+ && levels.size() >= MIN_LEVELS_DATA_SIZE
+ && selectedIndex >= SELECTED_INDEX_ALL
+ && selectedIndex < levels.size(),
+ String.format(Locale.ENGLISH, "Invalid BatteryChartViewModel"
+ + " levels.size: %d\ntexts.size: %d\nselectedIndex: %d.",
+ levels.size(), texts.size(), selectedIndex));
+ mLevels = levels;
+ mTexts = texts;
+ mSelectedIndex = selectedIndex;
+ mAxisLabelPosition = axisLabelPosition;
+ }
+
+ public int size() {
+ return mLevels.size();
+ }
+
+ public List<Integer> levels() {
+ return mLevels;
+ }
+
+ public List<String> texts() {
+ return mTexts;
+ }
+
+ public int selectedIndex() {
+ return mSelectedIndex;
+ }
+
+ public void setSelectedIndex(int index) {
+ mSelectedIndex = index;
+ }
+
+ public AxisLabelPosition axisLabelPosition() {
+ return mAxisLabelPosition;
+ }
+
+ @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)
+ && mSelectedIndex == batteryChartViewModel.mSelectedIndex
+ && mAxisLabelPosition == batteryChartViewModel.mAxisLabelPosition;
+ }
+
+ @Override
+ public String toString() {
+ return String.format(Locale.ENGLISH,
+ "levels: %s\ntexts: %s\nselectedIndex: %d, axisLabelPosition: %s",
+ Objects.toString(mLevels), Objects.toString(mTexts), mSelectedIndex,
+ mAxisLabelPosition);
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewV2.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewV2.java
new file mode 100644
index 0000000..bbe1a8f
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewV2.java
@@ -0,0 +1,654 @@
+/*
+ * 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.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+/** A widget component to draw chart graph. */
+public class BatteryChartViewV2 extends AppCompatImageView implements View.OnClickListener,
+ AccessibilityManager.AccessibilityStateChangeListener {
+ private static final String TAG = "BatteryChartViewV2";
+ 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;
+ private static final Map<Integer, Integer[]> MODEL_SIZE_TO_LABEL_INDEXES_MAP =
+ buildModelSizeToLabelIndexesMap();
+
+ /** 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();
+ private Integer[] mLabelsIndexes;
+
+ @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 Rect[] mAxisLabelsBounds = initializeAxisLabelsBounds();
+
+ @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 BatteryChartViewV2.OnSelectListener mOnSelectListener;
+
+ public BatteryChartViewV2(Context context) {
+ super(context, null);
+ }
+
+ public BatteryChartViewV2(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;
+ mLabelsIndexes = MODEL_SIZE_TO_LABEL_INDEXES_MAP.get(mViewModel.size());
+ initializeTrapezoidSlots(viewModel.size() - 1);
+ setClickable(hasAnyValidTrapezoid(viewModel));
+ requestLayout();
+ }
+
+ /** Sets the callback to monitor the selected group index. */
+ public void setOnSelectListener(BatteryChartViewV2.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();
+ }
+
+ @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 (mViewModel != null) {
+ int maxHeight = 0;
+ for (int index = 0; index < mLabelsIndexes.length; index++) {
+ final String text = getAxisLabelText(index);
+ mTextPaint.getTextBounds(text, 0, text.length(), mAxisLabelsBounds[index]);
+ maxHeight = Math.max(maxHeight, mAxisLabelsBounds[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);
+ // 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) {
+ 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 = 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[] xOffsets = new float[mLabelsIndexes.length];
+ final float baselineX = mDividerWidth * .5f;
+ final float offsetX = mDividerWidth + unitWidth;
+ for (int index = 0; index < mLabelsIndexes.length; index++) {
+ xOffsets[index] = baselineX + mLabelsIndexes[index] * offsetX;
+ }
+ switch (mViewModel.axisLabelPosition()) {
+ case CENTER_OF_TRAPEZOIDS:
+ drawAxisLabelsCenterOfTrapezoids(canvas, xOffsets, unitWidth);
+ break;
+ case BETWEEN_TRAPEZOIDS:
+ default:
+ drawAxisLabelsBetweenTrapezoids(canvas, xOffsets);
+ break;
+ }
+ }
+ }
+
+ private void drawAxisLabelsBetweenTrapezoids(Canvas canvas, float[] xOffsets) {
+ // Draws the 1st axis label info.
+ canvas.drawText(
+ getAxisLabelText(0), xOffsets[0] - mAxisLabelsBounds[0].left, getAxisLabelY(0),
+ mTextPaint);
+ final int latestIndex = mLabelsIndexes.length - 1;
+ // Draws the last axis label info.
+ canvas.drawText(
+ getAxisLabelText(latestIndex),
+ xOffsets[latestIndex]
+ - mAxisLabelsBounds[latestIndex].width()
+ - mAxisLabelsBounds[latestIndex].left,
+ getAxisLabelY(latestIndex),
+ mTextPaint);
+ // Draws the rest of axis label info since it is located in the center.
+ for (int index = 1; index <= mLabelsIndexes.length - 2; index++) {
+ canvas.drawText(
+ getAxisLabelText(index),
+ xOffsets[index]
+ - (mAxisLabelsBounds[index].width() - mAxisLabelsBounds[index].left)
+ * .5f,
+ getAxisLabelY(index),
+ mTextPaint);
+ }
+ }
+
+ private void drawAxisLabelsCenterOfTrapezoids(
+ Canvas canvas, float[] xOffsets, float unitWidth) {
+ for (int index = 0; index < mLabelsIndexes.length - 1; index++) {
+ canvas.drawText(
+ getAxisLabelText(index),
+ xOffsets[index] + (unitWidth - (mAxisLabelsBounds[index].width()
+ - mAxisLabelsBounds[index].left)) * .5f,
+ getAxisLabelY(index),
+ mTextPaint);
+ }
+ }
+
+ private int getAxisLabelY(int index) {
+ return getHeight()
+ - mAxisLabelsBounds[index].height()
+ + (mAxisLabelsBounds[index].height() + mAxisLabelsBounds[index].top)
+ + round(mTextPadding * 1.5f);
+ }
+
+ 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;
+ 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 String getAxisLabelText(int labelIndex) {
+ return mViewModel.texts().get(mLabelsIndexes[labelIndex]);
+ }
+
+ 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;
+ }
+
+ private static Map<Integer, Integer[]> buildModelSizeToLabelIndexesMap() {
+ final Map<Integer, Integer[]> result = new HashMap<>();
+ result.put(2, new Integer[]{0, 1});
+ result.put(3, new Integer[]{0, 1, 2});
+ result.put(4, new Integer[]{0, 1, 2, 3});
+ result.put(5, new Integer[]{0, 1, 2, 3, 4});
+ result.put(6, new Integer[]{0, 1, 2, 3, 4, 5});
+ result.put(7, new Integer[]{0, 1, 2, 3, 4, 5, 6});
+ result.put(8, new Integer[]{0, 1, 2, 3, 4, 5, 6, 7});
+ result.put(9, new Integer[]{0, 2, 4, 6, 8});
+ result.put(10, new Integer[]{0, 3, 6, 9});
+ result.put(11, new Integer[]{0, 5, 10});
+ result.put(12, new Integer[]{0, 4, 7, 11});
+ result.put(13, new Integer[]{0, 4, 8, 12});
+ return result;
+ }
+
+ private static Rect[] initializeAxisLabelsBounds() {
+ final int maxLabelsLength = MODEL_SIZE_TO_LABEL_INDEXES_MAP.values().stream().max(
+ Comparator.comparingInt(indexes -> indexes.length)).get().length;
+ final Rect[] bounds = new Rect[maxLabelsLength];
+ for (int i = 0; i < maxLabelsLength; i++) {
+ bounds[i] = new Rect();
+ }
+ return bounds;
+ }
+
+ // 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/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/batteryusage/BatteryDiffEntry.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java
index 8b995c8..d4d7a00 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntry.java
@@ -113,6 +113,9 @@
/** 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
@@ -122,6 +125,9 @@
/** 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()
@@ -156,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:
@@ -175,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;
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/batteryusage/ConvertUtils.java b/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java
index 76f9419..b89bfe6 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java
@@ -21,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;
@@ -28,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;
@@ -137,7 +140,7 @@
/** 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
@@ -146,6 +149,13 @@
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 Locale locale = getLocale(context);
+ final String pattern = DateFormat.getBestDateTimePattern(locale, "E");
+ return DateFormat.format(pattern, timestamp).toString().toUpperCase(locale);
+ }
+
/** Gets indexed battery usage data for each corresponding time slot. */
public static Map<Integer, List<BatteryDiffEntry>> getIndexedUsageMap(
final Context context,
@@ -265,17 +275,55 @@
}
}
insert24HoursData(BatteryChartView.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) {
@@ -361,4 +409,22 @@
return locales != null && !locales.isEmpty() ? locales.get(0)
: 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..a51fbec
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
@@ -0,0 +1,1030 @@
+/*
+ * 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;
+ // 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 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) < 5 * 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).get(SELECTED_INDEX_ALL) == null) {
+ 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/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/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index 8e14c5a..bad4a19 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -68,6 +68,8 @@
import com.android.settingslib.Utils;
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
+import com.google.android.setupcompat.util.WizardManagerHelper;
+
import java.net.URISyntaxException;
import java.util.Set;
@@ -219,7 +221,9 @@
}, R.id.main_content);
// Launch the intent from deep link for large screen devices.
- launchDeepLinkIntentToRight();
+ if (shouldLaunchDeepLinkIntentToRight()) {
+ launchDeepLinkIntentToRight();
+ }
updateHomepagePaddings();
updateSplitLayout();
}
@@ -242,7 +246,9 @@
return;
}
// Launch the intent from deep link for large screen devices.
- launchDeepLinkIntentToRight();
+ if (shouldLaunchDeepLinkIntentToRight()) {
+ launchDeepLinkIntentToRight();
+ }
}
@Override
@@ -390,17 +396,18 @@
return showFragment;
}
+ private boolean shouldLaunchDeepLinkIntentToRight() {
+ if (!FeatureFlagUtils.isEnabled(this, FeatureFlagUtils.SETTINGS_SUPPORT_LARGE_SCREEN)
+ || !SplitController.getInstance().isSplitSupported()) {
+ return false;
+ }
+
+ Intent intent = getIntent();
+ return intent != null && TextUtils.equals(intent.getAction(),
+ ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY);
+ }
+
private void launchDeepLinkIntentToRight() {
- if (!mIsEmbeddingActivityEnabled) {
- return;
- }
-
- final Intent intent = getIntent();
- if (intent == null || !TextUtils.equals(intent.getAction(),
- ACTION_SETTINGS_EMBED_DEEP_LINK_ACTIVITY)) {
- return;
- }
-
if (!(this instanceof DeepLinkHomepageActivity
|| this instanceof DeepLinkHomepageActivityInternal)) {
Log.e(TAG, "Not a deep link component");
@@ -408,6 +415,13 @@
return;
}
+ if (!WizardManagerHelper.isUserSetupComplete(this)) {
+ Log.e(TAG, "Cancel deep link before SUW completed");
+ finish();
+ return;
+ }
+
+ final Intent intent = getIntent();
final String intentUriString = intent.getStringExtra(
EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI);
if (TextUtils.isEmpty(intentUriString)) {
diff --git a/src/com/android/settings/homepage/TopLevelHighlightMixin.java b/src/com/android/settings/homepage/TopLevelHighlightMixin.java
index 4718443..9d727a5 100644
--- a/src/com/android/settings/homepage/TopLevelHighlightMixin.java
+++ b/src/com/android/settings/homepage/TopLevelHighlightMixin.java
@@ -23,6 +23,7 @@
import android.text.TextUtils;
import android.util.Log;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;
import androidx.recyclerview.widget.RecyclerView;
@@ -140,7 +141,8 @@
}
}
- String getHighlightPreferenceKey() {
+ @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE)
+ public String getHighlightPreferenceKey() {
return mCurrentKey;
}
diff --git a/src/com/android/settings/homepage/TopLevelSettings.java b/src/com/android/settings/homepage/TopLevelSettings.java
index 70530fc..b445123 100644
--- a/src/com/android/settings/homepage/TopLevelSettings.java
+++ b/src/com/android/settings/homepage/TopLevelSettings.java
@@ -30,6 +30,7 @@
import android.view.LayoutInflater;
import android.view.ViewGroup;
+import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
@@ -72,6 +73,13 @@
setArguments(args);
}
+ /** Dependency injection ctor only for testing. */
+ @VisibleForTesting
+ public TopLevelSettings(TopLevelHighlightMixin highlightMixin) {
+ this();
+ mHighlightMixin = highlightMixin;
+ }
+
@Override
protected int getPreferenceScreenResId() {
return R.xml.top_level_settings;
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index 43b3cc0..2525fbd 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -239,8 +239,8 @@
void setPreferenceEntries() {
mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId);
final PersistableBundle carrierConfig = mCarrierConfigCache.getConfigForSubId(mSubId);
- final boolean display2gOptions = carrierConfig
- .getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL);
+ final boolean display2gOptions = carrierConfig != null
+ && carrierConfig.getBoolean(CarrierConfigManager.KEY_PREFER_2G_BOOL);
clearAllEntries();
UiOptions.Builder uiOptions = UiOptions.newBuilder();
uiOptions.setType(getEnabledNetworkType());
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index e769a4e..548ce28 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -213,7 +213,7 @@
return false;
}
PersistableBundle bundle = carrierConfigCache.getConfigForSubId(subId);
- return bundle.getBoolean(
+ return bundle == null ? false : bundle.getBoolean(
CarrierConfigManager.KEY_USE_RCS_PRESENCE_BOOL, false /*default*/)
|| bundle.getBoolean(CarrierConfigManager.Ims.KEY_RCS_BULK_CAPABILITY_EXCHANGE_BOOL,
false /*default*/);
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/network/telephony/NetworkScanHelper.java b/src/com/android/settings/network/telephony/NetworkScanHelper.java
index e0a9c5e..1961329 100644
--- a/src/com/android/settings/network/telephony/NetworkScanHelper.java
+++ b/src/com/android/settings/network/telephony/NetworkScanHelper.java
@@ -17,6 +17,7 @@
package com.android.settings.network.telephony;
import android.annotation.IntDef;
+import android.content.Context;
import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.CellInfo;
import android.telephony.NetworkScan;
@@ -31,6 +32,8 @@
import com.android.internal.telephony.CellNetworkScanResult;
+import com.android.settings.R;
+
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
@@ -129,6 +132,7 @@
private final TelephonyScanManager.NetworkScanCallback mInternalNetworkScanCallback;
private final Executor mExecutor;
+ private int mMaxSearchTimeSec = MAX_SEARCH_TIME_SEC;
private NetworkScan mNetworkScanRequester;
/** Callbacks for sync network scan */
@@ -141,6 +145,13 @@
mExecutor = executor;
}
+ public NetworkScanHelper(Context context, TelephonyManager tm, NetworkScanCallback callback,
+ Executor executor) {
+ this(tm, callback, executor);
+ mMaxSearchTimeSec = context.getResources().getInteger(
+ R.integer.config_network_scan_helper_max_search_time_sec);
+ }
+
@VisibleForTesting
NetworkScanRequest createNetworkScanForPreferredAccessNetworks() {
long networkTypeBitmap3gpp = mTelephonyManager.getPreferredNetworkTypeBitmask()
@@ -183,7 +194,7 @@
radioAccessSpecifiers.toArray(
new RadioAccessSpecifier[radioAccessSpecifiers.size()]),
SEARCH_PERIODICITY_SEC,
- MAX_SEARCH_TIME_SEC,
+ mMaxSearchTimeSec,
INCREMENTAL_RESULTS,
INCREMENTAL_RESULTS_PERIODICITY_SEC,
null /* List of PLMN ids (MCC-MNC) */);
diff --git a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java
index c509bac..391158f 100644
--- a/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java
+++ b/src/com/android/settings/network/telephony/SubscriptionActionDialogActivity.java
@@ -60,8 +60,20 @@
* @param message The string content should be displayed in the progress dialog.
*/
protected void showProgressDialog(String message) {
+ showProgressDialog(message,false);
+ }
+
+ /**
+ * Displays a loading dialog.
+ *
+ * @param message The string content should be displayed in the progress dialog.
+ * @param updateIfNeeded is whether to update the progress state in the SharedPreferences.
+ */
+ protected void showProgressDialog(String message, boolean updateIfNeeded) {
ProgressDialogFragment.show(getFragmentManager(), message, null);
- setProgressState(PROGRESS_IS_SHOWING);
+ if (updateIfNeeded) {
+ setProgressState(PROGRESS_IS_SHOWING);
+ }
}
/** Dismisses the loading dialog. */
diff --git a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
index f5f18b4..a878cb3 100644
--- a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
+++ b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
@@ -220,8 +220,8 @@
showProgressDialog(
getString(
R.string.sim_action_switch_sub_dialog_progress,
- SubscriptionUtil.getUniqueSubscriptionDisplayName(
- mSubInfo, this)));
+ SubscriptionUtil.getUniqueSubscriptionDisplayName(mSubInfo, this)),
+ removedSubInfo != null ? true : false);
if (mIsEsimOperation) {
mSwitchToEuiccSubscriptionSidecar.run(mSubInfo.getSubscriptionId(),
UiccSlotUtil.INVALID_PORT_ID,
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/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/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/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/vpn2/AdvancedVpnFeatureProvider.java b/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java
index cb56c35..962b6c2 100644
--- a/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java
+++ b/src/com/android/settings/vpn2/AdvancedVpnFeatureProvider.java
@@ -47,4 +47,9 @@
* 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
index c5bc69c..b8f58a9 100644
--- a/src/com/android/settings/vpn2/AdvancedVpnFeatureProviderImpl.java
+++ b/src/com/android/settings/vpn2/AdvancedVpnFeatureProviderImpl.java
@@ -46,4 +46,9 @@
public boolean isAdvancedVpnRemovable() {
return true;
}
+
+ @Override
+ public boolean isDisconnectDialogEnabled() {
+ return true;
+ }
}
diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java
index 4380595..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;
@@ -365,7 +366,7 @@
public void setShownPreferences(final Collection<Preference> updates) {
retainAllPreference(updates);
- final PreferenceGroup vpnGroup = getPreferenceScreen();
+ final PreferenceGroup vpnGroup = mPreferenceScreen;
updatePreferenceGroup(vpnGroup, updates);
// Show all new preferences on the screen
@@ -447,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;
@@ -534,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());
@@ -593,6 +619,19 @@
profileIds = Collections.singleton(UserHandle.myUserId());
}
+ 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) {
@@ -602,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()) {
@@ -610,7 +652,7 @@
allowed = true;
}
}
- if (allowed || isAdvancedVpn(featureProvider, pkg.getPackageName(), context)) {
+ if (allowed) {
result.add(new AppVpnInfo(userId, pkg.getPackageName()));
}
}
diff --git a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
index c2b3fa0..675e10f 100644
--- a/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
+++ b/src/com/android/settings/wallpaper/WallpaperSuggestionActivity.java
@@ -84,7 +84,7 @@
ComponentName component = controller.getComponentName();
data.intentTargetPackage = component.getPackageName();
data.intentTargetClass = component.getClassName();
- data.intentAction = Intent.ACTION_MAIN;
+ data.intentAction = controller.getComponentActionName();
data.key = SUPPORT_SEARCH_INDEX_KEY;
data.keywords = controller.getKeywords();
result.add(data);
diff --git a/src/com/android/settings/widget/SeekBarPreference.java b/src/com/android/settings/widget/SeekBarPreference.java
index e4a37e3..30884ee 100644
--- a/src/com/android/settings/widget/SeekBarPreference.java
+++ b/src/com/android/settings/widget/SeekBarPreference.java
@@ -64,6 +64,7 @@
private CharSequence mOverrideSeekBarStateDescription;
private CharSequence mSeekBarContentDescription;
private CharSequence mSeekBarStateDescription;
+ private OnSeekBarChangeListener mOnSeekBarChangeListener;
public SeekBarPreference(
Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
@@ -101,6 +102,14 @@
this(context, null);
}
+ /**
+ * A callback that notifies clients when the seekbar progress level has been
+ * changed. See {@link OnSeekBarChangeListener} for more info.
+ */
+ public void setOnSeekBarChangeListener(OnSeekBarChangeListener listener) {
+ mOnSeekBarChangeListener = listener;
+ }
+
public void setShouldBlink(boolean shouldBlink) {
mShouldBlink = shouldBlink;
notifyChanged();
@@ -301,6 +310,9 @@
if (fromUser && (mContinuousUpdates || !mTrackingTouch)) {
syncProgress(seekBar);
}
+ if (mOnSeekBarChangeListener != null) {
+ mOnSeekBarChangeListener.onProgressChanged(seekBar, progress, fromUser);
+ }
}
@Override
@@ -309,6 +321,9 @@
mJankMonitor.begin(InteractionJankMonitor.Configuration.Builder
.withView(CUJ_SETTINGS_SLIDER, seekBar)
.setTag(getKey()));
+ if (mOnSeekBarChangeListener != null) {
+ mOnSeekBarChangeListener.onStartTrackingTouch(seekBar);
+ }
}
@Override
@@ -317,6 +332,9 @@
if (seekBar.getProgress() != mProgress) {
syncProgress(seekBar);
}
+ if (mOnSeekBarChangeListener != null) {
+ mOnSeekBarChangeListener.onStopTrackingTouch(seekBar);
+ }
mJankMonitor.end(CUJ_SETTINGS_SLIDER);
}
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/WifiDialogActivity.java b/src/com/android/settings/wifi/WifiDialogActivity.java
index 8a46c9d..e3e77e8 100644
--- a/src/com/android/settings/wifi/WifiDialogActivity.java
+++ b/src/com/android/settings/wifi/WifiDialogActivity.java
@@ -19,6 +19,7 @@
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;
@@ -51,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;
@@ -96,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;
@@ -108,6 +112,7 @@
private NetworkDetailsTracker mNetworkDetailsTracker;
private HandlerThread mWorkerThread;
private WifiManager mWifiManager;
+ private LockScreenMonitor mLockScreenMonitor;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -184,6 +189,10 @@
mDialog.setOnDismissListener(this);
}
}
+
+ if (mDialog2 != null || mDialog != null) {
+ mLockScreenMonitor = new LockScreenMonitor(this);
+ }
}
@VisibleForTesting
@@ -221,6 +230,10 @@
}
}
+ if (mLockScreenMonitor != null) {
+ mLockScreenMonitor.release();
+ mLockScreenMonitor = null;
+ }
super.onDestroy();
}
@@ -411,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/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/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFragmentTest.java
index e34767e..1051483 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityButtonFragmentTest.java
@@ -24,6 +24,7 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
@@ -71,6 +72,17 @@
}
@Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_BUTTON_SETTINGS);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("AccessibilityButtonFragment");
+ }
+
+ @Test
public void onCreate_navigationGestureEnabled_setCorrectTitle() {
when(mResources.getInteger(com.android.internal.R.integer.config_navBarInteractionMode))
.thenReturn(NAV_BAR_MODE_GESTURAL);
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragmentTest.java
new file mode 100644
index 0000000..97407bb
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityControlTimeoutPreferenceFragmentTest.java
@@ -0,0 +1,82 @@
+/*
+ * 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.testutils.XmlTestUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+import java.util.List;
+
+/** Tests for {@link AccessibilityControlTimeoutPreferenceFragment}. */
+@RunWith(RobolectricTestRunner.class)
+public class AccessibilityControlTimeoutPreferenceFragmentTest {
+
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private AccessibilityControlTimeoutPreferenceFragment mFragment;
+
+ @Before
+ public void setUp() {
+ mFragment = new AccessibilityControlTimeoutPreferenceFragment();
+ }
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_TIMEOUT);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_control_timeout_settings);
+ }
+
+ @Test
+ public void getHelpResource_returnsCorrectHelpResource() {
+ assertThat(mFragment.getHelpResource()).isEqualTo(R.string.help_url_timeout);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo(
+ "AccessibilityControlTimeoutPreferenceFragment");
+ }
+
+ @Test
+ public void getNonIndexableKeys_existInXmlLayout() {
+ final List<String> niks =
+ AccessibilityControlTimeoutPreferenceFragment.SEARCH_INDEX_DATA_PROVIDER
+ .getNonIndexableKeys(mContext);
+ final List<String> keys =
+ XmlTestUtils.getKeysFromPreferenceXml(mContext,
+ R.xml.accessibility_control_timeout_settings);
+
+ assertThat(keys).containsAtLeastElementsIn(niks);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragmentTest.java
index b0efbcb..605c258 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityDetailsSettingsFragmentTest.java
@@ -28,6 +28,7 @@
import static org.mockito.Mockito.verify;
import android.accessibilityservice.AccessibilityServiceInfo;
+import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -60,6 +61,7 @@
import java.util.ArrayList;
import java.util.List;
+/** Tests for {@link AccessibilityDetailsSettingsFragment}. */
@Config(shadows = ShadowFragment.class)
@RunWith(RobolectricTestRunner.class)
public class AccessibilityDetailsSettingsFragmentTest {
@@ -169,6 +171,12 @@
AccessibilityButtonFragment.class.getName());
}
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_DETAILS_SETTINGS);
+ }
+
private AccessibilityServiceInfo getMockAccessibilityServiceInfo() {
final ApplicationInfo applicationInfo = new ApplicationInfo();
final ServiceInfo serviceInfo = new ServiceInfo();
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
index ceb630c..81cd864 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityGestureNavigationTutorialTest.java
@@ -18,6 +18,7 @@
import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.createAccessibilityTutorialDialog;
import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.createShortcutTutorialPages;
+import static com.android.settings.accessibility.AccessibilityGestureNavigationTutorial.showGestureNavigationTutorialDialog;
import static com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
import static com.google.common.truth.Truth.assertThat;
@@ -55,10 +56,10 @@
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
-
@Mock
- private DialogInterface.OnClickListener mMockOnClickListener;
-
+ private DialogInterface.OnClickListener mOnClickListener;
+ @Mock
+ private DialogInterface.OnDismissListener mOnDismissListener;
private final Context mContext = ApplicationProvider.getApplicationContext();
private int mShortcutTypes;
@@ -126,12 +127,12 @@
public void performClickOnPositiveButton_turnOnSoftwareShortcut_callOnClickListener() {
mShortcutTypes |= UserShortcutType.SOFTWARE;
final AlertDialog alertDialog =
- createAccessibilityTutorialDialog(mContext, mShortcutTypes, mMockOnClickListener);
+ createAccessibilityTutorialDialog(mContext, mShortcutTypes, mOnClickListener);
alertDialog.show();
alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
- verify(mMockOnClickListener).onClick(alertDialog, DialogInterface.BUTTON_POSITIVE);
+ verify(mOnClickListener).onClick(alertDialog, DialogInterface.BUTTON_POSITIVE);
}
@Test
@@ -139,7 +140,7 @@
mShortcutTypes |= UserShortcutType.SOFTWARE;
Activity activity = Robolectric.buildActivity(Activity.class).create().get();
final AlertDialog alertDialog =
- createAccessibilityTutorialDialog(activity, mShortcutTypes, mMockOnClickListener);
+ createAccessibilityTutorialDialog(activity, mShortcutTypes, mOnClickListener);
alertDialog.show();
alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();
@@ -151,4 +152,15 @@
assertThat(intent.getIntExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY, -1))
.isEqualTo(SettingsEnums.SWITCH_SHORTCUT_DIALOG_ACCESSIBILITY_BUTTON_SETTINGS);
}
+
+ @Test
+ public void performClickOnPositiveButton_turnOnGestureShortcut_callOnDismissListener() {
+ final AlertDialog alertDialog =
+ showGestureNavigationTutorialDialog(mContext, mOnDismissListener);
+
+ alertDialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
+
+ assertThat(alertDialog.isShowing()).isFalse();
+ verify(mOnDismissListener).onDismiss(alertDialog);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest.java
index 89c9120..deab745 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityQuickSettingsPrimarySwitchPreferenceControllerTest.java
@@ -118,18 +118,29 @@
mController = new TestAccessibilityQuickSettingsPrimarySwitchPreferenceController(mContext,
TEST_KEY);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- mController.displayPreference(mScreen);
}
@Test
public void setChecked_showTooltipView() {
+ mController.displayPreference(mScreen);
+
mController.setChecked(true);
assertThat(getLatestPopupWindow().isShowing()).isTrue();
}
@Test
+ public void setChecked_notCallDisplayPreference_notShowTooltipView() {
+ // Simulates the slice highlight menu that does not call {@link #displayPreference} before
+ // {@link #setChecked} called.
+ mController.setChecked(true);
+
+ assertThat(getLatestPopupWindow()).isNull();
+ }
+
+ @Test
public void setChecked_tooltipViewShown_notShowTooltipView() {
+ mController.displayPreference(mScreen);
mController.setChecked(true);
getLatestPopupWindow().dismiss();
mController.setChecked(false);
@@ -142,6 +153,7 @@
@Test
@Config(shadows = ShadowFragment.class)
public void restoreValueFromSavedInstanceState_showTooltipView() {
+ mController.displayPreference(mScreen);
mController.setChecked(true);
final Bundle savedInstanceState = new Bundle();
savedInstanceState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, /* value= */ true);
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutControllerTest.java
index fc9fefb..9f0b046 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutControllerTest.java
@@ -18,8 +18,6 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -27,59 +25,57 @@
import android.content.Context;
import android.provider.Settings;
-import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
-import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
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.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
+/** Tests for {@link AccessibilityTimeoutController}. */
@RunWith(RobolectricTestRunner.class)
-public class AccessibilityTimeoutControllerTest
- implements AccessibilityTimeoutController.OnChangeListener {
+public class AccessibilityTimeoutControllerTest {
+
private static final String PREF_KEY = "accessibility_control_timeout_30secs";
- private AccessibilityTimeoutController mController;
-
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@Mock
private SelectorWithWidgetPreference mMockPref;
- private Context mContext;
- private ContentResolver mContentResolver;
-
@Mock
private PreferenceScreen mScreen;
+ @Mock
+ private AccessibilitySettingsContentObserver mAccessibilitySettingsContentObserver;
+ private Context mContext = ApplicationProvider.getApplicationContext();
+ private ContentResolver mContentResolver;
+ private AccessibilityTimeoutController mController;
@Before
public void setup() {
- MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
- mController = new AccessibilityTimeoutController(mContext, mock(Lifecycle.class), PREF_KEY);
- mController.setOnChangeListener(this);
mContentResolver = mContext.getContentResolver();
- String prefTitle = mContext.getResources().getString(R.string.accessibility_timeout_30secs);
-
+ mController = new AccessibilityTimeoutController(mContext, PREF_KEY,
+ mAccessibilitySettingsContentObserver);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mMockPref);
when(mMockPref.getKey()).thenReturn(PREF_KEY);
+ final String prefTitle =
+ mContext.getResources().getString(R.string.accessibility_timeout_30secs);
when(mMockPref.getTitle()).thenReturn(prefTitle);
mController.displayPreference(mScreen);
}
- @Override
- public void onCheckedChanged(Preference preference) {
- mController.updateState(preference);
- }
-
@Test
- public void isAvailable() {
- assertTrue(mController.isAvailable());
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(
+ BasePreferenceController.AVAILABLE);
}
@Test
@@ -115,4 +111,18 @@
assertThat(accessibilityUiTimeoutValue).isEqualTo("30000");
}
+
+ @Test
+ public void onStart_registerSpecificContentObserverForSpecificKeys() {
+ mController.onStart();
+
+ verify(mAccessibilitySettingsContentObserver).register(mContentResolver);
+ }
+
+ @Test
+ public void onStop_unregisterContentObserver() {
+ mController.onStop();
+
+ verify(mAccessibilitySettingsContentObserver).unregister(mContentResolver);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutPreferenceControllerTest.java
index 50f311e..1e0dbf2 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutPreferenceControllerTest.java
@@ -21,6 +21,8 @@
import android.content.Context;
import android.provider.Settings;
+import androidx.test.core.app.ApplicationProvider;
+
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
@@ -28,17 +30,16 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
+/** Tests for {@link AccessibilityTimeoutPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
public class AccessibilityTimeoutPreferenceControllerTest {
- private Context mContext;
+ private Context mContext = ApplicationProvider.getApplicationContext();
private AccessibilityTimeoutPreferenceController mController;
@Before
public void setUp() {
- mContext = RuntimeEnvironment.application;
mController = new AccessibilityTimeoutPreferenceController(mContext, "control_timeout");
}
@@ -50,31 +51,31 @@
@Test
public void getSummary_byDefault_shouldReturnDefaultSummary() {
- final String[] timeoutSummarys = mContext.getResources().getStringArray(
+ final String[] timeoutSummaries = mContext.getResources().getStringArray(
R.array.accessibility_timeout_summaries);
Settings.Secure.putString(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, "0");
- assertThat(mController.getSummary()).isEqualTo(timeoutSummarys[0]);
+ assertThat(mController.getSummary().toString()).isEqualTo(timeoutSummaries[0]);
}
@Test
public void getSummary_invalidTimeout_shouldReturnDefaultSummary() {
- final String[] timeoutSummarys = mContext.getResources().getStringArray(
+ final String[] timeoutSummaries = mContext.getResources().getStringArray(
R.array.accessibility_timeout_summaries);
Settings.Secure.putString(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, "invalid_timeout");
- assertThat(mController.getSummary()).isEqualTo(timeoutSummarys[0]);
+ assertThat(mController.getSummary().toString()).isEqualTo(timeoutSummaries[0]);
}
@Test
public void getSummary_validTimeout_shouldReturnValidSummary() {
- final String[] timeoutSummarys = mContext.getResources().getStringArray(
+ final String[] timeoutSummaries = mContext.getResources().getStringArray(
R.array.accessibility_timeout_summaries);
Settings.Secure.putString(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, "60000");
- assertThat(mController.getSummary()).isEqualTo(timeoutSummarys[3]);
+ assertThat(mController.getSummary().toString()).isEqualTo(timeoutSummaries[3]);
}
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutUtilsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutUtilsTest.java
new file mode 100644
index 0000000..4443162
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityTimeoutUtilsTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link AccessibilityTimeoutUtils}. */
+@RunWith(RobolectricTestRunner.class)
+public final class AccessibilityTimeoutUtilsTest {
+
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+
+ @Test
+ public void getSecureAccessibilityTimeoutValue_byDefault_shouldReturnDefaultValue() {
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, "0");
+
+ final int timeOutValue = AccessibilityTimeoutUtils.getSecureAccessibilityTimeoutValue(
+ mContext.getContentResolver());
+ assertThat(timeOutValue).isEqualTo(0);
+ }
+
+ @Test
+ public void getSecureAccessibilityTimeoutValue_invalidTimeout_shouldReturnDefaultValue() {
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, "invalid_timeout");
+
+ final int timeOutValue = AccessibilityTimeoutUtils.getSecureAccessibilityTimeoutValue(
+ mContext.getContentResolver());
+ assertThat(timeOutValue).isEqualTo(0);
+ }
+
+ @Test
+ public void getSecureAccessibilityTimeoutValue_validTimeout_shouldReturnValidValue() {
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_INTERACTIVE_UI_TIMEOUT_MS, "60000");
+
+ final int timeOutValue = AccessibilityTimeoutUtils.getSecureAccessibilityTimeoutValue(
+ mContext.getContentResolver());
+ assertThat(timeOutValue).isEqualTo(60000);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AudioAdjustmentFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AudioAdjustmentFragmentTest.java
index 814736d..6eec3a9 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AudioAdjustmentFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AudioAdjustmentFragmentTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
@@ -25,6 +26,7 @@
import com.android.settings.R;
import com.android.settings.testutils.XmlTestUtils;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -35,7 +37,30 @@
@RunWith(RobolectricTestRunner.class)
public class AudioAdjustmentFragmentTest {
- private Context mContext = ApplicationProvider.getApplicationContext();
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private AudioAdjustmentFragment mFragment;
+
+ @Before
+ public void setUp() {
+ mFragment = new AudioAdjustmentFragment();
+ }
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_AUDIO_ADJUSTMENT);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_audio_adjustment);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("AudioAdjustmentFragment");
+ }
@Test
public void getNonIndexableKeys_existInXmlLayout() {
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionHelperTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptionHelperTest.java
new file mode 100644
index 0000000..c1a1799
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptionHelperTest.java
@@ -0,0 +1,185 @@
+/*
+ * 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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+import android.view.View;
+import android.view.accessibility.CaptioningManager;
+import android.view.accessibility.CaptioningManager.CaptionStyle;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.internal.widget.SubtitleView;
+import com.android.settings.R;
+
+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 java.util.Locale;
+
+/** Tests for {@link CaptionHelper}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptionHelperTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private CaptioningManager mCaptioningManager;
+ @Mock
+ private SubtitleView mSubtitleView;
+ @Mock
+ private View mPreviewWindow;
+ @Spy
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private ContentResolver mContentResolver;
+ private CaptionHelper mCaptionHelper;
+
+ @Before
+ public void setUp() {
+ when(mContext.getSystemService(CaptioningManager.class)).thenReturn(mCaptioningManager);
+ mCaptionHelper = new CaptionHelper(mContext);
+ mContentResolver = mContext.getContentResolver();
+ }
+
+ @Test
+ public void applyCaptionProperties_verifyAction() {
+ final float fontScale = 1.0f;
+ when(mCaptioningManager.getFontScale()).thenReturn(fontScale);
+ final int windowSize = 100;
+ when(mPreviewWindow.getWidth()).thenReturn(windowSize);
+ when(mPreviewWindow.getHeight()).thenReturn(windowSize);
+ final float textSize = CaptionHelper.LINE_HEIGHT_RATIO * windowSize * fontScale;
+
+ mCaptionHelper.applyCaptionProperties(mSubtitleView, mPreviewWindow, /* styleId= */ 0);
+
+ verify(mSubtitleView).setTextSize(textSize);
+ verify(mSubtitleView).setText(R.string.captioning_preview_characters);
+ }
+
+ @Test
+ public void applyCaptionProperties_withoutPreviewWindow_verifyAction() {
+ final float fontScale = 1.0f;
+ when(mCaptioningManager.getFontScale()).thenReturn(fontScale);
+ final float textSize = mContext.getResources().getDimension(
+ R.dimen.captioning_preview_text_size) * fontScale;
+
+ mCaptionHelper.applyCaptionProperties(mSubtitleView, /* PreviewWindow= */ null,
+ /* styleId= */ 0);
+
+ verify(mSubtitleView).setTextSize(textSize);
+ verify(mSubtitleView).setText(R.string.captioning_preview_characters);
+ }
+
+ @Test
+ public void applyCaptionProperties_localeUS_verifyAction() {
+ when(mCaptioningManager.getLocale()).thenReturn(Locale.US);
+ final String text = mContext.getString(R.string.captioning_preview_characters);
+
+ mCaptionHelper.applyCaptionProperties(mSubtitleView, /* PreviewWindow= */ null,
+ /* styleId= */ 0);
+
+ verify(mSubtitleView).setText(text);
+ }
+
+ @Test
+ public void enableCaptioningManager_shouldSetCaptionEnabled() {
+ when(mCaptioningManager.isEnabled()).thenReturn(false);
+
+ mCaptionHelper.setEnabled(true);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+
+ @Test
+ public void disableCaptioningManager_shouldSetCaptionDisabled() {
+ when(mCaptioningManager.isEnabled()).thenReturn(true);
+
+ mCaptionHelper.setEnabled(false);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isFalse();
+ }
+
+ @Test
+ public void setBackgroundColor_shouldReturnSpecificColor() {
+ mCaptionHelper.setBackgroundColor(0xFFFF0000);
+
+ final int backgroundColor = mCaptionHelper.getBackgroundColor();
+ assertThat(backgroundColor).isEqualTo(0xFFFF0000);
+ }
+
+ @Test
+ public void setForegroundColor_shouldReturnSpecificColor() {
+ mCaptionHelper.setForegroundColor(0xFFFF0000);
+
+ final int foregroundColor = mCaptionHelper.getForegroundColor();
+ assertThat(foregroundColor).isEqualTo(0xFFFF0000);
+ }
+
+ @Test
+ public void setWindowColor_shouldReturnSpecificColor() {
+ mCaptionHelper.setWindowColor(0xFFFF0000);
+
+ final int windowColor = mCaptionHelper.getWindowColor();
+ assertThat(windowColor).isEqualTo(0xFFFF0000);
+ }
+
+ @Test
+ public void setEdgeColor_shouldReturnSpecificColor() {
+ mCaptionHelper.setEdgeColor(0xFFFF0000);
+
+ final int edgeColor = mCaptionHelper.getEdgeColor();
+ assertThat(edgeColor).isEqualTo(0xFFFF0000);
+ }
+
+ @Test
+ public void setEdgeType_shouldReturnSpecificType() {
+ mCaptionHelper.setEdgeType(CaptionStyle.EDGE_TYPE_OUTLINE);
+
+ final int edgeType = mCaptionHelper.getEdgeType();
+ assertThat(edgeType).isEqualTo(CaptionStyle.EDGE_TYPE_OUTLINE);
+ }
+
+ @Test
+ public void setRawUserStyle_shouldReturnSpecificStyle() {
+ mCaptionHelper.setRawUserStyle(CaptionStyle.PRESET_CUSTOM);
+
+ final int style = Settings.Secure.getInt(mContentResolver,
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET, 0);
+ assertThat(style).isEqualTo(CaptionStyle.PRESET_CUSTOM);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionUtilsTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptionUtilsTest.java
new file mode 100644
index 0000000..1e0f155
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptionUtilsTest.java
@@ -0,0 +1,80 @@
+/*
+ * 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.graphics.Color;
+import android.view.accessibility.CaptioningManager;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link CaptionUtils}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptionUtilsTest {
+
+ @Test
+ public void parseColor_defaultPackedColor_shouldReturnUnspecified() {
+ final int color = CaptionUtils.parseColor(0xFFFF00);
+
+ assertThat(color).isEqualTo(CaptioningManager.CaptionStyle.COLOR_UNSPECIFIED);
+ }
+
+ @Test
+ public void parseColor_unrecognizedColor_shouldReturnTransparent() {
+ final int color = CaptionUtils.parseColor(0x00);
+
+ assertThat(color).isEqualTo(Color.TRANSPARENT);
+ }
+
+ @Test
+ public void parseColor_redColor_shouldReturnRed() {
+ final int color = CaptionUtils.parseColor(0xFFFF0000);
+
+ assertThat(color).isEqualTo(Color.RED);
+ }
+
+ @Test
+ public void parseOpacity_defaultPackedColor_shouldReturnUnspecified() {
+ final int color = CaptionUtils.parseOpacity(0xFFFF00);
+
+ assertThat(color).isEqualTo(CaptioningManager.CaptionStyle.COLOR_UNSPECIFIED);
+ }
+
+ @Test
+ public void parseOpacity_unrecognizedColor_shouldReturnTransparent() {
+ final int color = CaptionUtils.parseOpacity(0x00);
+
+ assertThat(color).isEqualTo(0xFFFFFF);
+ }
+
+ @Test
+ public void parseOpacity_halfTransparentValue_shouldReturnHalfTransparent() {
+ final int color = CaptionUtils.parseOpacity(0x80FFFFFF);
+
+ assertThat(color).isEqualTo(0x80FFFFFF);
+ }
+
+ @Test
+ public void mergeColorOpacity_halfTransparentRedValue_shouldReturnMergeColorOpacityValue() {
+ final int color = CaptionUtils.mergeColorOpacity(0xFFFF0000, 0x80FFFFFF);
+
+ assertThat(color).isEqualTo(0x80FF0000);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningAppearanceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningAppearanceFragmentTest.java
new file mode 100644
index 0000000..c839a01
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningAppearanceFragmentTest.java
@@ -0,0 +1,78 @@
+/*
+ * 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.testutils.XmlTestUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+import java.util.List;
+
+/** Tests for {@link CaptioningAppearanceFragment}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningAppearanceFragmentTest {
+
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningAppearanceFragment mFragment;
+
+ @Before
+ public void setUp() {
+ mFragment = new CaptioningAppearanceFragment();
+ }
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_CAPTION_APPEARANCE);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.captioning_appearance);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("CaptioningAppearanceFragment");
+ }
+
+ @Test
+ public void getHelpResource_returnsCorrectHelpResource() {
+ assertThat(mFragment.getHelpResource()).isEqualTo(R.string.help_url_caption);
+ }
+
+ @Test
+ public void getNonIndexableKeys_existInXmlLayout() {
+ final List<String> niks = CaptioningAppearanceFragment.SEARCH_INDEX_DATA_PROVIDER
+ .getNonIndexableKeys(mContext);
+ final List<String> keys = XmlTestUtils.getKeysFromPreferenceXml(mContext,
+ R.xml.captioning_appearance);
+
+ assertThat(keys).containsAtLeastElementsIn(niks);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptionAppearancePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningAppearancePreferenceControllerTest.java
similarity index 96%
rename from tests/robotests/src/com/android/settings/accessibility/CaptionAppearancePreferenceControllerTest.java
rename to tests/robotests/src/com/android/settings/accessibility/CaptioningAppearancePreferenceControllerTest.java
index cfa683ba..74fb440 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptionAppearancePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningAppearancePreferenceControllerTest.java
@@ -34,23 +34,23 @@
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowCaptioningManager;
-/** Tests for {@link CaptionAppearancePreferenceController}. */
+/** Tests for {@link CaptioningAppearancePreferenceController}. */
@RunWith(RobolectricTestRunner.class)
-public class CaptionAppearancePreferenceControllerTest {
+public class CaptioningAppearancePreferenceControllerTest {
private static final String TEST_KEY = "test_key";
private static final int DEFAULT_PRESET_INDEX = 1;
private static final int DEFAULT_FONT_SCALE_INDEX = 2;
private final Context mContext = ApplicationProvider.getApplicationContext();
- private CaptionAppearancePreferenceController mController;
+ private CaptioningAppearancePreferenceController mController;
private ShadowCaptioningManager mShadowCaptioningManager;
@Before
public void setUp() {
CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
mShadowCaptioningManager = Shadow.extract(captioningManager);
- mController = new CaptionAppearancePreferenceController(mContext, TEST_KEY);
+ mController = new CaptioningAppearancePreferenceController(mContext, TEST_KEY);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundColorControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundColorControllerTest.java
new file mode 100644
index 0000000..2ecaa0f
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundColorControllerTest.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningBackgroundColorController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningBackgroundColorControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningBackgroundColorController mController;
+ private ColorPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningBackgroundColorController(mContext,
+ "captioning_background_color");
+ final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
+ mPreference = new ColorPreference(mContext, attributeSet);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_defaultValue_shouldReturnBlack() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Black");
+ }
+
+ @Test
+ public void getSummary_redValue_shouldReturnRed() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, 0xFFFF0000);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Red");
+ }
+
+ @Test
+ public void setRedValue_shouldReturnRed() {
+ mController.displayPreference(mScreen);
+
+ mPreference.setValue(0xFFFF0000);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Red");
+ }
+
+ @Test
+ public void onValueChanged_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onValueChanged(mPreference, 0xFFFF0000);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundOpacityControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundOpacityControllerTest.java
new file mode 100644
index 0000000..56a61ec
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningBackgroundOpacityControllerTest.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptionBackgroundOpacityController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningBackgroundOpacityControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningBackgroundOpacityController mController;
+ private ColorPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningBackgroundOpacityController(mContext,
+ "captioning_background_opacity");
+ final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
+ mPreference = new ColorPreference(mContext, attributeSet);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_defaultValue_shouldReturnNonTransparent() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("100%");
+ }
+
+ @Test
+ public void getSummary_halfTransparentValue_shouldReturnHalfTransparent() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_BACKGROUND_COLOR, 0x80FFFFFF);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("50%");
+ }
+
+ @Test
+ public void setHalfTransparentValue_shouldReturnHalfTransparent() {
+ mController.displayPreference(mScreen);
+
+ mPreference.setValue(0x80FFFFFF);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("50%");
+ }
+
+ @Test
+ public void onValueChanged_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onValueChanged(mPreference, 0x80FFFFFF);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningCustomControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningCustomControllerTest.java
new file mode 100644
index 0000000..838d9e0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningCustomControllerTest.java
@@ -0,0 +1,107 @@
+/*
+ * 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+import android.view.accessibility.CaptioningManager.CaptionStyle;
+
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link CaptioningCustomController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningCustomControllerTest {
+
+ private static final String PREF_KEY = "custom";
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private AccessibilitySettingsContentObserver mAccessibilitySettingsContentObserver;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private ContentResolver mContentResolver;
+ private CaptioningCustomController mController;
+ private Preference mPreference;
+
+ @Before
+ public void setUp() {
+ mContentResolver = mContext.getContentResolver();
+ mController = new CaptioningCustomController(mContext, PREF_KEY,
+ mAccessibilitySettingsContentObserver);
+ mPreference = new Preference(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+
+ @Test
+ public void displayPreference_byDefault_shouldIsInvisible() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.isVisible()).isFalse();
+ }
+
+ @Test
+ public void displayPreference_customValue_shouldIsVisible() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET, CaptionStyle.PRESET_CUSTOM);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.isVisible()).isTrue();
+ }
+
+ @Test
+ public void onStart_registerSpecificContentObserverForSpecificKeys() {
+ mController.onStart();
+
+ verify(mAccessibilitySettingsContentObserver).register(mContentResolver);
+ }
+
+ @Test
+ public void onStop_unregisterContentObserver() {
+ mController.onStop();
+
+ verify(mAccessibilitySettingsContentObserver).unregister(mContentResolver);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeColorControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeColorControllerTest.java
new file mode 100644
index 0000000..f1a8566
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeColorControllerTest.java
@@ -0,0 +1,113 @@
+/*
+ * 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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningEdgeColorController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningEdgeColorControllerTest {
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningEdgeColorController mController;
+ private ColorPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningEdgeColorController(mContext, "captioning_edge_color");
+ final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
+ mPreference = new ColorPreference(mContext, attributeSet);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_defaultValue_shouldReturnBlack() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Black");
+ }
+
+ @Test
+ public void getSummary_redValue_shouldReturnRed() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_COLOR, 0xFFFF0000);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Red");
+ }
+
+ @Test
+ public void setRedValue_shouldReturnRed() {
+ mController.displayPreference(mScreen);
+
+ mPreference.setValue(0xFFFF0000);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Red");
+ }
+
+ @Test
+ public void onValueChanged_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onValueChanged(mPreference, 0xFFFF0000);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeTypeControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeTypeControllerTest.java
new file mode 100644
index 0000000..11871f8
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningEdgeTypeControllerTest.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.accessibility.CaptioningManager;
+import android.view.accessibility.CaptioningManager.CaptionStyle;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningEdgeTypeController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningEdgeTypeControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningEdgeTypeController mController;
+ private EdgeTypePreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningEdgeTypeController(mContext, "captioning_edge_type");
+ final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
+ mPreference = new EdgeTypePreference(mContext, attributeSet);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_defaultValue_shouldReturnNone() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("None");
+ }
+
+ @Test
+ public void getSummary_outlineValue_shouldReturnOutline() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_EDGE_TYPE, CaptionStyle.EDGE_TYPE_OUTLINE);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Outline");
+ }
+
+ @Test
+ public void setOutlineValue_shouldReturnOutline() {
+ mController.displayPreference(mScreen);
+
+ mPreference.setValue(CaptionStyle.EDGE_TYPE_OUTLINE);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Outline");
+ }
+
+ @Test
+ public void onValueChanged_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onValueChanged(mPreference, CaptionStyle.EDGE_TYPE_OUTLINE);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningFontSizeControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningFontSizeControllerTest.java
new file mode 100644
index 0000000..c20cf5d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningFontSizeControllerTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.ListPreference;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningFontSizeController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningFontSizeControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningFontSizeController mController;
+ private ListPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningFontSizeController(mContext, "captioning_font_size");
+ mPreference = new ListPreference(mContext);
+ mPreference.setEntries(R.array.captioning_font_size_selector_titles);
+ mPreference.setEntryValues(R.array.captioning_font_size_selector_values);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void displayPreference_byDefault_shouldReturnDefault() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getEntry().toString()).isEqualTo("Medium");
+ }
+
+ @Test
+ public void displayPreference_bySmallValue_shouldReturnSmall() {
+ mShadowCaptioningManager.setFontScale(0.5f);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getEntry().toString()).isEqualTo("Small");
+ }
+
+ @Test
+ public void onPreferenceChange_shouldReturnSmall() {
+ mController.displayPreference(mScreen);
+
+ mController.onPreferenceChange(mPreference, "0.5");
+
+ assertThat(mPreference.getEntry().toString()).isEqualTo("Small");
+ }
+
+ @Test
+ public void onPreferenceChange_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onPreferenceChange(mPreference, "0.5");
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundColorControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundColorControllerTest.java
new file mode 100644
index 0000000..9c64130
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundColorControllerTest.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningForegroundColorController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningForegroundColorControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningForegroundColorController mController;
+ private ColorPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningForegroundColorController(mContext,
+ "captioning_foreground_color");
+ final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
+ mPreference = new ColorPreference(mContext, attributeSet);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_defaultValue_shouldReturnWhite() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("White");
+ }
+
+ @Test
+ public void getSummary_redValue_shouldReturnRed() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, 0xFFFF0000);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Red");
+ }
+
+ @Test
+ public void setRedValue_shouldReturnRed() {
+ mController.displayPreference(mScreen);
+
+ mPreference.setValue(0xFFFF0000);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Red");
+ }
+
+ @Test
+ public void onValueChanged_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onValueChanged(mPreference, 0xFFFF0000);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundOpacityControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundOpacityControllerTest.java
new file mode 100644
index 0000000..1ffff60
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningForegroundOpacityControllerTest.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningForegroundOpacityController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningForegroundOpacityControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningForegroundOpacityController mController;
+ private ColorPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningForegroundOpacityController(mContext,
+ "captioning_foreground_opacity");
+ final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
+ mPreference = new ColorPreference(mContext, attributeSet);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_defaultValue_shouldReturnNonTransparent() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("100%");
+ }
+
+ @Test
+ public void getSummary_halfTransparentValue_shouldReturnHalfTransparent() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_FOREGROUND_COLOR, 0x80FFFFFF);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("50%");
+ }
+
+ @Test
+ public void setHalfTransparentValue_shouldReturnHalfTransparent() {
+ mController.displayPreference(mScreen);
+
+ mPreference.setValue(0x80FFFFFF);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("50%");
+ }
+
+ @Test
+ public void onValueChanged_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onValueChanged(mPreference, 0x80FFFFFF);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningLocalePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningLocalePreferenceControllerTest.java
new file mode 100644
index 0000000..97c1908
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningLocalePreferenceControllerTest.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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link CaptioningLocalePreferenceController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningLocalePreferenceControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningLocalePreferenceController mController;
+ private LocalePreference mPreference;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningLocalePreferenceController(mContext, "captioning_local_pref");
+ mPreference = new LocalePreference(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void displayPreference_byDefault_shouldReturnDefault() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getEntry().toString()).isEqualTo(
+ mContext.getResources().getString(R.string.locale_default));
+ }
+
+ @Test
+ public void displayPreference_byArabicLocale_shouldReturnArabic() {
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_LOCALE, "af_ZA");
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getEntry().toString()).isEqualTo("Afrikaans");
+ }
+
+ @Test
+ public void onPreferenceChange_byArabicLocale_shouldReturnArabic() {
+ mController.displayPreference(mScreen);
+
+ mController.onPreferenceChange(mPreference, "af_ZA");
+
+ assertThat(mPreference.getEntry().toString()).isEqualTo("Afrikaans");
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java
new file mode 100644
index 0000000..6969472
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningMoreOptionsFragmentTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.testutils.XmlTestUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+import java.util.List;
+
+/** Tests for {@link CaptioningMoreOptionsFragment}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningMoreOptionsFragmentTest {
+
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningMoreOptionsFragment mFragment;
+
+ @Before
+ public void setUp() {
+ mFragment = new CaptioningMoreOptionsFragment();
+ }
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_CAPTION_MORE_OPTIONS);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.captioning_more_options);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("CaptioningMoreOptionsFragment");
+ }
+
+ @Test
+ public void getNonIndexableKeys_existInXmlLayout() {
+ final List<String> niks = CaptioningMoreOptionsFragment.SEARCH_INDEX_DATA_PROVIDER
+ .getNonIndexableKeys(mContext);
+ final List<String> keys =
+ XmlTestUtils.getKeysFromPreferenceXml(mContext,
+ R.xml.captioning_more_options);
+
+ assertThat(keys).containsAtLeastElementsIn(niks);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java
index 0dbb347..c44bed1 100644
--- a/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreferenceControllerTest.java
@@ -16,6 +16,9 @@
package com.android.settings.accessibility;
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
@@ -30,10 +33,9 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+/** Tests for {@link CaptioningPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
public class CaptioningPreferenceControllerTest {
- private static final int ON = 1;
- private static final int OFF = 0;
private Context mContext;
private CaptioningPreferenceController mController;
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningPresetControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningPresetControllerTest.java
new file mode 100644
index 0000000..c91baa2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningPresetControllerTest.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.accessibility.CaptioningManager;
+import android.view.accessibility.CaptioningManager.CaptionStyle;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningPresetController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningPresetControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningPresetController mController;
+ private PresetPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningPresetController(mContext, "captioning_preset");
+ final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
+ mPreference = new PresetPreference(mContext, attributeSet);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_defaultValue_shouldReturnWhiteOnBlack() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("White on black");
+ }
+
+ @Test
+ public void getSummary_customValue_shouldReturnCustom() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_PRESET, CaptionStyle.PRESET_CUSTOM);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Custom");
+ }
+
+ @Test
+ public void setCustomValue_shouldReturnCustom() {
+ mController.displayPreference(mScreen);
+
+ mPreference.setValue(CaptionStyle.PRESET_CUSTOM);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Custom");
+ }
+
+ @Test
+ public void onValueChanged_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onValueChanged(mPreference, CaptionStyle.PRESET_CUSTOM);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningPreviewPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreviewPreferenceControllerTest.java
new file mode 100644
index 0000000..cf87dd8
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningPreviewPreferenceControllerTest.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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+import android.view.View;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settingslib.widget.LayoutPreference;
+
+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;
+
+/** Tests for {@link CaptioningPreviewPreferenceController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningPreviewPreferenceControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private ContentResolver mContentResolver;
+ @Spy
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningPreviewPreferenceController mController;
+ private LayoutPreference mLayoutPreference;
+
+ @Before
+ public void setUp() {
+ when(mContext.getContentResolver()).thenReturn(mContentResolver);
+ mController = new CaptioningPreviewPreferenceController(mContext,
+ "captioning_preference_switch");
+ final View view = new View(mContext);
+ mLayoutPreference = new LayoutPreference(mContext, view);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mLayoutPreference);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void onStart_registerSpecificContentObserverForSpecificKeys() {
+ mController.onStart();
+
+ for (String key : mController.CAPTIONING_FEATURE_KEYS) {
+ verify(mContentResolver).registerContentObserver(Settings.Secure.getUriFor(key),
+ /* notifyForDescendants= */ false, mController.mSettingsContentObserver);
+ }
+ }
+
+ @Test
+ public void onStop_unregisterContentObserver() {
+ mController.onStop();
+
+ verify(mContentResolver).unregisterContentObserver(mController.mSettingsContentObserver);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningPropertiesFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningPropertiesFragmentTest.java
new file mode 100644
index 0000000..4f25139
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningPropertiesFragmentTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.testutils.XmlTestUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+import java.util.List;
+
+/** Tests for {@link CaptioningPropertiesFragment}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningPropertiesFragmentTest {
+
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningPropertiesFragment mFragment;
+
+ @Before
+ public void setUp() {
+ mFragment = new CaptioningPropertiesFragment();
+ }
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_CAPTION_PROPERTIES);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.captioning_settings);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("CaptioningPropertiesFragment");
+ }
+
+ @Test
+ public void getNonIndexableKeys_existInXmlLayout() {
+ final List<String> niks = CaptioningPropertiesFragment.SEARCH_INDEX_DATA_PROVIDER
+ .getNonIndexableKeys(mContext);
+ final List<String> keys =
+ XmlTestUtils.getKeysFromPreferenceXml(mContext,
+ R.xml.captioning_settings);
+
+ assertThat(keys).containsAtLeastElementsIn(niks);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningTogglePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningTogglePreferenceControllerTest.java
new file mode 100644
index 0000000..cdc1741
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningTogglePreferenceControllerTest.java
@@ -0,0 +1,163 @@
+/*
+ * 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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.widget.SettingsMainSwitchPreference;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningTogglePreferenceController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningTogglePreferenceControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningTogglePreferenceController mController;
+ private SettingsMainSwitchPreference mSwitchPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningTogglePreferenceController(mContext,
+ "captioning_preference_switch");
+ mSwitchPreference = new SettingsMainSwitchPreference(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mSwitchPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @After
+ public void tearDown() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void displayPreference_captionEnabled_shouldSetChecked() {
+ mShadowCaptioningManager.setEnabled(true);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mSwitchPreference.isChecked()).isTrue();
+ }
+
+ @Test
+ public void displayPreference_captionDisabled_shouldSetUnchecked() {
+ mShadowCaptioningManager.setEnabled(false);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mSwitchPreference.isChecked()).isFalse();
+ }
+
+ @Test
+ public void performClick_captionEnabled_shouldSetCaptionDisabled() {
+ mShadowCaptioningManager.setEnabled(true);
+ mController.displayPreference(mScreen);
+
+ mSwitchPreference.performClick();
+
+ assertThat(mSwitchPreference.isChecked()).isFalse();
+ assertThat(isCaptionEnabled()).isFalse();
+ }
+
+ @Test
+ public void performClick_captionDisabled_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mSwitchPreference.performClick();
+
+ assertThat(mSwitchPreference.isChecked()).isTrue();
+ assertThat(isCaptionEnabled()).isTrue();
+ }
+
+ @Test
+ public void setChecked_switchChecked_shouldSetCaptionEnabled() {
+ mController.displayPreference(mScreen);
+
+ mController.setChecked(/* isChecked= */ true);
+
+ assertThat(isCaptionEnabled()).isTrue();
+ }
+
+ @Test
+ public void setChecked_switchUnchecked_shouldSetCaptionDisabled() {
+ mController.displayPreference(mScreen);
+
+ mController.setChecked(/* isChecked= */ false);
+
+ assertThat(isCaptionEnabled()).isFalse();
+ }
+
+ @Test
+ public void onSwitchChanged_switchChecked_shouldSetCaptionEnabled() {
+ mController.displayPreference(mScreen);
+
+ mController.onSwitchChanged(/* switchView= */ null, /* isChecked= */ true);
+
+ assertThat(isCaptionEnabled()).isTrue();
+ }
+
+ @Test
+ public void onSwitchChanged_switchUnchecked_shouldSetCaptionDisabled() {
+ mController.displayPreference(mScreen);
+
+ mController.onSwitchChanged(/* switchView= */ null, /* isChecked= */ false);
+
+ assertThat(isCaptionEnabled()).isFalse();
+ }
+
+ private boolean isCaptionEnabled() {
+ return Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningTypefaceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningTypefaceControllerTest.java
new file mode 100644
index 0000000..0ca455c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningTypefaceControllerTest.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.ListPreference;
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningTypefaceController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningTypefaceControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningTypefaceController mController;
+ private ListPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningTypefaceController(mContext, "captioning_typeface");
+ mPreference = new ListPreference(mContext);
+ mPreference.setEntries(R.array.captioning_typeface_selector_titles);
+ mPreference.setEntryValues(R.array.captioning_typeface_selector_values);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void displayPreference_byDefault_shouldReturnDefault() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getEntry().toString()).isEqualTo("Default");
+ }
+
+ @Test
+ public void displayPreference_bySerif_shouldReturnSerif() {
+ Settings.Secure.putString(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_TYPEFACE, "serif");
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getEntry().toString()).isEqualTo("Serif");
+ }
+
+ @Test
+ public void onPreferenceChange_bySerif_shouldReturnSerif() {
+ mController.displayPreference(mScreen);
+
+ mController.onPreferenceChange(mPreference, "serif");
+
+ assertThat(mPreference.getEntry().toString()).isEqualTo("Serif");
+ }
+
+ @Test
+ public void onPreferenceChange_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onPreferenceChange(mPreference, "serif");
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowColorControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowColorControllerTest.java
new file mode 100644
index 0000000..abfa98d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowColorControllerTest.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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningWindowColorController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningWindowColorControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningWindowColorController mController;
+ private ColorPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningWindowColorController(mContext, "captioning_window_color");
+ final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
+ mPreference = new ColorPreference(mContext, attributeSet);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_defaultValue_shouldReturnNone() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo(
+ mContext.getString(R.string.color_none));
+ }
+
+ @Test
+ public void getSummary_redValue_shouldReturnRed() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_WINDOW_COLOR, 0xFFFF0000);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Red");
+ }
+
+ @Test
+ public void setRedValue_shouldReturnRed() {
+ mController.displayPreference(mScreen);
+
+ mPreference.setValue(0xFFFF0000);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("Red");
+ }
+
+ @Test
+ public void onValueChanged_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onValueChanged(mPreference, 0xFFFF0000);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowOpacityControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowOpacityControllerTest.java
new file mode 100644
index 0000000..99eb1e5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/CaptioningWindowOpacityControllerTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.accessibility;
+
+import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
+import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.util.AttributeSet;
+import android.view.accessibility.CaptioningManager;
+
+import androidx.preference.PreferenceScreen;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.core.BasePreferenceController;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.shadow.api.Shadow;
+import org.robolectric.shadows.ShadowCaptioningManager;
+
+/** Tests for {@link CaptioningWindowOpacityController}. */
+@RunWith(RobolectricTestRunner.class)
+public class CaptioningWindowOpacityControllerTest {
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Mock
+ private PreferenceScreen mScreen;
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private CaptioningWindowOpacityController mController;
+ private ColorPreference mPreference;
+ private ShadowCaptioningManager mShadowCaptioningManager;
+
+ @Before
+ public void setUp() {
+ mController = new CaptioningWindowOpacityController(mContext, "captioning_window_opacity");
+ final AttributeSet attributeSet = Robolectric.buildAttributeSet().build();
+ mPreference = new ColorPreference(mContext, attributeSet);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ CaptioningManager captioningManager = mContext.getSystemService(CaptioningManager.class);
+ mShadowCaptioningManager = Shadow.extract(captioningManager);
+ }
+
+ @Test
+ public void getAvailabilityStatus_shouldReturnAvailable() {
+ assertThat(mController.getAvailabilityStatus())
+ .isEqualTo(BasePreferenceController.AVAILABLE);
+ }
+
+ @Test
+ public void getSummary_defaultValue_shouldReturnNonTransparent() {
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("100%");
+ }
+
+ @Test
+ public void getSummary_halfTransparentValue_shouldReturnHalfTransparent() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_WINDOW_COLOR, 0x80FFFFFF);
+
+ mController.displayPreference(mScreen);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("50%");
+ }
+
+ @Test
+ public void setHalfTransparentValue_shouldReturnHalfTransparent() {
+ mController.displayPreference(mScreen);
+
+ mPreference.setValue(0x80FFFFFF);
+
+ assertThat(mPreference.getSummary().toString()).isEqualTo("50%");
+ }
+
+ @Test
+ public void onValueChanged_shouldSetCaptionEnabled() {
+ mShadowCaptioningManager.setEnabled(false);
+ mController.displayPreference(mScreen);
+
+ mController.onValueChanged(mPreference, 0x80FFFFFF);
+
+ final boolean isCaptionEnabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_CAPTIONING_ENABLED, OFF) == ON;
+ assertThat(isCaptionEnabled).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionFragmentTest.java
index 0bb227e..a30dbff 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionFragmentTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
@@ -25,16 +26,41 @@
import com.android.settings.R;
import com.android.settings.testutils.XmlTestUtils;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import java.util.List;
+/** Tests for {@link ColorAndMotionFragment}. */
@RunWith(RobolectricTestRunner.class)
public class ColorAndMotionFragmentTest {
- private Context mContext = ApplicationProvider.getApplicationContext();
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private ColorAndMotionFragment mFragment;
+
+ @Before
+ public void setUp() {
+ mFragment = new ColorAndMotionFragment();
+ }
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_COLOR_AND_MOTION);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_color_and_motion);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("ColorAndMotionFragment");
+ }
@Test
public void getNonIndexableKeys_existInXmlLayout() {
diff --git a/tests/robotests/src/com/android/settings/accessibility/DividerAllowedBelowPreferenceTest.java b/tests/robotests/src/com/android/settings/accessibility/DividerAllowedBelowPreferenceTest.java
deleted file mode 100644
index 27f0623..0000000
--- a/tests/robotests/src/com/android/settings/accessibility/DividerAllowedBelowPreferenceTest.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accessibility;
-
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.internal.verification.VerificationModeFactory.times;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-
-import androidx.preference.PreferenceViewHolder;
-
-import com.android.settings.R;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-/** Tests for {@link DividerAllowedBelowPreference}. */
-@RunWith(RobolectricTestRunner.class)
-public class DividerAllowedBelowPreferenceTest {
- private final Context mContext = RuntimeEnvironment.application;
- private PreferenceViewHolder mViewHolder;
-
- @Before
- public void setUp() {
- final LayoutInflater inflater = LayoutInflater.from(mContext);
- final View rootView =
- inflater.inflate(R.layout.preference, /* root= */ null);
- mViewHolder = spy(PreferenceViewHolder.createInstanceForTests(rootView));
- }
-
- @Test
- public void onBindViewHolder_dividerAllowedBelow() {
- final DividerAllowedBelowPreference dividerAllowedBelowPreference =
- new DividerAllowedBelowPreference(mContext);
-
- dividerAllowedBelowPreference.onBindViewHolder(mViewHolder);
-
- // One time was in parent, the other time was in child.
- verify(mViewHolder, times(2)).setDividerAllowedBelow(true);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/accessibility/DividerSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/accessibility/DividerSwitchPreferenceTest.java
deleted file mode 100644
index d80a4e8..0000000
--- a/tests/robotests/src/com/android/settings/accessibility/DividerSwitchPreferenceTest.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accessibility;
-
-import 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.internal.verification.VerificationModeFactory.times;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-
-import androidx.preference.PreferenceViewHolder;
-
-import com.android.settings.R;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-/** Tests for {@link DividerSwitchPreference}. */
-@RunWith(RobolectricTestRunner.class)
-public class DividerSwitchPreferenceTest {
- private final Context mContext = RuntimeEnvironment.application;
- private View mRootView;
- private PreferenceViewHolder mViewHolder;
- private DividerSwitchPreference mDividerSwitchPreference;
-
- @Before
- public void setUp() {
- initRootView();
- initPreference();
- }
-
- @Test
- public void setDividerAllowedAbove_allowed_success() {
- mDividerSwitchPreference.setDividerAllowedAbove(true);
- mDividerSwitchPreference.onBindViewHolder(mViewHolder);
-
- // One time was in parent, the other time was in child.
- verify(mViewHolder, times(2)).setDividerAllowedAbove(true);
- }
-
- @Test
- public void setDividerAllowedBelow_allowed_success() {
- mDividerSwitchPreference.setDividerAllowedBelow(true);
- mDividerSwitchPreference.onBindViewHolder(mViewHolder);
-
- // One time was in parent, the other time was in child.
- verify(mViewHolder, times(2)).setDividerAllowedBelow(true);
- }
-
- @Test
- public void setSwitchVisibility_visible_success() {
- final View view = spy(new View(mContext));
- doReturn(view).when(mRootView).findViewById(android.R.id.widget_frame);
-
- mDividerSwitchPreference.setSwitchVisibility(View.VISIBLE);
- mDividerSwitchPreference.onBindViewHolder(mViewHolder);
-
- assertThat(view.getVisibility()).isEqualTo(View.VISIBLE);
- }
-
- private void initRootView() {
- final LayoutInflater inflater = LayoutInflater.from(mContext);
- mRootView = spy(inflater.inflate(R.layout.preference_widget_switch, /* root= */ null));
- mViewHolder = spy(PreferenceViewHolder.createInstanceForTests(mRootView));
- }
-
- private void initPreference() {
- mDividerSwitchPreference = new DividerSwitchPreference(mContext);
- mDividerSwitchPreference.setDividerAllowedAbove(false);
- mDividerSwitchPreference.setDividerAllowedBelow(false);
- mDividerSwitchPreference.setSwitchVisibility(View.INVISIBLE);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/accessibility/HearingAidDialogFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/HearingAidDialogFragmentTest.java
index 4f8713a..7408374 100644
--- a/tests/robotests/src/com/android/settings/accessibility/HearingAidDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/HearingAidDialogFragmentTest.java
@@ -23,6 +23,7 @@
import static org.robolectric.Shadows.shadowOf;
import android.app.Dialog;
+import android.app.settings.SettingsEnums;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
@@ -44,7 +45,7 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
-
+/** Tests for {@link HearingAidDialogFragment}. */
@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowAlertDialogCompat.class)
public class HearingAidDialogFragmentTest {
@@ -90,4 +91,10 @@
assertThat(dialog.isShowing()).isFalse();
}
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.DIALOG_ACCESSIBILITY_HEARINGAID);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/HearingAidPairingDialogFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/HearingAidPairingDialogFragmentTest.java
index 5c440d2..5990a3d 100644
--- a/tests/robotests/src/com/android/settings/accessibility/HearingAidPairingDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/HearingAidPairingDialogFragmentTest.java
@@ -22,6 +22,7 @@
import static org.mockito.Mockito.when;
import static org.robolectric.Shadows.shadowOf;
+import android.app.settings.SettingsEnums;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
@@ -102,4 +103,10 @@
assertThat(dialog.isShowing()).isFalse();
}
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.DIALOG_ACCESSIBILITY_HEARING_AID_PAIR_ANOTHER);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java b/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java
index 6918fb6..efeb27f 100644
--- a/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/HearingAidUtilsTest.java
@@ -28,7 +28,6 @@
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.HearingAidProfile;
-import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -59,12 +58,9 @@
public void setUp() {
final FragmentActivity mActivity = Robolectric.setupActivity(FragmentActivity.class);
mFragmentManager = mActivity.getSupportFragmentManager();
- }
-
- @After
- public void tearDown() {
ShadowAlertDialogCompat.reset();
}
+
@Test
public void launchHearingAidPairingDialog_deviceNotConnectedHearingAid_noDialog() {
when(mCachedBluetoothDevice.isConnectedHearingAidDevice()).thenReturn(false);
diff --git a/tests/robotests/src/com/android/settings/accessibility/MagnificationSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/MagnificationSettingsFragmentTest.java
index 73d29cf..a1a146d 100644
--- a/tests/robotests/src/com/android/settings/accessibility/MagnificationSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/MagnificationSettingsFragmentTest.java
@@ -27,6 +27,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
@@ -67,7 +68,6 @@
doReturn(mScreen).when(mFragment).getPreferenceScreen();
doReturn(mock(FragmentManager.class, Answers.RETURNS_DEEP_STUBS)).when(
mFragment).getChildFragmentManager();
-
}
@Test
@@ -92,6 +92,23 @@
}
@Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_MAGNIFICATION_SETTINGS);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_magnification_service_settings);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("MagnificationSettingsFragment");
+ }
+
+ @Test
public void getNonIndexableKeys_existInXmlLayout() {
final List<String> niks =
ShortcutsSettingsFragment.SEARCH_INDEX_DATA_PROVIDER
diff --git a/tests/robotests/src/com/android/settings/accessibility/ShortcutsSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ShortcutsSettingsFragmentTest.java
index 12b568f..8505f89 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ShortcutsSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ShortcutsSettingsFragmentTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
@@ -25,6 +26,7 @@
import com.android.settings.R;
import com.android.settings.testutils.XmlTestUtils;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -35,7 +37,30 @@
@RunWith(RobolectricTestRunner.class)
public class ShortcutsSettingsFragmentTest {
- private Context mContext = ApplicationProvider.getApplicationContext();
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private ShortcutsSettingsFragment mFragment;
+
+ @Before
+ public void setUp() {
+ mFragment = new ShortcutsSettingsFragment();
+ }
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_SHORTCUTS_SETTINGS);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_shortcuts_settings);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("ShortcutsSettingsFragment");
+ }
@Test
public void getNonIndexableKeys_existInXmlLayout() {
diff --git a/tests/robotests/src/com/android/settings/accessibility/SystemControlsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/SystemControlsFragmentTest.java
index 4b12900..1d8fb32 100644
--- a/tests/robotests/src/com/android/settings/accessibility/SystemControlsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/SystemControlsFragmentTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
@@ -25,6 +26,7 @@
import com.android.settings.R;
import com.android.settings.testutils.XmlTestUtils;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -35,7 +37,30 @@
@RunWith(RobolectricTestRunner.class)
public class SystemControlsFragmentTest {
- private Context mContext = ApplicationProvider.getApplicationContext();
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private SystemControlsFragment mFragment;
+
+ @Before
+ public void setUp() {
+ mFragment = new SystemControlsFragment();
+ }
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_SYSTEM_CONTROLS);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_system_controls);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("SystemControlsFragment");
+ }
@Test
public void getNonIndexableKeys_existInXmlLayout() {
diff --git a/tests/robotests/src/com/android/settings/accessibility/TapAssistanceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/TapAssistanceFragmentTest.java
index 093ea03..a1054da 100644
--- a/tests/robotests/src/com/android/settings/accessibility/TapAssistanceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/TapAssistanceFragmentTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
@@ -25,6 +26,7 @@
import com.android.settings.R;
import com.android.settings.testutils.XmlTestUtils;
+import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
@@ -35,7 +37,30 @@
/** Tests for {@link TapAssistanceFragment}. */
public class TapAssistanceFragmentTest {
- private Context mContext = ApplicationProvider.getApplicationContext();
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private TapAssistanceFragment mFragment;
+
+ @Before
+ public void setUp() {
+ mFragment = new TapAssistanceFragment();
+ }
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_TAP_ASSISTANCE);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_tap_assistance);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("TapAssistanceFragment");
+ }
@Test
public void getNonIndexableKeys_existInXmlLayout() {
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizardTest.java
index bddaed5..4813c80 100644
--- a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizardTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentForSetupWizardTest.java
@@ -18,10 +18,13 @@
import static com.android.settings.accessibility.TextReadingPreferenceFragment.RESET_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.verify;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
@@ -32,27 +35,29 @@
import com.google.android.setupdesign.GlifPreferenceLayout;
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.RobolectricTestRunner;
-/**
- * Tests for {@link TextReadingPreferenceFragmentForSetupWizard}.
- */
+/** Tests for {@link TextReadingPreferenceFragmentForSetupWizard}. */
@RunWith(RobolectricTestRunner.class)
public class TextReadingPreferenceFragmentForSetupWizardTest {
- private final Context mContext = spy(ApplicationProvider.getApplicationContext());
+ @Rule
+ public final MockitoRule mMockito = MockitoJUnit.rule();
@Mock
private GlifPreferenceLayout mGlifLayoutView;
+ @Spy
+ private final Context mContext = ApplicationProvider.getApplicationContext();
private TextReadingPreferenceFragmentForSetupWizard mFragment;
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
-
mFragment = spy(new TextReadingPreferenceFragmentForSetupWizard());
final LayoutPreference resetPreference =
new LayoutPreference(mContext, R.layout.accessibility_text_reading_reset_button);
@@ -70,4 +75,15 @@
verify(mGlifLayoutView).setHeaderText(title);
}
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.SUW_ACCESSIBILITY_TEXT_READING_OPTIONS);
+ }
+
+ @Test
+ public void getHelpResource_shouldNotHaveHelpResource() {
+ assertThat(mFragment.getHelpResource()).isEqualTo(0);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentTest.java
index b72cdf7..606283f 100644
--- a/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingPreferenceFragmentTest.java
@@ -26,6 +26,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.DialogInterface;
import android.provider.Settings;
@@ -38,33 +39,37 @@
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityDialogUtils.DialogEnums;
import com.android.settings.accessibility.TextReadingResetController.ResetStateListener;
+import com.android.settings.testutils.XmlTestUtils;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.shadows.ShadowToast;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
-/**
- * Tests for {@link TextReadingPreferenceFragment}.
- */
+/** Tests for {@link TextReadingPreferenceFragment}. */
@RunWith(RobolectricTestRunner.class)
public class TextReadingPreferenceFragmentTest {
- private TextReadingPreferenceFragment mFragment;
- private Context mContext = ApplicationProvider.getApplicationContext();
+
+ @Rule
+ public final MockitoRule mMockito = MockitoJUnit.rule();
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private PreferenceManager mPreferenceManager;
+ private Context mContext = ApplicationProvider.getApplicationContext();
+ private TextReadingPreferenceFragment mFragment;
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
mContext.setTheme(R.style.Theme_AppCompat);
mFragment = spy(new TextReadingPreferenceFragment());
@@ -119,4 +124,32 @@
assertThat(ShadowToast.getTextOfLatestToast())
.isEqualTo(mContext.getString(R.string.accessibility_text_reading_reset_message));
}
+
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_TEXT_READING_OPTIONS);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_text_reading_options);
+ }
+
+ @Test
+ public void getLogTag_returnsCorrectTag() {
+ assertThat(mFragment.getLogTag()).isEqualTo("TextReadingPreferenceFragment");
+ }
+
+ @Test
+ public void getNonIndexableKeys_existInXmlLayout() {
+ final List<String> niks = TextReadingPreferenceFragment.SEARCH_INDEX_DATA_PROVIDER
+ .getNonIndexableKeys(mContext);
+ final List<String> keys =
+ XmlTestUtils.getKeysFromPreferenceXml(mContext,
+ R.xml.accessibility_text_reading_options);
+
+ assertThat(keys).containsAtLeastElementsIn(niks);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingResetControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingResetControllerTest.java
index 2e4566c..231c9ca 100644
--- a/tests/robotests/src/com/android/settings/accessibility/TextReadingResetControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingResetControllerTest.java
@@ -16,9 +16,8 @@
package com.android.settings.accessibility;
-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.verify;
import static org.mockito.Mockito.when;
@@ -28,14 +27,13 @@
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
-import com.android.settings.R;
-import com.android.settingslib.widget.LayoutPreference;
-
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.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/**
@@ -45,8 +43,11 @@
public class TextReadingResetControllerTest {
private static final String RESET_KEY = "reset";
private final Context mContext = ApplicationProvider.getApplicationContext();
- private final View mResetView = new View(mContext);
private TextReadingResetController mResetController;
+ private TextReadingResetPreference mResetPreference;
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
@Mock
private View.OnClickListener mOnResetButtonClickListener;
@@ -54,37 +55,19 @@
@Mock
private PreferenceScreen mPreferenceScreen;
- @Mock
- private LayoutPreference mLayoutPreference;
-
@Before
public void setUp() {
- MockitoAnnotations.initMocks(this);
mResetController = new TextReadingResetController(mContext, RESET_KEY,
mOnResetButtonClickListener);
+ mResetPreference = spy(new TextReadingResetPreference(mContext, /* attrs= */ null));
+
+ when(mPreferenceScreen.findPreference(RESET_KEY)).thenReturn(mResetPreference);
}
@Test
- public void setClickListener_success() {
- setupResetButton();
-
+ public void displayResetPreference_verifyResetClickListener() {
mResetController.displayPreference(mPreferenceScreen);
- assertThat(mResetView.hasOnClickListeners()).isTrue();
- }
-
- @Test
- public void clickResetButtonAfterDisplayPreference_verifyClickListener() {
- setupResetButton();
-
- mResetController.displayPreference(mPreferenceScreen);
- mResetView.callOnClick();
-
- verify(mOnResetButtonClickListener).onClick(any(View.class));
- }
-
- private void setupResetButton() {
- when(mPreferenceScreen.findPreference(RESET_KEY)).thenReturn(mLayoutPreference);
- when(mLayoutPreference.findViewById(R.id.reset_button)).thenReturn(mResetView);
+ verify(mResetPreference).setOnResetClickListener(any(View.OnClickListener.class));
}
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingResetPreferenceTest.java b/tests/robotests/src/com/android/settings/accessibility/TextReadingResetPreferenceTest.java
new file mode 100644
index 0000000..374766f
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingResetPreferenceTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.accessibility;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+
+import androidx.preference.PreferenceViewHolder;
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+/**
+ * Tests for {@link TextReadingResetPreference}.
+ */
+@RunWith(RobolectricTestRunner.class)
+public class TextReadingResetPreferenceTest {
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ private TextReadingResetPreference mResetPreference;
+ private PreferenceViewHolder mHolder;
+ private View mButtonView;
+
+ @Rule
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+
+ @Mock
+ private View.OnClickListener mOnResetClickListener;
+
+ @Before
+ public void setUp() {
+ mResetPreference = new TextReadingResetPreference(mContext, /* attrs= */ null);
+ final LayoutInflater inflater = LayoutInflater.from(mContext);
+ final View view = inflater.inflate(mResetPreference.getLayoutResource(),
+ new FrameLayout(mContext), false);
+ mHolder = PreferenceViewHolder.createInstanceForTests(view);
+ mButtonView = view.findViewById(R.id.reset_button);
+ }
+
+ @Test
+ public void setResetListener_success() {
+ mResetPreference.setOnResetClickListener(mOnResetClickListener);
+ mResetPreference.onBindViewHolder(mHolder);
+
+ assertThat(mButtonView.hasOnClickListeners()).isTrue();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java
index 840ace0..9155113 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleColorInversionPreferenceFragmentTest.java
@@ -27,6 +27,7 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
@@ -41,7 +42,9 @@
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
+import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
+import com.android.settings.testutils.XmlTestUtils;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settings.widget.SettingsMainSwitchPreference;
@@ -56,6 +59,8 @@
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowApplication;
+import java.util.List;
+
/** Tests for {@link ToggleColorInversionPreferenceFragment} */
@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowFragment.class)
@@ -159,6 +164,34 @@
assertThat(getLatestPopupWindow()).isNull();
}
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_COLOR_INVERSION_SETTINGS);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_color_inversion_settings);
+ }
+
+ @Test
+ public void getHelpResource_returnsCorrectHelpResource() {
+ assertThat(mFragment.getHelpResource()).isEqualTo(R.string.help_url_color_inversion);
+ }
+
+ @Test
+ public void getNonIndexableKeys_existInXmlLayout() {
+ final List<String> niks = ToggleColorInversionPreferenceFragment.SEARCH_INDEX_DATA_PROVIDER
+ .getNonIndexableKeys(mContext);
+ final List<String> keys =
+ XmlTestUtils.getKeysFromPreferenceXml(mContext,
+ R.xml.accessibility_color_inversion_settings);
+
+ assertThat(keys).containsAtLeastElementsIn(niks);
+ }
+
private static PopupWindow getLatestPopupWindow() {
final ShadowApplication shadowApplication =
Shadow.extract(ApplicationProvider.getApplicationContext());
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragmentTest.java
index eb293dd..94db63b 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragmentTest.java
@@ -31,6 +31,7 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.ComponentName;
import android.content.Context;
import android.os.Bundle;
@@ -45,7 +46,9 @@
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
+import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
+import com.android.settings.testutils.XmlTestUtils;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settings.widget.SettingsMainSwitchPreference;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
@@ -61,6 +64,8 @@
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowApplication;
+import java.util.List;
+
/** Tests for {@link ToggleDaltonizerPreferenceFragment} */
@RunWith(RobolectricTestRunner.class)
@Config(shadows = ShadowFragment.class)
@@ -182,6 +187,34 @@
assertThat(getLatestPopupWindow()).isNull();
}
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.ACCESSIBILITY_TOGGLE_DALTONIZER);
+ }
+
+ @Test
+ public void getPreferenceScreenResId_returnsCorrectXml() {
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
+ R.xml.accessibility_daltonizer_settings);
+ }
+
+ @Test
+ public void getHelpResource_returnsCorrectHelpResource() {
+ assertThat(mFragment.getHelpResource()).isEqualTo(R.string.help_url_color_correction);
+ }
+
+ @Test
+ public void getNonIndexableKeys_existInXmlLayout() {
+ final List<String> niks = ToggleDaltonizerPreferenceFragment.SEARCH_INDEX_DATA_PROVIDER
+ .getNonIndexableKeys(mContext);
+ final List<String> keys =
+ XmlTestUtils.getKeysFromPreferenceXml(mContext,
+ R.xml.accessibility_daltonizer_settings);
+
+ assertThat(keys).containsAtLeastElementsIn(niks);
+ }
+
private static PopupWindow getLatestPopupWindow() {
final ShadowApplication shadowApplication =
Shadow.extract(ApplicationProvider.getApplicationContext());
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java
index fea28d1..6b710ca 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java
@@ -16,7 +16,6 @@
package com.android.settings.accessibility;
-import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_SAVED_QS_TOOLTIP_RESHOW;
import static com.android.settings.accessibility.ToggleFeaturePreferenceFragment.KEY_SAVED_USER_SHORTCUT_TYPE;
import static com.google.common.truth.Truth.assertThat;
@@ -41,7 +40,6 @@
import android.widget.CheckBox;
import android.widget.PopupWindow;
-import androidx.annotation.XmlRes;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.FragmentActivity;
import androidx.preference.PreferenceManager;
@@ -115,15 +113,15 @@
final PreferenceScreen screen = spy(new PreferenceScreen(mContext, null));
when(screen.getPreferenceManager()).thenReturn(mPreferenceManager);
doReturn(screen).when(mFragment).getPreferenceScreen();
+ mContext.setTheme(R.style.Theme_AppCompat);
}
@Test
- public void createFragment_shouldOnlyAddPreferencesOnce() {
+ public void setupFragment_getExpectedPreferenceScreenResId() {
FragmentController.setupFragment(mFragment, FragmentActivity.class,
- /* containerViewId= */ 0, /* bundle= */ null);
+ /* containerViewId= */ 0, Bundle.EMPTY);
- // execute exactly once
- verify(mFragment).addPreferencesFromResource(R.xml.placeholder_prefs);
+ assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(R.xml.placeholder_prefs);
}
@Test
@@ -186,7 +184,6 @@
@Test
public void dialogCheckboxClicked_hardwareType_skipTimeoutRestriction() {
- mContext.setTheme(R.style.Theme_AppCompat);
final ShortcutPreference shortcutPreference = new ShortcutPreference(mContext, /* attrs= */
null);
mFragment.mComponentName = PLACEHOLDER_COMPONENT_NAME;
@@ -208,7 +205,6 @@
@Test
public void setupEditShortcutDialog_shortcutPreferenceOff_checkboxIsEmptyValue() {
- mContext.setTheme(R.style.Theme_AppCompat);
final AlertDialog dialog = AccessibilityDialogUtils.showEditShortcutDialog(
mContext, DialogType.EDIT_SHORTCUT_GENERIC, PLACEHOLDER_DIALOG_TITLE,
this::callEmptyOnClicked);
@@ -226,7 +222,6 @@
@Test
public void setupEditShortcutDialog_shortcutPreferenceOn_checkboxIsSavedValue() {
- mContext.setTheme(R.style.Theme_AppCompat);
final AlertDialog dialog = AccessibilityDialogUtils.showEditShortcutDialog(
mContext, DialogType.EDIT_SHORTCUT_GENERIC, PLACEHOLDER_DIALOG_TITLE,
this::callEmptyOnClicked);
@@ -248,7 +243,6 @@
@Test
@Config(shadows = ShadowFragment.class)
public void restoreValueFromSavedInstanceState_assignShortcutTypeToVariable() {
- mContext.setTheme(R.style.Theme_AppCompat);
final AlertDialog dialog = AccessibilityDialogUtils.showEditShortcutDialog(
mContext, DialogType.EDIT_SHORTCUT_GENERIC, PLACEHOLDER_DIALOG_TITLE,
this::callEmptyOnClicked);
@@ -273,9 +267,8 @@
@Test
@Config(shadows = ShadowFragment.class)
public void onPreferenceToggledOnDisabledService_notShowTooltipView() {
- mContext.setTheme(R.style.Theme_AppCompat);
-
- mFragment.onPreferenceToggled(mFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ false);
+ mFragment.onPreferenceToggled(
+ ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ false);
assertThat(getLatestPopupWindow()).isNull();
}
@@ -283,9 +276,8 @@
@Test
@Config(shadows = ShadowFragment.class)
public void onPreferenceToggledOnEnabledService_showTooltipView() {
- mContext.setTheme(R.style.Theme_AppCompat);
-
- mFragment.onPreferenceToggled(mFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true);
+ mFragment.onPreferenceToggled(
+ ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true);
assertThat(getLatestPopupWindow().isShowing()).isTrue();
}
@@ -293,33 +285,17 @@
@Test
@Config(shadows = ShadowFragment.class)
public void onPreferenceToggledOnEnabledService_tooltipViewShown_notShowTooltipView() {
- mContext.setTheme(R.style.Theme_AppCompat);
- mFragment.onPreferenceToggled(mFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true);
+ mFragment.onPreferenceToggled(
+ ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true);
getLatestPopupWindow().dismiss();
- mFragment.onPreferenceToggled(mFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true);
+ mFragment.onPreferenceToggled(
+ ToggleFeaturePreferenceFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true);
assertThat(getLatestPopupWindow().isShowing()).isFalse();
}
@Test
- @Config(shadows = ShadowFragment.class)
- public void restoreValueFromSavedInstanceState_showTooltipView() {
- mContext.setTheme(R.style.Theme_AppCompat);
- mFragment.onPreferenceToggled(mFragment.KEY_USE_SERVICE_PREFERENCE, /* enabled= */ true);
- assertThat(getLatestPopupWindow().isShowing()).isTrue();
-
- final Bundle savedInstanceState = new Bundle();
- savedInstanceState.putBoolean(KEY_SAVED_QS_TOOLTIP_RESHOW, /* value= */ true);
- mFragment.onCreate(savedInstanceState);
- mFragment.onCreateView(LayoutInflater.from(mContext), mock(ViewGroup.class), Bundle.EMPTY);
- mFragment.onViewCreated(mFragment.getView(), savedInstanceState);
- mFragment.onAttach(mContext);
-
- assertThat(getLatestPopupWindow().isShowing()).isTrue();
- }
-
- @Test
public void initTopIntroPreference_hasTopIntroTitle_shouldSetAsExpectedValue() {
mFragment.mTopIntroTitle = DEFAULT_TOP_INTRO;
mFragment.initTopIntroPreference();
@@ -395,6 +371,21 @@
}
@Override
+ protected String getLogTag() {
+ return null;
+ }
+
+ @Override
+ protected void onProcessArguments(Bundle arguments) {
+ // do nothing
+ }
+
+ @Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ // do nothing
+ }
+
+ @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return mock(View.class);
@@ -411,11 +402,6 @@
}
@Override
- public void addPreferencesFromResource(@XmlRes int preferencesResId) {
- // do nothing
- }
-
- @Override
protected void updateShortcutPreference() {
// UI related function, do nothing in tests
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizardTest.java
index b8bb8d2..c5978f6 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizardTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentForSetupWizardTest.java
@@ -23,6 +23,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import androidx.preference.Preference;
@@ -49,9 +50,7 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
-/**
- * Tests for {@link ToggleScreenMagnificationPreferenceFragmentForSetupWizard}.
- */
+/** Tests for {@link ToggleScreenMagnificationPreferenceFragmentForSetupWizard}. */
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowSettingsPreferenceFragment.class})
public class ToggleScreenMagnificationPreferenceFragmentForSetupWizardTest {
@@ -89,6 +88,17 @@
assertThat(mFragment.mFollowingTypingSwitchPreference.isVisible()).isFalse();
}
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFICATION);
+ }
+
+ @Test
+ public void getHelpResource_shouldNotHaveHelpResource() {
+ assertThat(mFragment.getHelpResource()).isEqualTo(0);
+ }
+
private static class TestToggleScreenMagnificationPreferenceFragmentForSetupWizard
extends ToggleScreenMagnificationPreferenceFragmentForSetupWizard {
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
index 00ff960..4e74048 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
@@ -70,6 +70,7 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
+/** Tests for {@link ToggleScreenMagnificationPreferenceFragment}. */
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowSettingsPreferenceFragment.class})
public class ToggleScreenMagnificationPreferenceFragmentTest {
@@ -389,6 +390,16 @@
verify(dialogDelegate).getDialogMetricsCategory(1);
}
+ @Test
+ public void getMetricsCategory_shouldNotHaveMetricsCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(0);
+ }
+
+ @Test
+ public void getHelpResource_returnsCorrectHelpResource() {
+ assertThat(mFragment.getHelpResource()).isEqualTo(R.string.help_url_magnification);
+ }
+
private void putStringIntoSettings(String key, String componentName) {
Settings.Secure.putString(mContext.getContentResolver(), key, componentName);
}
@@ -469,6 +480,11 @@
}
@Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ // do nothing
+ }
+
+ @Override
public void onViewCreated(View view, Bundle savedInstanceState) {
// do nothing
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizardTest.java
index 017a781..2cbe1ad 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizardTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenReaderPreferenceFragmentForSetupWizardTest.java
@@ -23,6 +23,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
@@ -47,9 +48,7 @@
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
-/**
- * Tests for {@link ToggleScreenReaderPreferenceFragmentForSetupWizard}.
- */
+/** Tests for {@link ToggleScreenReaderPreferenceFragmentForSetupWizard}. */
@RunWith(RobolectricTestRunner.class)
public class ToggleScreenReaderPreferenceFragmentForSetupWizardTest {
@@ -83,6 +82,12 @@
assertThat(mFragment.mTopIntroPreference.isVisible()).isFalse();
}
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SCREEN_READER);
+ }
+
private static class TestToggleScreenReaderPreferenceFragmentForSetupWizard
extends ToggleScreenReaderPreferenceFragmentForSetupWizard {
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizardTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizardTest.java
index 85abbd6..43440ff 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizardTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleSelectToSpeakPreferenceFragmentForSetupWizardTest.java
@@ -23,6 +23,7 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
@@ -47,9 +48,7 @@
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
-/**
- * Tests for {@link ToggleSelectToSpeakPreferenceFragmentForSetupWizard}.
- */
+/** Tests for {@link ToggleSelectToSpeakPreferenceFragmentForSetupWizard}. */
@RunWith(RobolectricTestRunner.class)
public class ToggleSelectToSpeakPreferenceFragmentForSetupWizardTest {
@@ -83,6 +82,12 @@
assertThat(mFragment.mTopIntroPreference.isVisible()).isFalse();
}
+ @Test
+ public void getMetricsCategory_returnsCorrectCategory() {
+ assertThat(mFragment.getMetricsCategory()).isEqualTo(
+ SettingsEnums.SUW_ACCESSIBILITY_TOGGLE_SELECT_TO_SPEAK);
+ }
+
private static class TestToggleSelectToSpeakPreferenceFragmentForSetupWizard
extends ToggleSelectToSpeakPreferenceFragmentForSetupWizard {
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/AppWithAdminGrantedPermissionsCounterTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
index 4e08f98..71c532c 100644
--- a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
@@ -20,10 +20,10 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyObject;
-import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
@@ -39,7 +39,6 @@
import android.os.UserHandle;
import android.os.UserManager;
-import java.util.Collections;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -49,6 +48,7 @@
import org.robolectric.shadows.ShadowApplication;
import java.util.Arrays;
+import java.util.Collections;
@RunWith(RobolectricTestRunner.class)
public final class AppWithAdminGrantedPermissionsCounterTest {
@@ -129,7 +129,7 @@
verify(mPackageManager).getInstalledApplicationsAsUser(anyInt(), eq(MAIN_USER_ID));
verify(mPackageManager).getInstalledApplicationsAsUser(anyInt(),
eq(MANAGED_PROFILE_ID));
- verify(mPackageManager, atLeast(0)).getInstallReason(anyObject(), anyObject());
+ verify(mPackageManager, atLeast(0)).getInstallReason(any(), any());
verifyNoMoreInteractions(mPackageManager);
}
@@ -166,9 +166,9 @@
}
private void configureInstallTimePermissions() throws RemoteException {
- when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_1_UID)))
+ when(mPackageManagerService.checkUidPermission(any(), eq(APP_1_UID)))
.thenReturn(PackageManager.PERMISSION_DENIED);
- when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_2_UID)))
+ when(mPackageManagerService.checkUidPermission(any(), eq(APP_2_UID)))
.thenReturn(PackageManager.PERMISSION_DENIED);
when(mPackageManagerService.checkUidPermission(PERMISSION_1, APP_3_UID))
.thenReturn(PackageManager.PERMISSION_DENIED);
@@ -178,9 +178,9 @@
.thenReturn(PackageManager.PERMISSION_DENIED);
when(mPackageManagerService.checkUidPermission(PERMISSION_2, APP_4_UID))
.thenReturn(PackageManager.PERMISSION_GRANTED);
- when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_5_UID)))
+ when(mPackageManagerService.checkUidPermission(any(), eq(APP_5_UID)))
.thenReturn(PackageManager.PERMISSION_DENIED);
- when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_6_UID)))
+ when(mPackageManagerService.checkUidPermission(any(), eq(APP_6_UID)))
.thenReturn(PackageManager.PERMISSION_DENIED);
}
@@ -189,15 +189,15 @@
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
when(mDevicePolicyManager.getPermissionGrantState(null, APP_1, PERMISSION_2))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_2), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_2), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_3), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_3), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_4), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_4), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_5), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_5), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_6), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_6), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
}
diff --git a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java
index a818637..9a4978b 100644
--- a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java
@@ -20,10 +20,10 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyObject;
-import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
@@ -122,19 +122,19 @@
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
when(mDevicePolicyManager.getPermissionGrantState(null, APP_1, PERMISSION_2))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_2), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_2), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_3), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_3), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_4), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_4), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_5), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_5), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_DENIED);
// Grant install-time permissions as appropriate.
- when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_1_UID)))
+ when(mPackageManagerService.checkUidPermission(any(), eq(APP_1_UID)))
.thenReturn(PackageManager.PERMISSION_DENIED);
- when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_2_UID)))
+ when(mPackageManagerService.checkUidPermission(any(), eq(APP_2_UID)))
.thenReturn(PackageManager.PERMISSION_DENIED);
when(mPackageManagerService.checkUidPermission(PERMISSION_1, APP_3_UID))
.thenReturn(PackageManager.PERMISSION_DENIED);
@@ -144,7 +144,7 @@
.thenReturn(PackageManager.PERMISSION_DENIED);
when(mPackageManagerService.checkUidPermission(PERMISSION_2, APP_4_UID))
.thenReturn(PackageManager.PERMISSION_GRANTED);
- when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_5_UID)))
+ when(mPackageManagerService.checkUidPermission(any(), eq(APP_5_UID)))
.thenReturn(PackageManager.PERMISSION_DENIED);
// app3 and app5 were installed by enterprise policy.
@@ -168,11 +168,11 @@
buildInfo(APP_6_UID, APP_6, 0 /* flags */, Build.VERSION_CODES.M)));
// Grant run-time permissions as appropriate.
- when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_6), anyObject()))
+ when(mDevicePolicyManager.getPermissionGrantState(eq(null), eq(APP_6), any()))
.thenReturn(DevicePolicyManager.PERMISSION_GRANT_STATE_GRANTED);
// Grant install-time permissions as appropriate.
- when(mPackageManagerService.checkUidPermission(anyObject(), eq(APP_6_UID)))
+ when(mPackageManagerService.checkUidPermission(any(), eq(APP_6_UID)))
.thenReturn(PackageManager.PERMISSION_DENIED);
// app6 was not installed by enterprise policy.
@@ -202,7 +202,7 @@
verify(mPackageManager).getInstalledApplicationsAsUser(anyInt(), eq(MAIN_USER_ID));
verify(mPackageManager).getInstalledApplicationsAsUser(anyInt(),
eq(MANAGED_PROFILE_ID));
- verify(mPackageManager, atLeast(0)).getInstallReason(anyObject(), anyObject());
+ verify(mPackageManager, atLeast(0)).getInstallReason(any(), any());
verifyNoMoreInteractions(mPackageManager);
}
diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java
index e2aed36..602d678 100644
--- a/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java
@@ -20,11 +20,11 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyObject;
-import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.argThat;
import static org.mockito.Mockito.atLeast;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -170,7 +170,7 @@
verify(mPackageManager).getInstalledApplicationsAsUser(anyInt(), eq(MAIN_USER_ID));
verify(mPackageManager).getInstalledApplicationsAsUser(anyInt(), eq(MANAGED_PROFILE_ID));
verify(mPackageManager, atLeast(0))
- .queryIntentActivitiesAsUser(anyObject(), anyInt(), anyInt());
+ .queryIntentActivitiesAsUser(any(), anyInt(), anyInt());
}
public static boolean checkAppFound(List<UserAppInfo> mInstalledAppList, String appId,
diff --git a/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java
index e0a0836..da5ada7 100644
--- a/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java
@@ -20,7 +20,7 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
diff --git a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
index 3e46027..178a26f 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
@@ -24,7 +24,7 @@
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import android.Manifest;
@@ -142,6 +142,6 @@
controller.getSettingIntent(null);
- verifyZeroInteractions(assistUtils);
+ verifyNoInteractions(assistUtils);
}
}
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
index 757a304..3af10fd 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
@@ -18,11 +18,11 @@
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.Matchers.eq;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java
index 55f0210..ec17a86 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollFindSensorTest.java
@@ -19,9 +19,9 @@
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.verify;
import static org.robolectric.RuntimeEnvironment.application;
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 898e433..493436c 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/BluetoothDeviceDetailsFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java
index 53317a9..d501c15 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java
@@ -21,8 +21,8 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
index a53e693..bdcf742 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
@@ -369,14 +369,6 @@
}
@Test
- public void pairingStringIsFormattedCorrectly() {
- final String device = "test_device";
- final Context context = RuntimeEnvironment.application;
- assertThat(context.getString(R.string.bluetooth_pb_acceptance_dialog_text, device, device))
- .contains(device);
- }
-
- @Test
public void pairingDialogDismissedOnPositiveClick() {
// set the dialog variant to confirmation/consent
when(controller.getDialogType()).thenReturn(BluetoothPairingController.CONFIRMATION_DIALOG);
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index f2b0acd..88c9597 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -40,7 +40,7 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import android.content.Context;
@@ -65,7 +65,12 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
+import com.android.settings.homepage.TopLevelHighlightMixin;
+import com.android.settings.homepage.TopLevelSettings;
+import com.android.settings.search.SearchFeatureProviderImpl;
import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.shadow.ShadowActivityEmbeddingUtils;
+import com.android.settings.testutils.shadow.ShadowSplitController;
import com.android.settings.testutils.shadow.ShadowTileUtils;
import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -268,7 +273,7 @@
mImpl.bindPreferenceToTileAndGetObservers(mActivity, mFragment, mForceRoundedIcon,
null /* keys */, tile, "123", Preference.DEFAULT_ORDER);
- verifyZeroInteractions(tile);
+ verifyNoInteractions(tile);
}
@Test
@@ -542,6 +547,64 @@
.isEqualTo(MetricsEvent.SETTINGS_GESTURES);
}
+ /** This test is for large screen devices Activity embedding. */
+ @Test
+ @Config(shadows = {ShadowActivityEmbeddingUtils.class, ShadowSplitController.class})
+ public void bindPreference_clickHighlightedPreference_shouldNotStartActivity() {
+ ShadowSplitController.setIsActivityEmbedded(true);
+ ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(true);
+ mFeatureFactory.searchFeatureProvider = new SearchFeatureProviderImpl();
+
+ String clickPrefKey = "highlight_pref_key";
+ String highlightMixinPrefKey = "highlight_pref_key";
+ FragmentActivity activity = Robolectric.buildActivity(FragmentActivity.class).get();
+ Preference preference = new Preference(RuntimeEnvironment.application);
+ Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
+ mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
+ mActivityInfo.metaData.putString("com.android.settings.intent.action", "TestAction");
+ tile.userHandle = null;
+
+ TopLevelSettings largeScreenTopLevelSettings = new TopLevelSettings(
+ new TestTopLevelHighlightMixin(highlightMixinPrefKey, true /* activityEmbedded */));
+ largeScreenTopLevelSettings.setHighlightPreferenceKey(clickPrefKey);
+
+ mImpl.bindPreferenceToTileAndGetObservers(activity, largeScreenTopLevelSettings,
+ mForceRoundedIcon, preference, tile, clickPrefKey, Preference.DEFAULT_ORDER);
+ preference.performClick();
+
+ ShadowActivity shadowActivity = Shadows.shadowOf(activity);
+ assertThat(shadowActivity.getNextStartedActivityForResult()).isEqualTo(null);
+ }
+
+ /** This test is for large screen devices Activity embedding. */
+ @Test
+ @Config(shadows = {ShadowActivityEmbeddingUtils.class, ShadowSplitController.class})
+ public void bindPreference_clickNotHighlightedPreference_shouldStartActivity() {
+ ShadowSplitController.setIsActivityEmbedded(true);
+ ShadowActivityEmbeddingUtils.setIsEmbeddingActivityEnabled(true);
+ mFeatureFactory.searchFeatureProvider = new SearchFeatureProviderImpl();
+
+ String clickPrefKey = "not_highlight_pref_key";
+ String highlightMixinPrefKey = "highlight_pref_key";
+ FragmentActivity activity = Robolectric.buildActivity(FragmentActivity.class).get();
+ Preference preference = new Preference(RuntimeEnvironment.application);
+ Tile tile = new ActivityTile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
+ mActivityInfo.metaData.putString(META_DATA_PREFERENCE_KEYHINT, "key");
+ mActivityInfo.metaData.putString("com.android.settings.intent.action", "TestAction");
+ tile.userHandle = null;
+
+ TopLevelSettings largeScreenTopLevelSettings = new TopLevelSettings(
+ new TestTopLevelHighlightMixin(highlightMixinPrefKey, true /* activityEmbedded */));
+ largeScreenTopLevelSettings.setHighlightPreferenceKey(clickPrefKey);
+
+ mImpl.bindPreferenceToTileAndGetObservers(activity, largeScreenTopLevelSettings,
+ mForceRoundedIcon, preference, tile, clickPrefKey, Preference.DEFAULT_ORDER);
+ preference.performClick();
+
+ Intent launchIntent = Shadows.shadowOf(activity).getNextStartedActivityForResult().intent;
+ assertThat(launchIntent.getAction()).isEqualTo("TestAction");
+ }
+
@Test
public void clickPreference_withUnresolvableIntent_shouldNotLaunchAnything() {
ReflectionHelpers.setField(
@@ -694,4 +757,19 @@
return "TestFragment";
}
}
+
+ private static class TestTopLevelHighlightMixin extends TopLevelHighlightMixin {
+ private final String mHighlightPreferenceKey;
+
+ TestTopLevelHighlightMixin(String highlightPreferenceKey,
+ boolean activityEmbedded) {
+ super(activityEmbedded);
+ mHighlightPreferenceKey = highlightPreferenceKey;
+ }
+
+ @Override
+ public String getHighlightPreferenceKey() {
+ return mHighlightPreferenceKey;
+ }
+ }
}
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/datausage/AppDataUsageTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
index 483d746..47db4f2 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
@@ -19,14 +19,14 @@
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
diff --git a/tests/robotests/src/com/android/settings/datausage/BillingCycleSettingsTest.java b/tests/robotests/src/com/android/settings/datausage/BillingCycleSettingsTest.java
index 861b4e3..cef5928 100644
--- a/tests/robotests/src/com/android/settings/datausage/BillingCycleSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/BillingCycleSettingsTest.java
@@ -19,16 +19,15 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyLong;
-import static org.mockito.ArgumentMatchers.anyObject;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.anyLong;
+import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.nullable;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -133,9 +132,9 @@
mDataLimit, mDataWarning, mEnableDataLimit, mEnableDataWarning);
doReturn("some-string").when(billingCycleSettings).getString(anyInt(), anyInt());
- when(mNetworkPolicyEditor.getPolicyCycleDay(anyObject())).thenReturn(CYCLE_NONE + 1);
- when(mNetworkPolicyEditor.getPolicyLimitBytes(anyObject())).thenReturn(2000L);
- when(mNetworkPolicyEditor.getPolicyWarningBytes(anyObject())).thenReturn(1000L);
+ when(mNetworkPolicyEditor.getPolicyCycleDay(any())).thenReturn(CYCLE_NONE + 1);
+ when(mNetworkPolicyEditor.getPolicyLimitBytes(any())).thenReturn(2000L);
+ when(mNetworkPolicyEditor.getPolicyWarningBytes(any())).thenReturn(1000L);
billingCycleSettings.updatePrefs();
diff --git a/tests/robotests/src/com/android/settings/datausage/lib/DataUsageLibTest.java b/tests/robotests/src/com/android/settings/datausage/lib/DataUsageLibTest.java
index 70a1a38..4391425 100644
--- a/tests/robotests/src/com/android/settings/datausage/lib/DataUsageLibTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/lib/DataUsageLibTest.java
@@ -18,7 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
diff --git a/tests/robotests/src/com/android/settings/datetime/DatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/DatePreferenceControllerTest.java
index 1b8148b..c7357ad 100644
--- a/tests/robotests/src/com/android/settings/datetime/DatePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/DatePreferenceControllerTest.java
@@ -18,15 +18,19 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.DatePickerDialog;
import android.app.time.Capabilities;
import android.app.time.TimeCapabilities;
import android.app.time.TimeCapabilitiesAndConfig;
import android.app.time.TimeConfiguration;
import android.app.time.TimeManager;
import android.app.timedetector.TimeDetector;
+import android.app.timedetector.TimeDetectorHelper;
import android.content.Context;
import android.os.UserHandle;
@@ -40,17 +44,20 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
@RunWith(RobolectricTestRunner.class)
public class DatePreferenceControllerTest {
@Mock
private Context mContext;
@Mock
- private TimeDetector mTimeDetector;
+ private DatePreferenceController.DatePreferenceHost mHost;
@Mock
private TimeManager mTimeManager;
@Mock
- private DatePreferenceController.DatePreferenceHost mHost;
+ private TimeDetector mTimeDetector;
private RestrictedPreference mPreference;
private DatePreferenceController mController;
@@ -114,6 +121,26 @@
verify(mHost).showDatePicker();
}
+ @Test
+ public void testBuildDatePicker() {
+ TimeDetectorHelper timeDetectorHelper = mock(TimeDetectorHelper.class);
+ when(timeDetectorHelper.getManualDateSelectionYearMin()).thenReturn(2015);
+ when(timeDetectorHelper.getManualDateSelectionYearMax()).thenReturn(2020);
+
+ Context context = RuntimeEnvironment.application;
+ DatePickerDialog dialog = mController.buildDatePicker(context, timeDetectorHelper);
+
+ GregorianCalendar calendar = new GregorianCalendar();
+
+ long minDate = dialog.getDatePicker().getMinDate();
+ calendar.setTimeInMillis(minDate);
+ assertEquals(2015, calendar.get(Calendar.YEAR));
+
+ long maxDate = dialog.getDatePicker().getMaxDate();
+ calendar.setTimeInMillis(maxDate);
+ assertEquals(2020, calendar.get(Calendar.YEAR));
+ }
+
private static TimeCapabilitiesAndConfig createCapabilitiesAndConfig(
boolean suggestManualAllowed) {
int suggestManualCapability = suggestManualAllowed ? Capabilities.CAPABILITY_POSSESSED
diff --git a/tests/robotests/src/com/android/settings/datetime/LocationTimeZoneDetectionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/LocationTimeZoneDetectionPreferenceControllerTest.java
index 1f50bed..fc62ac8 100644
--- a/tests/robotests/src/com/android/settings/datetime/LocationTimeZoneDetectionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/LocationTimeZoneDetectionPreferenceControllerTest.java
@@ -24,7 +24,7 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import android.app.time.Capabilities;
@@ -99,7 +99,7 @@
mController.setChecked(true);
// Verify the TimeManager was not called.
- verifyZeroInteractions(mTimeManager);
+ verifyNoInteractions(mTimeManager);
}
@Test
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/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java
index 3f49b15..35e044c 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/firmwareversion/MainlineModuleVersionPreferenceControllerTest.java
@@ -23,8 +23,8 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
diff --git a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java
index 09d1c84..06e4107 100644
--- a/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java
+++ b/tests/robotests/src/com/android/settings/enterprise/AdminGrantedPermissionsPreferenceControllerTestBase.java
@@ -18,10 +18,10 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.anyObject;
-import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -79,7 +79,7 @@
}
}).when(mFeatureFactory.applicationFeatureProvider)
.calculateNumberOfAppsWithAdminGrantedPermissions(eq(mPermissions),
- eq(async), anyObject());
+ eq(async), any());
}
@Test
diff --git a/tests/robotests/src/com/android/settings/enterprise/EnterpriseInstalledPackagesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/enterprise/EnterpriseInstalledPackagesPreferenceControllerTest.java
index f39b4b8..c32d2d7 100644
--- a/tests/robotests/src/com/android/settings/enterprise/EnterpriseInstalledPackagesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/enterprise/EnterpriseInstalledPackagesPreferenceControllerTest.java
@@ -18,7 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.anyObject;
+import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
@@ -74,7 +74,7 @@
return null;
}
}).when(mFeatureFactory.applicationFeatureProvider)
- .calculateNumberOfPolicyInstalledApps(eq(async), anyObject());
+ .calculateNumberOfPolicyInstalledApps(eq(async), any());
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 079e8f9..e7d7cd0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -30,7 +30,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import android.app.AppOpsManager;
@@ -824,7 +824,7 @@
mFragment.onRadioButtonClicked(mOptimizePreference);
mFragment.onPause();
- verifyZeroInteractions(mMetricsFeatureProvider);
+ verifyNoInteractions(mMetricsFeatureProvider);
}
@Test
@@ -835,7 +835,7 @@
mFragment.notifyBackupManager();
- verifyZeroInteractions(mBackupManager);
+ verifyNoInteractions(mBackupManager);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
index 14bbeea..55ff93b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBackupHelperTest.java
@@ -34,7 +34,7 @@
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import android.app.AppOpsManager;
import android.app.backup.BackupDataInputStream;
@@ -70,6 +70,7 @@
import java.util.Arrays;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.TimeUnit;
@RunWith(RobolectricTestRunner.class)
@@ -253,7 +254,7 @@
mBatteryBackupHelper.restoreEntity(mBackupDataInputStream);
- verifyZeroInteractions(mBackupDataInputStream);
+ verifyNoInteractions(mBackupDataInputStream);
}
@Test
@@ -291,13 +292,13 @@
@Test
public void restoreOptimizationMode_nullBytesData_skipRestore() throws Exception {
mBatteryBackupHelper.restoreOptimizationMode(new byte[0]);
- verifyZeroInteractions(mBatteryOptimizeUtils);
+ verifyNoInteractions(mBatteryOptimizeUtils);
mBatteryBackupHelper.restoreOptimizationMode("invalid data format".getBytes());
- verifyZeroInteractions(mBatteryOptimizeUtils);
+ verifyNoInteractions(mBatteryOptimizeUtils);
mBatteryBackupHelper.restoreOptimizationMode(DELIMITER.getBytes());
- verifyZeroInteractions(mBatteryOptimizeUtils);
+ verifyNoInteractions(mBatteryOptimizeUtils);
}
@Test
@@ -343,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(
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
index 6389dc9..78534e1 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryHeaderPreferenceControllerTest.java
@@ -23,7 +23,7 @@
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import android.app.Activity;
@@ -267,7 +267,7 @@
mController.updateHeaderByBatteryTips(null, mBatteryInfo);
- verifyZeroInteractions(mBatteryUsageProgressBarPref);
+ verifyNoInteractions(mBatteryUsageProgressBarPref);
}
@Test
@@ -277,7 +277,7 @@
mController.updateHeaderByBatteryTips(lowBatteryTip, null);
- verifyZeroInteractions(mBatteryUsageProgressBarPref);
+ verifyNoInteractions(mBatteryUsageProgressBarPref);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
index b223d0b..f92c322 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
@@ -25,16 +25,16 @@
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.anyInt;
+import static org.mockito.Mockito.anyLong;
+import static org.mockito.Mockito.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.verifyNoInteractions;
import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
import android.app.AppOpsManager;
@@ -183,8 +183,8 @@
mBatteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED);
TimeUnit.SECONDS.sleep(1);
- verifyZeroInteractions(mMockBackend);
- verifyZeroInteractions(mMockBatteryUtils);
+ verifyNoInteractions(mMockBackend);
+ verifyNoInteractions(mMockBatteryUtils);
}
@Test
@@ -247,7 +247,7 @@
AppOpsManager.MODE_ALLOWED, /* allowListed */ false,
/* isSystemOrDefaultApp */ false);
- verifyZeroInteractions(mMockBatteryUtils);
+ verifyNoInteractions(mMockBatteryUtils);
final InOrder inOrder = inOrder(mMockBackend);
inOrder.verify(mMockBackend).refreshList();
@@ -261,7 +261,7 @@
AppOpsManager.MODE_ALLOWED, /* allowListed */ true,
/* isSystemOrDefaultApp */ true);
- verifyZeroInteractions(mMockBatteryUtils);
+ verifyNoInteractions(mMockBatteryUtils);
final InOrder inOrder = inOrder(mMockBackend);
inOrder.verify(mMockBackend).refreshList();
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
index 1b5ded0..1fec92a 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
@@ -61,6 +61,18 @@
}
@Test
+ public void testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked() {
+ when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
+ when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
+ when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
+ BatteryOptimizeUtils.MODE_OPTIMIZED);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isChecked()).isTrue();
+ }
+
+ @Test
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
index bacfb1a..944376c 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/RestrictedPreferenceControllerTest.java
@@ -69,7 +69,19 @@
}
@Test
- public void testUpdateState_isSystemOrDefaultApp_prefChecked() {
+ public void testUpdateState_isSystemOrDefaultAppAndRestrictedStates_prefChecked() {
+ when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
+ when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
+ when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
+ BatteryOptimizeUtils.MODE_RESTRICTED);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isChecked()).isTrue();
+ }
+
+ @Test
+ public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
index d5500fa..c5642df 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
@@ -70,13 +70,26 @@
}
@Test
- public void testUpdateState_isSystemOrDefaultApp_prefChecked() {
+ public void testUpdateState_isSystemOrDefaultAppAndUnrestrictedStates_prefChecked() {
+ when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
+ when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
+ when(mockBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
+ BatteryOptimizeUtils.MODE_UNRESTRICTED);
+
+ mController.updateState(mPreference);
+
+ assertThat(mPreference.isChecked()).isTrue();
+ }
+
+ @Test
+ public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
when(mockBatteryOptimizeUtils.isValidPackageName()).thenReturn(true);
when(mockBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
mController.updateState(mPreference);
- assertThat(mPreference.isChecked()).isTrue();
+ assertThat(mPreference.isChecked()).isFalse();
+ assertThat(mPreference.isEnabled()).isFalse();
}
@Test
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java
index b05d06d..9de3ada 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSeekBarControllerTest.java
@@ -12,6 +12,7 @@
import android.os.PowerManager;
import android.provider.Settings;
import android.provider.Settings.Global;
+import android.widget.SeekBar;
import androidx.preference.PreferenceScreen;
@@ -46,22 +47,47 @@
}
@Test
- public void onPreferenceChange_updatesSettingsGlobal() {
+ public void onPreferenceChange_withoutOnStopTrackingTouch_updatesTitleAndDescriptionOnly() {
final CharSequence expectedTitle = "50%";
- Settings.Global.putInt(mResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 5);
- mController.onPreferenceChange(mController.mSeekBarPreference, 10);
- assertThat(Settings.Global.getInt(mResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1))
- .isEqualTo(50);
+ setTriggerLevel(5);
+ mController.onPreferenceChange(mController.mSeekBarPreference, 10);
+
+ assertThat(getTriggerLevel()).isEqualTo(5);
assertThat(mController.mSeekBarPreference.getTitle()).isEqualTo(expectedTitle);
verify(mController.mSeekBarPreference).overrideSeekBarStateDescription(expectedTitle);
}
@Test
+ public void onPreferenceChange_withOnStopTrackingTouch_updatesSettingsGlobal() {
+ final CharSequence expectedTitle = "50%";
+ setTriggerLevel(5);
+
+ mController.onPreferenceChange(mController.mSeekBarPreference, 10);
+ mController.onStopTrackingTouch(new SeekBar(mContext));
+
+ assertThat(getTriggerLevel()).isEqualTo(50);
+ assertThat(mController.mSeekBarPreference.getTitle()).isEqualTo(expectedTitle);
+ verify(mController.mSeekBarPreference).overrideSeekBarStateDescription(expectedTitle);
+ }
+
+ @Test
+ public void onStopTrackingTouch_invalidValue_noUpdates() {
+ setTriggerLevel(5);
+
+ mController.mPercentage = 0;
+ mController.onStopTrackingTouch(new SeekBar(mContext));
+
+ assertThat(getTriggerLevel()).isEqualTo(5);
+ }
+
+ @Test
public void updateSeekBar_routineMode_hasCorrectProperties() {
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
+
mController.updateSeekBar();
+
assertThat(mController.mSeekBarPreference.isVisible()).isFalse();
verify(mController.mSeekBarPreference, never()).overrideSeekBarStateDescription(any());
}
@@ -71,7 +97,8 @@
final CharSequence expectedTitle = "10%";
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
- Settings.Global.putInt(mResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 10);
+ setTriggerLevel(10);
+
mController.updateSeekBar();
assertThat(mController.mSeekBarPreference.isVisible()).isTrue();
@@ -83,8 +110,10 @@
public void updateSeekBar_noneMode_hasCorrectProperties() {
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
- Settings.Global.putInt(mResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
+ setTriggerLevel(0);
+
mController.updateSeekBar();
+
assertThat(mController.mSeekBarPreference.isVisible()).isFalse();
verify(mController.mSeekBarPreference, never()).overrideSeekBarStateDescription(any());
}
@@ -93,9 +122,18 @@
public void addToScreen_addsToEnd() {
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
- Settings.Global.putInt(mResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 15);
+ setTriggerLevel(15);
+
mController.addToScreen(mScreen);
+
assertThat(mController.mSeekBarPreference.getOrder()).isEqualTo(100);
}
+ private void setTriggerLevel(int level) {
+ Settings.Global.putInt(mResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, level);
+ }
+
+ private int getTriggerLevel() {
+ return Settings.Global.getInt(mResolver, Global.LOW_POWER_MODE_TRIGGER_LEVEL, -1);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceControllerTest.java
index da397fd..5815bae 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryAppListPreferenceControllerTest.java
@@ -18,7 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
index 75b7fe1..4a28e64 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerTest.java
@@ -18,8 +18,8 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Matchers.anyLong;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyLong;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -28,8 +28,6 @@
import android.app.settings.SettingsEnums;
import android.content.ContentValues;
import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerV2Test.java
new file mode 100644
index 0000000..16e0459
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceControllerV2Test.java
@@ -0,0 +1,628 @@
+/*
+ * 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 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 BatteryChartPreferenceControllerV2Test {
+ 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 BatteryChartViewV2 mDailyChartView;
+ @Mock
+ private BatteryChartViewV2 mHourlyChartView;
+ @Mock
+ private PowerGaugePreference mPowerGaugePreference;
+ @Mock
+ private BatteryUtils mBatteryUtils;
+
+ private Context mContext;
+ private FakeFeatureFactory mFeatureFactory;
+ private BatteryDiffEntry mBatteryDiffEntry;
+ private MetricsFeatureProvider mMetricsFeatureProvider;
+ private BatteryChartPreferenceControllerV2 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);
+ 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.SELECTED_INDEX_ALL,
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+ }
+
+ @Test
+ public void setBatteryChartViewModel_60Hours() {
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(60));
+
+ verify(mDailyChartView, atLeastOnce()).setVisibility(View.VISIBLE);
+ verify(mHourlyChartView, atLeastOnce()).setVisibility(View.GONE);
+ verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
+ List.of(100, 83, 59, 41),
+ List.of("SAT", "SUN", "MON", "MON"),
+ BatteryChartViewModel.SELECTED_INDEX_ALL,
+ BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
+
+ reset(mDailyChartView);
+ reset(mHourlyChartView);
+ mBatteryChartPreferenceController.mDailyChartIndex = 0;
+ mBatteryChartPreferenceController.refreshUi();
+ verify(mDailyChartView).setVisibility(View.VISIBLE);
+ verify(mHourlyChartView).setVisibility(View.VISIBLE);
+ verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
+ List.of(100, 83, 59, 41),
+ List.of("SAT", "SUN", "MON", "MON"),
+ 0,
+ BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
+ 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.SELECTED_INDEX_ALL,
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+
+ reset(mDailyChartView);
+ reset(mHourlyChartView);
+ mBatteryChartPreferenceController.mDailyChartIndex = 1;
+ mBatteryChartPreferenceController.mHourlyChartIndex = 6;
+ mBatteryChartPreferenceController.refreshUi();
+ verify(mDailyChartView).setVisibility(View.VISIBLE);
+ verify(mHourlyChartView).setVisibility(View.VISIBLE);
+ verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
+ List.of(100, 83, 59, 41),
+ List.of("SAT", "SUN", "MON", "MON"),
+ 1,
+ BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
+ verify(mHourlyChartView).setViewModel(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"),
+ 6,
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+
+ reset(mDailyChartView);
+ reset(mHourlyChartView);
+ mBatteryChartPreferenceController.mDailyChartIndex = 2;
+ mBatteryChartPreferenceController.mHourlyChartIndex =
+ BatteryChartViewModel.SELECTED_INDEX_ALL;
+ mBatteryChartPreferenceController.refreshUi();
+ verify(mDailyChartView).setVisibility(View.VISIBLE);
+ verify(mHourlyChartView).setVisibility(View.VISIBLE);
+ verify(mDailyChartView).setViewModel(new BatteryChartViewModel(
+ List.of(100, 83, 59, 41),
+ List.of("SAT", "SUN", "MON", "MON"),
+ 2,
+ BatteryChartViewModel.AxisLabelPosition.CENTER_OF_TRAPEZOIDS));
+ 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.SELECTED_INDEX_ALL,
+ 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 handlePreferenceTreeiClick_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_setLast24HrIntoBothTitleTextView() {
+ mBatteryChartPreferenceController = createController();
+ mBatteryChartPreferenceController.mAppListPrefGroup =
+ spy(new PreferenceCategory(mContext));
+ mBatteryChartPreferenceController.mExpandDividerPreference =
+ spy(new ExpandDividerPreference(mContext));
+ // Simulates select all condition.
+ 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 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 onSaveInstanceState_restoreSelectedIndexAndExpandState() {
+ final int expectedIndex = 1;
+ final boolean isExpanded = true;
+ final Bundle bundle = new Bundle();
+ mBatteryChartPreferenceController.mHourlyChartIndex = expectedIndex;
+ mBatteryChartPreferenceController.mIsExpanded = isExpanded;
+ mBatteryChartPreferenceController.onSaveInstanceState(bundle);
+ // Replaces the original controller with other values.
+ mBatteryChartPreferenceController.mHourlyChartIndex = -1;
+ mBatteryChartPreferenceController.mIsExpanded = false;
+
+ mBatteryChartPreferenceController.onCreate(bundle);
+ mBatteryChartPreferenceController.setBatteryHistoryMap(createBatteryHistoryMap(25));
+
+ assertThat(mBatteryChartPreferenceController.mHourlyChartIndex)
+ .isEqualTo(expectedIndex);
+ 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 BatteryChartPreferenceControllerV2 createController() {
+ final BatteryChartPreferenceControllerV2 controller =
+ new BatteryChartPreferenceControllerV2(
+ mContext, "app_list", /*lifecycle=*/ null,
+ mSettingsActivity, mFragment);
+ controller.mPrefContext = mContext;
+ return controller;
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewV2Test.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewV2Test.java
new file mode 100644
index 0000000..1747335
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryChartViewV2Test.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 BatteryChartViewV2Test {
+
+ private Context mContext;
+ private BatteryChartViewV2 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 BatteryChartViewV2(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(BatteryChartViewV2.isAccessibilityEnabled(mContext)).isFalse();
+ }
+
+ @Test
+ public void isAccessibilityEnabled_emptyInfo_returnFalse() {
+ doReturn(true).when(mMockAccessibilityManager).isEnabled();
+ doReturn(new ArrayList<AccessibilityServiceInfo>())
+ .when(mMockAccessibilityManager)
+ .getEnabledAccessibilityServiceList(anyInt());
+
+ assertThat(BatteryChartViewV2.isAccessibilityEnabled(mContext)).isFalse();
+ }
+
+ @Test
+ public void isAccessibilityEnabled_validServiceId_returnTrue() {
+ doReturn(true).when(mMockAccessibilityManager).isEnabled();
+ assertThat(BatteryChartViewV2.isAccessibilityEnabled(mContext)).isTrue();
+ }
+
+ @Test
+ public void onClick_invokesCallback() {
+ final int originalSelectedIndex = 2;
+ mBatteryChartView.setViewModel(
+ new BatteryChartViewModel(List.of(90, 80, 70, 60), List.of("", "", "", ""),
+ originalSelectedIndex,
+ BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS));
+ for (int i = 0; i < mBatteryChartView.mTrapezoidSlots.length; i++) {
+ mBatteryChartView.mTrapezoidSlots[i] = new BatteryChartViewV2.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.SELECTED_INDEX_ALL,
+ 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/batteryusage/BatteryDiffEntryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java
index bb19b5a..07a5504 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffEntryTest.java
@@ -17,10 +17,10 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Matchers.anyInt;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.spy;
import android.content.ContentValues;
@@ -138,7 +138,7 @@
// Generates fake testing data.
final ContentValues values = getContentValuesWithType(
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
- values.put("drainType",
+ values.put(BatteryHistEntry.KEY_DRAIN_TYPE,
Integer.valueOf(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY));
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
@@ -164,7 +164,7 @@
// Generates fake testing data.
final ContentValues values = getContentValuesWithType(
ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
- values.put("userId", Integer.valueOf(1001));
+ values.put(BatteryHistEntry.KEY_USER_ID, Integer.valueOf(1001));
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);
@@ -189,8 +189,8 @@
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);
+ 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)
@@ -233,7 +233,7 @@
final String expectedAppLabel = "fake app label";
final ContentValues values = getContentValuesWithType(
ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
- values.put("appLabel", expectedAppLabel);
+ values.put(BatteryHistEntry.KEY_APP_LABEL, expectedAppLabel);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);
@@ -391,8 +391,8 @@
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);
+ values.put(BatteryHistEntry.KEY_UID, /*invalid uid*/ 10001);
+ values.put(BatteryHistEntry.KEY_PACKAGE_NAME, fakePackageName);
final BatteryDiffEntry entry =
createBatteryDiffEntry(10, new BatteryHistEntry(values));
@@ -424,7 +424,7 @@
final String expectedPackageName = "com.fake.google.com";
final ContentValues values = getContentValuesWithType(
ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
- values.put("packageName", expectedPackageName);
+ values.put(BatteryHistEntry.KEY_PACKAGE_NAME, expectedPackageName);
final BatteryDiffEntry entry =
createBatteryDiffEntry(10, new BatteryHistEntry(values));
@@ -437,7 +437,7 @@
final ContentValues values = getContentValuesWithType(
ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
values.put(
- "packageName",
+ BatteryHistEntry.KEY_PACKAGE_NAME,
expectedPackageName + ":privileged_process0");
final BatteryDiffEntry entry =
createBatteryDiffEntry(10, new BatteryHistEntry(values));
@@ -445,11 +445,24 @@
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,
@@ -472,15 +485,15 @@
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");
+ 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(mMockPackageManager).getDefaultActivityIcon();
doReturn(null).when(mMockPackageManager).getApplicationInfo("com.a.b.c", 0);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java
index 0b8a98a..c1f9815 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java
@@ -27,6 +27,7 @@
import android.os.LocaleList;
import android.os.UserHandle;
+import com.android.settings.fuelgauge.BatteryUtils;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.testutils.FakeFeatureFactory;
@@ -39,6 +40,7 @@
import org.robolectric.RuntimeEnvironment;
import java.util.Arrays;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
@@ -371,6 +373,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) {
@@ -390,6 +457,15 @@
}
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);
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..af1030c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
@@ -0,0 +1,961 @@
+/*
+ * 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_emptyHourlyData_returnNull() {
+ final long[] timestamps = {1000000L, 2000000L};
+ final int[] levels = {100, 99};
+ final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
+ createHistoryMap(timestamps, levels);
+
+ assertThat(DataProcessor.getBatteryUsageMap(
+ mContext, new ArrayList<>(), batteryHistoryMap)).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/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/network/TetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
index bafc021..9aa79ff 100644
--- a/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/TetherPreferenceControllerTest.java
@@ -16,16 +16,15 @@
package com.android.settings.network;
-import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.verifyNoMoreInteractions;
-import static org.mockito.Mockito.verifyZeroInteractions;
import static org.mockito.Mockito.when;
-import android.app.admin.DevicePolicyManager;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothPan;
import android.bluetooth.BluetoothProfile;
@@ -162,7 +161,7 @@
mController.onResume();
- verifyZeroInteractions(mPreference);
+ verifyNoInteractions(mPreference);
Settings.Global.putInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1);
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenModeAutomaticRulesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenModeAutomaticRulesPreferenceControllerTest.java
index 1660955..3791c23 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenModeAutomaticRulesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenModeAutomaticRulesPreferenceControllerTest.java
@@ -18,6 +18,7 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doReturn;
@@ -42,10 +43,10 @@
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.mockito.internal.util.reflection.FieldSetter;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.util.ReflectionHelpers;
+import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
@@ -192,16 +193,26 @@
rule.setEnabled(false);
rMap.put(testId, rule);
mockGetAutomaticZenRules(NUM_RULES, rMap);
- FieldSetter.setField(mZenRulePreference, ZenRulePreference.class.getDeclaredField("mId"), testId);
+ setZenRulePreferenceField("mId", testId);
mController.updateState(mockPref);
verify(mZenRulePreference, times(1)).updatePreference(any());
verify(mockPref, never()).removeAll();
assertEquals(NUM_RULES, mController.mZenRulePreferences.size());
}
+ private void setZenRulePreferenceField(String name, Object value) {
+ try {
+ Field field = ZenRulePreference.class.getDeclaredField("mId");
+ field.setAccessible(true);
+ field.set(mZenRulePreference, value);
+ } catch (ReflectiveOperationException e) {
+ fail("Unable to set mZenRulePreference field: " + name);
+ }
+ }
+
private void mockGetAutomaticZenRules(int numRules, Map<String, AutomaticZenRule> rules) {
Map.Entry<String, AutomaticZenRule>[] arr = new Map.Entry[numRules];
rules.entrySet().toArray(arr);
when(mBackend.getAutomaticZenRules()).thenReturn(arr);
}
-}
\ No newline at end of file
+}
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenModePriorityConversationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenModePriorityConversationsPreferenceControllerTest.java
index 6bf0538..d5834f9 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenModePriorityConversationsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenModePriorityConversationsPreferenceControllerTest.java
@@ -26,7 +26,7 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
@@ -146,4 +146,4 @@
}
return null;
}
-}
\ No newline at end of file
+}
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenModePrioritySendersPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenModePrioritySendersPreferenceControllerTest.java
index 99fa8e6..c431c53 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenModePrioritySendersPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenModePrioritySendersPreferenceControllerTest.java
@@ -30,8 +30,8 @@
import static com.android.settings.notification.zen.ZenPrioritySendersHelper.KEY_NONE;
import static com.android.settings.notification.zen.ZenPrioritySendersHelper.UNKNOWN;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
diff --git a/tests/robotests/src/com/android/settings/notification/zen/ZenRuleStarredContactsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/zen/ZenRuleStarredContactsPreferenceControllerTest.java
index 2f7dfe7..01f3dfa 100644
--- a/tests/robotests/src/com/android/settings/notification/zen/ZenRuleStarredContactsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/zen/ZenRuleStarredContactsPreferenceControllerTest.java
@@ -18,7 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
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/print/PrintJobMessagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/print/PrintJobMessagePreferenceControllerTest.java
index 96036d5..b5d07cc 100644
--- a/tests/robotests/src/com/android/settings/print/PrintJobMessagePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/print/PrintJobMessagePreferenceControllerTest.java
@@ -21,8 +21,8 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyObject;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -72,7 +72,7 @@
mPreference = new Preference(mContext);
when(mContext.getSystemService(Context.PRINT_SERVICE)).thenReturn(mPrintManager);
when(mPrintManager.getGlobalPrintManagerForUser(anyInt())).thenReturn(mPrintManager);
- when(mPrintManager.getPrintJob(anyObject())).thenReturn(mPrintJob);
+ when(mPrintManager.getPrintJob(any())).thenReturn(mPrintJob);
when(mPrintJob.getInfo()).thenReturn(mPrintJobInfo);
mController = new PrintJobMessagePreferenceController(mContext, PREF_KEY);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
@@ -93,7 +93,7 @@
@Test
public void updateUi_visiblePreference() {
- when(mPrintJobInfo.getStatus(anyObject())).thenReturn("TestPrint");
+ when(mPrintJobInfo.getStatus(any())).thenReturn("TestPrint");
mLifecycle.handleLifecycleEvent(ON_START);
assertThat(mPreference.isVisible()).isTrue();
@@ -103,7 +103,7 @@
@Test
public void updateUi_invisiblePreference() {
- when(mPrintJobInfo.getStatus(anyObject())).thenReturn(null);
+ when(mPrintJobInfo.getStatus(any())).thenReturn(null);
mLifecycle.handleLifecycleEvent(ON_START);
assertThat(mPreference.isVisible()).isFalse();
diff --git a/tests/robotests/src/com/android/settings/print/PrintJobPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/print/PrintJobPreferenceControllerTest.java
index 09c5bf3..da4d58c 100644
--- a/tests/robotests/src/com/android/settings/print/PrintJobPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/print/PrintJobPreferenceControllerTest.java
@@ -21,8 +21,8 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.anyObject;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -75,7 +75,7 @@
mTestLabel = "PrintTest";
when(mContext.getSystemService(Context.PRINT_SERVICE)).thenReturn(mPrintManager);
when(mPrintManager.getGlobalPrintManagerForUser(anyInt())).thenReturn(mPrintManager);
- when(mPrintManager.getPrintJob(anyObject())).thenReturn(mPrintJob);
+ when(mPrintManager.getPrintJob(any())).thenReturn(mPrintJob);
when(mPrintJob.getInfo()).thenReturn(mPrintJobInfo);
mController = new PrintJobPreferenceController(mContext, PREF_KEY);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
diff --git a/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java b/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java
index c646a93..2a7bd29 100644
--- a/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java
+++ b/tests/robotests/src/com/android/settings/search/actionbar/SearchMenuControllerTest.java
@@ -21,7 +21,7 @@
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums;
@@ -91,7 +91,7 @@
SearchMenuController.init(mHost);
mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
- verifyZeroInteractions(mMenu);
+ verifyNoInteractions(mMenu);
}
@Test
@@ -100,7 +100,7 @@
SearchMenuController.init(mHost);
mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
- verifyZeroInteractions(mMenu);
+ verifyNoInteractions(mMenu);
}
@Test
@@ -112,6 +112,6 @@
mHost.getSettingsLifecycle().onCreateOptionsMenu(mMenu, null /* inflater */);
- verifyZeroInteractions(mMenu);
+ verifyNoInteractions(mMenu);
}
}
diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
index df38e7f..0a2c48c 100644
--- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
@@ -172,7 +172,6 @@
}
@Test
- @Ignore
public void testInitialSliceReturned_emptySlice() {
SliceTestUtils.insertSliceToDb(mContext, KEY);
Slice slice = mProvider.onBindSlice(INTENT_SLICE_URI);
@@ -182,7 +181,6 @@
}
@Test
- @Ignore
public void testLoadSlice_returnsSliceFromAccessor() {
SliceTestUtils.insertSliceToDb(mContext, KEY);
@@ -194,7 +192,6 @@
}
@Test
- @Ignore
public void loadSlice_registersIntentFilter() {
SliceTestUtils.insertSliceToDb(mContext, KEY);
@@ -205,7 +202,6 @@
}
@Test
- @Ignore
public void loadSlice_registersBackgroundListener() {
SliceTestUtils.insertSliceToDb(mContext, KEY);
@@ -219,7 +215,6 @@
}
@Test
- @Ignore
public void testLoadSlice_cachedEntryRemovedOnBuild() {
SliceData data = getMockData();
mProvider.mSliceWeakDataCache.put(data.getUri(), data);
@@ -232,7 +227,6 @@
}
@Test
- @Ignore
public void onBindSlice_mainThread_shouldNotOverrideStrictMode() {
ShadowThreadUtils.setIsMainThread(true);
final StrictMode.ThreadPolicy oldThreadPolicy = StrictMode.getThreadPolicy();
@@ -276,7 +270,6 @@
}
@Test
- @Ignore
public void onBindSlice_nightModeChanged_shouldReloadTheme() {
mContext.getResources().getConfiguration().uiMode = UI_MODE_NIGHT_NO;
final SliceData data = getMockData();
@@ -290,7 +283,6 @@
}
@Test
- @Ignore
public void onBindSlice_nightModeNotChanged_shouldNotReloadTheme() {
mContext.getResources().getConfiguration().uiMode = UI_MODE_NIGHT_NO;
SliceData data = getMockData();
@@ -332,7 +324,6 @@
}
@Test
- @Ignore
public void getDescendantUris_invalidPath_returnsEmpty() {
final String key = "platform_key";
SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */,
@@ -350,7 +341,6 @@
}
@Test
- @Ignore
public void getDescendantUris_platformSlice_doesNotReturnOEMSlice() {
SliceTestUtils.insertSliceToDb(mContext, "oem_key", false /* isPlatformSlice */,
null /* customizedUnavailableSliceSubtitle */, true /* isPublicSlice */);
@@ -366,7 +356,6 @@
}
@Test
- @Ignore
public void getDescendantUris_oemSlice_doesNotReturnPlatformSlice() {
SliceTestUtils.insertSliceToDb(mContext, "platform_key", true /* isPlatformSlice */,
null /* customizedUnavailableSliceSubtitle */, true /* isPublicSlice */);
@@ -382,7 +371,6 @@
}
@Test
- @Ignore
public void getDescendantUris_oemSlice_returnsOEMUriDescendant() {
final String key = "oem_key";
SliceTestUtils.insertSliceToDb(mContext, key, false /* isPlatformSlice */,
@@ -407,7 +395,6 @@
}
@Test
- @Ignore
public void getDescendantUris_oemSliceNoPath_returnsOEMUriDescendant() {
final String key = "oem_key";
SliceTestUtils.insertSliceToDb(mContext, key, false /* isPlatformSlice */,
@@ -431,7 +418,6 @@
}
@Test
- @Ignore
public void getDescendantUris_oemSliceNoPath_notContainPrivateUri() {
final String key = "oem_key";
SliceTestUtils.insertSliceToDb(mContext, key, false /* isPlatformSlice */,
@@ -453,7 +439,6 @@
}
@Test
- @Ignore
public void getDescendantUris_platformSlice_returnsPlatformUriDescendant() {
final String key = "platform_key";
SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */,
@@ -478,7 +463,6 @@
}
@Test
- @Ignore
public void getDescendantUris_platformSliceNoPath_returnsPlatformUriDescendant() {
final String key = "platform_key";
SliceTestUtils.insertSliceToDb(mContext, key, true /* isPlatformSlice */,
@@ -502,7 +486,6 @@
}
@Test
- @Ignore
public void getDescendantUris_noAuthorityNorPath_returnsAllUris() {
final String platformKey = "platform_key";
final String oemKey = "oemKey";
@@ -536,7 +519,6 @@
@Test
@Config(qualifiers = "mcc999")
- @Ignore
public void getDescendantUris_privateSlicesNeeded_containsPrivateSliceUri() {
final String privateKey = "test_private";
final Uri specialUri = Uri.parse("content://com.android.settings.slices/test");
@@ -559,7 +541,6 @@
@Test
@Config(qualifiers = "mcc999")
- @Ignore
public void getDescendantUris_privateSlicesNotNeeded_notContainPrivateSliceUri() {
final Uri specialUri = Uri.parse("content://com.android.settings.slices/test");
doReturn(false).when(mProvider).isPrivateSlicesNeeded(specialUri);
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSplitController.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSplitController.java
new file mode 100644
index 0000000..bbd92c9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowSplitController.java
@@ -0,0 +1,42 @@
+/*
+ * 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.testutils.shadow;
+
+import android.app.Activity;
+
+import androidx.window.embedding.SplitController;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+/**
+ * Shadow class for {@link SplitController} to test embedding activity features.
+ */
+@Implements(SplitController.class)
+public class ShadowSplitController {
+ private static boolean sIsActivityEmbedded;
+
+ @Implementation
+ protected static boolean isActivityEmbedded(Activity activity) {
+ return sIsActivityEmbedded;
+ }
+
+ public static void setIsActivityEmbedded(boolean isActivityEmbedded) {
+ sIsActivityEmbedded = isActivityEmbedded;
+ }
+}
+
diff --git a/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java b/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java
index 62c7bd8..e297b78 100644
--- a/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/widget/HighlightablePreferenceGroupAdapterTest.java
@@ -26,7 +26,7 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import android.content.Context;
@@ -111,7 +111,7 @@
ReflectionHelpers.setField(mAdapter, "mHighlightRequested", false);
mAdapter.requestHighlight(mRoot, null /* recyclerView */, mock(AppBarLayout.class));
- verifyZeroInteractions(mRoot);
+ verifyNoInteractions(mRoot);
}
@Test
@@ -125,7 +125,7 @@
when(mFragment.getArguments()).thenReturn(null);
when(mFragment.getPreferenceScreen()).thenReturn(screen);
HighlightablePreferenceGroupAdapter.adjustInitialExpandedChildCount(mFragment);
- verifyZeroInteractions(screen);
+ verifyNoInteractions(screen);
}
@Test
@@ -150,7 +150,7 @@
HighlightablePreferenceGroupAdapter.adjustInitialExpandedChildCount(mFragment);
verify(mFragment).getInitialExpandedChildCount();
- verifyZeroInteractions(screen);
+ verifyNoInteractions(screen);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java
index 8b527fd..732defb 100644
--- a/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/SeekBarPreferenceTest.java
@@ -24,6 +24,7 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoInteractions;
import static org.mockito.Mockito.when;
import static org.robolectric.Shadows.shadowOf;
@@ -40,6 +41,7 @@
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;
@@ -59,6 +61,9 @@
private SeekBarPreference mSeekBarPreference;
private SeekBar mSeekBar;
+ @Mock
+ SeekBar.OnSeekBarChangeListener mMockOnSeekBarChangeListener;
+
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
@@ -179,6 +184,54 @@
assertThat(shadowOf(mSeekBar).lastHapticFeedbackPerformed()).isEqualTo(CLOCK_TICK);
}
+ @Test
+ public void onProgressChanged_hasSeekBarChangeListener_receiveCallBack() {
+ mSeekBarPreference.setOnSeekBarChangeListener(mMockOnSeekBarChangeListener);
+
+ mSeekBarPreference.onProgressChanged(mSeekBar, PROGRESS, true);
+
+ verify(mMockOnSeekBarChangeListener).onProgressChanged(mSeekBar, PROGRESS, true);
+ }
+
+ @Test
+ public void onProgressChanged_noSeekBarChangeListener_noAction() {
+ mSeekBarPreference.onProgressChanged(mSeekBar, PROGRESS, true);
+
+ verifyNoInteractions(mMockOnSeekBarChangeListener);
+ }
+
+ @Test
+ public void onStartTrackingTouch_hasSeekBarChangeListener_receiveCallBack() {
+ mSeekBarPreference.setOnSeekBarChangeListener(mMockOnSeekBarChangeListener);
+
+ mSeekBarPreference.onStartTrackingTouch(mSeekBar);
+
+ verify(mMockOnSeekBarChangeListener).onStartTrackingTouch(mSeekBar);
+ }
+
+ @Test
+ public void onStartTrackingTouch_noSeekBarChangeListener_noAction() {
+ mSeekBarPreference.onStartTrackingTouch(mSeekBar);
+
+ verifyNoInteractions(mMockOnSeekBarChangeListener);
+ }
+
+ @Test
+ public void onStopTrackingTouch_hasSeekBarChangeListener_receiveCallBack() {
+ mSeekBarPreference.setOnSeekBarChangeListener(mMockOnSeekBarChangeListener);
+
+ mSeekBarPreference.onStopTrackingTouch(mSeekBar);
+
+ verify(mMockOnSeekBarChangeListener).onStopTrackingTouch(mSeekBar);
+ }
+
+ @Test
+ public void onStopTrackingTouch_noSeekBarChangeListener_noAction() {
+ mSeekBarPreference.onStopTrackingTouch(mSeekBar);
+
+ verifyNoInteractions(mMockOnSeekBarChangeListener);
+ }
+
public static class TestFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
diff --git a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
index e08a14a..66d399c 100644
--- a/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/NetworkRequestDialogFragmentTest.java
@@ -173,7 +173,7 @@
}
private List<WifiEntry> createWifiEntryList() {
- List<WifiEntry> wifiEntryList = spy(new ArrayList<>());
+ List<WifiEntry> wifiEntryList = new ArrayList<>();
final WifiEntry wifiEntry1 = mock(WifiEntry.class);
when(wifiEntry1.getSsid()).thenReturn("Test AP 1");
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
index 28b7ecb..c9cc02e 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
@@ -33,6 +33,7 @@
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;
@@ -46,7 +47,6 @@
import com.google.android.setupcompat.util.WizardManagerHelper;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -82,6 +82,8 @@
Intent mResultData;
@Mock
WifiConfigController mController;
+ @Mock
+ KeyguardManager mKeyguardManager;
WifiDialogActivity mActivity;
@@ -99,6 +101,7 @@
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
@@ -294,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/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/calling/DisclaimerItemListAdapterTest.java b/tests/robotests/src/com/android/settings/wifi/calling/DisclaimerItemListAdapterTest.java
index 8478a54..610e520 100644
--- a/tests/robotests/src/com/android/settings/wifi/calling/DisclaimerItemListAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/calling/DisclaimerItemListAdapterTest.java
@@ -21,9 +21,9 @@
import static com.android.settings.wifi.calling.DisclaimerItemListAdapter
.DisclaimerItemViewHolder.ID_DISCLAIMER_ITEM_TITLE;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyObject;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -75,7 +75,7 @@
mDisclaimerItem = spy(new MockDisclaimerItem(mContext, 0 /* subId */));
mDisclaimerItemList.add(mDisclaimerItem);
- when(mLayoutInflater.inflate(anyInt(), anyObject(), anyBoolean())).thenReturn(mView);
+ when(mLayoutInflater.inflate(anyInt(), any(), anyBoolean())).thenReturn(mView);
when(mViewGroup.getContext()).thenReturn(mContext);
when(mViewGroup.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).thenReturn(
mLayoutInflater);
diff --git a/tests/robotests/src/com/android/settings/wifi/calling/EmergencyCallLimitationDisclaimerTest.java b/tests/robotests/src/com/android/settings/wifi/calling/EmergencyCallLimitationDisclaimerTest.java
index 985edda..c8e4cce 100644
--- a/tests/robotests/src/com/android/settings/wifi/calling/EmergencyCallLimitationDisclaimerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/calling/EmergencyCallLimitationDisclaimerTest.java
@@ -18,8 +18,8 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
diff --git a/tests/robotests/src/com/android/settings/wifi/calling/LocationPolicyDisclaimerTest.java b/tests/robotests/src/com/android/settings/wifi/calling/LocationPolicyDisclaimerTest.java
index 3fe9678..148095a 100644
--- a/tests/robotests/src/com/android/settings/wifi/calling/LocationPolicyDisclaimerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/calling/LocationPolicyDisclaimerTest.java
@@ -18,8 +18,8 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingDisclaimerFragmentTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingDisclaimerFragmentTest.java
index 207a231..0ece537 100644
--- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingDisclaimerFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingDisclaimerFragmentTest.java
@@ -16,10 +16,9 @@
package com.android.settings.wifi.calling;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyBoolean;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyObject;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
@@ -95,7 +94,7 @@
doReturn(mActivity).when(mFragment).getActivity();
- when(mLayoutInflater.inflate(anyInt(), anyObject(), anyBoolean())).thenReturn(mView);
+ when(mLayoutInflater.inflate(anyInt(), any(), anyBoolean())).thenReturn(mView);
when(mView.findViewById(R.id.agree_button)).thenReturn(mAgreeButton);
when(mView.findViewById(R.id.disagree_button)).thenReturn(mDisagreeButton);
when(mView.findViewById(R.id.disclaimer_item_list)).thenReturn(mRecyclerView);
diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
index e2c5ca3..1faa611 100644
--- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
@@ -16,17 +16,17 @@
package com.android.settings.wifi.calling;
-import static junit.framework.Assert.assertEquals;
-
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT;
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.eq;
+import static junit.framework.Assert.assertEquals;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -44,7 +44,6 @@
import android.telephony.TelephonyManager;
import android.telephony.ims.ImsMmTelManager;
import android.view.View;
-import android.widget.TextView;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
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..b0a50c8 100644
--- a/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
+++ b/tests/robotests/src/com/android/settings/wifi/details2/WifiDetailPreferenceController2Test.java
@@ -17,15 +17,16 @@
import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.nullable;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
@@ -92,7 +93,6 @@
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.InOrder;
-import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
@@ -1253,7 +1253,7 @@
mMockWifiConfig.creatorUid = doUid;
ComponentName doComponent = new ComponentName(doPackage, "some.Class");
try {
- when(mMockPackageManager.getPackageUidAsUser(Matchers.anyString(), Matchers.anyInt()))
+ when(mMockPackageManager.getPackageUidAsUser(anyString(), anyInt()))
.thenReturn(doUid);
} catch (PackageManager.NameNotFoundException e) {
//do nothing
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/ScreenResolutionFragmentTest.java b/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java
index b7d37df..4e674d2 100644
--- a/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java
+++ b/tests/unit/src/com/android/settings/display/ScreenResolutionFragmentTest.java
@@ -27,15 +27,12 @@
import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.Before;
import org.junit.Test;
-import org.junit.runner.RunWith;
-@RunWith(AndroidJUnit4.class)
public class ScreenResolutionFragmentTest {
private Context mContext;
@@ -56,6 +53,7 @@
public void getDefaultKey_FHD() {
Display.Mode mode = new Display.Mode(0, FHD_WIDTH, 0, 0);
doReturn(mode).when(mFragment).getDisplayMode();
+ doReturn(mContext).when(mFragment).getContext();
mFragment.onAttach(mContext);
assertThat(mFragment.getDefaultKey()).isEqualTo(mFragment.getKeyForResolution(FHD_WIDTH));
@@ -66,6 +64,7 @@
public void getDefaultKey_QHD() {
Display.Mode mode = new Display.Mode(0, QHD_WIDTH, 0, 0);
doReturn(mode).when(mFragment).getDisplayMode();
+ doReturn(mContext).when(mFragment).getContext();
mFragment.onAttach(mContext);
assertThat(mFragment.getDefaultKey()).isEqualTo(mFragment.getKeyForResolution(QHD_WIDTH));
@@ -74,6 +73,7 @@
@Test
@UiThreadTest
public void setDefaultKey_FHD() {
+ doReturn(mContext).when(mFragment).getContext();
mFragment.onAttach(mContext);
mFragment.setDefaultKey(mFragment.getKeyForResolution(FHD_WIDTH));
@@ -84,6 +84,7 @@
@Test
@UiThreadTest
public void setDefaultKey_QHD() {
+ doReturn(mContext).when(mFragment).getContext();
mFragment.onAttach(mContext);
mFragment.setDefaultKey(mFragment.getKeyForResolution(QHD_WIDTH));
@@ -94,6 +95,7 @@
@Test
@UiThreadTest
public void bindPreferenceExtra_setSummary() {
+ doReturn(mContext).when(mFragment).getContext();
mFragment.onAttach(mContext);
SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(mContext);
ScreenResolutionFragment.ScreenResolutionCandidateInfo candidates =
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/vpn2/VpnSettingsTest.java b/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
index 86bd1e7..953a524 100644
--- a/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
+++ b/tests/unit/src/com/android/settings/vpn2/VpnSettingsTest.java
@@ -20,15 +20,22 @@
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;
@@ -46,6 +53,7 @@
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;
@@ -56,19 +64,26 @@
@RunWith(AndroidJUnit4.class)
public class VpnSettingsTest {
- private static final String ADVANCED_VPN_GROUP_KEY = "advanced_vpn_group";
- private static final String VPN_GROUP_KEY = "vpn_group";
- private static final String ADVANCED_VPN_GROUP_TITLE = "advanced_vpn_group_title";
- private static final String VPN_GROUP_TITLE = "vpn_group_title";
- private static final String FAKE_PACKAGE_NAME = "com.fake.package.name";
- private static final String ADVANCED_VPN_GROUP_PACKAGE_NAME = "com.advanced.package.name";
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;
@@ -104,9 +119,10 @@
when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.getVpnPreferenceGroupTitle(mContext))
.thenReturn(VPN_GROUP_TITLE);
when(mFakeFeatureFactory.mAdvancedVpnFeatureProvider.getAdvancedVpnPackageName())
- .thenReturn(ADVANCED_VPN_GROUP_PACKAGE_NAME);
+ .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();
@@ -117,7 +133,7 @@
public void setShownAdvancedPreferences_hasGeneralVpn_returnsVpnCountAs1() {
Set<Preference> updates = new ArraySet<>();
AppPreference pref =
- spy(new AppPreference(mContext, USER_ID_1, FAKE_PACKAGE_NAME));
+ spy(new AppPreference(mContext, USER_ID_1, VPN_PACKAGE_NAME));
updates.add(pref);
mVpnSettings.setShownAdvancedPreferences(updates);
@@ -131,7 +147,7 @@
public void setShownAdvancedPreferences_hasAdvancedVpn_returnsAdvancedVpnCountAs1() {
Set<Preference> updates = new ArraySet<>();
AppPreference pref =
- spy(new AppPreference(mContext, USER_ID_1, ADVANCED_VPN_GROUP_PACKAGE_NAME));
+ spy(new AppPreference(mContext, USER_ID_1, ADVANCED_VPN_PACKAGE_NAME));
updates.add(pref);
mVpnSettings.setShownAdvancedPreferences(updates);
@@ -154,14 +170,10 @@
}
@Test
- public void getVpnApps_isAdvancedVpn_returnsOne() {
- int uid = 1111;
- List<AppOpsManager.OpEntry> opEntries = new ArrayList<>();
- List<AppOpsManager.PackageOps> apps = new ArrayList<>();
- AppOpsManager.PackageOps packageOps =
- new AppOpsManager.PackageOps(ADVANCED_VPN_GROUP_PACKAGE_NAME, uid, opEntries);
- apps.add(packageOps);
- when(mAppOpsManager.getPackagesForOps((int[]) any())).thenReturn(apps);
+ 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(),
@@ -174,12 +186,100 @@
List<AppOpsManager.OpEntry> opEntries = new ArrayList<>();
List<AppOpsManager.PackageOps> apps = new ArrayList<>();
AppOpsManager.PackageOps packageOps =
- new AppOpsManager.PackageOps(FAKE_PACKAGE_NAME, uid, opEntries);
+ 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());
+ }
}