summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.bp3
-rw-r--r--api/current.txt37
-rw-r--r--api/system-current.txt6
-rw-r--r--api/test-current.txt1
-rw-r--r--cmds/idmap2/Android.bp4
-rw-r--r--cmds/idmap2/libidmap2/Idmap.cpp4
-rw-r--r--cmds/idmap2/tests/FileUtilsTests.cpp27
-rw-r--r--cmds/idmap2/tests/Idmap2BinaryTests.cpp14
-rw-r--r--cmds/idmap2/tests/IdmapTests.cpp107
-rw-r--r--cmds/idmap2/tests/data/overlay/AndroidManifest.xml3
-rw-r--r--cmds/idmap2/tests/data/overlay/AndroidManifestNoName.xml21
-rw-r--r--cmds/idmap2/tests/data/overlay/AndroidManifestNoNameStatic.xml24
-rw-r--r--cmds/idmap2/tests/data/overlay/AndroidManifestStatic1.xml1
-rw-r--r--cmds/idmap2/tests/data/overlay/AndroidManifestStatic2.xml1
-rw-r--r--cmds/idmap2/tests/data/overlay/build14
-rw-r--r--cmds/idmap2/tests/data/overlay/overlay-no-name-static.apkbin0 -> 1643 bytes
-rw-r--r--cmds/idmap2/tests/data/overlay/overlay-no-name.apkbin0 -> 1567 bytes
-rw-r--r--cmds/idmap2/tests/data/overlay/overlay-static-1.apkbin1599 -> 1643 bytes
-rw-r--r--cmds/idmap2/tests/data/overlay/overlay-static-2.apkbin1599 -> 1643 bytes
-rw-r--r--cmds/idmap2/tests/data/overlay/overlay.apkbin1559 -> 1595 bytes
-rw-r--r--cmds/idmap2/tests/data/system-overlay/AndroidManifest.xml7
-rw-r--r--cmds/idmap2/tests/data/system-overlay/system-overlay.apkbin1283 -> 1319 bytes
-rw-r--r--cmds/idmap2/tests/data/target/build4
-rw-r--r--cmds/idmap2/tests/data/target/target-no-overlayable.apkbin0 -> 2075 bytes
-rw-r--r--cmds/statsd/src/atoms.proto20
-rw-r--r--cmds/statsd/src/external/PullDataReceiver.h10
-rw-r--r--cmds/statsd/src/external/StatsPullerManager.cpp13
-rw-r--r--cmds/statsd/src/guardrail/StatsdStats.cpp5
-rw-r--r--cmds/statsd/src/guardrail/StatsdStats.h6
-rw-r--r--cmds/statsd/src/metrics/GaugeMetricProducer.cpp5
-rw-r--r--cmds/statsd/src/metrics/GaugeMetricProducer.h3
-rw-r--r--cmds/statsd/src/metrics/ValueMetricProducer.cpp128
-rw-r--r--cmds/statsd/src/metrics/ValueMetricProducer.h24
-rw-r--r--cmds/statsd/src/stats_log.proto1
-rw-r--r--cmds/statsd/src/stats_log_util.cpp3
-rw-r--r--cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp22
-rw-r--r--cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp407
-rw-r--r--config/hiddenapi-greylist.txt7
-rw-r--r--core/java/android/app/AppOpsManager.java16
-rw-r--r--core/java/android/app/NotificationChannel.java10
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java6
-rw-r--r--core/java/android/app/backup/BackupManager.java41
-rw-r--r--core/java/android/app/backup/IBackupManager.aidl21
-rw-r--r--core/java/android/content/ContentResolver.java13
-rw-r--r--core/java/android/content/IContentService.aidl1
-rw-r--r--core/java/android/content/pm/PackageParser.java4
-rw-r--r--core/java/android/content/pm/ProviderInfo.java11
-rw-r--r--core/java/android/content/rollback/IRollbackManager.aidl4
-rw-r--r--core/java/android/content/rollback/PackageRollbackInfo.java35
-rw-r--r--core/java/android/net/ConnectivityManager.java52
-rw-r--r--core/java/android/net/IConnectivityManager.aidl3
-rw-r--r--core/java/android/net/KeepalivePacketData.java2
-rw-r--r--core/java/android/net/NattKeepalivePacketData.java7
-rw-r--r--core/java/android/net/NetworkAgent.java46
-rw-r--r--core/java/android/net/NetworkUtils.java22
-rw-r--r--core/java/android/net/SocketKeepalive.java39
-rw-r--r--core/java/android/net/TcpKeepalivePacketData.java234
-rw-r--r--core/java/android/net/TcpKeepalivePacketDataParcelable.aidl (renamed from telephony/java/android/telephony/ims/RcsPart.java)15
-rw-r--r--core/java/android/net/TcpRepairWindow.java45
-rw-r--r--core/java/android/net/TcpSocketKeepalive.java78
-rw-r--r--core/java/android/net/ip/IIpClient.aidl3
-rwxr-xr-xcore/java/android/os/Build.java8
-rw-r--r--core/java/android/os/PowerManager.java5
-rw-r--r--core/java/android/os/UserManager.java11
-rw-r--r--core/java/android/provider/DeviceConfig.java18
-rw-r--r--core/java/android/provider/Settings.java13
-rw-r--r--core/java/android/service/carrier/CarrierMessagingClientService.java (renamed from core/java/android/app/SmsAppService.java)28
-rw-r--r--core/java/android/service/carrier/ICarrierMessagingClientService.aidl (renamed from core/java/android/app/ISmsAppService.aidl)4
-rw-r--r--core/java/android/service/notification/NotificationListenerService.java31
-rw-r--r--core/java/android/service/notification/NotificationRankingUpdate.java11
-rw-r--r--core/java/android/view/DisplayListCanvas.java2
-rw-r--r--core/java/android/view/View.java56
-rw-r--r--core/java/android/view/ViewConfiguration.java3
-rw-r--r--core/java/android/view/ViewPropertyAnimator.java21
-rw-r--r--core/java/android/widget/Editor.java2
-rw-r--r--core/java/android/widget/GridView.java2
-rw-r--r--core/java/android/widget/ProgressBar.java90
-rw-r--r--core/java/android/widget/ScrollView.java24
-rw-r--r--core/java/android/widget/TextView.java23
-rw-r--r--core/java/com/android/internal/app/ChooserActivity.java31
-rw-r--r--core/java/com/android/internal/os/Zygote.java5
-rw-r--r--core/java/com/android/internal/os/ZygoteInit.java10
-rw-r--r--core/java/com/android/internal/util/ArrayUtils.java9
-rw-r--r--core/java/com/android/internal/widget/ResolverDrawerLayout.java20
-rw-r--r--core/java/com/android/server/backup/AccountSyncSettingsBackupHelper.java86
-rw-r--r--core/java/com/android/server/backup/NotificationBackupHelper.java14
-rw-r--r--core/java/com/android/server/backup/SystemBackupAgent.java6
-rw-r--r--core/jni/OWNERS2
-rw-r--r--core/jni/android_net_NetUtils.cpp67
-rw-r--r--core/jni/android_view_ThreadedRenderer.cpp2
-rw-r--r--core/jni/com_android_internal_os_Zygote.cpp17
-rw-r--r--core/proto/android/providers/settings/secure.proto1
-rw-r--r--core/res/AndroidManifest.xml4
-rw-r--r--core/res/res/drawable-nodpi/stat_sys_adb.xml44
-rw-r--r--core/res/res/drawable/autofill_dataset_picker_background.xml2
-rw-r--r--core/res/res/drawable/bottomsheet_background.xml22
-rw-r--r--core/res/res/drawable/ic_drag_handle.xml23
-rw-r--r--core/res/res/layout/chooser_grid.xml20
-rw-r--r--core/res/res/values/attrs_manifest.xml10
-rw-r--r--core/res/res/values/colors.xml2
-rw-r--r--core/res/res/values/config.xml3
-rw-r--r--core/res/res/values/public.xml1
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java109
-rw-r--r--core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java9
-rw-r--r--graphics/java/android/graphics/FontFamily.java39
-rw-r--r--graphics/java/android/graphics/Typeface.java10
-rw-r--r--libs/androidfw/LoadedArsc.cpp1
-rw-r--r--libs/androidfw/include/androidfw/LoadedArsc.h10
-rw-r--r--libs/hwui/hwui/MinikinSkia.cpp9
-rw-r--r--libs/hwui/hwui/MinikinSkia.h5
-rw-r--r--libs/hwui/renderthread/RenderThread.cpp8
-rw-r--r--libs/hwui/renderthread/RenderThread.h5
-rw-r--r--libs/hwui/thread/TaskManager.cpp6
-rw-r--r--libs/hwui/thread/TaskManager.h3
-rw-r--r--media/apex/java/android/media/MediaPlayer2.java20
-rw-r--r--media/java/android/media/ExifInterface.java83
-rw-r--r--media/java/android/media/MediaFormat.java2
-rw-r--r--packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java3
-rw-r--r--packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java11
-rw-r--r--packages/NetworkStack/OWNERS5
-rw-r--r--packages/NetworkStack/src/android/net/apf/ApfFilter.java213
-rw-r--r--packages/NetworkStack/src/android/net/apf/ApfGenerator.java4
-rw-r--r--packages/NetworkStack/src/android/net/ip/IpClient.java47
-rw-r--r--packages/NetworkStack/tests/Android.bp1
-rw-r--r--packages/NetworkStack/tests/src/android/net/apf/ApfTest.java215
-rw-r--r--packages/SettingsLib/HelpUtils/res/values-en-rXC/strings.xml2
-rw-r--r--packages/SettingsLib/RestrictedLockUtils/res/values-en-rXC/strings.xml4
-rw-r--r--packages/SettingsLib/SearchWidget/res/values-en-rXC/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-af/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-af/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-am/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-am/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ar/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ar/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-as/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-as/strings.xml56
-rw-r--r--packages/SettingsLib/res/values-az/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-az/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-b+sr+Latn/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-b+sr+Latn/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-be/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-be/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-bg/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-bg/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-bn/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-bn/strings.xml56
-rw-r--r--packages/SettingsLib/res/values-bs/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-bs/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ca/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ca/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-cs/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-cs/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-da/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-da/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-de/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-de/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-el/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-el/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-en-rAU/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-en-rAU/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-en-rCA/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-en-rCA/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-en-rGB/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-en-rGB/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-en-rIN/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-en-rIN/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-en-rXC/arrays.xml346
-rw-r--r--packages/SettingsLib/res/values-en-rXC/strings.xml885
-rw-r--r--packages/SettingsLib/res/values-es-rUS/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-es-rUS/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-es/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-es/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-et/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-et/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-eu/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-eu/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-fa/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-fa/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-fi/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-fi/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-fr-rCA/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-fr-rCA/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-fr/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-fr/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-gl/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-gl/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-gu/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-gu/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-hi/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-hi/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-hr/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-hr/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-hu/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-hu/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-hy/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-hy/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-in/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-in/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-is/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-is/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-it/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-it/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-iw/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-iw/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ja/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ja/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ka/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ka/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-kk/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-kk/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-km/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-km/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-kn/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-kn/strings.xml56
-rw-r--r--packages/SettingsLib/res/values-ko/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ko/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ky/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ky/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-lo/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-lo/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-lt/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-lt/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-lv/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-lv/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-mk/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-mk/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ml/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ml/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-mn/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-mn/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-mr/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-mr/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ms/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ms/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-my/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-my/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-nb/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-nb/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ne/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ne/strings.xml56
-rw-r--r--packages/SettingsLib/res/values-nl/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-nl/strings.xml53
-rw-r--r--packages/SettingsLib/res/values-or/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-or/strings.xml56
-rw-r--r--packages/SettingsLib/res/values-pa/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-pa/strings.xml56
-rw-r--r--packages/SettingsLib/res/values-pl/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-pl/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-pt-rBR/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-pt-rBR/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-pt-rPT/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-pt-rPT/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-pt/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-pt/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ro/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ro/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ru/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ru/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-si/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-si/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-sk/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-sk/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-sl/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-sl/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-sq/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-sq/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-sr/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-sr/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-sv/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-sv/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-sw/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-sw/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ta/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ta/strings.xml56
-rw-r--r--packages/SettingsLib/res/values-te/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-te/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-th/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-th/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-tl/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-tl/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-tr/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-tr/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-uk/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-uk/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-ur/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-ur/strings.xml56
-rw-r--r--packages/SettingsLib/res/values-uz/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-uz/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-vi/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-vi/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-zh-rCN/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-zh-rCN/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-zh-rHK/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-zh-rHK/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-zh-rTW/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-zh-rTW/strings.xml49
-rw-r--r--packages/SettingsLib/res/values-zu/arrays.xml8
-rw-r--r--packages/SettingsLib/res/values-zu/strings.xml49
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java50
-rw-r--r--packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java25
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java3
-rw-r--r--packages/SystemUI/res/drawable/bubble_expanded_header_bg.xml6
-rw-r--r--packages/SystemUI/res/layout/bubble_expanded_view.xml100
-rw-r--r--packages/SystemUI/res/layout/bubble_permission_view.xml85
-rw-r--r--packages/SystemUI/res/values/dimens.xml2
-rw-r--r--packages/SystemUI/res/values/strings.xml7
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java29
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java (renamed from packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedViewContainer.java)142
-rw-r--r--packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java9
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java10
-rw-r--r--packages/overlays/Android.mk17
-rw-r--r--packages/overlays/IconShapeRoundedRectOverlay/res/values/config.xml4
-rw-r--r--packages/overlays/IconShapeSquircleOverlay/res/values/config.xml4
-rw-r--r--packages/overlays/IconShapeTeardropOverlay/res/values/config.xml4
-rw-r--r--proto/src/metrics_constants/metrics_constants.proto26
-rw-r--r--services/backup/java/com/android/server/backup/BackupManagerService.java43
-rw-r--r--services/backup/java/com/android/server/backup/Trampoline.java15
-rw-r--r--services/backup/java/com/android/server/backup/UserBackupManagerService.java53
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java8
-rw-r--r--services/core/java/com/android/server/UiModeManagerService.java22
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java10
-rw-r--r--services/core/java/com/android/server/am/AppCompactor.java3
-rw-r--r--services/core/java/com/android/server/am/OomAdjuster.java9
-rw-r--r--services/core/java/com/android/server/am/ProcessList.java52
-rw-r--r--services/core/java/com/android/server/am/SettingsToPropertiesMapper.java1
-rw-r--r--services/core/java/com/android/server/appbinding/AppBindingService.java4
-rw-r--r--services/core/java/com/android/server/appbinding/finders/CarrierMessagingClientServiceFinder.java (renamed from services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java)25
-rw-r--r--services/core/java/com/android/server/connectivity/KeepaliveTracker.java187
-rw-r--r--services/core/java/com/android/server/connectivity/TcpKeepaliveController.java316
-rw-r--r--services/core/java/com/android/server/content/ContentService.java12
-rw-r--r--services/core/java/com/android/server/content/SyncManager.java2
-rw-r--r--services/core/java/com/android/server/notification/BubbleExtractor.java68
-rw-r--r--services/core/java/com/android/server/notification/ManagedServices.java73
-rw-r--r--services/core/java/com/android/server/notification/NotificationManagerService.java84
-rw-r--r--services/core/java/com/android/server/notification/NotificationRecord.java9
-rw-r--r--services/core/java/com/android/server/notification/PreferencesHelper.java56
-rw-r--r--services/core/java/com/android/server/notification/RankingConfig.java2
-rw-r--r--services/core/java/com/android/server/notification/ZenModeHelper.java25
-rw-r--r--services/core/java/com/android/server/pm/Installer.java58
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java7
-rw-r--r--services/core/java/com/android/server/pm/StagingManager.java13
-rw-r--r--services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java22
-rw-r--r--services/core/java/com/android/server/rollback/AppDataRollbackHelper.java74
-rw-r--r--services/core/java/com/android/server/rollback/RollbackData.java23
-rw-r--r--services/core/java/com/android/server/rollback/RollbackManagerService.java7
-rw-r--r--services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java222
-rw-r--r--services/core/java/com/android/server/rollback/RollbackStore.java45
-rw-r--r--services/core/java/com/android/server/tv/TvInputManagerService.java25
-rw-r--r--services/core/java/com/android/server/uri/UriGrantsManagerService.java5
-rw-r--r--services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java13
-rw-r--r--services/robotests/backup/src/com/android/server/backup/UserBackupManagerServiceTest.java53
-rw-r--r--services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java7
-rw-r--r--services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java80
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java154
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java105
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/NotificationAssistantsTest.java3
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java13
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java93
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java225
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java3
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java186
-rw-r--r--services/tests/wmtests/AndroidManifest.xml4
-rw-r--r--telephony/java/android/provider/Telephony.java602
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java8
-rw-r--r--telephony/java/android/telephony/ims/Rcs1To1Thread.java76
-rw-r--r--telephony/java/android/telephony/ims/RcsControllerCall.java64
-rw-r--r--telephony/java/android/telephony/ims/RcsEvent.aidl (renamed from telephony/java/android/telephony/ims/RcsPart.aidl)2
-rw-r--r--telephony/java/android/telephony/ims/RcsEvent.java (renamed from telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.java)48
-rw-r--r--telephony/java/android/telephony/ims/RcsEventQueryParameters.aidl (renamed from telephony/java/android/telephony/ims/RcsGroupThread.aidl)2
-rw-r--r--telephony/java/android/telephony/ims/RcsEventQueryParameters.java322
-rw-r--r--telephony/java/android/telephony/ims/RcsEventQueryResult.aidl (renamed from telephony/java/android/telephony/ims/RcsIncomingMessage.aidl)2
-rw-r--r--telephony/java/android/telephony/ims/RcsEventQueryResult.java90
-rw-r--r--telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.java360
-rw-r--r--telephony/java/android/telephony/ims/RcsFileTransferPart.java352
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThread.java191
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadEvent.aidl (renamed from telephony/java/android/telephony/ims/Rcs1To1Thread.aidl)3
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadEvent.java65
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.aidl19
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java109
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java107
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java107
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.aidl (renamed from telephony/java/android/telephony/ims/RcsMessage.aidl)2
-rw-r--r--telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java106
-rw-r--r--telephony/java/android/telephony/ims/RcsIncomingMessage.java86
-rw-r--r--telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.java180
-rw-r--r--telephony/java/android/telephony/ims/RcsLocationPart.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsLocationPart.java48
-rw-r--r--telephony/java/android/telephony/ims/RcsManager.java2
-rw-r--r--telephony/java/android/telephony/ims/RcsMessage.java309
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageCreationParameters.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageCreationParameters.java265
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageQueryParameters.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageQueryParameters.java361
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageQueryResult.aidl (renamed from telephony/java/android/telephony/ims/RcsFileTransferPart.aidl)2
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageQueryResult.java115
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageSnippet.aidl (renamed from telephony/java/android/telephony/ims/RcsManager.aidl)2
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageSnippet.java98
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageStore.java231
-rw-r--r--telephony/java/android/telephony/ims/RcsMessageStoreException.java (renamed from telephony/java/android/telephony/ims/RcsParticipantEvent.java)22
-rw-r--r--telephony/java/android/telephony/ims/RcsMultiMediaPart.java50
-rw-r--r--telephony/java/android/telephony/ims/RcsMultimediaPart.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsOutgoingMessage.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsOutgoingMessage.java55
-rw-r--r--telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java131
-rw-r--r--telephony/java/android/telephony/ims/RcsParticipant.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsParticipant.java147
-rw-r--r--telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java93
-rw-r--r--telephony/java/android/telephony/ims/RcsParticipantEvent.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsParticipantQueryParameters.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsParticipantQueryParameters.java310
-rw-r--r--telephony/java/android/telephony/ims/RcsParticipantQueryResult.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsParticipantQueryResult.java105
-rw-r--r--telephony/java/android/telephony/ims/RcsQueryContinuationToken.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsQueryContinuationToken.java151
-rw-r--r--telephony/java/android/telephony/ims/RcsTextPart.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsTextPart.java48
-rw-r--r--telephony/java/android/telephony/ims/RcsThread.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsThread.java131
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadEvent.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadEvent.java25
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.java49
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.java49
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.java49
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.java49
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.aidl20
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadQueryParameters.aidl30
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadQueryParameters.java198
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl30
-rw-r--r--telephony/java/android/telephony/ims/RcsThreadQueryResult.java51
-rw-r--r--telephony/java/android/telephony/ims/aidl/IRcs.aidl237
-rw-r--r--telephony/java/com/android/ims/RcsTypeIdPair.java79
-rw-r--r--telephony/java/com/android/internal/telephony/TelephonyPermissions.java75
-rw-r--r--tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java55
-rw-r--r--tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java55
-rw-r--r--tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java54
-rw-r--r--tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java53
-rw-r--r--tests/RcsTests/src/com/android/tests/ims/RcsMessageStoreTest.java32
-rw-r--r--tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java57
-rw-r--r--tests/RcsTests/src/com/android/tests/ims/RcsParticipantQueryParametersTest.java57
-rw-r--r--tests/RcsTests/src/com/android/tests/ims/RcsParticipantTest.java46
-rw-r--r--tests/RcsTests/src/com/android/tests/ims/RcsThreadQueryParametersTest.java41
-rw-r--r--tests/net/java/android/net/LinkPropertiesTest.java23
-rw-r--r--tests/net/java/android/net/TcpKeepalivePacketDataTest.java126
-rw-r--r--tests/net/java/com/android/internal/util/TestUtils.java17
460 files changed, 13473 insertions, 6481 deletions
diff --git a/Android.bp b/Android.bp
index 8d25704883fd..7bdedc79943d 100644
--- a/Android.bp
+++ b/Android.bp
@@ -77,7 +77,6 @@ java_defaults {
"core/java/android/app/ISearchManager.aidl",
"core/java/android/app/ISearchManagerCallback.aidl",
"core/java/android/app/IServiceConnection.aidl",
- "core/java/android/app/ISmsAppService.aidl",
"core/java/android/app/IStopUserCallback.aidl",
"core/java/android/app/job/IJobCallback.aidl",
"core/java/android/app/job/IJobScheduler.aidl",
@@ -288,6 +287,7 @@ java_defaults {
"core/java/android/service/carrier/ICarrierService.aidl",
"core/java/android/service/carrier/ICarrierMessagingCallback.aidl",
"core/java/android/service/carrier/ICarrierMessagingService.aidl",
+ "core/java/android/service/carrier/ICarrierMessagingClientService.aidl",
"core/java/android/service/contentsuggestions/IContentSuggestionsService.aidl",
"core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl",
"core/java/android/service/euicc/IDownloadSubscriptionCallback.aidl",
@@ -909,6 +909,7 @@ aidl_interface {
"core/java/android/net/ProxyInfoParcelable.aidl",
"core/java/android/net/RouteInfoParcelable.aidl",
"core/java/android/net/StaticIpConfigurationParcelable.aidl",
+ "core/java/android/net/TcpKeepalivePacketDataParcelable.aidl",
"core/java/android/net/dhcp/DhcpServingParamsParcel.aidl",
"core/java/android/net/dhcp/IDhcpServer.aidl",
"core/java/android/net/dhcp/IDhcpServerCallbacks.aidl",
diff --git a/api/current.txt b/api/current.txt
index 44e9e5e016a6..8458ed33ad5d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -26,6 +26,7 @@ package android {
field public static final String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET";
field public static final String BIND_AUTOFILL_SERVICE = "android.permission.BIND_AUTOFILL_SERVICE";
field public static final String BIND_CALL_REDIRECTION_SERVICE = "android.permission.BIND_CALL_REDIRECTION_SERVICE";
+ field public static final String BIND_CARRIER_MESSAGING_CLIENT_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE";
field @Deprecated public static final String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE";
field public static final String BIND_CARRIER_SERVICES = "android.permission.BIND_CARRIER_SERVICES";
field public static final String BIND_CHOOSER_TARGET_SERVICE = "android.permission.BIND_CHOOSER_TARGET_SERVICE";
@@ -41,7 +42,6 @@ package android {
field public static final String BIND_QUICK_SETTINGS_TILE = "android.permission.BIND_QUICK_SETTINGS_TILE";
field public static final String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS";
field public static final String BIND_SCREENING_SERVICE = "android.permission.BIND_SCREENING_SERVICE";
- field public static final String BIND_SMS_APP_SERVICE = "android.permission.BIND_SMS_APP_SERVICE";
field public static final String BIND_TELECOM_CONNECTION_SERVICE = "android.permission.BIND_TELECOM_CONNECTION_SERVICE";
field public static final String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE";
field public static final String BIND_TV_INPUT = "android.permission.BIND_TV_INPUT";
@@ -645,6 +645,7 @@ package android {
field public static final int footerDividersEnabled = 16843311; // 0x101022f
field public static final int forceDarkAllowed = 16844172; // 0x101058c
field public static final int forceHasOverlappingRendering = 16844065; // 0x1010521
+ field public static final int forceUriPermissions = 16844197; // 0x10105a5
field public static final int foreground = 16843017; // 0x1010109
field public static final int foregroundGravity = 16843264; // 0x1010200
field public static final int foregroundServiceType = 16844191; // 0x101059f
@@ -6210,11 +6211,6 @@ package android.app {
method public void onSharedElementsReady();
}
- public class SmsAppService extends android.app.Service {
- ctor public SmsAppService();
- method public final android.os.IBinder onBind(android.content.Intent);
- }
-
public class StatusBarManager {
}
@@ -6742,6 +6738,7 @@ package android.app.admin {
method public void setCrossProfileCalendarPackages(@NonNull android.content.ComponentName, @Nullable java.util.Set<java.lang.String>);
method public void setCrossProfileCallerIdDisabled(@NonNull android.content.ComponentName, boolean);
method public void setCrossProfileContactsSearchDisabled(@NonNull android.content.ComponentName, boolean);
+ method public void setDefaultSmsApplication(@NonNull android.content.ComponentName, @NonNull String);
method public void setDelegatedScopes(@NonNull android.content.ComponentName, @NonNull String, @NonNull java.util.List<java.lang.String>);
method public void setDeviceOwnerLockScreenInfo(@NonNull android.content.ComponentName, CharSequence);
method public void setEndUserSessionMessage(@NonNull android.content.ComponentName, @Nullable CharSequence);
@@ -7252,6 +7249,7 @@ package android.app.backup {
ctor public BackupManager(android.content.Context);
method public void dataChanged();
method public static void dataChanged(String);
+ method @Nullable public android.os.UserHandle getUserForAncestralSerialNumber(long);
method @Deprecated public int requestRestore(android.app.backup.RestoreObserver);
}
@@ -11879,6 +11877,7 @@ package android.content.pm {
field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000
field public String authority;
field public int flags;
+ field public boolean forceUriPermissions;
field public boolean grantUriPermissions;
field public int initOrder;
field @Deprecated public boolean isSyncable;
@@ -23747,6 +23746,7 @@ package android.media {
ctor public ExifInterface(@NonNull java.io.InputStream) throws java.io.IOException;
method public double getAltitude(double);
method @Nullable public String getAttribute(@NonNull String);
+ method @Nullable public byte[] getAttributeBytes(@NonNull String);
method public double getAttributeDouble(@NonNull String, double);
method public int getAttributeInt(@NonNull String, int);
method @Nullable public long[] getAttributeRange(@NonNull String);
@@ -23902,6 +23902,7 @@ package android.media {
field public static final String TAG_USER_COMMENT = "UserComment";
field public static final String TAG_WHITE_BALANCE = "WhiteBalance";
field public static final String TAG_WHITE_POINT = "WhitePoint";
+ field public static final String TAG_XMP = "Xmp";
field public static final String TAG_X_RESOLUTION = "XResolution";
field public static final String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients";
field public static final String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning";
@@ -25009,8 +25010,10 @@ package android.media {
field public static final String KEY_LANGUAGE = "language";
field public static final String KEY_LATENCY = "latency";
field public static final String KEY_LEVEL = "level";
+ field public static final String KEY_MAX_FPS_TO_ENCODER = "max-fps-to-encoder";
field public static final String KEY_MAX_HEIGHT = "max-height";
field public static final String KEY_MAX_INPUT_SIZE = "max-input-size";
+ field public static final String KEY_MAX_PTS_GAP_TO_ENCODER = "max-pts-gap-to-encoder";
field public static final String KEY_MAX_WIDTH = "max-width";
field public static final String KEY_MIME = "mime";
field public static final String KEY_OPERATING_RATE = "operating-rate";
@@ -28606,7 +28609,7 @@ package android.net {
field public static final String EXTRA_NETWORK = "android.net.extra.NETWORK";
field @Deprecated public static final String EXTRA_NETWORK_INFO = "networkInfo";
field public static final String EXTRA_NETWORK_REQUEST = "android.net.extra.NETWORK_REQUEST";
- field public static final String EXTRA_NETWORK_TYPE = "networkType";
+ field @Deprecated public static final String EXTRA_NETWORK_TYPE = "networkType";
field public static final String EXTRA_NO_CONNECTIVITY = "noConnectivity";
field @Deprecated public static final String EXTRA_OTHER_NETWORK_INFO = "otherNetwork";
field public static final String EXTRA_REASON = "reason";
@@ -34200,7 +34203,6 @@ package android.os {
}
public static class Build.Partition {
- ctor public Build.Partition();
method public long getBuildTimeMillis();
method @NonNull public String getFingerprint();
method @NonNull public String getName();
@@ -41358,6 +41360,11 @@ package android.service.carrier {
field public static final android.os.Parcelable.Creator<android.service.carrier.CarrierIdentifier> CREATOR;
}
+ public class CarrierMessagingClientService extends android.app.Service {
+ ctor public CarrierMessagingClientService();
+ method public final android.os.IBinder onBind(android.content.Intent);
+ }
+
public abstract class CarrierMessagingService extends android.app.Service {
ctor public CarrierMessagingService();
method @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent);
@@ -41699,6 +41706,7 @@ package android.service.notification {
public static class NotificationListenerService.Ranking {
ctor public NotificationListenerService.Ranking();
+ method public boolean canBubble();
method public boolean canShowBadge();
method public android.app.NotificationChannel getChannel();
method public int getImportance();
@@ -42452,6 +42460,7 @@ package android.system {
method public static java.io.FileDescriptor accept(java.io.FileDescriptor, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException;
method public static boolean access(String, int) throws android.system.ErrnoException;
method public static void bind(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+ method public static void bind(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
method public static void chmod(String, int) throws android.system.ErrnoException;
method public static void chown(String, int, int) throws android.system.ErrnoException;
method public static void close(java.io.FileDescriptor) throws android.system.ErrnoException;
@@ -42520,6 +42529,7 @@ package android.system {
method public static long sendfile(java.io.FileDescriptor, java.io.FileDescriptor, android.system.Int64Ref, long) throws android.system.ErrnoException;
method public static int sendto(java.io.FileDescriptor, java.nio.ByteBuffer, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
method public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException;
+ method public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException;
method @Deprecated public static void setegid(int) throws android.system.ErrnoException;
method public static void setenv(String, String, boolean) throws android.system.ErrnoException;
method @Deprecated public static void seteuid(int) throws android.system.ErrnoException;
@@ -45161,13 +45171,13 @@ package android.telephony {
method @Deprecated public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void switchMultiSimConfig(int);
method public boolean updateAvailableNetworks(java.util.List<android.telephony.AvailableNetworkInfo>);
+ field public static final String ACTION_CARRIER_MESSAGING_CLIENT_SERVICE = "android.telephony.action.CARRIER_MESSAGING_CLIENT_SERVICE";
field public static final String ACTION_CONFIGURE_VOICEMAIL = "android.telephony.action.CONFIGURE_VOICEMAIL";
field public static final String ACTION_NETWORK_COUNTRY_CHANGED = "android.telephony.action.NETWORK_COUNTRY_CHANGED";
field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final String ACTION_PHONE_STATE_CHANGED = "android.intent.action.PHONE_STATE";
field public static final String ACTION_RESPOND_VIA_MESSAGE = "android.intent.action.RESPOND_VIA_MESSAGE";
field public static final String ACTION_SECRET_CODE = "android.telephony.action.SECRET_CODE";
field public static final String ACTION_SHOW_VOICEMAIL_NOTIFICATION = "android.telephony.action.SHOW_VOICEMAIL_NOTIFICATION";
- field public static final String ACTION_SMS_APP_SERVICE = "android.telephony.action.SMS_APP_SERVICE";
field public static final String ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED = "android.telephony.action.SUBSCRIPTION_CARRIER_IDENTITY_CHANGED";
field public static final String ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED = "android.telephony.action.SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED";
field public static final int APPTYPE_CSIM = 4; // 0x4
@@ -56363,7 +56373,11 @@ package android.widget {
method @Nullable public android.graphics.PorterDuff.Mode getIndeterminateTintMode();
method public android.view.animation.Interpolator getInterpolator();
method @android.view.ViewDebug.ExportedProperty(category="progress") public int getMax();
+ method @Px public int getMaxHeight();
+ method @Px public int getMaxWidth();
method @android.view.ViewDebug.ExportedProperty(category="progress") public int getMin();
+ method @Px public int getMinHeight();
+ method @Px public int getMinWidth();
method @android.view.ViewDebug.ExportedProperty(category="progress") public int getProgress();
method @Nullable public android.content.res.ColorStateList getProgressBackgroundTintList();
method @Nullable public android.graphics.PorterDuff.Mode getProgressBackgroundTintMode();
@@ -56387,7 +56401,11 @@ package android.widget {
method public void setInterpolator(android.content.Context, @InterpolatorRes int);
method public void setInterpolator(android.view.animation.Interpolator);
method public void setMax(int);
+ method public void setMaxHeight(@Px int);
+ method public void setMaxWidth(@Px int);
method public void setMin(int);
+ method public void setMinHeight(@Px int);
+ method public void setMinWidth(@Px int);
method public void setProgress(int);
method public void setProgress(int, boolean);
method public void setProgressBackgroundTintList(@Nullable android.content.res.ColorStateList);
@@ -56651,6 +56669,7 @@ package android.widget {
method public boolean isFillViewport();
method public boolean isSmoothScrollingEnabled();
method public boolean pageScroll(int);
+ method public void scrollToDescendant(android.view.View);
method public void setFillViewport(boolean);
method public void setSmoothScrollingEnabled(boolean);
method public final void smoothScrollBy(int, int);
diff --git a/api/system-current.txt b/api/system-current.txt
index 139b198b31b2..8d7ec261e52e 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -711,6 +711,7 @@ package android.app.backup {
method @Deprecated public int requestRestore(android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor);
method @Deprecated @RequiresPermission(android.Manifest.permission.BACKUP) public String selectBackupTransport(String);
method @RequiresPermission(android.Manifest.permission.BACKUP) public void selectBackupTransport(android.content.ComponentName, android.app.backup.SelectBackupTransportCallback);
+ method @RequiresPermission(android.Manifest.permission.BACKUP) public void setAncestralSerialNumber(long);
method @RequiresPermission(android.Manifest.permission.BACKUP) public void setAutoRestore(boolean);
method @RequiresPermission(android.Manifest.permission.BACKUP) public void setBackupEnabled(boolean);
method @RequiresPermission(android.Manifest.permission.BACKUP) public void updateTransportAttributes(android.content.ComponentName, String, @Nullable android.content.Intent, String, @Nullable android.content.Intent, @Nullable String);
@@ -3912,6 +3913,7 @@ package android.net {
public class ConnectivityManager {
method @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createNattKeepalive(@NonNull android.net.Network, @NonNull java.io.FileDescriptor, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
+ method @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createSocketKeepalive(@NonNull android.net.Network, @NonNull java.net.Socket, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback);
method public boolean getAvoidBadWifi();
method @RequiresPermission(android.Manifest.permission.LOCAL_MAC_ADDRESS) public String getCaptivePortalServerUrl();
method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementValue(int, boolean, @NonNull android.net.ConnectivityManager.TetheringEntitlementValueListener, @Nullable android.os.Handler);
@@ -5749,6 +5751,10 @@ package android.provider {
field public static final String NAMESPACE = "intelligence_attention";
}
+ public static interface DeviceConfig.MediaNative {
+ field public static final String NAMESPACE = "media_native";
+ }
+
public static interface DeviceConfig.NotificationAssistant {
field public static final String GENERATE_ACTIONS = "generate_actions";
field public static final String GENERATE_REPLIES = "generate_replies";
diff --git a/api/test-current.txt b/api/test-current.txt
index 49c4e6853212..f71789d7d552 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -1851,6 +1851,7 @@ package android.provider {
field @Deprecated public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES = "enabled_notification_policy_access_packages";
field public static final String LOCATION_ACCESS_CHECK_DELAY_MILLIS = "location_access_check_delay_millis";
field public static final String LOCATION_ACCESS_CHECK_INTERVAL_MILLIS = "location_access_check_interval_millis";
+ field public static final String NOTIFICATION_BUBBLES = "notification_bubbles";
field @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds";
field public static final String USER_SETUP_COMPLETE = "user_setup_complete";
field public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
diff --git a/cmds/idmap2/Android.bp b/cmds/idmap2/Android.bp
index 803f83c0bc6f..056add5c71b5 100644
--- a/cmds/idmap2/Android.bp
+++ b/cmds/idmap2/Android.bp
@@ -16,11 +16,11 @@ cc_defaults {
name: "idmap2_defaults",
tidy: true,
tidy_checks: [
+ "modernize-*",
+ "-modernize-avoid-c-arrays",
"android-*",
"misc-*",
- "modernize-*",
"readability-*",
- "-modernize-avoid-c-arrays",
],
tidy_flags: [
"-system-headers",
diff --git a/cmds/idmap2/libidmap2/Idmap.cpp b/cmds/idmap2/libidmap2/Idmap.cpp
index 5d449e96663e..fa5ac8ea11dc 100644
--- a/cmds/idmap2/libidmap2/Idmap.cpp
+++ b/cmds/idmap2/libidmap2/Idmap.cpp
@@ -281,10 +281,10 @@ bool CheckOverlayable(const LoadedPackage& target_package,
if (overlayable_info == nullptr) {
// If the resource does not have an overlayable definition, allow the resource to be overlaid.
// Once overlayable enforcement is turned on, this check will return false.
- return true;
+ return !target_package.DefinesOverlayable();
}
- if (!overlay_info.target_name.empty() && overlay_info.target_name != overlayable_info->name) {
+ if (overlay_info.target_name != overlayable_info->name) {
// If the overlay supplies a target overlayable name, the resource must belong to the
// overlayable defined with the specified name to be overlaid.
return false;
diff --git a/cmds/idmap2/tests/FileUtilsTests.cpp b/cmds/idmap2/tests/FileUtilsTests.cpp
index 45f84fe341cc..8514e12e8c17 100644
--- a/cmds/idmap2/tests/FileUtilsTests.cpp
+++ b/cmds/idmap2/tests/FileUtilsTests.cpp
@@ -40,9 +40,14 @@ TEST(FileUtilsTests, FindFilesFindEverythingNonRecursive) {
const std::string& path ATTRIBUTE_UNUSED) -> bool { return true; });
ASSERT_THAT(v, NotNull());
ASSERT_EQ(v->size(), 6U);
- ASSERT_EQ(std::set<std::string>(v->begin(), v->end()),
- std::set<std::string>({root + "/.", root + "/..", root + "/overlay", root + "/target",
- root + "/system-overlay", root + "/system-overlay-invalid"}));
+ ASSERT_EQ(std::set<std::string>(v->begin(), v->end()), std::set<std::string>({
+ root + "/.",
+ root + "/..",
+ root + "/overlay",
+ root + "/target",
+ root + "/system-overlay",
+ root + "/system-overlay-invalid",
+ }));
}
TEST(FileUtilsTests, FindFilesFindApkFilesRecursive) {
@@ -51,13 +56,15 @@ TEST(FileUtilsTests, FindFilesFindApkFilesRecursive) {
return type == DT_REG && path.size() > 4 && path.compare(path.size() - 4, 4, ".apk") == 0;
});
ASSERT_THAT(v, NotNull());
- ASSERT_EQ(v->size(), 6U);
- ASSERT_EQ(std::set<std::string>(v->begin(), v->end()),
- std::set<std::string>({root + "/target/target.apk", root + "/overlay/overlay.apk",
- root + "/overlay/overlay-static-1.apk",
- root + "/overlay/overlay-static-2.apk",
- root + "/system-overlay/system-overlay.apk",
- root + "/system-overlay-invalid/system-overlay-invalid.apk"}));
+ ASSERT_EQ(v->size(), 9U);
+ ASSERT_EQ(
+ std::set<std::string>(v->begin(), v->end()),
+ std::set<std::string>(
+ {root + "/target/target.apk", root + "/target/target-no-overlayable.apk",
+ root + "/overlay/overlay.apk", root + "/overlay/overlay-no-name.apk",
+ root + "/overlay/overlay-no-name-static.apk", root + "/overlay/overlay-static-1.apk",
+ root + "/overlay/overlay-static-2.apk", root + "/system-overlay/system-overlay.apk",
+ root + "/system-overlay-invalid/system-overlay-invalid.apk"}));
}
TEST(FileUtilsTests, ReadFile) {
diff --git a/cmds/idmap2/tests/Idmap2BinaryTests.cpp b/cmds/idmap2/tests/Idmap2BinaryTests.cpp
index c550eafe5ffe..1216f9ec736a 100644
--- a/cmds/idmap2/tests/Idmap2BinaryTests.cpp
+++ b/cmds/idmap2/tests/Idmap2BinaryTests.cpp
@@ -163,8 +163,12 @@ TEST_F(Idmap2BinaryTests, Dump) {
TEST_F(Idmap2BinaryTests, Scan) {
SKIP_TEST_IF_CANT_EXEC_IDMAP2;
+ const std::string overlay_static_no_name_apk_path =
+ GetTestDataPath() + "/overlay/overlay-no-name-static.apk";
const std::string overlay_static_1_apk_path = GetTestDataPath() + "/overlay/overlay-static-1.apk";
const std::string overlay_static_2_apk_path = GetTestDataPath() + "/overlay/overlay-static-2.apk";
+ const std::string idmap_static_no_name_path =
+ Idmap::CanonicalIdmapPathFor(GetTempDirPath(), overlay_static_no_name_apk_path);
const std::string idmap_static_1_path =
Idmap::CanonicalIdmapPathFor(GetTempDirPath(), overlay_static_1_apk_path);
const std::string idmap_static_2_path =
@@ -184,11 +188,18 @@ TEST_F(Idmap2BinaryTests, Scan) {
ASSERT_THAT(result, NotNull());
ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
std::stringstream expected;
+ expected << idmap_static_no_name_path << std::endl;
expected << idmap_static_1_path << std::endl;
expected << idmap_static_2_path << std::endl;
ASSERT_EQ(result->stdout, expected.str());
std::stringstream error;
+ auto idmap_static_no_name_raw_string = utils::ReadFile(idmap_static_no_name_path);
+ auto idmap_static_no_name_raw_stream = std::istringstream(*idmap_static_no_name_raw_string);
+ auto idmap_static_no_name = Idmap::FromBinaryStream(idmap_static_no_name_raw_stream, error);
+ ASSERT_THAT(idmap_static_no_name, NotNull());
+ ASSERT_IDMAP(*idmap_static_no_name, GetTargetApkPath(), overlay_static_no_name_apk_path);
+
auto idmap_static_1_raw_string = utils::ReadFile(idmap_static_1_path);
auto idmap_static_1_raw_stream = std::istringstream(*idmap_static_1_raw_string);
auto idmap_static_1 = Idmap::FromBinaryStream(idmap_static_1_raw_stream, error);
@@ -201,6 +212,7 @@ TEST_F(Idmap2BinaryTests, Scan) {
ASSERT_THAT(idmap_static_2, NotNull());
ASSERT_IDMAP(*idmap_static_2, GetTargetApkPath(), overlay_static_2_apk_path);
+ unlink(idmap_static_no_name_path.c_str());
unlink(idmap_static_2_path.c_str());
unlink(idmap_static_1_path.c_str());
@@ -218,6 +230,7 @@ TEST_F(Idmap2BinaryTests, Scan) {
ASSERT_THAT(result, NotNull());
ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
ASSERT_EQ(result->stdout, expected.str());
+ unlink(idmap_static_no_name_path.c_str());
unlink(idmap_static_2_path.c_str());
unlink(idmap_static_1_path.c_str());
@@ -236,6 +249,7 @@ TEST_F(Idmap2BinaryTests, Scan) {
ASSERT_THAT(result, NotNull());
ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr;
ASSERT_EQ(result->stdout, expected.str());
+ unlink(idmap_static_no_name_path.c_str());
unlink(idmap_static_2_path.c_str());
unlink(idmap_static_1_path.c_str());
diff --git a/cmds/idmap2/tests/IdmapTests.cpp b/cmds/idmap2/tests/IdmapTests.cpp
index df28918ac9b4..9e27ccd7cfbb 100644
--- a/cmds/idmap2/tests/IdmapTests.cpp
+++ b/cmds/idmap2/tests/IdmapTests.cpp
@@ -224,7 +224,8 @@ TEST(IdmapTests, CreateIdmapFromApkAssets) {
ASSERT_EQ(types[1]->GetEntry(3), 0x0002U);
}
-TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublic) {
+// Overlays should abide by all overlayable restrictions if enforcement of overlayable is enabled.
+TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsPolicySystemPublic) {
const std::string target_apk_path(GetTestDataPath() + "/target/target.apk");
std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path);
ASSERT_THAT(target_apk, NotNull());
@@ -260,7 +261,8 @@ TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublic) {
ASSERT_EQ(types[0]->GetEntry(2), 0x0002U); // string/policy_system_vendor
}
-TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalid) {
+// Overlays should abide by all overlayable restrictions if enforcement of overlayable is enabled.
+TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalid) {
const std::string target_apk_path(GetTestDataPath() + "/target/target.apk");
std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path);
ASSERT_THAT(target_apk, NotNull());
@@ -290,17 +292,15 @@ TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalid) {
ASSERT_EQ(types[0]->GetTargetTypeId(), 0x02U);
ASSERT_EQ(types[0]->GetOverlayTypeId(), 0x01U);
- ASSERT_EQ(types[0]->GetEntryCount(), 6U);
- ASSERT_EQ(types[0]->GetEntryOffset(), 3U);
- ASSERT_EQ(types[0]->GetEntry(0), 0x0000U); // string/not_overlayable
- ASSERT_EQ(types[0]->GetEntry(1), kNoEntry); // string/other
- ASSERT_EQ(types[0]->GetEntry(2), kNoEntry); // string/policy_product
- ASSERT_EQ(types[0]->GetEntry(3), 0x0003U); // string/policy_public
- ASSERT_EQ(types[0]->GetEntry(4), 0x0004U); // string/policy_system
- ASSERT_EQ(types[0]->GetEntry(5), 0x0005U); // string/policy_system_vendor
+ ASSERT_EQ(types[0]->GetEntryCount(), 3U);
+ ASSERT_EQ(types[0]->GetEntryOffset(), 6U);
+ ASSERT_EQ(types[0]->GetEntry(0), 0x0003U); // string/policy_public
+ ASSERT_EQ(types[0]->GetEntry(1), 0x0004U); // string/policy_system
+ ASSERT_EQ(types[0]->GetEntry(2), 0x0005U); // string/policy_system_vendor
}
-TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalidIgnoreOverlayable) {
+// Overlays should ignore all overlayable restrictions if enforcement of overlayable is disabled.
+TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalidIgnoreOverlayable) {
const std::string target_apk_path(GetTestDataPath() + "/target/target.apk");
std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path);
ASSERT_THAT(target_apk, NotNull());
@@ -340,6 +340,91 @@ TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalidIgnoreOverlaya
ASSERT_EQ(types[0]->GetEntry(5), 0x0005U); // string/policy_system_vendor
}
+// The resources of APKs that do not include an overlayable declaration should not restrict what
+// resources can be overlaid.
+TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsNoDefinedOverlayable) {
+ const std::string target_apk_path(GetTestDataPath() + "/target/target-no-overlayable.apk");
+ std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path);
+ ASSERT_THAT(target_apk, NotNull());
+
+ const std::string overlay_apk_path(GetTestDataPath() +
+ "/system-overlay-invalid/system-overlay-invalid.apk");
+ std::unique_ptr<const ApkAssets> overlay_apk = ApkAssets::Load(overlay_apk_path);
+ ASSERT_THAT(overlay_apk, NotNull());
+
+ std::stringstream error;
+ std::unique_ptr<const Idmap> idmap =
+ Idmap::FromApkAssets(target_apk_path, *target_apk, overlay_apk_path, *overlay_apk,
+ PolicyFlags::POLICY_PUBLIC, /* enforce_overlayable */ true, error);
+ ASSERT_THAT(idmap, NotNull());
+
+ const std::vector<std::unique_ptr<const IdmapData>>& dataBlocks = idmap->GetData();
+ ASSERT_EQ(dataBlocks.size(), 1U);
+
+ const std::unique_ptr<const IdmapData>& data = dataBlocks[0];
+
+ ASSERT_EQ(data->GetHeader()->GetTargetPackageId(), 0x7fU);
+ ASSERT_EQ(data->GetHeader()->GetTypeCount(), 1U);
+
+ const std::vector<std::unique_ptr<const IdmapData::TypeEntry>>& types = data->GetTypeEntries();
+ ASSERT_EQ(types.size(), 1U);
+
+ ASSERT_EQ(types[0]->GetTargetTypeId(), 0x02U);
+ ASSERT_EQ(types[0]->GetOverlayTypeId(), 0x01U);
+ ASSERT_EQ(types[0]->GetEntryCount(), 6U);
+ ASSERT_EQ(types[0]->GetEntryOffset(), 3U);
+ ASSERT_EQ(types[0]->GetEntry(0), 0x0000U); // string/not_overlayable
+ ASSERT_EQ(types[0]->GetEntry(1), 0x0001U); // string/other
+ ASSERT_EQ(types[0]->GetEntry(2), 0x0002U); // string/policy_product
+ ASSERT_EQ(types[0]->GetEntry(3), 0x0003U); // string/policy_public
+ ASSERT_EQ(types[0]->GetEntry(4), 0x0004U); // string/policy_system
+ ASSERT_EQ(types[0]->GetEntry(5), 0x0005U); // string/policy_system_vendor
+}
+
+// The resources of APKs that do not include an overlayable declaration should not restrict what
+// resources can be overlaid.
+TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsNoDefinedOverlayableAndNoTargetName) {
+ const std::string target_apk_path(GetTestDataPath() + "/target/target-no-overlayable.apk");
+ std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path);
+ ASSERT_THAT(target_apk, NotNull());
+
+ const std::string overlay_apk_path(GetTestDataPath() + "/overlay/overlay-no-name.apk");
+ std::unique_ptr<const ApkAssets> overlay_apk = ApkAssets::Load(overlay_apk_path);
+ ASSERT_THAT(overlay_apk, NotNull());
+
+ std::stringstream error;
+ std::unique_ptr<const Idmap> idmap =
+ Idmap::FromApkAssets(target_apk_path, *target_apk, overlay_apk_path, *overlay_apk,
+ PolicyFlags::POLICY_PUBLIC, /* enforce_overlayable */ true, error);
+ ASSERT_THAT(idmap, NotNull());
+
+ const std::vector<std::unique_ptr<const IdmapData>>& dataBlocks = idmap->GetData();
+ ASSERT_EQ(dataBlocks.size(), 1U);
+
+ const std::unique_ptr<const IdmapData>& data = dataBlocks[0];
+
+ ASSERT_EQ(data->GetHeader()->GetTargetPackageId(), 0x7fU);
+ ASSERT_EQ(data->GetHeader()->GetTypeCount(), 2U);
+
+ const std::vector<std::unique_ptr<const IdmapData::TypeEntry>>& types = data->GetTypeEntries();
+ ASSERT_EQ(types.size(), 2U);
+
+ ASSERT_EQ(types[0]->GetTargetTypeId(), 0x01U);
+ ASSERT_EQ(types[0]->GetOverlayTypeId(), 0x01U);
+ ASSERT_EQ(types[0]->GetEntryCount(), 1U);
+ ASSERT_EQ(types[0]->GetEntryOffset(), 0U);
+ ASSERT_EQ(types[0]->GetEntry(0), 0x0000U);
+
+ ASSERT_EQ(types[1]->GetTargetTypeId(), 0x02U);
+ ASSERT_EQ(types[1]->GetOverlayTypeId(), 0x02U);
+ ASSERT_EQ(types[1]->GetEntryCount(), 4U);
+ ASSERT_EQ(types[1]->GetEntryOffset(), 9U);
+ ASSERT_EQ(types[1]->GetEntry(0), 0x0000U);
+ ASSERT_EQ(types[1]->GetEntry(1), kNoEntry);
+ ASSERT_EQ(types[1]->GetEntry(2), 0x0001U);
+ ASSERT_EQ(types[1]->GetEntry(3), 0x0002U);
+}
+
TEST(IdmapTests, FailToCreateIdmapFromApkAssetsIfPathTooLong) {
std::string target_apk_path(GetTestDataPath());
for (int i = 0; i < 32; i++) {
diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifest.xml b/cmds/idmap2/tests/data/overlay/AndroidManifest.xml
index 9f89d3121a82..a7767a6d35e6 100644
--- a/cmds/idmap2/tests/data/overlay/AndroidManifest.xml
+++ b/cmds/idmap2/tests/data/overlay/AndroidManifest.xml
@@ -17,5 +17,6 @@
xmlns:android="http://schemas.android.com/apk/res/android"
package="test.overlay">
<overlay
- android:targetPackage="test.target" />
+ android:targetPackage="test.target"
+ android:targetName="TestResources"/>
</manifest>
diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifestNoName.xml b/cmds/idmap2/tests/data/overlay/AndroidManifestNoName.xml
new file mode 100644
index 000000000000..bc6b733e849f
--- /dev/null
+++ b/cmds/idmap2/tests/data/overlay/AndroidManifestNoName.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ package="test.overlay.no.name">
+ <overlay
+ android:targetPackage="test.target"/>
+</manifest>
diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifestNoNameStatic.xml b/cmds/idmap2/tests/data/overlay/AndroidManifestNoNameStatic.xml
new file mode 100644
index 000000000000..ed327ce0e630
--- /dev/null
+++ b/cmds/idmap2/tests/data/overlay/AndroidManifestNoNameStatic.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2019 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ package="test.overlay.no.name.static">
+ <overlay
+ android:targetPackage="test.target"
+ android:targetName="TestResources"
+ android:isStatic="true"
+ android:priority="1" />
+</manifest>
diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifestStatic1.xml b/cmds/idmap2/tests/data/overlay/AndroidManifestStatic1.xml
index 39336cc7e76b..1c4dae6cf69c 100644
--- a/cmds/idmap2/tests/data/overlay/AndroidManifestStatic1.xml
+++ b/cmds/idmap2/tests/data/overlay/AndroidManifestStatic1.xml
@@ -18,6 +18,7 @@
package="test.overlay.static1">
<overlay
android:targetPackage="test.target"
+ android:targetName="TestResources"
android:isStatic="true"
android:priority="1" />
</manifest>
diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifestStatic2.xml b/cmds/idmap2/tests/data/overlay/AndroidManifestStatic2.xml
index e1cc1758d8cc..70efc8603670 100644
--- a/cmds/idmap2/tests/data/overlay/AndroidManifestStatic2.xml
+++ b/cmds/idmap2/tests/data/overlay/AndroidManifestStatic2.xml
@@ -18,6 +18,7 @@
package="test.overlay.static2">
<overlay
android:targetPackage="test.target"
+ android:targetName="TestResources"
android:isStatic="true"
android:priority="2" />
</manifest>
diff --git a/cmds/idmap2/tests/data/overlay/build b/cmds/idmap2/tests/data/overlay/build
index cba108674005..e60da803388b 100644
--- a/cmds/idmap2/tests/data/overlay/build
+++ b/cmds/idmap2/tests/data/overlay/build
@@ -26,6 +26,20 @@ aapt2 link \
aapt2 link \
--no-resource-removal \
-I "$FRAMEWORK_RES_APK" \
+ --manifest AndroidManifestNoName.xml \
+ -o overlay-no-name.apk \
+ compiled.flata
+
+aapt2 link \
+ --no-resource-removal \
+ -I "$FRAMEWORK_RES_APK" \
+ --manifest AndroidManifestNoNameStatic.xml \
+ -o overlay-no-name-static.apk \
+ compiled.flata
+
+aapt2 link \
+ --no-resource-removal \
+ -I "$FRAMEWORK_RES_APK" \
--manifest AndroidManifestStatic1.xml \
-o overlay-static-1.apk \
compiled.flata
diff --git a/cmds/idmap2/tests/data/overlay/overlay-no-name-static.apk b/cmds/idmap2/tests/data/overlay/overlay-no-name-static.apk
new file mode 100644
index 000000000000..18ee43dc57a4
--- /dev/null
+++ b/cmds/idmap2/tests/data/overlay/overlay-no-name-static.apk
Binary files differ
diff --git a/cmds/idmap2/tests/data/overlay/overlay-no-name.apk b/cmds/idmap2/tests/data/overlay/overlay-no-name.apk
new file mode 100644
index 000000000000..7d23c09473ce
--- /dev/null
+++ b/cmds/idmap2/tests/data/overlay/overlay-no-name.apk
Binary files differ
diff --git a/cmds/idmap2/tests/data/overlay/overlay-static-1.apk b/cmds/idmap2/tests/data/overlay/overlay-static-1.apk
index 9a0f487522c8..642ab90d00ae 100644
--- a/cmds/idmap2/tests/data/overlay/overlay-static-1.apk
+++ b/cmds/idmap2/tests/data/overlay/overlay-static-1.apk
Binary files differ
diff --git a/cmds/idmap2/tests/data/overlay/overlay-static-2.apk b/cmds/idmap2/tests/data/overlay/overlay-static-2.apk
index 3fc31c7d11b0..2ec56020c4aa 100644
--- a/cmds/idmap2/tests/data/overlay/overlay-static-2.apk
+++ b/cmds/idmap2/tests/data/overlay/overlay-static-2.apk
Binary files differ
diff --git a/cmds/idmap2/tests/data/overlay/overlay.apk b/cmds/idmap2/tests/data/overlay/overlay.apk
index b4cd7cfc3248..5842da4f432e 100644
--- a/cmds/idmap2/tests/data/overlay/overlay.apk
+++ b/cmds/idmap2/tests/data/overlay/overlay.apk
Binary files differ
diff --git a/cmds/idmap2/tests/data/system-overlay/AndroidManifest.xml b/cmds/idmap2/tests/data/system-overlay/AndroidManifest.xml
index 8af9064ba64f..5dacebded529 100644
--- a/cmds/idmap2/tests/data/system-overlay/AndroidManifest.xml
+++ b/cmds/idmap2/tests/data/system-overlay/AndroidManifest.xml
@@ -14,8 +14,9 @@
limitations under the License.
-->
<manifest
- xmlns:android="http://schemas.android.com/apk/res/android"
- package="test.overlay.system">
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ package="test.overlay.system">
<overlay
- android:targetPackage="test.target" />
+ android:targetPackage="test.target"
+ android:targetName="TestResources"/>
</manifest>
diff --git a/cmds/idmap2/tests/data/system-overlay/system-overlay.apk b/cmds/idmap2/tests/data/system-overlay/system-overlay.apk
index 90f30eb68c15..a0fba4378b57 100644
--- a/cmds/idmap2/tests/data/system-overlay/system-overlay.apk
+++ b/cmds/idmap2/tests/data/system-overlay/system-overlay.apk
Binary files differ
diff --git a/cmds/idmap2/tests/data/target/build b/cmds/idmap2/tests/data/target/build
index 8569c4ff0a6b..137ddb5ecaa1 100644
--- a/cmds/idmap2/tests/data/target/build
+++ b/cmds/idmap2/tests/data/target/build
@@ -15,3 +15,7 @@
aapt2 compile --dir res -o compiled.flata
aapt2 link --manifest AndroidManifest.xml -A assets -o target.apk compiled.flata
rm compiled.flata
+
+aapt2 compile res/values/values.xml -o .
+aapt2 link --manifest AndroidManifest.xml -A assets -o target_no_overlayable.apk values_values.arsc.flat
+rm values_values.arsc.flat \ No newline at end of file
diff --git a/cmds/idmap2/tests/data/target/target-no-overlayable.apk b/cmds/idmap2/tests/data/target/target-no-overlayable.apk
new file mode 100644
index 000000000000..8676cbb9dc3f
--- /dev/null
+++ b/cmds/idmap2/tests/data/target/target-no-overlayable.apk
Binary files differ
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 63f9b5954792..fc3aa91b9e0b 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -238,6 +238,7 @@ message Atom {
ProcessStartTime process_start_time = 169;
PermissionGrantRequestResultReported permission_grant_request_result_reported = 170;
BluetoothSocketConnectionStateChanged bluetooth_socket_connection_state_changed = 171;
+ DeviceIdentifierAccessDenied device_identifier_access_denied = 172;
}
// Pulled events will start at field 10000.
@@ -5447,3 +5448,22 @@ message DangerousPermissionState {
optional bool is_granted = 4;
}
+/**
+ * Logs when a package is denied access to a device identifier based on the new access requirements.
+ *
+ * Logged from:
+ * frameworks/base/telephony/java/com/android/internal/telephony/TelephonyPermissions.java
+ */
+message DeviceIdentifierAccessDenied {
+ // The name of the package denied access to the requested device identifier.
+ optional string package_name = 1;
+
+ // The name of the device identifier method the package attempted to invoke.
+ optional string method_name = 2;
+
+ // True if the package is preinstalled.
+ optional bool is_preinstalled = 3;
+
+ // True if the package is privileged.
+ optional bool is_priv_app = 4;
+}
diff --git a/cmds/statsd/src/external/PullDataReceiver.h b/cmds/statsd/src/external/PullDataReceiver.h
index 0d505cb49e8f..b071682f8a59 100644
--- a/cmds/statsd/src/external/PullDataReceiver.h
+++ b/cmds/statsd/src/external/PullDataReceiver.h
@@ -28,9 +28,15 @@ namespace statsd {
class PullDataReceiver : virtual public RefBase{
public:
virtual ~PullDataReceiver() {}
- virtual void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data) = 0;
+ /**
+ * @param data The pulled data.
+ * @param pullSuccess Whether the pull succeeded. If the pull does not succeed, the data for the
+ * bucket should be invalidated.
+ */
+ virtual void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data,
+ bool pullSuccess) = 0;
};
} // namespace statsd
} // namespace os
-} // namespace android \ No newline at end of file
+} // namespace android
diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp
index c69384c7077f..9b603d6c7957 100644
--- a/cmds/statsd/src/external/StatsPullerManager.cpp
+++ b/cmds/statsd/src/external/StatsPullerManager.cpp
@@ -358,12 +358,13 @@ void StatsPullerManager::OnAlarmFired(int64_t elapsedTimeNs) {
for (const auto& pullInfo : needToPull) {
vector<shared_ptr<LogEvent>> data;
- if (!Pull(pullInfo.first, &data)) {
+ bool pullSuccess = Pull(pullInfo.first, &data);
+ if (pullSuccess) {
+ StatsdStats::getInstance().notePullDelay(
+ pullInfo.first, getElapsedRealtimeNs() - elapsedTimeNs);
+ } else {
VLOG("pull failed at %lld, will try again later", (long long)elapsedTimeNs);
- continue;
}
- StatsdStats::getInstance().notePullDelay(pullInfo.first,
- getElapsedRealtimeNs() - elapsedTimeNs);
// Convention is to mark pull atom timestamp at request time.
// If we pull at t0, puller starts at t1, finishes at t2, and send back
@@ -380,8 +381,8 @@ void StatsPullerManager::OnAlarmFired(int64_t elapsedTimeNs) {
for (const auto& receiverInfo : pullInfo.second) {
sp<PullDataReceiver> receiverPtr = receiverInfo->receiver.promote();
if (receiverPtr != nullptr) {
- receiverPtr->onDataPulled(data);
- // we may have just come out of a coma, compute next pull time
+ receiverPtr->onDataPulled(data, pullSuccess);
+ // We may have just come out of a coma, compute next pull time.
int numBucketsAhead =
(elapsedTimeNs - receiverInfo->nextPullTimeNs) / receiverInfo->intervalNs;
receiverInfo->nextPullTimeNs += (numBucketsAhead + 1) * receiverInfo->intervalNs;
diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp
index 37ccad5f4a49..a5bd5c6b6364 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.cpp
+++ b/cmds/statsd/src/guardrail/StatsdStats.cpp
@@ -448,6 +448,11 @@ void StatsdStats::noteConditionChangeInNextBucket(int metricId) {
getAtomMetricStats(metricId).conditionChangeInNextBucket++;
}
+void StatsdStats::noteInvalidatedBucket(int metricId) {
+ lock_guard<std::mutex> lock(mLock);
+ getAtomMetricStats(metricId).invalidatedBucket++;
+}
+
StatsdStats::AtomMetricStats& StatsdStats::getAtomMetricStats(int metricId) {
auto atomMetricStatsIter = mAtomMetricStats.find(metricId);
if (atomMetricStatsIter != mAtomMetricStats.end()) {
diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h
index 01e9ca17e5fd..cb17061c1ed1 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.h
+++ b/cmds/statsd/src/guardrail/StatsdStats.h
@@ -365,6 +365,11 @@ public:
void noteConditionChangeInNextBucket(int atomId);
/**
+ * A bucket has been tagged as invalid.
+ */
+ void noteInvalidatedBucket(int metricId);
+
+ /**
* Reset the historical stats. Including all stats in icebox, and the tracked stats about
* metrics, matchers, and atoms. The active configs will be kept and StatsdStats will continue
* to collect stats after reset() has been called.
@@ -408,6 +413,7 @@ public:
long skippedForwardBuckets = 0;
long badValueType = 0;
long conditionChangeInNextBucket = 0;
+ long invalidatedBucket = 0;
} AtomMetricStats;
private:
diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
index c2878f02a691..c9b71659aa58 100644
--- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp
@@ -406,9 +406,10 @@ std::shared_ptr<vector<FieldValue>> GaugeMetricProducer::getGaugeFields(const Lo
return gaugeFields;
}
-void GaugeMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& allData) {
+void GaugeMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& allData,
+ bool pullSuccess) {
std::lock_guard<std::mutex> lock(mMutex);
- if (allData.size() == 0) {
+ if (!pullSuccess || allData.size() == 0) {
return;
}
for (const auto& data : allData) {
diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.h b/cmds/statsd/src/metrics/GaugeMetricProducer.h
index df0877954d70..d480941ed311 100644
--- a/cmds/statsd/src/metrics/GaugeMetricProducer.h
+++ b/cmds/statsd/src/metrics/GaugeMetricProducer.h
@@ -67,7 +67,8 @@ public:
virtual ~GaugeMetricProducer();
// Handles when the pulled data arrives.
- void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data) override;
+ void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data,
+ bool pullSuccess) override;
// GaugeMetric needs to immediately trigger another pull when we create the partial bucket.
void notifyAppUpgrade(const int64_t& eventTimeNs, const string& apk, const int uid,
diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp
index 6aa8e842b021..9fb78e780870 100644
--- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp
+++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp
@@ -104,6 +104,7 @@ ValueMetricProducer::ValueMetricProducer(
mSkipZeroDiffOutput(metric.skip_zero_diff_output()),
mUseZeroDefaultBase(metric.use_zero_default_base()),
mHasGlobalBase(false),
+ mCurrentBucketIsInvalid(false),
mMaxPullDelayNs(metric.max_pull_delay_sec() > 0 ? metric.max_pull_delay_sec() * NS_PER_SEC
: StatsdStats::kPullMaxDelayNs),
mSplitBucketForAppUpgrade(metric.split_bucket_for_app_upgrade()) {
@@ -308,6 +309,15 @@ void ValueMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs,
}
}
+void ValueMetricProducer::invalidateCurrentBucket() {
+ if (!mCurrentBucketIsInvalid) {
+ // Only report once per invalid bucket.
+ StatsdStats::getInstance().noteInvalidatedBucket(mMetricId);
+ }
+ mCurrentBucketIsInvalid = true;
+ resetBase();
+}
+
void ValueMetricProducer::resetBase() {
for (auto& slice : mCurrentSlicedBucket) {
for (auto& interval : slice.second) {
@@ -323,6 +333,7 @@ void ValueMetricProducer::onConditionChangedLocked(const bool condition,
VLOG("Skip event due to late arrival: %lld vs %lld", (long long)eventTimeNs,
(long long)mCurrentBucketStartTimeNs);
StatsdStats::getInstance().noteConditionChangeInNextBucket(mMetricId);
+ invalidateCurrentBucket();
return;
}
@@ -346,19 +357,20 @@ void ValueMetricProducer::pullAndMatchEventsLocked(const int64_t timestampNs) {
vector<std::shared_ptr<LogEvent>> allData;
if (!mPullerManager->Pull(mPullTagId, &allData)) {
ALOGE("Gauge Stats puller failed for tag: %d at %lld", mPullTagId, (long long)timestampNs);
- resetBase();
+ invalidateCurrentBucket();
return;
}
const int64_t pullDelayNs = getElapsedRealtimeNs() - timestampNs;
+ StatsdStats::getInstance().notePullDelay(mPullTagId, pullDelayNs);
if (pullDelayNs > mMaxPullDelayNs) {
ALOGE("Pull finish too late for atom %d, longer than %lld", mPullTagId,
(long long)mMaxPullDelayNs);
StatsdStats::getInstance().notePullExceedMaxDelay(mPullTagId);
- StatsdStats::getInstance().notePullDelay(mPullTagId, pullDelayNs);
- resetBase();
+ // We are missing one pull from the bucket which means we will not have a complete view of
+ // what's going on.
+ invalidateCurrentBucket();
return;
}
- StatsdStats::getInstance().notePullDelay(mPullTagId, pullDelayNs);
if (timestampNs < mCurrentBucketStartTimeNs) {
// The data will be skipped in onMatchedLogEventInternalLocked, but we don't want to report
@@ -382,9 +394,16 @@ int64_t ValueMetricProducer::calcPreviousBucketEndTime(const int64_t currentTime
return mTimeBaseNs + ((currentTimeNs - mTimeBaseNs) / mBucketSizeNs) * mBucketSizeNs;
}
-void ValueMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& allData) {
+void ValueMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& allData,
+ bool pullSuccess) {
std::lock_guard<std::mutex> lock(mMutex);
if (mCondition) {
+ if (!pullSuccess) {
+ // If the pull failed, we won't be able to compute a diff.
+ invalidateCurrentBucket();
+ return;
+ }
+
if (allData.size() == 0) {
VLOG("Data pulled is empty");
StatsdStats::getInstance().noteEmptyData(mPullTagId);
@@ -399,12 +418,13 @@ void ValueMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEven
// if the diff base will be cleared and this new data will serve as new diff base.
int64_t realEventTime = allData.at(0)->GetElapsedTimestampNs();
int64_t bucketEndTime = calcPreviousBucketEndTime(realEventTime) - 1;
- if (bucketEndTime < mCurrentBucketStartTimeNs) {
+ bool isEventLate = bucketEndTime < mCurrentBucketStartTimeNs;
+ if (isEventLate) {
VLOG("Skip bucket end pull due to late arrival: %lld vs %lld", (long long)bucketEndTime,
(long long)mCurrentBucketStartTimeNs);
StatsdStats::getInstance().noteLateLogEventSkipped(mMetricId);
- return;
}
+
for (const auto& data : allData) {
LogEvent localCopy = data->makeCopy();
if (mEventMatcherWizard->matchLogEvent(localCopy, mWhatMatcherIndex) ==
@@ -679,31 +699,13 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) {
VLOG("finalizing bucket for %ld, dumping %d slices", (long)mCurrentBucketStartTimeNs,
(int)mCurrentSlicedBucket.size());
int64_t fullBucketEndTimeNs = getCurrentBucketEndTimeNs();
-
int64_t bucketEndTime = eventTimeNs < fullBucketEndTimeNs ? eventTimeNs : fullBucketEndTimeNs;
- if (bucketEndTime - mCurrentBucketStartTimeNs >= mMinBucketSizeNs) {
+ bool isBucketLargeEnough = bucketEndTime - mCurrentBucketStartTimeNs >= mMinBucketSizeNs;
+ if (isBucketLargeEnough && !mCurrentBucketIsInvalid) {
// The current bucket is large enough to keep.
for (const auto& slice : mCurrentSlicedBucket) {
- ValueBucket bucket;
- bucket.mBucketStartNs = mCurrentBucketStartTimeNs;
- bucket.mBucketEndNs = bucketEndTime;
- for (const auto& interval : slice.second) {
- if (interval.hasValue) {
- // skip the output if the diff is zero
- if (mSkipZeroDiffOutput && mUseDiff && interval.value.isZero()) {
- continue;
- }
- bucket.valueIndex.push_back(interval.valueIndex);
- if (mAggregationType != ValueMetric::AVG) {
- bucket.values.push_back(interval.value);
- } else {
- double sum = interval.value.type == LONG ? (double)interval.value.long_value
- : interval.value.double_value;
- bucket.values.push_back(Value((double)sum / interval.sampleSize));
- }
- }
- }
+ ValueBucket bucket = buildPartialBucket(bucketEndTime, slice.second);
// it will auto create new vector of ValuebucketInfo if the key is not found.
if (bucket.valueIndex.size() > 0) {
auto& bucketList = mPastBuckets[slice.first];
@@ -714,6 +716,58 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) {
mSkippedBuckets.emplace_back(mCurrentBucketStartTimeNs, bucketEndTime);
}
+ if (!mCurrentBucketIsInvalid) {
+ appendToFullBucket(eventTimeNs, fullBucketEndTimeNs);
+ }
+ initCurrentSlicedBucket();
+ mCurrentBucketIsInvalid = false;
+}
+
+ValueBucket ValueMetricProducer::buildPartialBucket(int64_t bucketEndTime,
+ const std::vector<Interval>& intervals) {
+ ValueBucket bucket;
+ bucket.mBucketStartNs = mCurrentBucketStartTimeNs;
+ bucket.mBucketEndNs = bucketEndTime;
+ for (const auto& interval : intervals) {
+ if (interval.hasValue) {
+ // skip the output if the diff is zero
+ if (mSkipZeroDiffOutput && mUseDiff && interval.value.isZero()) {
+ continue;
+ }
+ bucket.valueIndex.push_back(interval.valueIndex);
+ if (mAggregationType != ValueMetric::AVG) {
+ bucket.values.push_back(interval.value);
+ } else {
+ double sum = interval.value.type == LONG ? (double)interval.value.long_value
+ : interval.value.double_value;
+ bucket.values.push_back(Value((double)sum / interval.sampleSize));
+ }
+ }
+ }
+ return bucket;
+}
+
+void ValueMetricProducer::initCurrentSlicedBucket() {
+ for (auto it = mCurrentSlicedBucket.begin(); it != mCurrentSlicedBucket.end();) {
+ bool obsolete = true;
+ for (auto& interval : it->second) {
+ interval.hasValue = false;
+ interval.sampleSize = 0;
+ if (interval.seenNewData) {
+ obsolete = false;
+ }
+ interval.seenNewData = false;
+ }
+
+ if (obsolete) {
+ it = mCurrentSlicedBucket.erase(it);
+ } else {
+ it++;
+ }
+ }
+}
+
+void ValueMetricProducer::appendToFullBucket(int64_t eventTimeNs, int64_t fullBucketEndTimeNs) {
if (eventTimeNs > fullBucketEndTimeNs) { // If full bucket, send to anomaly tracker.
// Accumulate partial buckets with current value and then send to anomaly tracker.
if (mCurrentFullBucket.size() > 0) {
@@ -751,24 +805,6 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) {
mCurrentFullBucket[slice.first] += slice.second[0].value.long_value;
}
}
-
- for (auto it = mCurrentSlicedBucket.begin(); it != mCurrentSlicedBucket.end();) {
- bool obsolete = true;
- for (auto& interval : it->second) {
- interval.hasValue = false;
- interval.sampleSize = 0;
- if (interval.seenNewData) {
- obsolete = false;
- }
- interval.seenNewData = false;
- }
-
- if (obsolete) {
- it = mCurrentSlicedBucket.erase(it);
- } else {
- it++;
- }
- }
}
size_t ValueMetricProducer::byteSizeLocked() const {
diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.h b/cmds/statsd/src/metrics/ValueMetricProducer.h
index a8dfc5ba0e5d..d9bec5d588be 100644
--- a/cmds/statsd/src/metrics/ValueMetricProducer.h
+++ b/cmds/statsd/src/metrics/ValueMetricProducer.h
@@ -51,7 +51,8 @@ public:
virtual ~ValueMetricProducer();
// Process data pulled on bucket boundary.
- void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data) override;
+ void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data,
+ bool pullSuccess) override;
// ValueMetric needs special logic if it's a pulled atom.
void notifyAppUpgrade(const int64_t& eventTimeNs, const string& apk, const int uid,
@@ -102,6 +103,9 @@ private:
// Calculate previous bucket end time based on current time.
int64_t calcPreviousBucketEndTime(const int64_t currentTimeNs);
+ // Mark the data as invalid.
+ void invalidateCurrentBucket();
+
const int mWhatMatcherIndex;
sp<EventMatcherWizard> mEventMatcherWizard;
@@ -155,6 +159,11 @@ private:
void pullAndMatchEventsLocked(const int64_t timestampNs);
+ ValueBucket buildPartialBucket(int64_t bucketEndTime,
+ const std::vector<Interval>& intervals);
+ void initCurrentSlicedBucket();
+ void appendToFullBucket(int64_t eventTimeNs, int64_t fullBucketEndTimeNs);
+
// Reset diff base and mHasGlobalBase
void resetBase();
@@ -186,6 +195,12 @@ private:
// diff against.
bool mHasGlobalBase;
+ // Invalid bucket. There was a problem in collecting data in the current bucket so we cannot
+ // trust any of the data in this bucket.
+ //
+ // For instance, one pull failed.
+ bool mCurrentBucketIsInvalid;
+
const int64_t mMaxPullDelayNs;
const bool mSplitBucketForAppUpgrade;
@@ -216,8 +231,13 @@ private:
FRIEND_TEST(ValueMetricProducerTest, TestUseZeroDefaultBase);
FRIEND_TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures);
FRIEND_TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey);
- FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullFail);
+ FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullFailBeforeConditionChange);
+ FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange);
+ FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange_EndOfBucket);
FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate);
+ FRIEND_TEST(ValueMetricProducerTest, TestInvalidBucketWhenOneConditionFailed);
+ FRIEND_TEST(ValueMetricProducerTest, TestInvalidBucketWhenInitialPullFailed);
+ FRIEND_TEST(ValueMetricProducerTest, TestInvalidBucketWhenLastPullFailed);
};
} // namespace statsd
diff --git a/cmds/statsd/src/stats_log.proto b/cmds/statsd/src/stats_log.proto
index cca09ac017a3..5b9148283bdc 100644
--- a/cmds/statsd/src/stats_log.proto
+++ b/cmds/statsd/src/stats_log.proto
@@ -417,6 +417,7 @@ message StatsdStatsReport {
optional int64 skipped_forward_buckets = 4;
optional int64 bad_value_type = 5;
optional int64 condition_change_in_next_bucket = 6;
+ optional int64 invalidated_bucket = 7;
}
repeated AtomMetricStats atom_metric_stats = 17;
diff --git a/cmds/statsd/src/stats_log_util.cpp b/cmds/statsd/src/stats_log_util.cpp
index 9c9985ed271c..3cb7563b206b 100644
--- a/cmds/statsd/src/stats_log_util.cpp
+++ b/cmds/statsd/src/stats_log_util.cpp
@@ -78,6 +78,7 @@ const int FIELD_ID_LATE_LOG_EVENT_SKIPPED = 3;
const int FIELD_ID_SKIPPED_FORWARD_BUCKETS = 4;
const int FIELD_ID_BAD_VALUE_TYPE = 5;
const int FIELD_ID_CONDITION_CHANGE_IN_NEXT_BUCKET = 6;
+const int FIELD_ID_INVALIDATED_BUCKET = 7;
namespace {
@@ -494,6 +495,8 @@ void writeAtomMetricStatsToStream(const std::pair<int, StatsdStats::AtomMetricSt
(long long)pair.second.badValueType);
protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_CONDITION_CHANGE_IN_NEXT_BUCKET,
(long long)pair.second.conditionChangeInNextBucket);
+ protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_INVALIDATED_BUCKET,
+ (long long)pair.second.invalidatedBucket);
protoOutput->end(token);
}
diff --git a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp
index 0ffbb54c8d48..1725160c00c7 100644
--- a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp
@@ -133,7 +133,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsNoCondition) {
event->init();
allData.push_back(event);
- gaugeProducer.onDataPulled(allData);
+ gaugeProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
auto it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin();
EXPECT_EQ(INT, it->mValue.getType());
@@ -151,7 +151,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsNoCondition) {
event2->write(25);
event2->init();
allData.push_back(event2);
- gaugeProducer.onDataPulled(allData);
+ gaugeProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin();
EXPECT_EQ(INT, it->mValue.getType());
@@ -305,7 +305,7 @@ TEST(GaugeMetricProducerTest, TestPulledWithUpgrade) {
event->write(1);
event->init();
allData.push_back(event);
- gaugeProducer.onDataPulled(allData);
+ gaugeProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin()
->second.front()
@@ -328,7 +328,7 @@ TEST(GaugeMetricProducerTest, TestPulledWithUpgrade) {
event->write(3);
event->init();
allData.push_back(event);
- gaugeProducer.onDataPulled(allData);
+ gaugeProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(2UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
EXPECT_EQ(3, gaugeProducer.mCurrentSlicedBucket->begin()
@@ -371,7 +371,7 @@ TEST(GaugeMetricProducerTest, TestPulledWithAppUpgradeDisabled) {
event->write(1);
event->init();
allData.push_back(event);
- gaugeProducer.onDataPulled(allData);
+ gaugeProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin()
->second.front()
@@ -440,7 +440,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsWithCondition) {
event->write(110);
event->init();
allData.push_back(event);
- gaugeProducer.onDataPulled(allData);
+ gaugeProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
EXPECT_EQ(110, gaugeProducer.mCurrentSlicedBucket->begin()
@@ -541,7 +541,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsWithSlicedCondition) {
event->write(110);
event->init();
allData.push_back(event);
- gaugeProducer.onDataPulled(allData);
+ gaugeProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size());
@@ -590,7 +590,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) {
event1->write(13);
event1->init();
- gaugeProducer.onDataPulled({event1});
+ gaugeProducer.onDataPulled({event1}, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
EXPECT_EQ(13L, gaugeProducer.mCurrentSlicedBucket->begin()
->second.front()
@@ -604,7 +604,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) {
event2->write(15);
event2->init();
- gaugeProducer.onDataPulled({event2});
+ gaugeProducer.onDataPulled({event2}, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
EXPECT_EQ(15L, gaugeProducer.mCurrentSlicedBucket->begin()
->second.front()
@@ -619,7 +619,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) {
event3->write(26);
event3->init();
- gaugeProducer.onDataPulled({event3});
+ gaugeProducer.onDataPulled({event3}, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
EXPECT_EQ(26L, gaugeProducer.mCurrentSlicedBucket->begin()
->second.front()
@@ -633,7 +633,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) {
std::make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 10);
event4->write("some value");
event4->init();
- gaugeProducer.onDataPulled({event4});
+ gaugeProducer.onDataPulled({event4}, /** succeed */ true);
EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size());
EXPECT_TRUE(gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->empty());
}
diff --git a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
index c0648ee70032..64045520fb0b 100644
--- a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
+++ b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp
@@ -160,7 +160,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) {
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -177,7 +177,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) {
event->write(23);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -196,7 +196,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) {
event->write(36);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -256,7 +256,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) {
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
ValueMetricProducer::Interval curInterval =
@@ -274,7 +274,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) {
event->write(23);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -292,7 +292,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) {
event->write(36);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -341,7 +341,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) {
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -357,7 +357,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) {
event->write(10);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -373,7 +373,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) {
event->write(36);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
@@ -420,7 +420,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) {
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -436,7 +436,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) {
event->write(10);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -451,7 +451,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) {
event->write(36);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
@@ -525,7 +525,7 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) {
event->write(110);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
@@ -635,7 +635,7 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade) {
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1);
@@ -650,7 +650,7 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade) {
event->write(150);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size());
EXPECT_EQ(bucket2StartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs);
EXPECT_EQ(20L,
@@ -689,7 +689,7 @@ TEST(ValueMetricProducerTest, TestPulledWithAppUpgradeDisabled) {
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1);
@@ -993,7 +993,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) {
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -1011,7 +1011,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) {
event->write(23);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
@@ -1032,7 +1032,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) {
event->write(36);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
// startUpdated:false sum:12
@@ -1120,7 +1120,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) {
event->write(110);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(false, curInterval.hasBase);
@@ -1224,7 +1224,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) {
event->write(110);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0];
EXPECT_EQ(true, curInterval.hasBase);
@@ -1677,7 +1677,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBase) {
allData.push_back(event1);
allData.push_back(event2);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size());
EXPECT_EQ(true, interval1.hasBase);
EXPECT_EQ(11, interval1.base.long_value);
@@ -1762,7 +1762,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) {
allData.push_back(event1);
allData.push_back(event2);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size());
EXPECT_EQ(true, interval1.hasBase);
EXPECT_EQ(11, interval1.base.long_value);
@@ -1791,7 +1791,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) {
event1->write(5);
event1->init();
allData.push_back(event1);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size());
EXPECT_EQ(true, interval2.hasBase);
@@ -1813,7 +1813,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) {
event2->write(5);
event2->init();
allData.push_back(event2);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size());
EXPECT_EQ(true, interval2.hasBase);
@@ -1888,7 +1888,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) {
allData.push_back(event1);
allData.push_back(event2);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size());
EXPECT_EQ(true, interval1.hasBase);
EXPECT_EQ(11, interval1.base.long_value);
@@ -1918,7 +1918,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) {
event1->write(5);
event1->init();
allData.push_back(event1);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size());
@@ -1941,7 +1941,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) {
event1->write(13);
event1->init();
allData.push_back(event1);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
EXPECT_EQ(true, interval2.hasBase);
@@ -1951,7 +1951,60 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) {
EXPECT_EQ(1UL, valueProducer.mPastBuckets.size());
}
-TEST(ValueMetricProducerTest, TestResetBaseOnPullFail) {
+TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange_EndOfBucket) {
+ ValueMetric metric;
+ metric.set_id(metricId);
+ metric.set_bucket(ONE_MINUTE);
+ metric.mutable_value_field()->set_field(tagId);
+ metric.mutable_value_field()->add_child()->set_field(2);
+ metric.set_condition(StringToId("SCREEN_ON"));
+ metric.set_max_pull_delay_sec(INT_MAX);
+
+ UidMap uidMap;
+ SimpleAtomMatcher atomMatcher;
+ atomMatcher.set_atom_id(tagId);
+ sp<EventMatcherWizard> eventMatcherWizard =
+ new EventMatcherWizard({new SimpleLogMatchingTracker(
+ atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+ sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+ sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+ EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+ EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+
+ // Used by onConditionChanged.
+ EXPECT_CALL(*pullerManager, Pull(tagId, _))
+ .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+ data->clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+ event->write(tagId);
+ event->write(100);
+ event->init();
+ data->push_back(event);
+ return true;
+ }));
+
+ ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
+ eventMatcherWizard, tagId, bucketStartTimeNs,
+ bucketStartTimeNs, pullerManager);
+
+ valueProducer.onConditionChanged(true, bucketStartTimeNs + 8);
+ // has one slice
+ EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+ ValueMetricProducer::Interval& curInterval =
+ valueProducer.mCurrentSlicedBucket.begin()->second[0];
+ EXPECT_EQ(true, curInterval.hasBase);
+ EXPECT_EQ(100, curInterval.base.long_value);
+ EXPECT_EQ(false, curInterval.hasValue);
+
+ vector<shared_ptr<LogEvent>> allData;
+ valueProducer.onDataPulled(allData, /** succeed */ false);
+ EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+ EXPECT_EQ(false, curInterval.hasBase);
+ EXPECT_EQ(false, curInterval.hasValue);
+ EXPECT_EQ(false, valueProducer.mHasGlobalBase);
+}
+
+TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange) {
ValueMetric metric;
metric.set_id(metricId);
metric.set_bucket(ONE_MINUTE);
@@ -2007,6 +2060,56 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullFail) {
EXPECT_EQ(false, valueProducer.mHasGlobalBase);
}
+TEST(ValueMetricProducerTest, TestResetBaseOnPullFailBeforeConditionChange) {
+ ValueMetric metric;
+ metric.set_id(metricId);
+ metric.set_bucket(ONE_MINUTE);
+ metric.mutable_value_field()->set_field(tagId);
+ metric.mutable_value_field()->add_child()->set_field(2);
+ metric.set_condition(StringToId("SCREEN_ON"));
+ metric.set_max_pull_delay_sec(INT_MAX);
+
+ UidMap uidMap;
+ SimpleAtomMatcher atomMatcher;
+ atomMatcher.set_atom_id(tagId);
+ sp<EventMatcherWizard> eventMatcherWizard =
+ new EventMatcherWizard({new SimpleLogMatchingTracker(
+ atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+ sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+ sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+ EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+ EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+
+ EXPECT_CALL(*pullerManager, Pull(tagId, _))
+ .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+ data->clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+ event->write(tagId);
+ event->write(100);
+ event->init();
+ data->push_back(event);
+ return true;
+ }));
+
+ ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
+ eventMatcherWizard, tagId, bucketStartTimeNs,
+ bucketStartTimeNs, pullerManager);
+
+ valueProducer.mCondition = true;
+
+ vector<shared_ptr<LogEvent>> allData;
+ valueProducer.onDataPulled(allData, /** succeed */ false);
+ EXPECT_EQ(0UL, valueProducer.mCurrentSlicedBucket.size());
+
+ valueProducer.onConditionChanged(false, bucketStartTimeNs + 1);
+ EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+ ValueMetricProducer::Interval& curInterval =
+ valueProducer.mCurrentSlicedBucket.begin()->second[0];
+ EXPECT_EQ(false, curInterval.hasBase);
+ EXPECT_EQ(false, curInterval.hasValue);
+ EXPECT_EQ(false, valueProducer.mHasGlobalBase);
+}
+
TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate) {
ValueMetric metric;
metric.set_id(metricId);
@@ -2052,7 +2155,7 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate) {
event->write(110);
event->init();
allData.push_back(event);
- valueProducer.onDataPulled(allData);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
// has one slice
EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
@@ -2073,6 +2176,250 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate) {
EXPECT_EQ(false, valueProducer.mHasGlobalBase);
}
+TEST(ValueMetricProducerTest, TestInvalidBucketWhenOneConditionFailed) {
+ ValueMetric metric;
+ metric.set_id(metricId);
+ metric.set_bucket(ONE_MINUTE);
+ metric.mutable_value_field()->set_field(tagId);
+ metric.mutable_value_field()->add_child()->set_field(2);
+ metric.set_condition(StringToId("SCREEN_ON"));
+ metric.set_max_pull_delay_sec(INT_MAX);
+
+ UidMap uidMap;
+ SimpleAtomMatcher atomMatcher;
+ atomMatcher.set_atom_id(tagId);
+ sp<EventMatcherWizard> eventMatcherWizard =
+ new EventMatcherWizard({new SimpleLogMatchingTracker(
+ atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+ sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+ sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+ EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+ EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+
+ EXPECT_CALL(*pullerManager, Pull(tagId, _))
+ // First onConditionChanged
+ .WillOnce(Return(false))
+ // Second onConditionChanged
+ .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+ data->clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+ event->write(tagId);
+ event->write(130);
+ event->init();
+ data->push_back(event);
+ return true;
+ }));
+
+ ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
+ eventMatcherWizard, tagId, bucketStartTimeNs,
+ bucketStartTimeNs, pullerManager);
+
+ valueProducer.mCondition = true;
+
+ // Bucket start.
+ vector<shared_ptr<LogEvent>> allData;
+ allData.clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+ event->write(1);
+ event->write(110);
+ event->init();
+ allData.push_back(event);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
+
+ // This will fail and should invalidate the whole bucket since we do not have all the data
+ // needed to compute the metric value when the screen was on.
+ valueProducer.onConditionChanged(false, bucketStartTimeNs + 2);
+ valueProducer.onConditionChanged(true, bucketStartTimeNs + 3);
+
+ // Bucket end.
+ allData.clear();
+ shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+ event2->write(1);
+ event2->write(140);
+ event2->init();
+ allData.push_back(event2);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
+
+ valueProducer.flushIfNeededLocked(bucket2StartTimeNs + 1);
+
+ EXPECT_EQ(0UL, valueProducer.mPastBuckets.size());
+ // Contains base from last pull which was successful.
+ EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+ ValueMetricProducer::Interval& curInterval =
+ valueProducer.mCurrentSlicedBucket.begin()->second[0];
+ EXPECT_EQ(true, curInterval.hasBase);
+ EXPECT_EQ(140, curInterval.base.long_value);
+ EXPECT_EQ(false, curInterval.hasValue);
+ EXPECT_EQ(true, valueProducer.mHasGlobalBase);
+}
+
+TEST(ValueMetricProducerTest, TestInvalidBucketWhenInitialPullFailed) {
+ ValueMetric metric;
+ metric.set_id(metricId);
+ metric.set_bucket(ONE_MINUTE);
+ metric.mutable_value_field()->set_field(tagId);
+ metric.mutable_value_field()->add_child()->set_field(2);
+ metric.set_condition(StringToId("SCREEN_ON"));
+ metric.set_max_pull_delay_sec(INT_MAX);
+
+ UidMap uidMap;
+ SimpleAtomMatcher atomMatcher;
+ atomMatcher.set_atom_id(tagId);
+ sp<EventMatcherWizard> eventMatcherWizard =
+ new EventMatcherWizard({new SimpleLogMatchingTracker(
+ atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+ sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+ sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+ EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+ EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+
+ EXPECT_CALL(*pullerManager, Pull(tagId, _))
+ // First onConditionChanged
+ .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+ data->clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+ event->write(tagId);
+ event->write(120);
+ event->init();
+ data->push_back(event);
+ return true;
+ }))
+ // Second onConditionChanged
+ .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+ data->clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+ event->write(tagId);
+ event->write(130);
+ event->init();
+ data->push_back(event);
+ return true;
+ }));
+
+ ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
+ eventMatcherWizard, tagId, bucketStartTimeNs,
+ bucketStartTimeNs, pullerManager);
+
+ valueProducer.mCondition = true;
+
+ // Bucket start.
+ vector<shared_ptr<LogEvent>> allData;
+ allData.clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+ event->write(1);
+ event->write(110);
+ event->init();
+ allData.push_back(event);
+ valueProducer.onDataPulled(allData, /** succeed */ false);
+
+ valueProducer.onConditionChanged(false, bucketStartTimeNs + 2);
+ valueProducer.onConditionChanged(true, bucketStartTimeNs + 3);
+
+ // Bucket end.
+ allData.clear();
+ shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+ event2->write(1);
+ event2->write(140);
+ event2->init();
+ allData.push_back(event2);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
+
+ valueProducer.flushIfNeededLocked(bucket2StartTimeNs + 1);
+
+ EXPECT_EQ(0UL, valueProducer.mPastBuckets.size());
+ // Contains base from last pull which was successful.
+ EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+ ValueMetricProducer::Interval& curInterval =
+ valueProducer.mCurrentSlicedBucket.begin()->second[0];
+ EXPECT_EQ(true, curInterval.hasBase);
+ EXPECT_EQ(140, curInterval.base.long_value);
+ EXPECT_EQ(false, curInterval.hasValue);
+ EXPECT_EQ(true, valueProducer.mHasGlobalBase);
+}
+
+TEST(ValueMetricProducerTest, TestInvalidBucketWhenLastPullFailed) {
+ ValueMetric metric;
+ metric.set_id(metricId);
+ metric.set_bucket(ONE_MINUTE);
+ metric.mutable_value_field()->set_field(tagId);
+ metric.mutable_value_field()->add_child()->set_field(2);
+ metric.set_condition(StringToId("SCREEN_ON"));
+ metric.set_max_pull_delay_sec(INT_MAX);
+
+ UidMap uidMap;
+ SimpleAtomMatcher atomMatcher;
+ atomMatcher.set_atom_id(tagId);
+ sp<EventMatcherWizard> eventMatcherWizard =
+ new EventMatcherWizard({new SimpleLogMatchingTracker(
+ atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)});
+ sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>();
+ sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>();
+ EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return());
+ EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return());
+
+ EXPECT_CALL(*pullerManager, Pull(tagId, _))
+ // First onConditionChanged
+ .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+ data->clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+ event->write(tagId);
+ event->write(120);
+ event->init();
+ data->push_back(event);
+ return true;
+ }))
+ // Second onConditionChanged
+ .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) {
+ data->clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8);
+ event->write(tagId);
+ event->write(130);
+ event->init();
+ data->push_back(event);
+ return true;
+ }));
+
+ ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex,
+ eventMatcherWizard, tagId, bucketStartTimeNs,
+ bucketStartTimeNs, pullerManager);
+
+ valueProducer.mCondition = true;
+
+ // Bucket start.
+ vector<shared_ptr<LogEvent>> allData;
+ allData.clear();
+ shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1);
+ event->write(1);
+ event->write(110);
+ event->init();
+ allData.push_back(event);
+ valueProducer.onDataPulled(allData, /** succeed */ true);
+
+ // This will fail and should invalidate the whole bucket since we do not have all the data
+ // needed to compute the metric value when the screen was on.
+ valueProducer.onConditionChanged(false, bucketStartTimeNs + 2);
+ valueProducer.onConditionChanged(true, bucketStartTimeNs + 3);
+
+ // Bucket end.
+ allData.clear();
+ shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1);
+ event2->write(1);
+ event2->write(140);
+ event2->init();
+ allData.push_back(event2);
+ valueProducer.onDataPulled(allData, /** succeed */ false);
+
+ valueProducer.flushIfNeededLocked(bucket2StartTimeNs + 1);
+
+ EXPECT_EQ(0UL, valueProducer.mPastBuckets.size());
+ // Last pull failed so based has been reset.
+ EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size());
+ ValueMetricProducer::Interval& curInterval =
+ valueProducer.mCurrentSlicedBucket.begin()->second[0];
+ EXPECT_EQ(false, curInterval.hasBase);
+ EXPECT_EQ(false, curInterval.hasValue);
+ EXPECT_EQ(false, valueProducer.mHasGlobalBase);
+}
+
} // namespace statsd
} // namespace os
} // namespace android
diff --git a/config/hiddenapi-greylist.txt b/config/hiddenapi-greylist.txt
index 11bb38beee87..aad412f15fe2 100644
--- a/config/hiddenapi-greylist.txt
+++ b/config/hiddenapi-greylist.txt
@@ -328,17 +328,12 @@ Landroid/content/om/IOverlayManager;->getAllOverlays(I)Ljava/util/Map;
Landroid/content/om/IOverlayManager;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo;
Landroid/content/pm/IPackageDataObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder;
-Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->onRemoveCompleted(Ljava/lang/String;Z)V
Landroid/content/pm/IPackageDataObserver$Stub;-><init>()V
Landroid/content/pm/IPackageDataObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDataObserver;
-Landroid/content/pm/IPackageDataObserver$Stub;->DESCRIPTOR:Ljava/lang/String;
-Landroid/content/pm/IPackageDataObserver$Stub;->TRANSACTION_onRemoveCompleted:I
Landroid/content/pm/IPackageDataObserver;->onRemoveCompleted(Ljava/lang/String;Z)V
Landroid/content/pm/IPackageDeleteObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/content/pm/IPackageDeleteObserver$Stub;-><init>()V
Landroid/content/pm/IPackageDeleteObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDeleteObserver;
-Landroid/content/pm/IPackageDeleteObserver$Stub;->DESCRIPTOR:Ljava/lang/String;
-Landroid/content/pm/IPackageDeleteObserver$Stub;->TRANSACTION_packageDeleted:I
Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;->mRemote:Landroid/os/IBinder;
Landroid/content/pm/IPackageDeleteObserver2$Stub;-><init>()V
@@ -437,8 +432,6 @@ Landroid/content/pm/IPackageStatsObserver$Stub$Proxy;-><init>(Landroid/os/IBinde
Landroid/content/pm/IPackageStatsObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder;
Landroid/content/pm/IPackageStatsObserver$Stub;-><init>()V
Landroid/content/pm/IPackageStatsObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageStatsObserver;
-Landroid/content/pm/IPackageStatsObserver$Stub;->DESCRIPTOR:Ljava/lang/String;
-Landroid/content/pm/IPackageStatsObserver$Stub;->TRANSACTION_onGetStatsCompleted:I
Landroid/content/pm/IPackageStatsObserver;->onGetStatsCompleted(Landroid/content/pm/PackageStats;Z)V
Landroid/content/pm/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/content/pm/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IShortcutService;
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index ea145f0b9d21..64b94a946489 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -189,9 +189,19 @@ public class AppOpsManager {
/**
* Special mode that means "allow only when app is in foreground." This is <b>not</b>
- * returned from {@link #checkOp}, {@link #noteOp}, {@link #startOp}; rather, when this
- * mode is set, these functions will return {@link #MODE_ALLOWED} when the app being
- * checked is currently in the foreground, otherwise {@link #MODE_IGNORED}.
+ * returned from {@link #unsafeCheckOp}, {@link #noteOp}, {@link #startOp}. Rather,
+ * {@link #unsafeCheckOp} will always return {@link #MODE_ALLOWED} (because it is always
+ * possible for it to be ultimately allowed, depending on the app's background state),
+ * and {@link #noteOp} and {@link #startOp} will return {@link #MODE_ALLOWED} when the app
+ * being checked is currently in the foreground, otherwise {@link #MODE_IGNORED}.
+ *
+ * <p>The only place you will this normally see this value is through
+ * {@link #unsafeCheckOpRaw}, which returns the actual raw mode of the op. Note that because
+ * you can't know the current state of the app being checked (and it can change at any
+ * point), you can only treat the result here as an indication that it will vary between
+ * {@link #MODE_ALLOWED} and {@link #MODE_IGNORED} depending on changes in the background
+ * state of the app. You thus must always use {@link #noteOp} or {@link #startOp} to do
+ * the actual check for access to the op.</p>
*/
public static final int MODE_FOREGROUND = 4;
diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java
index e95d62fc96eb..cfe27c752581 100644
--- a/core/java/android/app/NotificationChannel.java
+++ b/core/java/android/app/NotificationChannel.java
@@ -85,7 +85,7 @@ public final class NotificationChannel implements Parcelable {
private static final String ATT_FG_SERVICE_SHOWN = "fgservice";
private static final String ATT_GROUP = "group";
private static final String ATT_BLOCKABLE_SYSTEM = "blockable_system";
- private static final String ATT_ALLOW_BUBBLE = "allow_bubble";
+ private static final String ATT_ALLOW_BUBBLE = "can_bubble";
private static final String DELIMITER = ",";
/**
@@ -611,14 +611,6 @@ public final class NotificationChannel implements Parcelable {
* shade, in a floating window on top of other apps.
*/
public boolean canBubble() {
- return isBubbleAllowed() && getImportance() >= IMPORTANCE_HIGH;
- }
-
- /**
- * Like {@link #canBubble()}, but only checks the permission, not the importance.
- * @hide
- */
- public boolean isBubbleAllowed() {
return mAllowBubbles;
}
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 428c9b01d101..3ff6973a09ff 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -6408,11 +6408,9 @@ public class DevicePolicyManager {
* @param admin Which {@link DeviceAdminReceiver} this request is associated with.
* @param packageName The name of the package to set as the default SMS application.
* @throws SecurityException if {@code admin} is not a device owner.
- *
- * @hide
*/
- @UnsupportedAppUsage
- public void setDefaultSmsApplication(@NonNull ComponentName admin, String packageName) {
+ public void setDefaultSmsApplication(@NonNull ComponentName admin,
+ @NonNull String packageName) {
throwIfParentInstance("setDefaultSmsApplication");
if (mService != null) {
try {
diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java
index a6f6d06ae71a..868fbfeeee39 100644
--- a/core/java/android/app/backup/BackupManager.java
+++ b/core/java/android/app/backup/BackupManager.java
@@ -751,6 +751,47 @@ public class BackupManager {
}
/**
+ * Returns a {@link UserHandle} for the user that has {@code ancestralSerialNumber} as the
+ * serial number of the its ancestral work profile or {@code null} if there is none.
+ *
+ * <p> The ancestral serial number will have a corresponding {@link UserHandle} if the device
+ * has a work profile that was restored from another work profile with serial number
+ * {@code ancestralSerialNumber}.
+ *
+ * @see UserManager#getSerialNumberForUser(UserHandle)
+ */
+ @Nullable
+ public UserHandle getUserForAncestralSerialNumber(long ancestralSerialNumber) {
+ if (sService != null) {
+ try {
+ return sService.getUserForAncestralSerialNumber(ancestralSerialNumber);
+ } catch (RemoteException e) {
+ Log.e(TAG, "getUserForAncestralSerialNumber() couldn't connect");
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Sets the ancestral work profile for the calling user.
+ *
+ * <p> The ancestral work profile corresponds to the profile that was used to restore to the
+ * callers profile.
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.BACKUP)
+ public void setAncestralSerialNumber(long ancestralSerialNumber) {
+ if (sService != null) {
+ try {
+ sService.setAncestralSerialNumber(ancestralSerialNumber);
+ } catch (RemoteException e) {
+ Log.e(TAG, "setAncestralSerialNumber() couldn't connect");
+ }
+ }
+ }
+
+ /**
* Returns an {@link Intent} for the specified transport's configuration UI.
* This value is set by {@link #updateTransportAttributes(ComponentName, String, Intent, String,
* Intent, String)}.
diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl
index eda8981d7e0e..8386c72e3406 100644
--- a/core/java/android/app/backup/IBackupManager.aidl
+++ b/core/java/android/app/backup/IBackupManager.aidl
@@ -22,6 +22,7 @@ import android.app.backup.IFullBackupRestoreObserver;
import android.app.backup.IRestoreSession;
import android.app.backup.ISelectBackupTransportCallback;
import android.os.ParcelFileDescriptor;
+import android.os.UserHandle;
import android.content.Intent;
import android.content.ComponentName;
@@ -685,4 +686,24 @@ interface IBackupManager {
* {@link android.app.backup.IBackupManager.cancelBackups} for the calling user id.
*/
void cancelBackups();
+
+ /**
+ * Returns a {@link UserHandle} for the user that has {@code ancestralSerialNumber} as the serial
+ * number of the it's ancestral work profile.
+ *
+ * <p> The ancestral work profile is set by {@link #setAncestralSerialNumber(long)}
+ * and it corresponds to the profile that was used to restore to the callers profile.
+ */
+ UserHandle getUserForAncestralSerialNumber(in long ancestralSerialNumber);
+
+ /**
+ * Sets the ancestral work profile for the calling user.
+ *
+ * <p> The ancestral work profile corresponds to the profile that was used to restore to the
+ * callers profile.
+ *
+ * <p>Callers must hold the android.permission.BACKUP permission to use this method.
+ */
+ void setAncestralSerialNumber(in long ancestralSerialNumber);
+
}
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 47a4a2dca73d..f1bfe8671eec 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -2748,6 +2748,19 @@ public abstract class ContentResolver implements ContentInterface {
}
/**
+ * @see #setIsSyncable(Account, String, int)
+ * @hide
+ */
+ public static void setIsSyncableAsUser(Account account, String authority, int syncable,
+ int userId) {
+ try {
+ getContentService().setIsSyncableAsUser(account, authority, syncable, userId);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Gets the master auto-sync setting that applies to all the providers and accounts.
* If this is false then the per-provider auto-sync setting is ignored.
* <p>This method requires the caller to hold the permission
diff --git a/core/java/android/content/IContentService.aidl b/core/java/android/content/IContentService.aidl
index 1d0237502812..9f6e236306e0 100644
--- a/core/java/android/content/IContentService.aidl
+++ b/core/java/android/content/IContentService.aidl
@@ -126,6 +126,7 @@ interface IContentService {
* @param syncable, >0 denotes syncable, 0 means not syncable, <0 means unknown
*/
void setIsSyncable(in Account account, String providerName, int syncable);
+ void setIsSyncableAsUser(in Account account, String providerName, int syncable, int userId);
void setMasterSyncAutomatically(boolean flag);
void setMasterSyncAutomaticallyAsUser(boolean flag, int userId);
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 60449145a740..81ed110d15ec 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -5260,6 +5260,10 @@ public class PackageParser {
com.android.internal.R.styleable.AndroidManifestProvider_grantUriPermissions,
false);
+ p.info.forceUriPermissions = sa.getBoolean(
+ com.android.internal.R.styleable.AndroidManifestProvider_forceUriPermissions,
+ false);
+
p.info.multiprocess = sa.getBoolean(
com.android.internal.R.styleable.AndroidManifestProvider_multiprocess,
false);
diff --git a/core/java/android/content/pm/ProviderInfo.java b/core/java/android/content/pm/ProviderInfo.java
index 379b7833150c..f06a628f1913 100644
--- a/core/java/android/content/pm/ProviderInfo.java
+++ b/core/java/android/content/pm/ProviderInfo.java
@@ -47,7 +47,13 @@ public final class ProviderInfo extends ComponentInfo
* grantUriPermissions} attribute.
*/
public boolean grantUriPermissions = false;
-
+
+ /** If true, always apply URI permission grants, as per the
+ * {@link android.R.styleable#AndroidManifestProvider_forceUriPermissions
+ * forceUriPermissions} attribute.
+ */
+ public boolean forceUriPermissions = false;
+
/**
* If non-null, these are the patterns that are allowed for granting URI
* permissions. Any URI that does not match one of these patterns will not
@@ -112,6 +118,7 @@ public final class ProviderInfo extends ComponentInfo
readPermission = orig.readPermission;
writePermission = orig.writePermission;
grantUriPermissions = orig.grantUriPermissions;
+ forceUriPermissions = orig.forceUriPermissions;
uriPermissionPatterns = orig.uriPermissionPatterns;
pathPermissions = orig.pathPermissions;
multiprocess = orig.multiprocess;
@@ -142,6 +149,7 @@ public final class ProviderInfo extends ComponentInfo
out.writeString(readPermission);
out.writeString(writePermission);
out.writeInt(grantUriPermissions ? 1 : 0);
+ out.writeInt(forceUriPermissions ? 1 : 0);
out.writeTypedArray(uriPermissionPatterns, parcelableFlags);
out.writeTypedArray(pathPermissions, parcelableFlags);
out.writeInt(multiprocess ? 1 : 0);
@@ -171,6 +179,7 @@ public final class ProviderInfo extends ComponentInfo
readPermission = in.readString();
writePermission = in.readString();
grantUriPermissions = in.readInt() != 0;
+ forceUriPermissions = in.readInt() != 0;
uriPermissionPatterns = in.createTypedArray(PatternMatcher.CREATOR);
pathPermissions = in.createTypedArray(PathPermission.CREATOR);
multiprocess = in.readInt() != 0;
diff --git a/core/java/android/content/rollback/IRollbackManager.aidl b/core/java/android/content/rollback/IRollbackManager.aidl
index d951756bb513..db9fcb6abdfa 100644
--- a/core/java/android/content/rollback/IRollbackManager.aidl
+++ b/core/java/android/content/rollback/IRollbackManager.aidl
@@ -47,4 +47,8 @@ interface IRollbackManager {
//
// NOTE: This call is synchronous.
boolean notifyStagedSession(int sessionId);
+
+ // Used by the staging manager to notify the RollbackManager of the apk
+ // session for a staged session.
+ void notifyStagedApkSession(int originalSessionId, int apkSessionId);
}
diff --git a/core/java/android/content/rollback/PackageRollbackInfo.java b/core/java/android/content/rollback/PackageRollbackInfo.java
index 0ec40183c319..1d0ab5ad2679 100644
--- a/core/java/android/content/rollback/PackageRollbackInfo.java
+++ b/core/java/android/content/rollback/PackageRollbackInfo.java
@@ -22,6 +22,7 @@ import android.content.pm.VersionedPackage;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.IntArray;
+import android.util.SparseLongArray;
import java.util.ArrayList;
@@ -73,6 +74,18 @@ public final class PackageRollbackInfo implements Parcelable {
*/
private final boolean mIsApex;
+ /*
+ * The list of users the package is installed for.
+ */
+ // NOTE: Not a part of the Parcelable representation of this object.
+ private final IntArray mInstalledUsers;
+
+ /**
+ * A mapping between user and an inode of theirs CE data snapshot.
+ */
+ // NOTE: Not a part of the Parcelable representation of this object.
+ private final SparseLongArray mCeSnapshotInodes;
+
/**
* Returns the name of the package to roll back from.
*/
@@ -126,15 +139,33 @@ public final class PackageRollbackInfo implements Parcelable {
}
/** @hide */
+ public IntArray getInstalledUsers() {
+ return mInstalledUsers;
+ }
+
+ /** @hide */
+ public SparseLongArray getCeSnapshotInodes() {
+ return mCeSnapshotInodes;
+ }
+
+ /** @hide */
+ public void putCeSnapshotInode(int userId, long ceSnapshotInode) {
+ mCeSnapshotInodes.put(userId, ceSnapshotInode);
+ }
+
+ /** @hide */
public PackageRollbackInfo(VersionedPackage packageRolledBackFrom,
VersionedPackage packageRolledBackTo,
@NonNull IntArray pendingBackups, @NonNull ArrayList<RestoreInfo> pendingRestores,
- boolean isApex) {
+ boolean isApex, @NonNull IntArray installedUsers,
+ @NonNull SparseLongArray ceSnapshotInodes) {
this.mVersionRolledBackFrom = packageRolledBackFrom;
this.mVersionRolledBackTo = packageRolledBackTo;
this.mPendingBackups = pendingBackups;
this.mPendingRestores = pendingRestores;
this.mIsApex = isApex;
+ this.mInstalledUsers = installedUsers;
+ this.mCeSnapshotInodes = ceSnapshotInodes;
}
private PackageRollbackInfo(Parcel in) {
@@ -143,6 +174,8 @@ public final class PackageRollbackInfo implements Parcelable {
this.mIsApex = in.readBoolean();
this.mPendingRestores = null;
this.mPendingBackups = null;
+ this.mInstalledUsers = null;
+ this.mCeSnapshotInodes = null;
}
@Override
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index ce2de9ac6307..8a141e2bfe6f 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -68,6 +68,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.net.InetAddress;
import java.net.InetSocketAddress;
+import java.net.Socket;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -177,10 +178,10 @@ public class ConnectivityManager {
* The lookup key for a {@link NetworkInfo} object. Retrieve with
* {@link android.content.Intent#getParcelableExtra(String)}.
*
- * @deprecated Since {@link NetworkInfo} can vary based on UID, applications
- * should always obtain network information through
- * {@link #getActiveNetworkInfo()}.
- * @see #EXTRA_NETWORK_TYPE
+ * @deprecated The {@link NetworkInfo} object is deprecated, as many of its properties
+ * can't accurately represent modern network characteristics.
+ * Please obtain information about networks from the {@link NetworkCapabilities}
+ * or {@link LinkProperties} objects instead.
*/
@Deprecated
public static final String EXTRA_NETWORK_INFO = "networkInfo";
@@ -189,7 +190,11 @@ public class ConnectivityManager {
* Network type which triggered a {@link #CONNECTIVITY_ACTION} broadcast.
*
* @see android.content.Intent#getIntExtra(String, int)
+ * @deprecated The network type is not rich enough to represent the characteristics
+ * of modern networks. Please use {@link NetworkCapabilities} instead,
+ * in particular the transports.
*/
+ @Deprecated
public static final String EXTRA_NETWORK_TYPE = "networkType";
/**
@@ -1243,9 +1248,13 @@ public class ConnectivityManager {
* is no current default network.
*
* {@hide}
+ * @deprecated please use {@link #getLinkProperties(Network)} on the return
+ * value of {@link #getActiveNetwork()} instead. In particular,
+ * this method will return non-null LinkProperties even if the
+ * app is blocked by policy from using this network.
*/
@RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE)
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 109783091)
public LinkProperties getActiveLinkProperties() {
try {
return mService.getActiveLinkProperties();
@@ -1881,7 +1890,8 @@ public class ConnectivityManager {
* @param callback A {@link SocketKeepalive.Callback}. Used for notifications about keepalive
* changes. Must be extended by applications that use this API.
*
- * @return A {@link SocketKeepalive} object, which can be used to control this keepalive object.
+ * @return A {@link SocketKeepalive} object that can be used to control the keepalive on the
+ * given socket.
**/
public SocketKeepalive createSocketKeepalive(@NonNull Network network,
@NonNull UdpEncapsulationSocket socket,
@@ -1910,6 +1920,8 @@ public class ConnectivityManager {
* @param callback A {@link SocketKeepalive.Callback}. Used for notifications about keepalive
* changes. Must be extended by applications that use this API.
*
+ * @return A {@link SocketKeepalive} object that can be used to control the keepalive on the
+ * given socket.
* @hide
*/
@SystemApi
@@ -1925,6 +1937,34 @@ public class ConnectivityManager {
}
/**
+ * Request that keepalives be started on a TCP socket.
+ * The socket must be established.
+ *
+ * @param network The {@link Network} the socket is on.
+ * @param socket The socket that needs to be kept alive.
+ * @param executor The executor on which callback will be invoked. This implementation assumes
+ * the provided {@link Executor} runs the callbacks in sequence with no
+ * concurrency. Failing this, no guarantee of correctness can be made. It is
+ * the responsibility of the caller to ensure the executor provides this
+ * guarantee. A simple way of creating such an executor is with the standard
+ * tool {@code Executors.newSingleThreadExecutor}.
+ * @param callback A {@link SocketKeepalive.Callback}. Used for notifications about keepalive
+ * changes. Must be extended by applications that use this API.
+ *
+ * @return A {@link SocketKeepalive} object that can be used to control the keepalive on the
+ * given socket.
+ * @hide
+ */
+ @SystemApi
+ @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD)
+ public SocketKeepalive createSocketKeepalive(@NonNull Network network,
+ @NonNull Socket socket,
+ @NonNull Executor executor,
+ @NonNull Callback callback) {
+ return new TcpSocketKeepalive(mService, network, socket, executor, callback);
+ }
+
+ /**
* Ensure that a network route exists to deliver traffic to the specified
* host via the specified network interface. An attempt to add a route that
* already exists is ignored, but treated as successful.
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 1148ac1bc707..3a405d35e9aa 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -188,6 +188,9 @@ interface IConnectivityManager
int intervalSeconds, in Messenger messenger, in IBinder binder, String srcAddr,
String dstAddr);
+ void startTcpKeepalive(in Network network, in FileDescriptor fd, int intervalSeconds,
+ in Messenger messenger, in IBinder binder);
+
void stopKeepalive(in Network network, int slot);
String getCaptivePortalServerUrl();
diff --git a/core/java/android/net/KeepalivePacketData.java b/core/java/android/net/KeepalivePacketData.java
index 16555d8bd488..18726f748d30 100644
--- a/core/java/android/net/KeepalivePacketData.java
+++ b/core/java/android/net/KeepalivePacketData.java
@@ -96,7 +96,7 @@ public class KeepalivePacketData implements Parcelable {
out.writeByteArray(mPacket);
}
- private KeepalivePacketData(Parcel in) {
+ protected KeepalivePacketData(Parcel in) {
srcAddress = NetworkUtils.numericToInetAddress(in.readString());
dstAddress = NetworkUtils.numericToInetAddress(in.readString());
srcPort = in.readInt();
diff --git a/core/java/android/net/NattKeepalivePacketData.java b/core/java/android/net/NattKeepalivePacketData.java
index aa9f799c6f27..5c55a98b874f 100644
--- a/core/java/android/net/NattKeepalivePacketData.java
+++ b/core/java/android/net/NattKeepalivePacketData.java
@@ -16,6 +16,9 @@
package android.net;
+import static android.net.SocketKeepalive.ERROR_INVALID_IP_ADDRESS;
+import static android.net.SocketKeepalive.ERROR_INVALID_PORT;
+
import android.net.SocketKeepalive.InvalidPacketException;
import android.net.util.IpUtils;
import android.system.OsConstants;
@@ -44,11 +47,11 @@ public final class NattKeepalivePacketData extends KeepalivePacketData {
throws InvalidPacketException {
if (!(srcAddress instanceof Inet4Address) || !(dstAddress instanceof Inet4Address)) {
- throw new InvalidPacketException(SocketKeepalive.ERROR_INVALID_IP_ADDRESS);
+ throw new InvalidPacketException(ERROR_INVALID_IP_ADDRESS);
}
if (dstPort != NattSocketKeepalive.NATT_PORT) {
- throw new InvalidPacketException(SocketKeepalive.ERROR_INVALID_PORT);
+ throw new InvalidPacketException(ERROR_INVALID_PORT);
}
int length = IPV4_HEADER_LENGTH + UDP_HEADER_LENGTH + 1;
diff --git a/core/java/android/net/NetworkAgent.java b/core/java/android/net/NetworkAgent.java
index c37837837a9e..273f8cd4f21d 100644
--- a/core/java/android/net/NetworkAgent.java
+++ b/core/java/android/net/NetworkAgent.java
@@ -178,6 +178,26 @@ public abstract class NetworkAgent extends Handler {
*/
public static final int EVENT_SOCKET_KEEPALIVE = BASE + 13;
+ // TODO: move the above 2 constants down so they are in order once merge conflicts are resolved
+ /**
+ * Sent by the KeepaliveTracker to NetworkAgent to add a packet filter.
+ *
+ * For TCP keepalive offloads, keepalive packets are sent by the firmware. However, because the
+ * remote site will send ACK packets in response to the keepalive packets, the firmware also
+ * needs to be configured to properly filter the ACKs to prevent the system from waking up.
+ * This does not happen with UDP, so this message is TCP-specific.
+ * arg1 = slot number of the keepalive to filter for.
+ * obj = the keepalive packet to send repeatedly.
+ */
+ public static final int CMD_ADD_KEEPALIVE_PACKET_FILTER = BASE + 16;
+
+ /**
+ * Sent by the KeepaliveTracker to NetworkAgent to remove a packet filter. See
+ * {@link #CMD_ADD_KEEPALIVE_PACKET_FILTER}.
+ * arg1 = slot number of the keepalive packet filter to remove.
+ */
+ public static final int CMD_REMOVE_KEEPALIVE_PACKET_FILTER = BASE + 17;
+
/**
* Sent by ConnectivityService to inform this network transport of signal strength thresholds
* that when crossed should trigger a system wakeup and a NetworkCapabilities update.
@@ -329,6 +349,14 @@ public abstract class NetworkAgent extends Handler {
preventAutomaticReconnect();
break;
}
+ case CMD_ADD_KEEPALIVE_PACKET_FILTER: {
+ addKeepalivePacketFilter(msg);
+ break;
+ }
+ case CMD_REMOVE_KEEPALIVE_PACKET_FILTER: {
+ removeKeepalivePacketFilter(msg);
+ break;
+ }
}
}
@@ -478,6 +506,24 @@ public abstract class NetworkAgent extends Handler {
}
/**
+ * Called by ConnectivityService to add specific packet filter to network hardware to block
+ * ACKs matching the sent keepalive packets. Implementations that support this feature must
+ * override this method.
+ */
+ protected void addKeepalivePacketFilter(Message msg) {
+ onSocketKeepaliveEvent(msg.arg1, SocketKeepalive.ERROR_HARDWARE_UNSUPPORTED);
+ }
+
+ /**
+ * Called by ConnectivityService to remove a packet filter installed with
+ * {@link #addKeepalivePacketFilter(Message)}. Implementations that support this feature
+ * must override this method.
+ */
+ protected void removeKeepalivePacketFilter(Message msg) {
+ onSocketKeepaliveEvent(msg.arg1, SocketKeepalive.ERROR_HARDWARE_UNSUPPORTED);
+ }
+
+ /**
* Called by ConnectivityService to inform this network transport of signal strength thresholds
* that when crossed should trigger a system wakeup and a NetworkCapabilities update.
*/
diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java
index 6a1720353f17..ed410e277a42 100644
--- a/core/java/android/net/NetworkUtils.java
+++ b/core/java/android/net/NetworkUtils.java
@@ -76,6 +76,18 @@ public class NetworkUtils {
throws SocketException;
/**
+ * Attaches a socket filter that drops all of incoming packets.
+ * @param fd the socket's {@link FileDescriptor}.
+ */
+ public static native void attachDropAllBPFFilter(FileDescriptor fd) throws SocketException;
+
+ /**
+ * Detaches a socket filter.
+ * @param fd the socket's {@link FileDescriptor}.
+ */
+ public static native void detachBPFFilter(FileDescriptor fd) throws SocketException;
+
+ /**
* Configures a socket for receiving ICMPv6 router solicitations and sending advertisements.
* @param fd the socket's {@link FileDescriptor}.
* @param ifIndex the interface index.
@@ -175,6 +187,16 @@ public class NetworkUtils {
private static native void addArpEntry(byte[] ethAddr, byte[] netAddr, String ifname,
FileDescriptor fd) throws IOException;
+
+ /**
+ * Get the tcp repair window associated with the {@code fd}.
+ *
+ * @param fd the tcp socket's {@link FileDescriptor}.
+ * @return a {@link TcpRepairWindow} object indicates tcp window size.
+ */
+ public static native TcpRepairWindow getTcpRepairWindow(FileDescriptor fd)
+ throws ErrnoException;
+
/**
* @see Inet4AddressUtils#intToInet4AddressHTL(int)
* @deprecated Use either {@link Inet4AddressUtils#intToInet4AddressHTH(int)}
diff --git a/core/java/android/net/SocketKeepalive.java b/core/java/android/net/SocketKeepalive.java
index a47c11af40dc..07728beb9c64 100644
--- a/core/java/android/net/SocketKeepalive.java
+++ b/core/java/android/net/SocketKeepalive.java
@@ -19,6 +19,7 @@ package android.net;
import android.annotation.IntDef;
import android.annotation.IntRange;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
@@ -110,15 +111,43 @@ public abstract class SocketKeepalive implements AutoCloseable {
public static final int MAX_INTERVAL_SEC = 3600;
/**
- * This packet is invalid.
- * See the error code for details.
+ * An exception that embarks an error code.
* @hide
*/
- public static class InvalidPacketException extends Exception {
+ public static class ErrorCodeException extends Exception {
public final int error;
- public InvalidPacketException(int error) {
+ public ErrorCodeException(final int error, final Throwable e) {
+ super(e);
this.error = error;
}
+ public ErrorCodeException(final int error) {
+ this.error = error;
+ }
+ }
+
+ /**
+ * This socket is invalid.
+ * See the error code for details, and the optional cause.
+ * @hide
+ */
+ public static class InvalidSocketException extends ErrorCodeException {
+ public InvalidSocketException(final int error, final Throwable e) {
+ super(error, e);
+ }
+ public InvalidSocketException(final int error) {
+ super(error);
+ }
+ }
+
+ /**
+ * This packet is invalid.
+ * See the error code for details.
+ * @hide
+ */
+ public static class InvalidPacketException extends ErrorCodeException {
+ public InvalidPacketException(final int error) {
+ super(error);
+ }
}
@NonNull final IConnectivityManager mService;
@@ -127,7 +156,7 @@ public abstract class SocketKeepalive implements AutoCloseable {
@NonNull private final SocketKeepalive.Callback mCallback;
@NonNull private final Looper mLooper;
@NonNull final Messenger mMessenger;
- @NonNull Integer mSlot;
+ @Nullable Integer mSlot;
SocketKeepalive(@NonNull IConnectivityManager service, @NonNull Network network,
@NonNull Executor executor, @NonNull Callback callback) {
diff --git a/core/java/android/net/TcpKeepalivePacketData.java b/core/java/android/net/TcpKeepalivePacketData.java
new file mode 100644
index 000000000000..f07dfb64cd01
--- /dev/null
+++ b/core/java/android/net/TcpKeepalivePacketData.java
@@ -0,0 +1,234 @@
+/*
+ * 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 android.net;
+
+import static android.net.SocketKeepalive.ERROR_INVALID_IP_ADDRESS;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.net.SocketKeepalive.InvalidPacketException;
+import android.net.util.IpUtils;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.system.OsConstants;
+
+import java.net.Inet4Address;
+import java.net.InetAddress;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Objects;
+
+/**
+ * Represents the actual tcp keep alive packets which will be used for hardware offload.
+ * @hide
+ */
+public class TcpKeepalivePacketData extends KeepalivePacketData implements Parcelable {
+ private static final String TAG = "TcpKeepalivePacketData";
+
+ /** TCP sequence number. */
+ public final int tcpSeq;
+
+ /** TCP ACK number. */
+ public final int tcpAck;
+
+ /** TCP RCV window. */
+ public final int tcpWnd;
+
+ /** TCP RCV window scale. */
+ public final int tcpWndScale;
+
+ private static final int IPV4_HEADER_LENGTH = 20;
+ private static final int IPV6_HEADER_LENGTH = 40;
+ private static final int TCP_HEADER_LENGTH = 20;
+
+ // This should only be constructed via static factory methods, such as
+ // tcpKeepalivePacket.
+ private TcpKeepalivePacketData(TcpSocketInfo tcpDetails, byte[] data)
+ throws InvalidPacketException {
+ super(tcpDetails.srcAddress, tcpDetails.srcPort, tcpDetails.dstAddress,
+ tcpDetails.dstPort, data);
+ tcpSeq = tcpDetails.seq;
+ tcpAck = tcpDetails.ack;
+ // In the packet, the window is shifted right by the window scale.
+ tcpWnd = tcpDetails.rcvWnd;
+ tcpWndScale = tcpDetails.rcvWndScale;
+ }
+
+ /**
+ * Factory method to create tcp keepalive packet structure.
+ */
+ public static TcpKeepalivePacketData tcpKeepalivePacket(
+ TcpSocketInfo tcpDetails) throws InvalidPacketException {
+ final byte[] packet;
+ if ((tcpDetails.srcAddress instanceof Inet4Address)
+ && (tcpDetails.dstAddress instanceof Inet4Address)) {
+ packet = buildV4Packet(tcpDetails);
+ } else {
+ // TODO: support ipv6
+ throw new InvalidPacketException(ERROR_INVALID_IP_ADDRESS);
+ }
+
+ return new TcpKeepalivePacketData(tcpDetails, packet);
+ }
+
+ /**
+ * Build ipv4 tcp keepalive packet, not including the link-layer header.
+ */
+ // TODO : if this code is ever moved to the network stack, factorize constants with the ones
+ // over there.
+ private static byte[] buildV4Packet(TcpSocketInfo tcpDetails) {
+ final int length = IPV4_HEADER_LENGTH + TCP_HEADER_LENGTH;
+ ByteBuffer buf = ByteBuffer.allocate(length);
+ buf.order(ByteOrder.BIG_ENDIAN);
+ // IP version and TOS. TODO : fetch this from getsockopt(SOL_IP, IP_TOS)
+ buf.putShort((short) 0x4500);
+ buf.putShort((short) length);
+ buf.putInt(0x4000); // ID, flags=DF, offset
+ // TODO : fetch TTL from getsockopt(SOL_IP, IP_TTL)
+ buf.put((byte) 64);
+ buf.put((byte) OsConstants.IPPROTO_TCP);
+ final int ipChecksumOffset = buf.position();
+ buf.putShort((short) 0); // IP checksum
+ buf.put(tcpDetails.srcAddress.getAddress());
+ buf.put(tcpDetails.dstAddress.getAddress());
+ buf.putShort((short) tcpDetails.srcPort);
+ buf.putShort((short) tcpDetails.dstPort);
+ buf.putInt(tcpDetails.seq); // Sequence Number
+ buf.putInt(tcpDetails.ack); // ACK
+ buf.putShort((short) 0x5010); // TCP length=5, flags=ACK
+ buf.putShort((short) (tcpDetails.rcvWnd >> tcpDetails.rcvWndScale)); // Window size
+ final int tcpChecksumOffset = buf.position();
+ buf.putShort((short) 0); // TCP checksum
+ // URG is not set therefore the urgent pointer is not included
+ buf.putShort(ipChecksumOffset, IpUtils.ipChecksum(buf, 0));
+ buf.putShort(tcpChecksumOffset, IpUtils.tcpChecksum(
+ buf, 0, IPV4_HEADER_LENGTH, TCP_HEADER_LENGTH));
+
+ return buf.array();
+ }
+
+ // TODO: add buildV6Packet.
+
+ /** Represents tcp/ip information. */
+ // TODO: Replace TcpSocketInfo with TcpKeepalivePacketDataParcelable.
+ public static class TcpSocketInfo {
+ public final InetAddress srcAddress;
+ public final InetAddress dstAddress;
+ public final int srcPort;
+ public final int dstPort;
+ public final int seq;
+ public final int ack;
+ public final int rcvWnd;
+ public final int rcvWndScale;
+
+ public TcpSocketInfo(InetAddress sAddr, int sPort, InetAddress dAddr,
+ int dPort, int writeSeq, int readSeq, int rWnd, int rWndScale) {
+ srcAddress = sAddr;
+ dstAddress = dAddr;
+ srcPort = sPort;
+ dstPort = dPort;
+ seq = writeSeq;
+ ack = readSeq;
+ rcvWnd = rWnd;
+ rcvWndScale = rWndScale;
+ }
+ }
+
+ @Override
+ public boolean equals(@Nullable final Object o) {
+ if (!(o instanceof TcpKeepalivePacketData)) return false;
+ final TcpKeepalivePacketData other = (TcpKeepalivePacketData) o;
+ return this.srcAddress.equals(other.srcAddress)
+ && this.dstAddress.equals(other.dstAddress)
+ && this.srcPort == other.srcPort
+ && this.dstPort == other.dstPort
+ && this.tcpAck == other.tcpAck
+ && this.tcpSeq == other.tcpSeq
+ && this.tcpWnd == other.tcpWnd
+ && this.tcpWndScale == other.tcpWndScale;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(srcAddress, dstAddress, srcPort, dstPort, tcpAck, tcpSeq, tcpWnd,
+ tcpWndScale);
+ }
+
+ /* Parcelable Implementation. */
+ /* Note that this object implements parcelable (and needs to keep doing this as it inherits
+ * from a class that does), but should usually be parceled as a stable parcelable using
+ * the toStableParcelable() and fromStableParcelable() methods.
+ */
+ public int describeContents() {
+ return 0;
+ }
+
+ /** Write to parcel. */
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(tcpSeq);
+ out.writeInt(tcpAck);
+ out.writeInt(tcpWnd);
+ out.writeInt(tcpWndScale);
+ }
+
+ private TcpKeepalivePacketData(Parcel in) {
+ super(in);
+ tcpSeq = in.readInt();
+ tcpAck = in.readInt();
+ tcpWnd = in.readInt();
+ tcpWndScale = in.readInt();
+ }
+
+ /** Parcelable Creator. */
+ public static final Parcelable.Creator<TcpKeepalivePacketData> CREATOR =
+ new Parcelable.Creator<TcpKeepalivePacketData>() {
+ public TcpKeepalivePacketData createFromParcel(Parcel in) {
+ return new TcpKeepalivePacketData(in);
+ }
+
+ public TcpKeepalivePacketData[] newArray(int size) {
+ return new TcpKeepalivePacketData[size];
+ }
+ };
+
+ /**
+ * Convert this TcpKeepalivePacketData to a TcpKeepalivePacketDataParcelable.
+ */
+ @NonNull
+ public TcpKeepalivePacketDataParcelable toStableParcelable() {
+ final TcpKeepalivePacketDataParcelable parcel = new TcpKeepalivePacketDataParcelable();
+ parcel.srcAddress = srcAddress.getAddress();
+ parcel.srcPort = srcPort;
+ parcel.dstAddress = dstAddress.getAddress();
+ parcel.dstPort = dstPort;
+ parcel.seq = tcpSeq;
+ parcel.ack = tcpAck;
+ return parcel;
+ }
+
+ @Override
+ public String toString() {
+ return "saddr: " + srcAddress
+ + " daddr: " + dstAddress
+ + " sport: " + srcPort
+ + " dport: " + dstPort
+ + " seq: " + tcpSeq
+ + " ack: " + tcpAck
+ + " wnd: " + tcpWnd
+ + " wndScale: " + tcpWndScale;
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsPart.java b/core/java/android/net/TcpKeepalivePacketDataParcelable.aidl
index da501738a0bf..7329c63b09be 100644
--- a/telephony/java/android/telephony/ims/RcsPart.java
+++ b/core/java/android/net/TcpKeepalivePacketDataParcelable.aidl
@@ -13,13 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.telephony.ims;
-import android.os.Parcelable;
+package android.net;
-/**
- * A part of a composite {@link RcsMessage}.
- * @hide - TODO(sahinc) make this public
- */
-public abstract class RcsPart implements Parcelable {
+parcelable TcpKeepalivePacketDataParcelable {
+ byte[] srcAddress;
+ int srcPort;
+ byte[] dstAddress;
+ int dstPort;
+ int seq;
+ int ack;
}
diff --git a/core/java/android/net/TcpRepairWindow.java b/core/java/android/net/TcpRepairWindow.java
new file mode 100644
index 000000000000..86034f0a76ed
--- /dev/null
+++ b/core/java/android/net/TcpRepairWindow.java
@@ -0,0 +1,45 @@
+/*
+ * 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 android.net;
+
+/**
+ * Corresponds to C's {@code struct tcp_repair_window} from
+ * include/uapi/linux/tcp.h
+ *
+ * @hide
+ */
+public final class TcpRepairWindow {
+ public final int sndWl1;
+ public final int sndWnd;
+ public final int maxWindow;
+ public final int rcvWnd;
+ public final int rcvWup;
+ public final int rcvWndScale;
+
+ /**
+ * Constructs an instance with the given field values.
+ */
+ public TcpRepairWindow(final int sndWl1, final int sndWnd, final int maxWindow,
+ final int rcvWnd, final int rcvWup, final int rcvWndScale) {
+ this.sndWl1 = sndWl1;
+ this.sndWnd = sndWnd;
+ this.maxWindow = maxWindow;
+ this.rcvWnd = rcvWnd;
+ this.rcvWup = rcvWup;
+ this.rcvWndScale = rcvWndScale;
+ }
+}
diff --git a/core/java/android/net/TcpSocketKeepalive.java b/core/java/android/net/TcpSocketKeepalive.java
new file mode 100644
index 000000000000..8f6ee7bf2950
--- /dev/null
+++ b/core/java/android/net/TcpSocketKeepalive.java
@@ -0,0 +1,78 @@
+/*
+ * 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 android.net;
+
+import android.annotation.NonNull;
+import android.os.Binder;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.io.FileDescriptor;
+import java.net.Socket;
+import java.util.concurrent.Executor;
+
+/** @hide */
+final class TcpSocketKeepalive extends SocketKeepalive {
+
+ private final Socket mSocket;
+
+ TcpSocketKeepalive(@NonNull IConnectivityManager service,
+ @NonNull Network network,
+ @NonNull Socket socket,
+ @NonNull Executor executor,
+ @NonNull Callback callback) {
+ super(service, network, executor, callback);
+ mSocket = socket;
+ }
+
+ /**
+ * Starts keepalives. {@code mSocket} must be a connected TCP socket.
+ *
+ * - The application must not write to or read from the socket after calling this method, until
+ * onDataReceived, onStopped, or onError are called. If it does, the keepalive will fail
+ * with {@link #ERROR_SOCKET_NOT_IDLE}, or {@code #ERROR_INVALID_SOCKET} if the socket
+ * experienced an error (as in poll(2) returned POLLERR); if this happens, the data received
+ * from the socket may be invalid, and the socket can't be recovered.
+ * - If the socket has data in the send or receive buffer, then this call will fail with
+ * {@link #ERROR_SOCKET_NOT_IDLE} and can be retried after the data has been processed.
+ * An app could ensure this by using an application-layer protocol where it can receive
+ * acknowledgement that it will go into keepalive mode. It could then go into keepalive
+ * mode after having read the acknowledgement, draining the socket.
+ */
+ @Override
+ void startImpl(int intervalSec) {
+ try {
+ final FileDescriptor fd = mSocket.getFileDescriptor$();
+ mService.startTcpKeepalive(mNetwork, fd, intervalSec, mMessenger, new Binder());
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error starting packet keepalive: ", e);
+ stopLooper();
+ }
+ }
+
+ @Override
+ void stopImpl() {
+ try {
+ if (mSlot != null) {
+ mService.stopKeepalive(mNetwork, mSlot);
+ }
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error stopping packet keepalive: ", e);
+ stopLooper();
+ }
+ }
+}
diff --git a/core/java/android/net/ip/IIpClient.aidl b/core/java/android/net/ip/IIpClient.aidl
index 7769ec2b65ac..a4a80e1efe6f 100644
--- a/core/java/android/net/ip/IIpClient.aidl
+++ b/core/java/android/net/ip/IIpClient.aidl
@@ -17,6 +17,7 @@ package android.net.ip;
import android.net.ProxyInfoParcelable;
import android.net.ProvisioningConfigurationParcelable;
+import android.net.TcpKeepalivePacketDataParcelable;
/** @hide */
oneway interface IIpClient {
@@ -29,4 +30,6 @@ oneway interface IIpClient {
void setTcpBufferSizes(in String tcpBufferSizes);
void setHttpProxy(in ProxyInfoParcelable proxyInfo);
void setMulticastFilter(boolean enabled);
+ void addKeepalivePacketFilter(int slot, in TcpKeepalivePacketDataParcelable pkt);
+ void removeKeepalivePacketFilter(int slot);
}
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index 2d61a4ee95d9..83a7654d494b 100755
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -1120,11 +1120,9 @@ public class Build {
/** The name identifying the system partition. */
public static final String PARTITION_NAME_SYSTEM = "system";
- private String mName;
- private String mFingerprint;
- private long mTimeMs;
-
- public Partition() {}
+ private final String mName;
+ private final String mFingerprint;
+ private final long mTimeMs;
private Partition(String name, String fingerprint, long timeMs) {
mName = name;
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 22ba74d70c16..be673ad14848 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -614,6 +614,11 @@ public final class PowerManager {
* Whether to go into Deep Doze as soon as the screen turns off or not.
*/
int QUICK_DOZE = 15;
+
+ /**
+ * Whether to enable night mode when battery saver is enabled.
+ */
+ int NIGHT_MODE = 16;
}
/**
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 0a60764428dc..e2b5730e10f4 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -734,10 +734,13 @@ public class UserManager {
public static final String DISALLOW_SYSTEM_ERROR_DIALOGS = "no_system_error_dialogs";
/**
- * Specifies if what is copied in the clipboard of this profile can
- * be pasted in related profiles. Does not restrict if the clipboard of related profiles can be
- * pasted in this profile.
- * The default value is <code>false</code>.
+ * Specifies if the clipboard contents can be exported by pasting the data into other users or
+ * profiles. This restriction doesn't prevent import, such as someone pasting clipboard data
+ * from other profiles or users. The default value is {@code false}.
+ *
+ * <p><strong>Note</strong>: Because it's possible to extract data from screenshots using
+ * optical character recognition (OCR), we strongly recommend combining this user restriction
+ * with {@link DevicePolicyManager#setScreenCaptureDisabled(ComponentName, boolean)}.
*
* <p>Key for user restrictions.
* <p>Type: Boolean
diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java
index daaa632a5cca..5ac31dc830ce 100644
--- a/core/java/android/provider/DeviceConfig.java
+++ b/core/java/android/provider/DeviceConfig.java
@@ -190,6 +190,16 @@ public final class DeviceConfig {
}
/**
+ * Namespace for all media native related features.
+ *
+ * @hide
+ */
+ @SystemApi
+ public interface MediaNative {
+ String NAMESPACE = "media_native";
+ }
+
+ /**
* Namespace for all activity manager related features that are used at the native level.
* These features are applied at reboot.
*
@@ -239,6 +249,14 @@ public final class DeviceConfig {
* Whether to show location access check notifications.
*/
String PROPERTY_LOCATION_ACCESS_CHECK_ENABLED = "location_access_check_enabled";
+
+ /**
+ * Whether to disable the new device identifier access restrictions.
+ *
+ * @hide
+ */
+ String PROPERTY_DEVICE_IDENTIFIER_ACCESS_RESTRICTIONS_DISABLED =
+ "device_identifier_access_restrictions_disabled";
}
/**
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 3a02e85eee3b..a8976aa56241 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -8294,6 +8294,16 @@ public final class Settings {
private static final Validator NOTIFICATION_BADGING_VALIDATOR = BOOLEAN_VALIDATOR;
/**
+ * Whether the notification bubbles are globally enabled
+ * The value is boolean (1 or 0).
+ * @hide
+ */
+ @TestApi
+ public static final String NOTIFICATION_BUBBLES = "notification_bubbles";
+
+ private static final Validator NOTIFICATION_BUBBLES_VALIDATOR = BOOLEAN_VALIDATOR;
+
+ /**
* Whether notifications are dismissed by a right-to-left swipe (instead of a left-to-right
* swipe).
*
@@ -8604,6 +8614,7 @@ public final class Settings {
ASSIST_GESTURE_WAKE_ENABLED,
VR_DISPLAY_MODE,
NOTIFICATION_BADGING,
+ NOTIFICATION_BUBBLES,
NOTIFICATION_DISMISS_RTL,
QS_AUTO_ADDED_TILES,
SCREENSAVER_ENABLED,
@@ -8766,6 +8777,7 @@ public final class Settings {
VALIDATORS.put(ASSIST_GESTURE_WAKE_ENABLED, ASSIST_GESTURE_WAKE_ENABLED_VALIDATOR);
VALIDATORS.put(VR_DISPLAY_MODE, VR_DISPLAY_MODE_VALIDATOR);
VALIDATORS.put(NOTIFICATION_BADGING, NOTIFICATION_BADGING_VALIDATOR);
+ VALIDATORS.put(NOTIFICATION_BUBBLES, NOTIFICATION_BUBBLES_VALIDATOR);
VALIDATORS.put(NOTIFICATION_DISMISS_RTL, NOTIFICATION_DISMISS_RTL_VALIDATOR);
VALIDATORS.put(QS_AUTO_ADDED_TILES, QS_AUTO_ADDED_TILES_VALIDATOR);
VALIDATORS.put(SCREENSAVER_ENABLED, SCREENSAVER_ENABLED_VALIDATOR);
@@ -11442,6 +11454,7 @@ public final class Settings {
* <pre>
* advertise_is_enabled (boolean)
* datasaver_disabled (boolean)
+ * enable_night_mode (boolean)
* launch_boost_disabled (boolean)
* vibration_disabled (boolean)
* animation_disabled (boolean)
diff --git a/core/java/android/app/SmsAppService.java b/core/java/android/service/carrier/CarrierMessagingClientService.java
index 3829d7103b07..13f4fc4b0dcb 100644
--- a/core/java/android/app/SmsAppService.java
+++ b/core/java/android/service/carrier/CarrierMessagingClientService.java
@@ -13,8 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.app;
+package android.service.carrier;
+import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.os.IBinder;
@@ -24,10 +25,11 @@ import android.os.IBinder;
* it so that the process is always running, which allows the app to have a persistent connection
* to the server.
*
- * <p>The service must have an {@link android.telephony.TelephonyManager#ACTION_SMS_APP_SERVICE}
+ * <p>The service must have an
+ * {@link android.telephony.TelephonyManager#ACTION_CARRIER_MESSAGING_CLIENT_SERVICE}
* action in the intent handler, and be protected with
- * {@link android.Manifest.permission#BIND_SMS_APP_SERVICE}. However the service does not have to
- * be exported.
+ * {@link android.Manifest.permission#BIND_CARRIER_MESSAGING_CLIENT_SERVICE}.
+ * However the service does not have to be exported.
*
* <p>The service must be associated with a non-main process, meaning it must have an
* {@code android:process} tag in its manifest entry.
@@ -45,27 +47,27 @@ import android.os.IBinder;
*
* <p>Example: First, define a subclass in the application:
* <pre>
- * public class MySmsAppService extends SmsAppService {
+ * public class MyCarrierMessagingClientService extends CarrierMessagingClientService {
* }
* </pre>
* Then, declare it in its {@code AndroidManifest.xml}:
* <pre>
* &lt;service
- * android:name=".MySmsAppService"
+ * android:name=".MyCarrierMessagingClientService"
* android:exported="false"
* android:process=":persistent"
- * android:permission="android.permission.BIND_SMS_APP_SERVICE"&gt;
+ * android:permission="android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE"&gt;
* &lt;intent-filter&gt;
- * &lt;action android:name="android.telephony.action.SMS_APP_SERVICE" /&gt;
+ * &lt;action android:name="android.telephony.action.CARRIER_MESSAGING_CLIENT_SERVICE" /&gt;
* &lt;/intent-filter&gt;
* &lt;/service&gt;
* </pre>
*/
-public class SmsAppService extends Service {
- private final ISmsAppService mImpl;
+public class CarrierMessagingClientService extends Service {
+ private final ICarrierMessagingClientServiceImpl mImpl;
- public SmsAppService() {
- mImpl = new ISmsAppServiceImpl();
+ public CarrierMessagingClientService() {
+ mImpl = new ICarrierMessagingClientServiceImpl();
}
@Override
@@ -73,6 +75,6 @@ public class SmsAppService extends Service {
return mImpl.asBinder();
}
- private class ISmsAppServiceImpl extends ISmsAppService.Stub {
+ private class ICarrierMessagingClientServiceImpl extends ICarrierMessagingClientService.Stub {
}
}
diff --git a/core/java/android/app/ISmsAppService.aidl b/core/java/android/service/carrier/ICarrierMessagingClientService.aidl
index 1ac2ec6b1c41..dbe7d121d56e 100644
--- a/core/java/android/app/ISmsAppService.aidl
+++ b/core/java/android/service/carrier/ICarrierMessagingClientService.aidl
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package android.app;
+package android.service.carrier;
/**
* @hide
*/
-interface ISmsAppService {
+interface ICarrierMessagingClientService {
}
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index d4e887970a47..d3285bb53eb3 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -1503,6 +1503,7 @@ public abstract class NotificationListenerService extends Service {
private boolean mNoisy;
private ArrayList<Notification.Action> mSmartActions;
private ArrayList<CharSequence> mSmartReplies;
+ private boolean mCanBubble;
public Ranking() {}
@@ -1677,6 +1678,17 @@ public abstract class NotificationListenerService extends Service {
return mLastAudiblyAlertedMs;
}
+ /**
+ * Returns whether the user has allowed bubbles globally, at the app level, and at the
+ * channel level for this notification.
+ *
+ * <p>This does not take into account the current importance of the notification, the
+ * current DND state, or whether the posting app is foreground.</p>
+ */
+ public boolean canBubble() {
+ return mCanBubble;
+ }
+
/** @hide */
public boolean isNoisy() {
return mNoisy;
@@ -1693,7 +1705,7 @@ public abstract class NotificationListenerService extends Service {
ArrayList<SnoozeCriterion> snoozeCriteria, boolean showBadge,
int userSentiment, boolean hidden, long lastAudiblyAlertedMs,
boolean noisy, ArrayList<Notification.Action> smartActions,
- ArrayList<CharSequence> smartReplies) {
+ ArrayList<CharSequence> smartReplies, boolean canBubble) {
mKey = key;
mRank = rank;
mIsAmbient = importance < NotificationManager.IMPORTANCE_LOW;
@@ -1713,6 +1725,7 @@ public abstract class NotificationListenerService extends Service {
mNoisy = noisy;
mSmartActions = smartActions;
mSmartReplies = smartReplies;
+ mCanBubble = canBubble;
}
/**
@@ -1766,6 +1779,7 @@ public abstract class NotificationListenerService extends Service {
private ArrayMap<String, Boolean> mNoisy;
private ArrayMap<String, ArrayList<Notification.Action>> mSmartActions;
private ArrayMap<String, ArrayList<CharSequence>> mSmartReplies;
+ private boolean[] mCanBubble;
private RankingMap(NotificationRankingUpdate rankingUpdate) {
mRankingUpdate = rankingUpdate;
@@ -1796,7 +1810,7 @@ public abstract class NotificationListenerService extends Service {
getChannel(key), getOverridePeople(key), getSnoozeCriteria(key),
getShowBadge(key), getUserSentiment(key), getHidden(key),
getLastAudiblyAlerted(key), getNoisy(key), getSmartActions(key),
- getSmartReplies(key));
+ getSmartReplies(key), canBubble(key));
return rank >= 0;
}
@@ -1972,6 +1986,19 @@ public abstract class NotificationListenerService extends Service {
return mSmartReplies.get(key);
}
+ private boolean canBubble(String key) {
+ synchronized (this) {
+ if (mRanks == null) {
+ buildRanksLocked();
+ }
+ if (mCanBubble == null) {
+ mCanBubble = mRankingUpdate.getCanBubble();
+ }
+ }
+ int keyIndex = mRanks.getOrDefault(key, -1);
+ return keyIndex >= 0 ? mCanBubble[keyIndex] : false;
+ }
+
// Locked by 'this'
private void buildRanksLocked() {
String[] orderedKeys = mRankingUpdate.getOrderedKeys();
diff --git a/core/java/android/service/notification/NotificationRankingUpdate.java b/core/java/android/service/notification/NotificationRankingUpdate.java
index ebaeff8ff33c..230ae2713554 100644
--- a/core/java/android/service/notification/NotificationRankingUpdate.java
+++ b/core/java/android/service/notification/NotificationRankingUpdate.java
@@ -41,13 +41,14 @@ public class NotificationRankingUpdate implements Parcelable {
private final Bundle mSmartReplies;
private final Bundle mLastAudiblyAlerted;
private final Bundle mNoisy;
+ private final boolean[] mCanBubble;
public NotificationRankingUpdate(String[] keys, String[] interceptedKeys,
Bundle visibilityOverrides, Bundle suppressedVisualEffects,
int[] importance, Bundle explanation, Bundle overrideGroupKeys,
Bundle channels, Bundle overridePeople, Bundle snoozeCriteria,
Bundle showBadge, Bundle userSentiment, Bundle hidden, Bundle smartActions,
- Bundle smartReplies, Bundle lastAudiblyAlerted, Bundle noisy) {
+ Bundle smartReplies, Bundle lastAudiblyAlerted, Bundle noisy, boolean[] canBubble) {
mKeys = keys;
mInterceptedKeys = interceptedKeys;
mVisibilityOverrides = visibilityOverrides;
@@ -65,6 +66,7 @@ public class NotificationRankingUpdate implements Parcelable {
mSmartReplies = smartReplies;
mLastAudiblyAlerted = lastAudiblyAlerted;
mNoisy = noisy;
+ mCanBubble = canBubble;
}
public NotificationRankingUpdate(Parcel in) {
@@ -86,6 +88,8 @@ public class NotificationRankingUpdate implements Parcelable {
mSmartReplies = in.readBundle();
mLastAudiblyAlerted = in.readBundle();
mNoisy = in.readBundle();
+ mCanBubble = new boolean[mKeys.length];
+ in.readBooleanArray(mCanBubble);
}
@Override
@@ -112,6 +116,7 @@ public class NotificationRankingUpdate implements Parcelable {
out.writeBundle(mSmartReplies);
out.writeBundle(mLastAudiblyAlerted);
out.writeBundle(mNoisy);
+ out.writeBooleanArray(mCanBubble);
}
public static final Parcelable.Creator<NotificationRankingUpdate> CREATOR
@@ -192,4 +197,8 @@ public class NotificationRankingUpdate implements Parcelable {
public Bundle getNoisy() {
return mNoisy;
}
+
+ public boolean[] getCanBubble() {
+ return mCanBubble;
+ }
}
diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java
index 03d99553f125..3e749f4ba16f 100644
--- a/core/java/android/view/DisplayListCanvas.java
+++ b/core/java/android/view/DisplayListCanvas.java
@@ -37,7 +37,7 @@ public abstract class DisplayListCanvas extends BaseRecordingCanvas {
}
/** @hide */
- @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.O)
public abstract void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top,
CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx,
CanvasProperty<Float> ry, CanvasProperty<Paint> paint);
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 33d42d7d0873..04ffa33d0e22 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -4258,47 +4258,51 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
/**
* The offset, in pixels, by which the content of this view is scrolled
* horizontally.
+ * Please use {@link View#getScrollX()} and {@link View#setScrollX(int)} instead of
+ * accessing these directly.
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "scrolling")
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
protected int mScrollX;
/**
* The offset, in pixels, by which the content of this view is scrolled
* vertically.
+ * Please use {@link View#getScrollY()} and {@link View#setScrollY(int)} instead of
+ * accessing these directly.
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "scrolling")
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
protected int mScrollY;
/**
- * The left padding in pixels, that is the distance in pixels between the
- * left edge of this view and the left edge of its content.
+ * The final computed left padding in pixels that is used for drawing. This is the distance in
+ * pixels between the left edge of this view and the left edge of its content.
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "padding")
@UnsupportedAppUsage
protected int mPaddingLeft = 0;
/**
- * The right padding in pixels, that is the distance in pixels between the
- * right edge of this view and the right edge of its content.
+ * The final computed right padding in pixels that is used for drawing. This is the distance in
+ * pixels between the right edge of this view and the right edge of its content.
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "padding")
@UnsupportedAppUsage
protected int mPaddingRight = 0;
/**
- * The top padding in pixels, that is the distance in pixels between the
- * top edge of this view and the top edge of its content.
+ * The final computed top padding in pixels that is used for drawing. This is the distance in
+ * pixels between the top edge of this view and the top edge of its content.
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "padding")
@UnsupportedAppUsage
protected int mPaddingTop;
/**
- * The bottom padding in pixels, that is the distance in pixels between the
- * bottom edge of this view and the bottom edge of its content.
+ * The final computed bottom padding in pixels that is used for drawing. This is the distance in
+ * pixels between the bottom edge of this view and the bottom edge of its content.
* {@hide}
*/
@ViewDebug.ExportedProperty(category = "padding")
@@ -4350,7 +4354,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
private MatchIdPredicate mMatchIdPredicate;
/**
- * Cache the paddingRight set by the user to append to the scrollbar's size.
+ * The right padding after RTL resolution, but before taking account of scroll bars.
*
* @hide
*/
@@ -4358,7 +4362,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
protected int mUserPaddingRight;
/**
- * Cache the paddingBottom set by the user to append to the scrollbar's size.
+ * The resolved bottom padding before taking account of scroll bars.
*
* @hide
*/
@@ -4366,7 +4370,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
protected int mUserPaddingBottom;
/**
- * Cache the paddingLeft set by the user to append to the scrollbar's size.
+ * The left padding after RTL resolution, but before taking account of scroll bars.
*
* @hide
*/
@@ -4388,14 +4392,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
int mUserPaddingEnd;
/**
- * Cache initial left padding.
+ * The left padding as set by a setter method, a background's padding, or via XML property
+ * resolution. This value is the padding before LTR resolution or taking account of scrollbars.
*
* @hide
*/
int mUserPaddingLeftInitial;
/**
- * Cache initial right padding.
+ * The right padding as set by a setter method, a background's padding, or via XML property
+ * resolution. This value is the padding before LTR resolution or taking account of scrollbars.
*
* @hide
*/
@@ -4407,12 +4413,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
private static final int UNDEFINED_PADDING = Integer.MIN_VALUE;
/**
- * Cache if a left padding has been defined
+ * Cache if a left padding has been defined explicitly via padding, horizontal padding,
+ * or leftPadding in XML, or by setPadding(...) or setRelativePadding(...)
*/
private boolean mLeftPaddingDefined = false;
/**
- * Cache if a right padding has been defined
+ * Cache if a right padding has been defined explicitly via padding, horizontal padding,
+ * or rightPadding in XML, or by setPadding(...) or setRelativePadding(...)
*/
private boolean mRightPaddingDefined = false;
@@ -5321,7 +5329,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
case com.android.internal.R.styleable.View_paddingVertical:
paddingVertical = a.getDimensionPixelSize(attr, -1);
break;
- case com.android.internal.R.styleable.View_paddingLeft:
+ case com.android.internal.R.styleable.View_paddingLeft:
leftPadding = a.getDimensionPixelSize(attr, -1);
mUserPaddingLeftInitial = leftPadding;
leftPaddingDefined = true;
@@ -5787,7 +5795,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
setOverScrollMode(overScrollMode);
- // Cache start/end user padding as we cannot fully resolve padding here (we dont have yet
+ // Cache start/end user padding as we cannot fully resolve padding here (we don't have yet
// the resolved layout direction). Those cached values will be used later during padding
// resolution.
mUserPaddingStart = startPadding;
@@ -5802,6 +5810,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
mLeftPaddingDefined = leftPaddingDefined;
mRightPaddingDefined = rightPaddingDefined;
+ // Valid paddingHorizontal/paddingVertical beats leftPadding, rightPadding, topPadding,
+ // bottomPadding, and padding set by background. Valid padding beats everything.
if (padding >= 0) {
leftPadding = padding;
topPadding = padding;
@@ -5854,6 +5864,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
}
}
+ // mPaddingTop and mPaddingBottom may have been set by setBackground(Drawable) so must pass
+ // them on if topPadding or bottomPadding are not valid.
internalSetPadding(
mUserPaddingLeftInitial,
topPadding >= 0 ? topPadding : mPaddingTop,
@@ -16183,7 +16195,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @return true if the View subclass handles alpha (the return value for onSetAlpha()) and
* the new value for the alpha property is different from the old value
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123768435)
boolean setAlphaNoInvalidation(float alpha) {
ensureTransformationInfo();
if (mTransformationInfo.mAlpha != alpha) {
@@ -19532,7 +19544,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
* @param info the {@link android.view.View.AttachInfo} to associated with
* this view
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
void dispatchAttachedToWindow(AttachInfo info, int visibility) {
mAttachInfo = info;
if (mOverlay != null) {
@@ -19598,7 +19610,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
notifyAppearedOrDisappearedForContentCaptureIfNeeded(true);
}
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
void dispatchDetachedFromWindow() {
AttachInfo info = mAttachInfo;
if (info != null) {
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 94d1b6d0126a..6beae37d6b46 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -24,6 +24,7 @@ import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Point;
+import android.os.Build;
import android.os.RemoteException;
import android.provider.Settings;
import android.util.DisplayMetrics;
@@ -314,7 +315,7 @@ public class ViewConfiguration {
private final float mHorizontalScrollFactor;
private final boolean mShowMenuShortcutsWhenKeyboardPresent;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123768915)
private boolean sHasPermanentMenuKey;
@UnsupportedAppUsage
private boolean sHasPermanentMenuKeySet;
diff --git a/core/java/android/view/ViewPropertyAnimator.java b/core/java/android/view/ViewPropertyAnimator.java
index a0ab362f3985..68c0d9ec465b 100644
--- a/core/java/android/view/ViewPropertyAnimator.java
+++ b/core/java/android/view/ViewPropertyAnimator.java
@@ -1139,12 +1139,6 @@ public class ViewPropertyAnimator {
boolean hardwareAccelerated = mView.isHardwareAccelerated();
- // alpha requires slightly different treatment than the other (transform) properties.
- // The logic in setAlpha() is not simply setting mAlpha, plus the invalidation
- // logic is dependent on how the view handles an internal call to onSetAlpha().
- // We track what kinds of properties are set, and how alpha is handled when it is
- // set, and perform the invalidation steps appropriately.
- boolean alphaHandled = false;
if (!hardwareAccelerated) {
mView.invalidateParentCaches();
}
@@ -1159,11 +1153,7 @@ public class ViewPropertyAnimator {
for (int i = 0; i < count; ++i) {
NameValuesHolder values = valueList.get(i);
float value = values.mFromValue + fraction * values.mDeltaValue;
- if (values.mNameConstant == ALPHA) {
- alphaHandled = mView.setAlphaNoInvalidation(value);
- } else {
- setValue(values.mNameConstant, value);
- }
+ setValue(values.mNameConstant, value);
}
}
if ((propertyMask & TRANSFORM_MASK) != 0) {
@@ -1171,13 +1161,8 @@ public class ViewPropertyAnimator {
mView.mPrivateFlags |= View.PFLAG_DRAWN; // force another invalidation
}
}
- // invalidate(false) in all cases except if alphaHandled gets set to true
- // via the call to setAlphaNoInvalidation(), above
- if (alphaHandled) {
- mView.invalidate(true);
- } else {
- mView.invalidateViewProperty(false, false);
- }
+
+ mView.invalidateViewProperty(false, false);
if (mUpdateListener != null) {
mUpdateListener.onAnimationUpdate(animation);
}
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 97c37b0a8f75..9c21ba60a034 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -3660,7 +3660,7 @@ public class Editor {
intent.putExtra(USER_DICTIONARY_EXTRA_LOCALE,
mTextView.getTextServicesLocale().toString());
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK);
- mTextView.getContext().startActivity(intent);
+ mTextView.startActivityAsTextOperationUserIfNecessary(intent);
// There is no way to know if the word was indeed added. Re-check.
// TODO The ExtractEditText should remove the span in the original text instead
editable.removeSpan(mMisspelledSpanInfo.mSuggestionSpan);
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index bf65ec0d5de3..bbbe369d5262 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -123,7 +123,7 @@ public class GridView extends AbsListView {
private int mColumnWidth;
@UnsupportedAppUsage
private int mRequestedColumnWidth;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123769395)
private int mRequestedNumColumns;
private View mReferenceView = null;
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index 3519afd32662..6b48c6584ad2 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -20,6 +20,7 @@ import android.animation.ObjectAnimator;
import android.annotation.InterpolatorRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.Px;
import android.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.res.ColorStateList;
@@ -37,6 +38,7 @@ import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.StateListDrawable;
import android.graphics.drawable.shapes.RoundRectShape;
import android.graphics.drawable.shapes.Shape;
+import android.os.Build;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.AttributeSet;
@@ -169,12 +171,24 @@ public class ProgressBar extends View {
/** Duration of smooth progress animations. */
private static final int PROGRESS_ANIM_DURATION = 80;
- @UnsupportedAppUsage
+ /**
+ * Outside the framework, please use {@link ProgressBar#getMinWidth()} and
+ * {@link ProgressBar#setMinWidth(int)} instead of accessing these directly.
+ */
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
int mMinWidth;
int mMaxWidth;
- @UnsupportedAppUsage
+ /**
+ * Outside the framework, please use {@link ProgressBar#getMinHeight()} and
+ * {@link ProgressBar#setMinHeight(int)} instead of accessing these directly.
+ */
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
int mMinHeight;
- @UnsupportedAppUsage
+ /**
+ * Outside the framework, please use {@link ProgressBar#getMaxHeight()} ()} and
+ * {@link ProgressBar#setMaxHeight(int)} (int)} instead of accessing these directly.
+ */
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
int mMaxHeight;
private int mProgress;
@@ -187,7 +201,7 @@ public class ProgressBar extends View {
private int mBehavior;
@UnsupportedAppUsage
private int mDuration;
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
private boolean mIndeterminate;
@UnsupportedAppUsage
private boolean mOnlyIndeterminate;
@@ -392,6 +406,74 @@ public class ProgressBar extends View {
}
/**
+ * Sets the minimum width the progress bar can have.
+ * @param minWidth the minimum width to be set, in pixels
+ * @attr ref android.R.styleable#ProgressBar_minWidth
+ */
+ public void setMinWidth(@Px int minWidth) {
+ mMinWidth = minWidth;
+ requestLayout();
+ }
+
+ /**
+ * @return the minimum width the progress bar can have, in pixels
+ */
+ @Px public int getMinWidth() {
+ return mMinWidth;
+ }
+
+ /**
+ * Sets the maximum width the progress bar can have.
+ * @param maxWidth the maximum width to be set, in pixels
+ * @attr ref android.R.styleable#ProgressBar_maxWidth
+ */
+ public void setMaxWidth(@Px int maxWidth) {
+ mMaxWidth = maxWidth;
+ requestLayout();
+ }
+
+ /**
+ * @return the maximum width the progress bar can have, in pixels
+ */
+ @Px public int getMaxWidth() {
+ return mMaxWidth;
+ }
+
+ /**
+ * Sets the minimum height the progress bar can have.
+ * @param minHeight the minimum height to be set, in pixels
+ * @attr ref android.R.styleable#ProgressBar_minHeight
+ */
+ public void setMinHeight(@Px int minHeight) {
+ mMinHeight = minHeight;
+ requestLayout();
+ }
+
+ /**
+ * @return the minimum height the progress bar can have, in pixels
+ */
+ @Px public int getMinHeight() {
+ return mMinHeight;
+ }
+
+ /**
+ * Sets the maximum height the progress bar can have.
+ * @param maxHeight the maximum height to be set, in pixels
+ * @attr ref android.R.styleable#ProgressBar_maxHeight
+ */
+ public void setMaxHeight(@Px int maxHeight) {
+ mMaxHeight = maxHeight;
+ requestLayout();
+ }
+
+ /**
+ * @return the maximum height the progress bar can have, in pixels
+ */
+ @Px public int getMaxHeight() {
+ return mMaxHeight;
+ }
+
+ /**
* Returns {@code true} if the target drawable needs to be tileified.
*
* @param dr the drawable to check
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index fc4e9ec3caad..24bc9f1e4985 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -111,7 +111,7 @@ public class ScrollView extends FrameLayout {
* layout is dirty. This prevents the scroll from being wrong if the child has not been
* laid out before requesting focus.
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123769715)
private View mChildToScrollTo = null;
/**
@@ -1384,16 +1384,20 @@ public class ScrollView extends FrameLayout {
*
* @param child the View to scroll to
*/
- private void scrollToChild(View child) {
- child.getDrawingRect(mTempRect);
+ public void scrollToDescendant(View child) {
+ if (!mIsLayoutDirty) {
+ child.getDrawingRect(mTempRect);
- /* Offset from child's local coordinates to ScrollView coordinates */
- offsetDescendantRectToMyCoords(child, mTempRect);
+ /* Offset from child's local coordinates to ScrollView coordinates */
+ offsetDescendantRectToMyCoords(child, mTempRect);
- int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect);
+ int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect);
- if (scrollDelta != 0) {
- scrollBy(0, scrollDelta);
+ if (scrollDelta != 0) {
+ scrollBy(0, scrollDelta);
+ }
+ } else {
+ mChildToScrollTo = child;
}
}
@@ -1488,7 +1492,7 @@ public class ScrollView extends FrameLayout {
public void requestChildFocus(View child, View focused) {
if (focused != null && focused.getRevealOnFocusHint()) {
if (!mIsLayoutDirty) {
- scrollToChild(focused);
+ scrollToDescendant(focused);
} else {
// The child may not be laid out yet, we can't compute the scroll yet
mChildToScrollTo = focused;
@@ -1569,7 +1573,7 @@ public class ScrollView extends FrameLayout {
mIsLayoutDirty = false;
// Give a child focus if it needs it
if (mChildToScrollTo != null && isViewDescendantOf(mChildToScrollTo, this)) {
- scrollToChild(mChildToScrollTo);
+ scrollToDescendant(mChildToScrollTo);
}
mChildToScrollTo = null;
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index d790c0cab886..659b71f51588 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -435,8 +435,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private ColorStateList mHintTextColor;
private ColorStateList mLinkTextColor;
@ViewDebug.ExportedProperty(category = "text")
- @UnsupportedAppUsage
+
+ /**
+ * {@link #setTextColor(int)} or {@link #getCurrentTextColor()} should be used instead.
+ */
+ @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P)
private int mCurTextColor;
+
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023)
private int mCurHintTextColor;
private boolean mFreezesText;
@@ -11235,6 +11240,22 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
/**
+ * Starts {@link Activity} as a text-operation user if it is specified with
+ * {@link #setTextOperationUser(UserHandle)}.
+ *
+ * <p>Otherwise, just starts {@link Activity} with {@link Context#startActivity(Intent)}.</p>
+ *
+ * @param intent The description of the activity to start.
+ */
+ void startActivityAsTextOperationUserIfNecessary(@NonNull Intent intent) {
+ if (mTextOperationUser != null) {
+ getContext().startActivityAsUser(intent, mTextOperationUser);
+ } else {
+ getContext().startActivity(intent);
+ }
+ }
+
+ /**
* This is a temporary method. Future versions may support multi-locale text.
* Caveat: This method may not return the latest text services locale, but this should be
* acceptable and it's more important to make this method asynchronous.
diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java
index ee96ae985331..119a015cd5ea 100644
--- a/core/java/com/android/internal/app/ChooserActivity.java
+++ b/core/java/com/android/internal/app/ChooserActivity.java
@@ -54,6 +54,7 @@ import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
+import android.metrics.LogMaker;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
@@ -186,9 +187,12 @@ public class ChooserActivity extends ResolverActivity {
private @interface ContentPreviewType {
}
- private static final int CONTENT_PREVIEW_IMAGE = 0;
- private static final int CONTENT_PREVIEW_FILE = 1;
- private static final int CONTENT_PREVIEW_TEXT = 2;
+ // Starting at 1 since 0 is considered "undefined" for some of the database transformations
+ // of tron logs.
+ private static final int CONTENT_PREVIEW_IMAGE = 1;
+ private static final int CONTENT_PREVIEW_FILE = 2;
+ private static final int CONTENT_PREVIEW_TEXT = 3;
+ protected MetricsLogger mMetricsLogger;
private final Handler mChooserHandler = new Handler() {
@Override
@@ -413,11 +417,12 @@ public class ChooserActivity extends ResolverActivity {
}
});
- MetricsLogger.action(this, MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN);
-
mChooserShownTime = System.currentTimeMillis();
final long systemCost = mChooserShownTime - intentReceivedTime;
- MetricsLogger.histogram(null, "system_cost_for_smart_sharing", (int) systemCost);
+
+ getMetricsLogger().write(new LogMaker(MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN)
+ .addTaggedData(MetricsEvent.FIELD_SHARESHEET_MIMETYPE, target.getType())
+ .addTaggedData(MetricsEvent.FIELD_TIME_TO_APP_TARGETS, systemCost));
if (USE_PREDICTION_MANAGER_FOR_DIRECT_TARGETS) {
final IntentFilter filter = getTargetIntentFilter();
@@ -470,6 +475,9 @@ public class ChooserActivity extends ResolverActivity {
}
int previewType = findPreferredContentPreview(targetIntent, getContentResolver());
+
+ getMetricsLogger().write(new LogMaker(MetricsEvent.ACTION_SHARE_WITH_PREVIEW)
+ .setSubtype(previewType));
displayContentPreview(previewType, targetIntent);
}
@@ -1180,6 +1188,13 @@ public class ChooserActivity extends ResolverActivity {
}
}
+ protected MetricsLogger getMetricsLogger() {
+ if (mMetricsLogger == null) {
+ mMetricsLogger = new MetricsLogger();
+ }
+ return mMetricsLogger;
+ }
+
public class ChooserListController extends ResolverListController {
public ChooserListController(Context context,
PackageManager pm,
@@ -1726,6 +1741,8 @@ public class ChooserActivity extends ResolverActivity {
if (show != mShowServiceTargets) {
mShowServiceTargets = show;
notifyDataSetChanged();
+ getMetricsLogger().write(
+ new LogMaker(MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN_DIRECT_TARGET));
}
}
@@ -1884,8 +1901,6 @@ public class ChooserActivity extends ResolverActivity {
}
if (startType == ChooserListAdapter.TARGET_SERVICE) {
- holder.row.setBackgroundColor(
- getColor(R.color.chooser_service_row_background_color));
int nextStartType = mChooserListAdapter.getPositionTargetType(
getFirstRowPosition(rowPosition + 1));
int serviceSpacing = holder.row.getContext().getResources()
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index b881aef221ce..8b669d5db8df 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -99,6 +99,11 @@ public final class Zygote {
*/
public static final int PROFILE_FROM_SHELL = 1 << 15;
+ /*
+ * Enable using the ART app image startup cache
+ */
+ public static final int USE_APP_IMAGE_STARTUP_CACHE = 1 << 16;
+
/** No external storage should be mounted. */
public static final int MOUNT_EXTERNAL_NONE = IVold.REMOUNT_MODE_NONE;
/** Default external storage should be mounted. */
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 9f23797d6ccc..e132abd7e4cb 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -41,6 +41,7 @@ import android.system.OsConstants;
import android.system.StructCapUserData;
import android.system.StructCapUserHeader;
import android.text.Hyphenator;
+import android.text.TextUtils;
import android.util.EventLog;
import android.util.Log;
import android.util.Slog;
@@ -84,6 +85,8 @@ public class ZygoteInit {
private static final String PROPERTY_DISABLE_OPENGL_PRELOADING = "ro.zygote.disable_gl_preload";
private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0";
+ private static final String PROPERTY_USE_APP_IMAGE_STARTUP_CACHE =
+ "persist.device_config.runtime_native.use_app_image_startup_cache";
private static final int LOG_BOOT_PROGRESS_PRELOAD_START = 3020;
private static final int LOG_BOOT_PROGRESS_PRELOAD_END = 3030;
@@ -705,6 +708,13 @@ public class ZygoteInit {
parsedArgs.mRuntimeFlags |= Zygote.PROFILE_SYSTEM_SERVER;
}
+ String use_app_image_cache = SystemProperties.get(
+ PROPERTY_USE_APP_IMAGE_STARTUP_CACHE, "");
+ // Property defaults to true currently.
+ if (!TextUtils.isEmpty(use_app_image_cache) && !use_app_image_cache.equals("false")) {
+ parsedArgs.mRuntimeFlags |= Zygote.USE_APP_IMAGE_STARTUP_CACHE;
+ }
+
/* Request to fork the system server process */
pid = Zygote.forkSystemServer(
parsedArgs.mUid, parsedArgs.mGid,
diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java
index 397df56a809c..b04ebec77a92 100644
--- a/core/java/com/android/internal/util/ArrayUtils.java
+++ b/core/java/com/android/internal/util/ArrayUtils.java
@@ -691,6 +691,15 @@ public class ArrayUtils {
return result;
}
+ public static boolean startsWith(byte[] cur, byte[] val) {
+ if (cur == null || val == null) return false;
+ if (cur.length < val.length) return false;
+ for (int i = 0; i < val.length; i++) {
+ if (cur[i] != val[i]) return false;
+ }
+ return true;
+ }
+
/**
* Returns the first element from the array for which
* condition {@code predicate} is true, or null if there is no such element
diff --git a/core/java/com/android/internal/widget/ResolverDrawerLayout.java b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
index b7e656bc9278..ee8637d8c773 100644
--- a/core/java/com/android/internal/widget/ResolverDrawerLayout.java
+++ b/core/java/com/android/internal/widget/ResolverDrawerLayout.java
@@ -17,15 +17,12 @@
package com.android.internal.widget;
-import com.android.internal.R;
-
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
-import android.graphics.Color;
import android.graphics.Rect;
-import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
+import android.metrics.LogMaker;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -45,8 +42,13 @@ import android.view.animation.AnimationUtils;
import android.widget.AbsListView;
import android.widget.OverScroller;
+import com.android.internal.R;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+
public class ResolverDrawerLayout extends ViewGroup {
private static final String TAG = "ResolverDrawerLayout";
+ private MetricsLogger mMetricsLogger;
/**
* Max width of the whole drawer layout
@@ -496,6 +498,9 @@ public class ResolverDrawerLayout extends ViewGroup {
final boolean isCollapsedNew = newPos != 0;
if (isCollapsedOld != isCollapsedNew) {
onCollapsedChanged(isCollapsedNew);
+ getMetricsLogger().write(
+ new LogMaker(MetricsEvent.ACTION_SHARESHEET_COLLAPSED_CHANGED)
+ .setSubtype(isCollapsedNew ? 1 : 0));
}
postInvalidateOnAnimation();
return dy;
@@ -1037,4 +1042,11 @@ public class ResolverDrawerLayout extends ViewGroup {
dispatchOnDismissed();
}
}
+
+ private MetricsLogger getMetricsLogger() {
+ if (mMetricsLogger == null) {
+ mMetricsLogger = new MetricsLogger();
+ }
+ return mMetricsLogger;
+ }
}
diff --git a/core/java/com/android/server/backup/AccountSyncSettingsBackupHelper.java b/core/java/com/android/server/backup/AccountSyncSettingsBackupHelper.java
index 1b4049212255..b4610bda2cd9 100644
--- a/core/java/com/android/server/backup/AccountSyncSettingsBackupHelper.java
+++ b/core/java/com/android/server/backup/AccountSyncSettingsBackupHelper.java
@@ -26,6 +26,7 @@ import android.content.Context;
import android.content.SyncAdapterType;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
+import android.os.UserHandle;
import android.util.Log;
import org.json.JSONArray;
@@ -48,6 +49,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
+import java.util.Set;
/**
* Helper for backing up account sync settings (whether or not a service should be synced). The
@@ -76,15 +78,17 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
private static final String KEY_AUTHORITY_NAME = "name";
private static final String KEY_AUTHORITY_SYNC_STATE = "syncState";
private static final String KEY_AUTHORITY_SYNC_ENABLED = "syncEnabled";
- private static final String STASH_FILE = Environment.getDataDirectory()
- + "/backup/unadded_account_syncsettings.json";
+ private static final String STASH_FILE = "/backup/unadded_account_syncsettings.json";
private Context mContext;
private AccountManager mAccountManager;
+ private final int mUserId;
- public AccountSyncSettingsBackupHelper(Context context) {
+ public AccountSyncSettingsBackupHelper(Context context, int userId) {
mContext = context;
mAccountManager = AccountManager.get(mContext);
+
+ mUserId = userId;
}
/**
@@ -94,7 +98,7 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput output,
ParcelFileDescriptor newState) {
try {
- JSONObject dataJSON = serializeAccountSyncSettingsToJSON();
+ JSONObject dataJSON = serializeAccountSyncSettingsToJSON(mUserId);
if (DEBUG) {
Log.d(TAG, "Account sync settings JSON: " + dataJSON);
@@ -123,10 +127,9 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
/**
* Fetch and serialize Account and authority information as a JSON Array.
*/
- private JSONObject serializeAccountSyncSettingsToJSON() throws JSONException {
- Account[] accounts = mAccountManager.getAccounts();
- SyncAdapterType[] syncAdapters = ContentResolver.getSyncAdapterTypesAsUser(
- mContext.getUserId());
+ private JSONObject serializeAccountSyncSettingsToJSON(int userId) throws JSONException {
+ Account[] accounts = mAccountManager.getAccountsAsUser(userId);
+ SyncAdapterType[] syncAdapters = ContentResolver.getSyncAdapterTypesAsUser(userId);
// Create a map of Account types to authorities. Later this will make it easier for us to
// generate our JSON.
@@ -146,7 +149,8 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
// Generate JSON.
JSONObject backupJSON = new JSONObject();
backupJSON.put(KEY_VERSION, JSON_FORMAT_VERSION);
- backupJSON.put(KEY_MASTER_SYNC_ENABLED, ContentResolver.getMasterSyncAutomatically());
+ backupJSON.put(KEY_MASTER_SYNC_ENABLED, ContentResolver.getMasterSyncAutomaticallyAsUser(
+ userId));
JSONArray accountJSONArray = new JSONArray();
for (Account account : accounts) {
@@ -165,8 +169,9 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
// Add authorities for this Account type and check whether or not sync is enabled.
JSONArray authoritiesJSONArray = new JSONArray();
for (String authority : authorities) {
- int syncState = ContentResolver.getIsSyncable(account, authority);
- boolean syncEnabled = ContentResolver.getSyncAutomatically(account, authority);
+ int syncState = ContentResolver.getIsSyncableAsUser(account, authority, userId);
+ boolean syncEnabled = ContentResolver.getSyncAutomaticallyAsUser(account, authority,
+ userId);
JSONObject authorityJSON = new JSONObject();
authorityJSON.put(KEY_AUTHORITY_NAME, authority);
@@ -254,17 +259,18 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
boolean masterSyncEnabled = dataJSON.getBoolean(KEY_MASTER_SYNC_ENABLED);
JSONArray accountJSONArray = dataJSON.getJSONArray(KEY_ACCOUNTS);
- boolean currentMasterSyncEnabled = ContentResolver.getMasterSyncAutomatically();
+ boolean currentMasterSyncEnabled = ContentResolver.getMasterSyncAutomaticallyAsUser(
+ mUserId);
if (currentMasterSyncEnabled) {
// Disable master sync to prevent any syncs from running.
- ContentResolver.setMasterSyncAutomatically(false);
+ ContentResolver.setMasterSyncAutomaticallyAsUser(false, mUserId);
}
try {
- restoreFromJsonArray(accountJSONArray);
+ restoreFromJsonArray(accountJSONArray, mUserId);
} finally {
// Set the master sync preference to the value from the backup set.
- ContentResolver.setMasterSyncAutomatically(masterSyncEnabled);
+ ContentResolver.setMasterSyncAutomaticallyAsUser(masterSyncEnabled, mUserId);
}
Log.i(TAG, "Restore successful.");
} catch (IOException | JSONException e) {
@@ -272,9 +278,9 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
}
}
- private void restoreFromJsonArray(JSONArray accountJSONArray)
+ private void restoreFromJsonArray(JSONArray accountJSONArray, int userId)
throws JSONException {
- HashSet<Account> currentAccounts = getAccounts();
+ Set<Account> currentAccounts = getAccounts(userId);
JSONArray unaddedAccountsJSONArray = new JSONArray();
for (int i = 0; i < accountJSONArray.length(); i++) {
JSONObject accountJSON = (JSONObject) accountJSONArray.get(i);
@@ -292,14 +298,14 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
// yet won't be restored.
if (currentAccounts.contains(account)) {
if (DEBUG) Log.i(TAG, "Restoring Sync Settings for" + accountName);
- restoreExistingAccountSyncSettingsFromJSON(accountJSON);
+ restoreExistingAccountSyncSettingsFromJSON(accountJSON, userId);
} else {
unaddedAccountsJSONArray.put(accountJSON);
}
}
if (unaddedAccountsJSONArray.length() > 0) {
- try (FileOutputStream fOutput = new FileOutputStream(STASH_FILE)) {
+ try (FileOutputStream fOutput = new FileOutputStream(getStashFile(userId))) {
String jsonString = unaddedAccountsJSONArray.toString();
DataOutputStream out = new DataOutputStream(fOutput);
out.writeUTF(jsonString);
@@ -308,18 +314,20 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
Log.e(TAG, "unable to write the sync settings to the stash file", ioe);
}
} else {
- File stashFile = new File(STASH_FILE);
- if (stashFile.exists()) stashFile.delete();
+ File stashFile = getStashFile(userId);
+ if (stashFile.exists()) {
+ stashFile.delete();
+ }
}
}
/**
* Restore SyncSettings for all existing accounts from a stashed backup-set
*/
- private void accountAddedInternal() {
+ private void accountAddedInternal(int userId) {
String jsonString;
- try (FileInputStream fIn = new FileInputStream(new File(STASH_FILE))) {
+ try (FileInputStream fIn = new FileInputStream(getStashFile(userId))) {
DataInputStream in = new DataInputStream(fIn);
jsonString = in.readUTF();
} catch (FileNotFoundException fnfe) {
@@ -333,7 +341,7 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
try {
JSONArray unaddedAccountsJSONArray = new JSONArray(jsonString);
- restoreFromJsonArray(unaddedAccountsJSONArray);
+ restoreFromJsonArray(unaddedAccountsJSONArray, userId);
} catch (JSONException jse) {
// Malformed jsonString
Log.e(TAG, "there was an error with the stashed sync settings", jse);
@@ -343,9 +351,10 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
/**
* Restore SyncSettings for all existing accounts from a stashed backup-set
*/
- public static void accountAdded(Context context) {
- AccountSyncSettingsBackupHelper helper = new AccountSyncSettingsBackupHelper(context);
- helper.accountAddedInternal();
+ public static void accountAdded(Context context, int userId) {
+ AccountSyncSettingsBackupHelper helper = new AccountSyncSettingsBackupHelper(context,
+ userId);
+ helper.accountAddedInternal(userId);
}
/**
@@ -353,9 +362,9 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
*
* @return Accounts in a HashSet.
*/
- private HashSet<Account> getAccounts() {
- Account[] accounts = mAccountManager.getAccounts();
- HashSet<Account> accountHashSet = new HashSet<Account>();
+ private Set<Account> getAccounts(int userId) {
+ Account[] accounts = mAccountManager.getAccountsAsUser(userId);
+ Set<Account> accountHashSet = new HashSet<Account>();
for (Account account : accounts) {
accountHashSet.add(account);
}
@@ -391,7 +400,7 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
* initialization sync, while an adapter that the user had off will be off until the user
* enables it on this device at which point it will get an initialization sync.
*/
- private void restoreExistingAccountSyncSettingsFromJSON(JSONObject accountJSON)
+ private void restoreExistingAccountSyncSettingsFromJSON(JSONObject accountJSON, int userId)
throws JSONException {
// Restore authorities.
JSONArray authorities = accountJSON.getJSONArray(KEY_ACCOUNT_AUTHORITIES);
@@ -406,14 +415,15 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
int wasSyncable = authority.getInt(KEY_AUTHORITY_SYNC_STATE);
ContentResolver.setSyncAutomaticallyAsUser(
- account, authorityName, wasSyncEnabled, 0 /* user Id */);
+ account, authorityName, wasSyncEnabled, userId);
if (!wasSyncEnabled) {
- ContentResolver.setIsSyncable(
+ ContentResolver.setIsSyncableAsUser(
account,
authorityName,
wasSyncable == 0 ?
- 0 /* not syncable */ : 2 /* syncable but needs initialization */);
+ 0 /* not syncable */ : 2 /* syncable but needs initialization */,
+ userId);
}
}
}
@@ -422,4 +432,10 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper {
public void writeNewStateDescription(ParcelFileDescriptor newState) {
}
-} \ No newline at end of file
+
+ private static File getStashFile(int userId) {
+ File baseDir = userId == UserHandle.USER_SYSTEM ? Environment.getDataDirectory()
+ : Environment.getDataSystemCeDirectory(userId);
+ return new File(baseDir, STASH_FILE);
+ }
+}
diff --git a/core/java/com/android/server/backup/NotificationBackupHelper.java b/core/java/com/android/server/backup/NotificationBackupHelper.java
index 0d225e87d77b..7d4f8f79aa63 100644
--- a/core/java/com/android/server/backup/NotificationBackupHelper.java
+++ b/core/java/com/android/server/backup/NotificationBackupHelper.java
@@ -18,9 +18,7 @@ package com.android.server.backup;
import android.app.INotificationManager;
import android.app.backup.BlobBackupHelper;
-import android.content.Context;
import android.os.ServiceManager;
-import android.os.UserHandle;
import android.util.Log;
import android.util.Slog;
@@ -34,9 +32,11 @@ public class NotificationBackupHelper extends BlobBackupHelper {
// Key under which the payload blob is stored
static final String KEY_NOTIFICATIONS = "notifications";
- public NotificationBackupHelper(Context context) {
+ private final int mUserId;
+
+ public NotificationBackupHelper(int userId) {
super(BLOB_VERSION, KEY_NOTIFICATIONS);
- // context is currently unused
+ mUserId = userId;
}
@Override
@@ -46,8 +46,7 @@ public class NotificationBackupHelper extends BlobBackupHelper {
try {
INotificationManager nm = INotificationManager.Stub.asInterface(
ServiceManager.getService("notification"));
- // TODO: http://b/22388012
- newPayload = nm.getBackupPayload(UserHandle.USER_SYSTEM);
+ newPayload = nm.getBackupPayload(mUserId);
} catch (Exception e) {
// Treat as no data
Slog.e(TAG, "Couldn't communicate with notification manager");
@@ -67,8 +66,7 @@ public class NotificationBackupHelper extends BlobBackupHelper {
try {
INotificationManager nm = INotificationManager.Stub.asInterface(
ServiceManager.getService("notification"));
- // TODO: http://b/22388012
- nm.applyRestore(payload, UserHandle.USER_SYSTEM);
+ nm.applyRestore(payload, mUserId);
} catch (Exception e) {
Slog.e(TAG, "Couldn't communicate with notification manager");
}
diff --git a/core/java/com/android/server/backup/SystemBackupAgent.java b/core/java/com/android/server/backup/SystemBackupAgent.java
index 8878421a8016..35e8f56cf36d 100644
--- a/core/java/com/android/server/backup/SystemBackupAgent.java
+++ b/core/java/com/android/server/backup/SystemBackupAgent.java
@@ -81,7 +81,7 @@ public class SystemBackupAgent extends BackupAgentHelper {
private static final String WALLPAPER_IMAGE_KEY = WallpaperBackupHelper.WALLPAPER_IMAGE_KEY;
private static final Set<String> sEligibleForMultiUser = Sets.newArraySet(
- PERMISSION_HELPER);
+ PERMISSION_HELPER, NOTIFICATION_HELPER, SYNC_SETTINGS_HELPER);
private int mUserId = UserHandle.USER_SYSTEM;
@@ -91,9 +91,9 @@ public class SystemBackupAgent extends BackupAgentHelper {
mUserId = user.getIdentifier();
- addHelper(SYNC_SETTINGS_HELPER, new AccountSyncSettingsBackupHelper(this));
+ addHelper(SYNC_SETTINGS_HELPER, new AccountSyncSettingsBackupHelper(this, mUserId));
addHelper(PREFERRED_HELPER, new PreferredActivityBackupHelper());
- addHelper(NOTIFICATION_HELPER, new NotificationBackupHelper(this));
+ addHelper(NOTIFICATION_HELPER, new NotificationBackupHelper(mUserId));
addHelper(PERMISSION_HELPER, new PermissionBackupHelper(mUserId));
addHelper(USAGE_STATS_HELPER, new UsageStatsBackupHelper(this));
addHelper(SHORTCUT_MANAGER_HELPER, new ShortcutBackupHelper());
diff --git a/core/jni/OWNERS b/core/jni/OWNERS
index 86342c47c455..774c2242e144 100644
--- a/core/jni/OWNERS
+++ b/core/jni/OWNERS
@@ -3,7 +3,7 @@ per-file *Camera*,*camera* = cychen@google.com, epeev@google.com, etalvala@googl
per-file *Camera*,*camera* = shuzhenwang@google.com, yinchiayeh@google.com, zhijunhe@google.com
# Connectivity
-per-file android_net_* = ek@google.com, lorenzo@google.com, satk@google.com
+per-file android_net_* = codewiz@google.com, jchalard@google.com, lorenzo@google.com, reminv@google.com, satk@google.com
# Zygote
per-file com_android_inernal_os_Zygote.*,fd_utils.* = chriswailes@google.com, ngeoffray@google.com, sehr@google.com, narayan@google.com, maco@google.com
diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp
index 7eddcfe425d3..cfb2dd199f39 100644
--- a/core/jni/android_net_NetUtils.cpp
+++ b/core/jni/android_net_NetUtils.cpp
@@ -29,6 +29,7 @@
#include <net/if.h>
#include <linux/filter.h>
#include <linux/if_arp.h>
+#include <linux/tcp.h>
#include <netinet/ether.h>
#include <netinet/icmp6.h>
#include <netinet/ip.h>
@@ -226,6 +227,34 @@ static void android_net_utils_attachControlPacketFilter(
}
}
+static void android_net_utils_attachDropAllBPFFilter(JNIEnv *env, jobject clazz, jobject javaFd)
+{
+ struct sock_filter filter_code[] = {
+ // Reject all.
+ BPF_STMT(BPF_RET | BPF_K, 0)
+ };
+ struct sock_fprog filter = {
+ sizeof(filter_code) / sizeof(filter_code[0]),
+ filter_code,
+ };
+
+ int fd = jniGetFDFromFileDescriptor(env, javaFd);
+ if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)) != 0) {
+ jniThrowExceptionFmt(env, "java/net/SocketException",
+ "setsockopt(SO_ATTACH_FILTER): %s", strerror(errno));
+ }
+}
+
+static void android_net_utils_detachBPFFilter(JNIEnv *env, jobject clazz, jobject javaFd)
+{
+ int dummy = 0;
+ int fd = jniGetFDFromFileDescriptor(env, javaFd);
+ if (setsockopt(fd, SOL_SOCKET, SO_DETACH_FILTER, &dummy, sizeof(dummy)) != 0) {
+ jniThrowExceptionFmt(env, "java/net/SocketException",
+ "setsockopt(SO_DETACH_FILTER): %s", strerror(errno));
+ }
+
+}
static void android_net_utils_setupRaSocket(JNIEnv *env, jobject clazz, jobject javaFd,
jint ifIndex)
{
@@ -458,6 +487,41 @@ static jbyteArray android_net_utils_resNetworkResult(JNIEnv *env, jobject thiz,
return answer;
}
+static jobject android_net_utils_getTcpRepairWindow(JNIEnv *env, jobject thiz, jobject javaFd) {
+ if (javaFd == NULL) {
+ jniThrowNullPointerException(env, NULL);
+ return NULL;
+ }
+
+ int fd = jniGetFDFromFileDescriptor(env, javaFd);
+ struct tcp_repair_window trw = {};
+ socklen_t size = sizeof(trw);
+
+ // Obtain the parameters of the TCP repair window.
+ int rc = getsockopt(fd, IPPROTO_TCP, TCP_REPAIR_WINDOW, &trw, &size);
+ if (rc == -1) {
+ throwErrnoException(env, "getsockopt : TCP_REPAIR_WINDOW", errno);
+ return NULL;
+ }
+
+ struct tcp_info tcpinfo = {};
+ socklen_t tcpinfo_size = sizeof(tcp_info);
+
+ // Obtain the window scale from the tcp info structure. This contains a scale factor that
+ // should be applied to the window size.
+ rc = getsockopt(fd, IPPROTO_TCP, TCP_INFO, &tcpinfo, &tcpinfo_size);
+ if (rc == -1) {
+ throwErrnoException(env, "getsockopt : TCP_INFO", errno);
+ return NULL;
+ }
+
+ jclass class_TcpRepairWindow = env->FindClass("android/net/TcpRepairWindow");
+ jmethodID ctor = env->GetMethodID(class_TcpRepairWindow, "<init>", "(IIIIII)V");
+
+ return env->NewObject(class_TcpRepairWindow, ctor, trw.snd_wl1, trw.snd_wnd, trw.max_window,
+ trw.rcv_wnd, trw.rcv_wup, tcpinfo.tcpi_rcv_wscale);
+}
+
// ----------------------------------------------------------------------------
/*
@@ -475,6 +539,9 @@ static const JNINativeMethod gNetworkUtilMethods[] = {
{ "attachDhcpFilter", "(Ljava/io/FileDescriptor;)V", (void*) android_net_utils_attachDhcpFilter },
{ "attachRaFilter", "(Ljava/io/FileDescriptor;I)V", (void*) android_net_utils_attachRaFilter },
{ "attachControlPacketFilter", "(Ljava/io/FileDescriptor;I)V", (void*) android_net_utils_attachControlPacketFilter },
+ { "attachDropAllBPFFilter", "(Ljava/io/FileDescriptor;)V", (void*) android_net_utils_attachDropAllBPFFilter },
+ { "detachBPFFilter", "(Ljava/io/FileDescriptor;)V", (void*) android_net_utils_detachBPFFilter },
+ { "getTcpRepairWindow", "(Ljava/io/FileDescriptor;)Landroid/net/TcpRepairWindow;", (void*) android_net_utils_getTcpRepairWindow },
{ "setupRaSocket", "(Ljava/io/FileDescriptor;I)V", (void*) android_net_utils_setupRaSocket },
{ "resNetworkSend", "(I[BII)Ljava/io/FileDescriptor;", (void*) android_net_utils_resNetworkSend },
{ "resNetworkQuery", "(ILjava/lang/String;III)Ljava/io/FileDescriptor;", (void*) android_net_utils_resNetworkQuery },
diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp
index 40529191a42c..2c058cd0d6fd 100644
--- a/core/jni/android_view_ThreadedRenderer.cpp
+++ b/core/jni/android_view_ThreadedRenderer.cpp
@@ -1207,7 +1207,7 @@ static void attachRenderThreadToJvm() {
JavaVMAttachArgs args;
args.version = JNI_VERSION_1_4;
- args.name = (char*) "RenderThread";
+ args.name = NULL;
args.group = NULL;
JNIEnv* env;
mJvm->AttachCurrentThreadAsDaemon(&env, (void*) &args);
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index 5a65028469a8..0ef4f874f583 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -647,6 +647,23 @@ static void MountPkgSpecificDir(const std::string& mntSourceRoot,
static void PreparePkgSpecificDirs(const std::vector<std::string>& packageNames,
const std::vector<std::string>& volumeLabels,
bool mountAllObbs, userid_t userId, fail_fn_t fail_fn) {
+ if (volumeLabels.size() > 0) {
+ std::string sandboxDataDir = StringPrintf("/storage/%s", volumeLabels[0].c_str());
+ if (volumeLabels[0] == "emulated") {
+ StringAppendF(&sandboxDataDir, "/%d", userId);
+ }
+ StringAppendF(&sandboxDataDir, "/Android/data/%s", packageNames[0].c_str());
+ struct stat sb;
+ if (TEMP_FAILURE_RETRY(lstat(sandboxDataDir.c_str(), &sb)) == -1) {
+ if (errno == ENOENT) {
+ ALOGD("Sandbox not fully prepared for %s", sandboxDataDir.c_str());
+ return;
+ } else {
+ fail_fn(CREATE_ERROR("Failed to lstat %s: %s",
+ sandboxDataDir.c_str(), strerror(errno)));
+ }
+ }
+ }
for (auto& label : volumeLabels) {
std::string mntSource = StringPrintf("/mnt/runtime/write/%s", label.c_str());
std::string mntTarget = StringPrintf("/storage/%s", label.c_str());
diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto
index f3733fdb3810..6360a5f91013 100644
--- a/core/proto/android/providers/settings/secure.proto
+++ b/core/proto/android/providers/settings/secure.proto
@@ -321,6 +321,7 @@ message SecureSettingsProto {
optional SettingProto badging = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto show_note_about_notification_hiding = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto in_call_notification_enabled = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto bubbles = 7 [ (android.privacy).dest = DEST_AUTOMATIC ];
}
optional Notification notification = 41;
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index c7b528c924dc..60b04cf6c77b 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -4411,8 +4411,8 @@
<permission android:name="android.permission.MONITOR_DEFAULT_SMS_PACKAGE"
android:protectionLevel="signature|privileged" />
- <!-- A subclass of {@link android.app.SmsAppService} must be protected with this permission. -->
- <permission android:name="android.permission.BIND_SMS_APP_SERVICE"
+ <!-- A subclass of {@link android.service.carrier.CarrierMessagingClientService} must be protected with this permission. -->
+ <permission android:name="android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE"
android:protectionLevel="signature" />
<!-- @hide Permission that allows configuring appops.
diff --git a/core/res/res/drawable-nodpi/stat_sys_adb.xml b/core/res/res/drawable-nodpi/stat_sys_adb.xml
index 0fde2cc2aba4..6839e39a87d6 100644
--- a/core/res/res/drawable-nodpi/stat_sys_adb.xml
+++ b/core/res/res/drawable-nodpi/stat_sys_adb.xml
@@ -1,11 +1,11 @@
<!--
-Copyright (C) 2018 The Android Open Source Project
+Copyright (C) 2019 The Android Open Source Project
- Licensed under the Apache License, Version 2.0 (the "License");
+ Licensed under the Apache License, Version 2 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
+ http://www.apache.org/licenses/LICENSE-2
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
@@ -13,24 +13,22 @@ Copyright (C) 2018 The Android Open Source Project
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:name="vector"
- android:width="48dp"
- android:height="48dp"
- android:viewportWidth="48"
- android:viewportHeight="48">
- <group android:name="stat_sys_adb">
- <path
- android:name="outer"
- android:pathData="M 18 30 L 24 30 C 29.523 30 34 25.523 34 20 C 34 14.477 29.523 10 24 10 C 18.477 10 14 14.477 14 20 L 14 44"
- android:strokeColor="#000000"
- android:strokeWidth="10"/>
- <path
- android:name="inner"
- android:pathData="M 19 30 L 24 30 C 29.523 30 34 25.523 34 20 C 34 14.477 29.523 10 24 10 C 18.477 10 14 14.477 14 20 L 14 44"
- android:strokeColor="#000000"
- android:strokeAlpha="0"
- android:strokeWidth="6"/>
- </group>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:pathData="M12,12m-7,0a7,7,0,1,1,14,0a7,7,0,1,1,-14,0"
+ android:strokeColor="#FF0000"
+ android:strokeWidth="4"/>
+ <path
+ android:pathData="M19,19 L12,12"
+ android:strokeLineCap="round"
+ android:strokeColor="#FF0000"
+ android:strokeWidth="4"
+ android:strokeAlpha=".5"/>
+ <path
+ android:pathData="M12,12m-2,0a2,2,0,1,1,4,0a2,2,0,1,1,-4,0"
+ android:fillColor="#FF0000"/>
</vector>
diff --git a/core/res/res/drawable/autofill_dataset_picker_background.xml b/core/res/res/drawable/autofill_dataset_picker_background.xml
index b5617e177feb..d57497037616 100644
--- a/core/res/res/drawable/autofill_dataset_picker_background.xml
+++ b/core/res/res/drawable/autofill_dataset_picker_background.xml
@@ -16,7 +16,7 @@
<inset xmlns:android="http://schemas.android.com/apk/res/android">
<shape android:shape="rectangle">
- <corners android:radius="2dp" />
+ <corners android:radius="@dimen/config_bottomDialogCornerRadius" />
<solid android:color="?attr/colorBackground" />
</shape>
</inset>
diff --git a/core/res/res/drawable/bottomsheet_background.xml b/core/res/res/drawable/bottomsheet_background.xml
new file mode 100644
index 000000000000..bc32ba6e3896
--- /dev/null
+++ b/core/res/res/drawable/bottomsheet_background.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2018 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android">
+ <corners
+ android:topLeftRadius="?attr/dialogCornerRadius"
+ android:topRightRadius="?attr/dialogCornerRadius" />
+ <solid android:color="?attr/colorBackgroundFloating" />
+</shape>
diff --git a/core/res/res/drawable/ic_drag_handle.xml b/core/res/res/drawable/ic_drag_handle.xml
new file mode 100644
index 000000000000..67ab84d4080d
--- /dev/null
+++ b/core/res/res/drawable/ic_drag_handle.xml
@@ -0,0 +1,23 @@
+<!--
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M20.0,9.0L4.0,9.0l0.0,2.0l16.0,0.0L20.0,9.0zM4.0,15.0l16.0,0.0l0.0,-2.0L4.0,13.0l0.0,2.0z"/>
+</vector> \ No newline at end of file
diff --git a/core/res/res/layout/chooser_grid.xml b/core/res/res/layout/chooser_grid.xml
index f78466168e13..14a5310a4ff2 100644
--- a/core/res/res/layout/chooser_grid.xml
+++ b/core/res/res/layout/chooser_grid.xml
@@ -25,11 +25,24 @@
android:maxCollapsedHeightSmall="56dp"
android:id="@id/contentPanel">
+
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alwaysShow="true"
- android:background="?attr/colorBackgroundFloating">
+ android:background="@drawable/bottomsheet_background">
+
+ <ImageView
+ android:id="@+id/drag"
+ android:layout_width="48dp"
+ android:layout_height="wrap_content"
+ android:src="@drawable/ic_drag_handle"
+ android:clickable="true"
+ android:paddingTop="@dimen/chooser_edge_margin_normal"
+ android:tint="?android:attr/textColorSecondary"
+ android:layout_centerHorizontal="true"
+ android:layout_alignParentTop="true" />
+
<TextView android:id="@+id/profile_button"
android:layout_width="wrap_content"
android:layout_height="48dp"
@@ -41,7 +54,7 @@
android:textAppearance="?attr/textAppearanceButton"
android:textColor="?attr/colorAccent"
android:gravity="center_vertical"
- android:layout_alignParentTop="true"
+ android:layout_below="@id/drag"
android:layout_alignParentRight="true"
android:singleLine="true"/>
@@ -207,7 +220,6 @@
android:clipToPadding="false"
android:scrollbarStyle="outsideOverlay"
android:background="?attr/colorBackgroundFloating"
- android:elevation="8dp"
android:listSelector="@color/transparent"
android:divider="@null"
android:scrollIndicators="top"
@@ -219,7 +231,7 @@
android:layout_alwaysShow="true"
android:background="?attr/colorBackgroundFloating"
android:text="@string/noApplications"
- android:padding="32dp"
+ android:padding="@dimen/chooser_edge_margin_normal"
android:gravity="center"
android:visibility="gone"/>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 759fc12dadae..881688bd00c0 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -164,6 +164,15 @@
provider.-->
<attr name="grantUriPermissions" format="boolean" />
+ <!-- If true, the system will always create URI permission grants
+ in the cases where {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION}
+ or {@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION} would apply.
+ This is useful for a content provider that dynamically enforces permissions
+ on calls in to the provider, instead of through the manifest: the system
+ needs to know that it should always apply permission grants, even if it
+ looks like the target of the grant would already have access to the URI. -->
+ <attr name="forceUriPermissions" format="boolean" />
+
<!-- Characterizes the potential risk implied in a permission and
indicates the procedure the system should follow when determining
whether to grant the permission to an application requesting it. {@link
@@ -2199,6 +2208,7 @@
<attr name="readPermission" />
<attr name="writePermission" />
<attr name="grantUriPermissions" />
+ <attr name="forceUriPermissions" />
<attr name="permission" />
<attr name="multiprocess" />
<attr name="initOrder" />
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 16c074484e2c..02fae4a2c1b3 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -199,8 +199,6 @@
<color name="Red_700">#ffc53929</color>
<color name="Red_800">#ffb93221</color>
- <color name="chooser_service_row_background_color">#fff5f5f5</color>
-
<!-- Status bar color for semi transparent mode. -->
<color name="system_bar_background_semi_transparent">#66000000</color> <!-- 40% black -->
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index d65ef03e98e0..9f4fece1ac74 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2632,6 +2632,7 @@
extractor must come first -->
<item>com.android.server.notification.NotificationChannelExtractor</item>
<item>com.android.server.notification.NotificationAdjustmentExtractor</item>
+ <item>com.android.server.notification.BubbleExtractor</item>
<!-- depends on AdjustmentExtractor-->
<item>com.android.server.notification.ValidateNotificationPeople</item>
<item>com.android.server.notification.PriorityExtractor</item>
@@ -3660,6 +3661,8 @@
<dimen name="config_dialogCornerRadius">2dp</dimen>
<!-- Corner radius of system buttons -->
<dimen name="config_buttonCornerRadius">@dimen/control_corner_material</dimen>
+ <!-- Corner radius for bottom sheet system dialogs -->
+ <dimen name="config_bottomDialogCornerRadius">@dimen/config_dialogCornerRadius</dimen>
<!-- Corner radius of system progress bars -->
<dimen name="config_progressBarCornerRadius">@dimen/progress_bar_corner_material</dimen>
<!-- Controls whether system buttons use all caps for text -->
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index e7d8102ff83e..f84f1f1bdb4f 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2938,6 +2938,7 @@
<public name="inheritShowWhenLocked" />
<public name="zygotePreloadName" />
<public name="useEmbeddedDex" />
+ <public name="forceUriPermissions" />
</public-group>
<public-group type="drawable" first-id="0x010800b4">
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 6d4b04c5e66a..401a7fec972a 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2744,7 +2744,6 @@
<java-symbol type="drawable" name="scroll_indicator_material" />
<java-symbol type="layout" name="chooser_row" />
- <java-symbol type="color" name="chooser_service_row_background_color" />
<java-symbol type="id" name="target_badge" />
<java-symbol type="bool" name="config_supportDoubleTapWake" />
<java-symbol type="drawable" name="ic_perm_device_info" />
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
index b6f56ada445e..3d59835a6719 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java
@@ -27,7 +27,9 @@ import static com.android.internal.app.ChooserWrapperActivity.sOverrides;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -43,6 +45,7 @@ import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
+import android.metrics.LogMaker;
import android.net.Uri;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -51,11 +54,14 @@ import androidx.test.rule.ActivityTestRule;
import com.android.internal.R;
import com.android.internal.app.ResolverActivity.ResolvedComponentInfo;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.nano.MetricsProto;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import java.util.ArrayList;
@@ -66,6 +72,11 @@ import java.util.List;
*/
@RunWith(AndroidJUnit4.class)
public class ChooserActivityTest {
+
+ private static final int CONTENT_PREVIEW_IMAGE = 1;
+ private static final int CONTENT_PREVIEW_FILE = 2;
+ private static final int CONTENT_PREVIEW_TEXT = 3;
+
@Rule
public ActivityTestRule<ChooserWrapperActivity> mActivityRule =
new ActivityTestRule<>(ChooserWrapperActivity.class, false,
@@ -402,16 +413,15 @@ public class ChooserActivityTest {
createResolvedComponentsForTestWithOtherProfile(1);
when(ChooserWrapperActivity.sOverrides.resolverListController.getResolversForIntent(
- Mockito.anyBoolean(),
- Mockito.anyBoolean(),
- Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
+ Mockito.anyBoolean(),
+ Mockito.anyBoolean(),
+ Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
final ChooserWrapperActivity activity = mActivityRule
.launchActivity(Intent.createChooser(sendIntent, null));
waitForIdle();
onView(withId(R.id.copy_button)).perform(click());
-
ClipboardManager clipboard = (ClipboardManager) activity.getSystemService(
Context.CLIPBOARD_SERVICE);
ClipData clipData = clipboard.getPrimaryClip();
@@ -488,8 +498,8 @@ public class ChooserActivityTest {
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
- Mockito.anyBoolean(),
- Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
+ Mockito.anyBoolean(),
+ Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
waitForIdle();
onView(withId(R.id.content_preview_image_1_large)).check(matches(isDisplayed()));
@@ -498,6 +508,93 @@ public class ChooserActivityTest {
onView(withId(R.id.content_preview_image_3_small)).check(matches(isDisplayed()));
}
+ @Test
+ public void testOnCreateLogging() {
+ Intent sendIntent = createSendTextIntent();
+ sendIntent.setType("TestType");
+
+ MetricsLogger mockLogger = sOverrides.metricsLogger;
+ ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class);
+ mActivityRule.launchActivity(Intent.createChooser(sendIntent, "logger test"));
+ waitForIdle();
+ verify(mockLogger, atLeastOnce()).write(logMakerCaptor.capture());
+ assertThat(logMakerCaptor.getAllValues().get(0).getCategory(),
+ is(MetricsProto.MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN));
+ assertThat(logMakerCaptor
+ .getAllValues().get(0)
+ .getTaggedData(MetricsProto.MetricsEvent.FIELD_TIME_TO_APP_TARGETS),
+ is(notNullValue()));
+ assertThat(logMakerCaptor
+ .getAllValues().get(0)
+ .getTaggedData(MetricsProto.MetricsEvent.FIELD_SHARESHEET_MIMETYPE),
+ is("TestType"));
+ }
+
+ @Test
+ public void testEmptyPreviewLogging() {
+ Intent sendIntent = createSendTextIntentWithPreview(null, null);
+
+ MetricsLogger mockLogger = sOverrides.metricsLogger;
+ ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class);
+ mActivityRule.launchActivity(Intent.createChooser(sendIntent, "empty preview logger test"));
+ waitForIdle();
+ verify(mockLogger, Mockito.times(2)).write(logMakerCaptor.capture());
+ // First invocation is from onCreate
+ assertThat(logMakerCaptor.getAllValues().get(1).getCategory(),
+ is(MetricsProto.MetricsEvent.ACTION_SHARE_WITH_PREVIEW));
+ assertThat(logMakerCaptor.getAllValues().get(1).getSubtype(),
+ is(CONTENT_PREVIEW_TEXT));
+ }
+
+ @Test
+ public void testTitlePreviewLogging() {
+ Intent sendIntent = createSendTextIntentWithPreview("TestTitle", null);
+
+ MetricsLogger mockLogger = sOverrides.metricsLogger;
+ ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class);
+ mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
+ waitForIdle();
+ verify(mockLogger, Mockito.times(2)).write(logMakerCaptor.capture());
+ // First invocation is from onCreate
+ assertThat(logMakerCaptor.getAllValues().get(1).getCategory(),
+ is(MetricsProto.MetricsEvent.ACTION_SHARE_WITH_PREVIEW));
+ assertThat(logMakerCaptor.getAllValues().get(1).getSubtype(),
+ is(CONTENT_PREVIEW_TEXT));
+ }
+
+ @Test
+ public void testImagePreviewLogging() {
+ Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/"
+ + com.android.frameworks.coretests.R.drawable.test320x240);
+
+ ArrayList<Uri> uris = new ArrayList<>();
+ uris.add(uri);
+
+ Intent sendIntent = createSendImageIntentWithPreview(uris);
+ sOverrides.previewThumbnail = createBitmap();
+
+ List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
+
+ when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(),
+ Mockito.anyBoolean(),
+ Mockito.isA(List.class))).thenReturn(resolvedComponentInfos);
+
+ MetricsLogger mockLogger = sOverrides.metricsLogger;
+ ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class);
+ mActivityRule.launchActivity(Intent.createChooser(sendIntent, null));
+ waitForIdle();
+ verify(mockLogger, Mockito.times(3)).write(logMakerCaptor.capture());
+ // First invocation is from onCreate
+ assertThat(logMakerCaptor.getAllValues().get(1).getCategory(),
+ is(MetricsProto.MetricsEvent.ACTION_SHARE_WITH_PREVIEW));
+ assertThat(logMakerCaptor.getAllValues().get(1).getSubtype(),
+ is(CONTENT_PREVIEW_IMAGE));
+ assertThat(logMakerCaptor.getAllValues().get(2).getCategory(),
+ is(MetricsProto.MetricsEvent.ACTION_SHARE_WITH_PREVIEW));
+ assertThat(logMakerCaptor.getAllValues().get(2).getSubtype(),
+ is(CONTENT_PREVIEW_IMAGE));
+ }
+
private Intent createSendTextIntent() {
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
index ec8122fb2e47..f60467bd3df2 100644
--- a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
+++ b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java
@@ -25,6 +25,8 @@ import android.graphics.Bitmap;
import android.net.Uri;
import android.util.Size;
+import com.android.internal.logging.MetricsLogger;
+
import java.util.function.Function;
public class ChooserWrapperActivity extends ChooserActivity {
@@ -94,6 +96,11 @@ public class ChooserWrapperActivity extends ChooserActivity {
return super.isImageType(mimeType);
}
+ @Override
+ protected MetricsLogger getMetricsLogger() {
+ return sOverrides.metricsLogger;
+ }
+
/**
* We cannot directly mock the activity created since instrumentation creates it.
* <p>
@@ -106,6 +113,7 @@ public class ChooserWrapperActivity extends ChooserActivity {
public ResolverListController resolverListController;
public Boolean isVoiceInteraction;
public Bitmap previewThumbnail;
+ public MetricsLogger metricsLogger;
public void reset() {
onSafelyStartCallback = null;
@@ -113,6 +121,7 @@ public class ChooserWrapperActivity extends ChooserActivity {
createPackageManager = null;
previewThumbnail = null;
resolverListController = mock(ResolverListController.class);
+ metricsLogger = mock(MetricsLogger.class);
}
}
}
diff --git a/graphics/java/android/graphics/FontFamily.java b/graphics/java/android/graphics/FontFamily.java
index 229923ca8202..5d8ba938f6d5 100644
--- a/graphics/java/android/graphics/FontFamily.java
+++ b/graphics/java/android/graphics/FontFamily.java
@@ -36,7 +36,10 @@ import java.nio.channels.FileChannel;
* A family of typefaces with different styles.
*
* @hide
+ *
+ * @deprecated Use {@link android.graphics.fonts.FontFamily} instead.
*/
+@Deprecated
public class FontFamily {
private static String TAG = "FontFamily";
@@ -51,20 +54,28 @@ public class FontFamily {
/**
* @hide
+ *
+ * This cannot be deleted because it's in use by AndroidX.
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(trackingBug = 123768928)
public long mNativePtr;
// Points native font family builder. Must be zero after freezing this family.
private long mBuilderPtr;
- @UnsupportedAppUsage
+ /**
+ * This cannot be deleted because it's in use by AndroidX.
+ */
+ @UnsupportedAppUsage(trackingBug = 123768928)
public FontFamily() {
mBuilderPtr = nInitBuilder(null, 0);
mNativeBuilderCleaner = sBuilderRegistry.registerNativeAllocation(this, mBuilderPtr);
}
- @UnsupportedAppUsage
+ /**
+ * This cannot be deleted because it's in use by AndroidX.
+ */
+ @UnsupportedAppUsage(trackingBug = 123768928)
public FontFamily(@Nullable String[] langs, int variant) {
final String langsString;
if (langs == null || langs.length == 0) {
@@ -83,8 +94,10 @@ public class FontFamily {
*
* @return boolean returns false if some error happens in native code, e.g. broken font file is
* passed, etc.
+ *
+ * This cannot be deleted because it's in use by AndroidX.
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(trackingBug = 123768928)
public boolean freeze() {
if (mBuilderPtr == 0) {
throw new IllegalStateException("This FontFamily is already frozen");
@@ -98,7 +111,10 @@ public class FontFamily {
return mNativePtr != 0;
}
- @UnsupportedAppUsage
+ /**
+ * This cannot be deleted because it's in use by AndroidX.
+ */
+ @UnsupportedAppUsage(trackingBug = 123768928)
public void abortCreation() {
if (mBuilderPtr == 0) {
throw new IllegalStateException("This FontFamily is already frozen or abandoned");
@@ -107,6 +123,10 @@ public class FontFamily {
mBuilderPtr = 0;
}
+ /**
+ * This cannot be deleted because it's in use by AndroidX.
+ */
+ @UnsupportedAppUsage(trackingBug = 123768928)
public boolean addFont(String path, int ttcIndex, FontVariationAxis[] axes, int weight,
int italic) {
if (mBuilderPtr == 0) {
@@ -128,7 +148,10 @@ public class FontFamily {
}
}
- @UnsupportedAppUsage
+ /**
+ * This cannot be deleted because it's in use by AndroidX.
+ */
+ @UnsupportedAppUsage(trackingBug = 123768928)
public boolean addFontFromBuffer(ByteBuffer font, int ttcIndex, FontVariationAxis[] axes,
int weight, int italic) {
if (mBuilderPtr == 0) {
@@ -153,8 +176,10 @@ public class FontFamily {
* @param isItalic Whether this font is italic. If the weight is set to 0, this will be resolved
* using the OS/2 table in the font.
* @return
+ *
+ * This cannot be deleted because it's in use by AndroidX.
*/
- @UnsupportedAppUsage
+ @UnsupportedAppUsage(trackingBug = 123768928)
public boolean addFontFromAssetManager(AssetManager mgr, String path, int cookie,
boolean isAsset, int ttcIndex, int weight, int isItalic,
FontVariationAxis[] axes) {
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index 91b9e24aaa66..bb04ff3cc9ff 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -131,7 +131,11 @@ public class Typeface {
static final Map<String, Typeface> sSystemFontMap;
// We cannot support sSystemFallbackMap since we will migrate to public FontFamily API.
+ /**
+ * @deprecated Use {@link android.graphics.fonts.FontFamily} instead.
+ */
@UnsupportedAppUsage
+ @Deprecated
static final Map<String, android.graphics.FontFamily[]> sSystemFallbackMap =
Collections.emptyMap();
@@ -1025,8 +1029,11 @@ public class Typeface {
/**
* This method is used by supportlib-v27.
+ *
+ * @deprecated Use {@link android.graphics.fonts.FontFamily} instead.
*/
@UnsupportedAppUsage(trackingBug = 123768395)
+ @Deprecated
private static Typeface createFromFamiliesWithDefault(
android.graphics.FontFamily[] families, int weight, int italic) {
return createFromFamiliesWithDefault(families, DEFAULT_FAMILY, weight, italic);
@@ -1044,8 +1051,11 @@ public class Typeface {
* the first family's font is used. If the first family has multiple fonts, the
* closest to the regular weight and upright font is used.
* @param families array of font families
+ *
+ * @deprecated Use {@link android.graphics.fonts.FontFamily} instead.
*/
@UnsupportedAppUsage
+ @Deprecated
private static Typeface createFromFamiliesWithDefault(android.graphics.FontFamily[] families,
String fallbackName, int weight, int italic) {
android.graphics.fonts.FontFamily[] fallback = SystemFonts.getSystemFallback(fallbackName);
diff --git a/libs/androidfw/LoadedArsc.cpp b/libs/androidfw/LoadedArsc.cpp
index 70ce9bc705ef..bdd47061054a 100644
--- a/libs/androidfw/LoadedArsc.cpp
+++ b/libs/androidfw/LoadedArsc.cpp
@@ -633,6 +633,7 @@ std::unique_ptr<const LoadedPackage> LoadedPackage::Load(const Chunk& chunk,
overlayable_info.actor = actor;
overlayable_info.policy_flags = policy_header->policy_flags;
loaded_package->overlayable_infos_.push_back(std::make_pair(overlayable_info, ids));
+ loaded_package->defines_overlayable_ = true;
break;
}
diff --git a/libs/androidfw/include/androidfw/LoadedArsc.h b/libs/androidfw/include/androidfw/LoadedArsc.h
index be62f30617bf..b5f4006dbb00 100644
--- a/libs/androidfw/include/androidfw/LoadedArsc.h
+++ b/libs/androidfw/include/androidfw/LoadedArsc.h
@@ -223,7 +223,7 @@ class LoadedPackage {
}
}
- // Retrieve the overlayable properties of the specified resource. If the resource is not
+ // Retrieves the overlayable properties of the specified resource. If the resource is not
// overlayable, this will return a null pointer.
const OverlayableInfo* GetOverlayableInfo(uint32_t resid) const {
for (const std::pair<OverlayableInfo, std::unordered_set<uint32_t>>& overlayable_info_ids
@@ -235,6 +235,13 @@ class LoadedPackage {
return nullptr;
}
+ // Retrieves whether or not the package defines overlayable resources.
+ // TODO(123905379): Remove this when the enforcement of overlayable is turned on for all APK and
+ // not just those that defined overlayable resources.
+ bool DefinesOverlayable() const {
+ return defines_overlayable_;
+ }
+
private:
DISALLOW_COPY_AND_ASSIGN(LoadedPackage);
@@ -248,6 +255,7 @@ class LoadedPackage {
bool dynamic_ = false;
bool system_ = false;
bool overlay_ = false;
+ bool defines_overlayable_ = false;
ByteBucketArray<TypeSpecPtr> type_specs_;
ByteBucketArray<uint32_t> resource_ids_;
diff --git a/libs/hwui/hwui/MinikinSkia.cpp b/libs/hwui/hwui/MinikinSkia.cpp
index 375f5bc9df37..6a12a203b9f8 100644
--- a/libs/hwui/hwui/MinikinSkia.cpp
+++ b/libs/hwui/hwui/MinikinSkia.cpp
@@ -65,6 +65,15 @@ float MinikinFontSkia::GetHorizontalAdvance(uint32_t glyph_id, const minikin::Mi
return skWidth;
}
+void MinikinFontSkia::GetHorizontalAdvances(uint16_t* glyph_ids, uint32_t count,
+ const minikin::MinikinPaint& paint,
+ const minikin::FontFakery& fakery,
+ float* outAdvances) const {
+ SkFont skFont;
+ MinikinFontSkia_SetSkiaFont(this, &skFont, paint, fakery);
+ skFont.getWidths(glyph_ids, count, outAdvances);
+}
+
void MinikinFontSkia::GetBounds(minikin::MinikinRect* bounds, uint32_t glyph_id,
const minikin::MinikinPaint& paint,
const minikin::FontFakery& fakery) const {
diff --git a/libs/hwui/hwui/MinikinSkia.h b/libs/hwui/hwui/MinikinSkia.h
index ad46b2391cac..90f7d48a47ee 100644
--- a/libs/hwui/hwui/MinikinSkia.h
+++ b/libs/hwui/hwui/MinikinSkia.h
@@ -35,6 +35,11 @@ public:
float GetHorizontalAdvance(uint32_t glyph_id, const minikin::MinikinPaint& paint,
const minikin::FontFakery& fakery) const override;
+ void GetHorizontalAdvances(uint16_t* glyph_ids, uint32_t count,
+ const minikin::MinikinPaint& paint,
+ const minikin::FontFakery& fakery,
+ float* outAdvances) const override;
+
void GetBounds(minikin::MinikinRect* bounds, uint32_t glyph_id,
const minikin::MinikinPaint& paint,
const minikin::FontFakery& fakery) const override;
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp
index 3b37c83a6acc..1f24f0e64eab 100644
--- a/libs/hwui/renderthread/RenderThread.cpp
+++ b/libs/hwui/renderthread/RenderThread.cpp
@@ -56,7 +56,7 @@ static const nsecs_t DISPATCH_FRAME_CALLBACKS_DELAY = milliseconds_to_nanosecond
static bool gHasRenderThreadInstance = false;
-static void (*gOnStartHook)() = nullptr;
+static JVMAttachHook gOnStartHook = nullptr;
class DisplayEventReceiverWrapper : public VsyncSource {
public:
@@ -111,11 +111,15 @@ bool RenderThread::hasInstance() {
return gHasRenderThreadInstance;
}
-void RenderThread::setOnStartHook(void (*onStartHook)()) {
+void RenderThread::setOnStartHook(JVMAttachHook onStartHook) {
LOG_ALWAYS_FATAL_IF(hasInstance(), "can't set an onStartHook after we've started...");
gOnStartHook = onStartHook;
}
+JVMAttachHook RenderThread::getOnStartHook() {
+ return gOnStartHook;
+}
+
RenderThread& RenderThread::getInstance() {
// This is a pointer because otherwise __cxa_finalize
// will try to delete it like a Good Citizen but that causes us to crash
diff --git a/libs/hwui/renderthread/RenderThread.h b/libs/hwui/renderthread/RenderThread.h
index 1ef83fb26c14..d062dba288fc 100644
--- a/libs/hwui/renderthread/RenderThread.h
+++ b/libs/hwui/renderthread/RenderThread.h
@@ -75,12 +75,15 @@ struct VsyncSource {
class DummyVsyncSource;
+typedef void (*JVMAttachHook)();
+
class RenderThread : private ThreadBase {
PREVENT_COPY_AND_ASSIGN(RenderThread);
public:
// Sets a callback that fires before any RenderThread setup has occurred.
- ANDROID_API static void setOnStartHook(void (*onStartHook)());
+ ANDROID_API static void setOnStartHook(JVMAttachHook onStartHook);
+ static JVMAttachHook getOnStartHook();
WorkQueue& queue() { return ThreadBase::queue(); }
diff --git a/libs/hwui/thread/TaskManager.cpp b/libs/hwui/thread/TaskManager.cpp
index 26ff6ebad3b4..6493d495716e 100644
--- a/libs/hwui/thread/TaskManager.cpp
+++ b/libs/hwui/thread/TaskManager.cpp
@@ -21,6 +21,7 @@
#include "TaskManager.h"
#include "TaskProcessor.h"
#include "utils/MathUtils.h"
+#include "renderthread/RenderThread.h"
namespace android {
namespace uirenderer {
@@ -84,6 +85,11 @@ bool TaskManager::addTaskBase(const sp<TaskBase>& task, const sp<TaskProcessorBa
status_t TaskManager::WorkerThread::readyToRun() {
setpriority(PRIO_PROCESS, 0, PRIORITY_FOREGROUND);
+ auto onStartHook = renderthread::RenderThread::getOnStartHook();
+ if (onStartHook) {
+ onStartHook();
+ }
+
return NO_ERROR;
}
diff --git a/libs/hwui/thread/TaskManager.h b/libs/hwui/thread/TaskManager.h
index c4c1291e755c..6c67222a12d7 100644
--- a/libs/hwui/thread/TaskManager.h
+++ b/libs/hwui/thread/TaskManager.h
@@ -77,7 +77,8 @@ private:
class WorkerThread : public Thread {
public:
- explicit WorkerThread(const String8& name) : mSignal(Condition::WAKE_UP_ONE), mName(name) {}
+ explicit WorkerThread(const String8& name)
+ : Thread(false), mSignal(Condition::WAKE_UP_ONE), mName(name) {}
bool addTask(const TaskWrapper& task);
size_t getTaskCount() const;
diff --git a/media/apex/java/android/media/MediaPlayer2.java b/media/apex/java/android/media/MediaPlayer2.java
index f7afa31e6173..c38a83131a6c 100644
--- a/media/apex/java/android/media/MediaPlayer2.java
+++ b/media/apex/java/android/media/MediaPlayer2.java
@@ -63,6 +63,8 @@ import java.net.URL;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
@@ -414,6 +416,7 @@ public class MediaPlayer2 implements AutoCloseable
synchronized (mDrmEventCallbackLock) {
mDrmEventCallback = null;
}
+ clearMediaDrmObjects();
native_release();
@@ -424,6 +427,16 @@ public class MediaPlayer2 implements AutoCloseable
mReleased = true;
}
+ void clearMediaDrmObjects() {
+ Collection<MediaDrm> drmObjs = mDrmObjs.values();
+ synchronized (mDrmObjs) {
+ for (MediaDrm drmObj : drmObjs) {
+ drmObj.close();
+ }
+ mDrmObjs.clear();
+ }
+ }
+
private native void native_release();
// Have to declare protected for finalize() since it is protected
@@ -448,6 +461,7 @@ public class MediaPlayer2 implements AutoCloseable
// This is a synchronous call.
public void reset() {
clearSourceInfos();
+ clearMediaDrmObjects();
stayAwake(false);
native_reset();
@@ -4510,7 +4524,7 @@ public class MediaPlayer2 implements AutoCloseable
};
// Modular DRM
- private final Map<UUID, MediaDrm> mDrmObjs = new HashMap<>();
+ private final Map<UUID, MediaDrm> mDrmObjs = Collections.synchronizedMap(new HashMap<>());
private class DrmHandle {
static final int PROVISION_TIMEOUT_MS = 60000;
@@ -4897,10 +4911,6 @@ public class MediaPlayer2 implements AutoCloseable
mDrmObj.closeSession(mDrmSessionId);
mDrmSessionId = null;
}
- if (mDrmObj != null) {
- mDrmObj.close();
- mDrmObj = null;
- }
}
void release() throws NoDrmSchemeException {
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index b9088d417dad..31d22327c79f 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -31,6 +31,8 @@ import android.system.OsConstants;
import android.util.Log;
import android.util.Pair;
+import com.android.internal.util.ArrayUtils;
+
import libcore.io.IoUtils;
import libcore.io.Streams;
@@ -395,6 +397,12 @@ public class ExifInterface {
* http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/PanasonicRaw.html
*/
public static final String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw";
+ /**
+ * Type is byte[]. See <a href=
+ * "https://en.wikipedia.org/wiki/Extensible_Metadata_Platform">Extensible
+ * Metadata Platform (XMP)</a> for details on contents.
+ */
+ public static final String TAG_XMP = "Xmp";
/**
* Private tags used for pointing the other IFD offsets.
@@ -1012,7 +1020,8 @@ public class ExifInterface {
new ExifTag(TAG_RW2_SENSOR_BOTTOM_BORDER, 6, IFD_FORMAT_ULONG),
new ExifTag(TAG_RW2_SENSOR_RIGHT_BORDER, 7, IFD_FORMAT_ULONG),
new ExifTag(TAG_RW2_ISO, 23, IFD_FORMAT_USHORT),
- new ExifTag(TAG_RW2_JPG_FROM_RAW, 46, IFD_FORMAT_UNDEFINED)
+ new ExifTag(TAG_RW2_JPG_FROM_RAW, 46, IFD_FORMAT_UNDEFINED),
+ new ExifTag(TAG_XMP, 700, IFD_FORMAT_BYTE),
};
// Primary image IFD Exif Private tags (See JEITA CP-3451C Section 4.6.8 Tag Support Levels)
@@ -1243,6 +1252,8 @@ public class ExifInterface {
private static final Charset ASCII = Charset.forName("US-ASCII");
// Identifier for EXIF APP1 segment in JPEG
private static final byte[] IDENTIFIER_EXIF_APP1 = "Exif\0\0".getBytes(ASCII);
+ // Identifier for XMP APP1 segment in JPEG
+ private static final byte[] IDENTIFIER_XMP_APP1 = "http://ns.adobe.com/xap/1.0/\0".getBytes(ASCII);
// JPEG segment markers, that each marker consumes two bytes beginning with 0xff and ending with
// the indicator. There is no SOF4, SOF8, SOF16 markers in JPEG and SOFx markers indicates start
// of frame(baseline DCT) and the image size info exists in its beginning part.
@@ -2046,6 +2057,22 @@ public class ExifInterface {
}
/**
+ * Returns the raw bytes for the value of the requested tag inside the image
+ * file, or {@code null} if the tag is not contained.
+ *
+ * @return raw bytes for the value of the requested tag, or {@code null} if
+ * no tag was found.
+ */
+ public @Nullable byte[] getAttributeBytes(@NonNull String tag) {
+ final ExifAttribute attribute = getExifAttribute(tag);
+ if (attribute != null) {
+ return attribute.bytes;
+ } else {
+ return null;
+ }
+ }
+
+ /**
* Stores the latitude and longitude value in a float array. The first element is
* the latitude, and the second element is the longitude. Returns false if the
* Exif tags are not available.
@@ -2432,40 +2459,32 @@ public class ExifInterface {
}
switch (marker) {
case MARKER_APP1: {
- if (DEBUG) {
- Log.d(TAG, "MARKER_APP1");
- }
- if (length < 6) {
- // Skip if it's not an EXIF APP1 segment.
- break;
- }
- byte[] identifier = new byte[6];
- if (in.read(identifier) != 6) {
- throw new IOException("Invalid exif");
- }
- bytesRead += 6;
- length -= 6;
- if (!Arrays.equals(identifier, IDENTIFIER_EXIF_APP1)) {
- // Skip if it's not an EXIF APP1 segment.
- break;
- }
- if (length <= 0) {
- throw new IOException("Invalid exif");
- }
- if (DEBUG) {
- Log.d(TAG, "readExifSegment with a byte array (length: " + length + ")");
- }
- // Save offset values for createJpegThumbnailBitmap() function
- mExifOffset = bytesRead;
-
- byte[] bytes = new byte[length];
- if (in.read(bytes) != length) {
- throw new IOException("Invalid exif");
- }
+ final int start = bytesRead;
+ final byte[] bytes = new byte[length];
+ in.readFully(bytes);
bytesRead += length;
length = 0;
- readExifSegment(bytes, imageType);
+ if (ArrayUtils.startsWith(bytes, IDENTIFIER_EXIF_APP1)) {
+ final long offset = start + IDENTIFIER_EXIF_APP1.length;
+ final byte[] value = Arrays.copyOfRange(bytes,
+ IDENTIFIER_EXIF_APP1.length, bytes.length);
+
+ readExifSegment(value, imageType);
+
+ // Save offset values for createJpegThumbnailBitmap() function
+ mExifOffset = (int) offset;
+ } else if (ArrayUtils.startsWith(bytes, IDENTIFIER_XMP_APP1)) {
+ // See XMP Specification Part 3: Storage in Files, 1.1.3 JPEG, Table 6
+ final long offset = start + IDENTIFIER_XMP_APP1.length;
+ final byte[] value = Arrays.copyOfRange(bytes,
+ IDENTIFIER_XMP_APP1.length, bytes.length);
+
+ if (getAttribute(TAG_XMP) == null) {
+ mAttributes[IFD_TYPE_PRIMARY].put(TAG_XMP, new ExifAttribute(
+ IFD_FORMAT_BYTE, value.length, offset, value));
+ }
+ }
break;
}
diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java
index 4ca0216c80f2..a76cf1f6ba25 100644
--- a/media/java/android/media/MediaFormat.java
+++ b/media/java/android/media/MediaFormat.java
@@ -470,7 +470,6 @@ public final class MediaFormat {
* The associated value is a float, representing the max frame rate to
* feed the encoder at.
*
- * @hide
*/
public static final String KEY_MAX_FPS_TO_ENCODER
= "max-fps-to-encoder";
@@ -495,7 +494,6 @@ public final class MediaFormat {
* important to ensure all frames are captured (rather than captured in the
* correct order).
*
- * @hide
*/
public static final String KEY_MAX_PTS_GAP_TO_ENCODER
= "max-pts-gap-to-encoder";
diff --git a/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java b/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java
index 7ba0f7ac1d30..f95891cc8962 100644
--- a/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java
+++ b/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java
@@ -15,6 +15,7 @@
*/
package android.ext.services.notification;
+import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
import static android.app.NotificationManager.IMPORTANCE_MIN;
@@ -91,7 +92,7 @@ public class NotificationCategorizer {
}
// TODO: is from signature app
if (entry.getSbn().getUid() < Process.FIRST_APPLICATION_UID) {
- if (entry.getImportance() >= IMPORTANCE_HIGH) {
+ if (entry.getImportance() >= IMPORTANCE_DEFAULT) {
return CATEGORY_SYSTEM;
} else {
return CATEGORY_SYSTEM_LOW;
diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java
index c59885e9f4d2..05af6e7a7b71 100644
--- a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java
+++ b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java
@@ -18,6 +18,7 @@ package android.ext.services.notification;
import static android.app.NotificationManager.IMPORTANCE_DEFAULT;
import static android.app.NotificationManager.IMPORTANCE_HIGH;
+import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_MIN;
import static android.os.Process.FIRST_APPLICATION_UID;
@@ -172,23 +173,23 @@ public class NotificationCategorizerTest {
public void testSystemCategory() {
NotificationCategorizer nc = new NotificationCategorizer();
- when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_HIGH));
- when(mEntry.getImportance()).thenReturn(IMPORTANCE_HIGH);
+ when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT));
+ when(mEntry.getImportance()).thenReturn(IMPORTANCE_DEFAULT);
when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID - 1);
assertEquals(NotificationCategorizer.CATEGORY_SYSTEM, nc.getCategory(mEntry));
assertFalse(nc.shouldSilence(NotificationCategorizer.CATEGORY_SYSTEM));
when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID);
- assertEquals(NotificationCategorizer.CATEGORY_HIGH, nc.getCategory(mEntry));
+ assertEquals(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE, nc.getCategory(mEntry));
}
@Test
public void testSystemLowCategory() {
NotificationCategorizer nc = new NotificationCategorizer();
- when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT));
- when(mEntry.getImportance()).thenReturn(IMPORTANCE_DEFAULT);
+ when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_LOW));
+ when(mEntry.getImportance()).thenReturn(IMPORTANCE_LOW);
when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID - 1);
assertEquals(NotificationCategorizer.CATEGORY_SYSTEM_LOW, nc.getCategory(mEntry));
diff --git a/packages/NetworkStack/OWNERS b/packages/NetworkStack/OWNERS
new file mode 100644
index 000000000000..a395465e5f21
--- /dev/null
+++ b/packages/NetworkStack/OWNERS
@@ -0,0 +1,5 @@
+codewiz@google.com
+jchalard@google.com
+lorenzo@google.com
+reminv@google.com
+satk@google.com
diff --git a/packages/NetworkStack/src/android/net/apf/ApfFilter.java b/packages/NetworkStack/src/android/net/apf/ApfFilter.java
index 4fa7d6462092..923f162c92a6 100644
--- a/packages/NetworkStack/src/android/net/apf/ApfFilter.java
+++ b/packages/NetworkStack/src/android/net/apf/ApfFilter.java
@@ -23,6 +23,7 @@ import static android.system.OsConstants.ETH_P_ARP;
import static android.system.OsConstants.ETH_P_IP;
import static android.system.OsConstants.ETH_P_IPV6;
import static android.system.OsConstants.IPPROTO_ICMPV6;
+import static android.system.OsConstants.IPPROTO_TCP;
import static android.system.OsConstants.IPPROTO_UDP;
import static android.system.OsConstants.SOCK_RAW;
@@ -38,6 +39,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.net.LinkAddress;
import android.net.LinkProperties;
+import android.net.TcpKeepalivePacketDataParcelable;
import android.net.apf.ApfGenerator.IllegalInstructionException;
import android.net.apf.ApfGenerator.Register;
import android.net.ip.IpClient.IpClientCallbacksWrapper;
@@ -55,6 +57,7 @@ import android.system.Os;
import android.text.format.DateUtils;
import android.util.Log;
import android.util.Pair;
+import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -149,7 +152,9 @@ public class ApfFilter {
DROPPED_IPV6_NON_ICMP_MULTICAST,
DROPPED_802_3_FRAME,
DROPPED_ETHERTYPE_BLACKLISTED,
- DROPPED_ARP_REPLY_SPA_NO_HOST;
+ DROPPED_ARP_REPLY_SPA_NO_HOST,
+ DROPPED_IPV4_KEEPALIVE_ACK,
+ DROPPED_IPV6_KEEPALIVE_ACK;
// Returns the negative byte offset from the end of the APF data segment for
// a given counter.
@@ -285,6 +290,7 @@ public class ApfFilter {
private static final int IPV4_DEST_ADDR_OFFSET = ETH_HEADER_LEN + 16;
private static final int IPV4_ANY_HOST_ADDRESS = 0;
private static final int IPV4_BROADCAST_ADDRESS = -1; // 255.255.255.255
+ private static final int IPV4_HEADER_LEN = 20; // Without options
// Traffic class and Flow label are not byte aligned. Luckily we
// don't care about either value so we'll consider bytes 1-3 of the
@@ -305,6 +311,8 @@ public class ApfFilter {
private static final int UDP_DESTINATION_PORT_OFFSET = ETH_HEADER_LEN + 2;
private static final int UDP_HEADER_LEN = 8;
+ private static final int TCP_HEADER_SIZE_OFFSET = 12;
+
private static final int DHCP_CLIENT_PORT = 68;
// NOTE: this must be added to the IPv4 header length in IPV4_HEADER_SIZE_MEMORY_SLOT
private static final int DHCP_CLIENT_MAC_OFFSET = ETH_HEADER_LEN + UDP_HEADER_LEN + 28;
@@ -788,7 +796,7 @@ public class ApfFilter {
boolean isExpired() {
// TODO: We may want to handle 0 lifetime RAs differently, if they are common. We'll
- // have to calculte the filter lifetime specially as a fraction of 0 is still 0.
+ // have to calculate the filter lifetime specially as a fraction of 0 is still 0.
return currentLifetime() <= 0;
}
@@ -847,11 +855,147 @@ public class ApfFilter {
}
}
+ // A class to hold keepalive ack information.
+ private abstract static class TcpKeepaliveAck {
+ // Note that the offset starts from IP header.
+ // These must be added ether header length when generating program.
+ static final int IP_HEADER_OFFSET = 0;
+
+ protected static class TcpKeepaliveAckData {
+ public final byte[] srcAddress;
+ public final int srcPort;
+ public final byte[] dstAddress;
+ public final int dstPort;
+ public final int seq;
+ public final int ack;
+ // Create the characteristics of the ack packet from the sent keepalive packet.
+ TcpKeepaliveAckData(final TcpKeepalivePacketDataParcelable sentKeepalivePacket) {
+ srcAddress = sentKeepalivePacket.dstAddress;
+ srcPort = sentKeepalivePacket.dstPort;
+ dstAddress = sentKeepalivePacket.srcAddress;
+ dstPort = sentKeepalivePacket.srcPort;
+ seq = sentKeepalivePacket.ack;
+ ack = sentKeepalivePacket.seq + 1;
+ }
+ }
+
+ protected final TcpKeepaliveAckData mPacket;
+ protected final byte[] mSrcDstAddr;
+
+ TcpKeepaliveAck(final TcpKeepaliveAckData packet, final byte[] srcDstAddr) {
+ mPacket = packet;
+ mSrcDstAddr = srcDstAddr;
+ }
+
+ static byte[] concatArrays(final byte[]... arr) {
+ int size = 0;
+ for (byte[] a : arr) {
+ size += a.length;
+ }
+ final byte[] result = new byte[size];
+ int offset = 0;
+ for (byte[] a : arr) {
+ System.arraycopy(a, 0, result, offset, a.length);
+ offset += a.length;
+ }
+ return result;
+ }
+
+ public String toString() {
+ return String.format("%s(%d) -> %s(%d), seq=%d, ack=%d",
+ mPacket.srcAddress,
+ mPacket.srcPort,
+ mPacket.dstAddress,
+ mPacket.dstPort,
+ mPacket.seq,
+ mPacket.ack);
+ }
+
+ // Append a filter for this keepalive ack to {@code gen}.
+ // Jump to drop if it matches the keepalive ack.
+ // Jump to the next filter if packet doesn't match the keepalive ack.
+ abstract void generateFilterLocked(ApfGenerator gen) throws IllegalInstructionException;
+ }
+
+ private class TcpKeepaliveAckV4 extends TcpKeepaliveAck {
+ private static final int IPV4_SRC_ADDR_OFFSET = IP_HEADER_OFFSET + 12;
+ private static final int IPV4_TCP_SRC_PORT_OFFSET = 0;
+ private static final int IPV4_TCP_DST_PORT_OFFSET = 2;
+ private static final int IPV4_TCP_SEQ_OFFSET = 4;
+ private static final int IPV4_TCP_ACK_OFFSET = 8;
+
+ TcpKeepaliveAckV4(final TcpKeepalivePacketDataParcelable sentKeepalivePacket) {
+ this(new TcpKeepaliveAckData(sentKeepalivePacket));
+ }
+ TcpKeepaliveAckV4(final TcpKeepaliveAckData packet) {
+ super(packet, concatArrays(packet.srcAddress, packet.dstAddress) /* srcDstAddr */);
+ }
+
+ @Override
+ void generateFilterLocked(ApfGenerator gen) throws IllegalInstructionException {
+ final String nextFilterLabel = "keepalive_ack" + getUniqueNumberLocked();
+ gen.addLoad8(Register.R0, IPV4_PROTOCOL_OFFSET);
+ gen.addJumpIfR0NotEquals(IPPROTO_TCP, nextFilterLabel);
+ gen.addLoadImmediate(Register.R0, ETH_HEADER_LEN + IPV4_SRC_ADDR_OFFSET);
+ gen.addJumpIfBytesNotEqual(Register.R0, mSrcDstAddr, nextFilterLabel);
+
+ // Pass the packet if it's not zero-sized :
+ // Load the IP header size into R1
+ gen.addLoadFromMemory(Register.R1, gen.IPV4_HEADER_SIZE_MEMORY_SLOT);
+ // Load the TCP header size into R0 (it's indexed by R1)
+ gen.addLoad8Indexed(Register.R0, ETH_HEADER_LEN + TCP_HEADER_SIZE_OFFSET);
+ // Size offset is in the top nibble, but it must be multiplied by 4, and the two
+ // top bits of the low nibble are guaranteed to be zeroes. Right-shift R0 by 2.
+ gen.addRightShift(2);
+ // R0 += R1 -> R0 contains TCP + IP headers lenght
+ gen.addAddR1();
+ // Add the Ethernet header length to R0.
+ gen.addLoadImmediate(Register.R1, ETH_HEADER_LEN);
+ gen.addAddR1();
+ // Compare total length of headers to the size of the packet.
+ gen.addLoadFromMemory(Register.R1, gen.PACKET_SIZE_MEMORY_SLOT);
+ gen.addNeg(Register.R0);
+ gen.addAddR1();
+ gen.addJumpIfR0NotEquals(0, nextFilterLabel);
+
+ // Add IPv4 header length
+ gen.addLoadFromMemory(Register.R1, gen.IPV4_HEADER_SIZE_MEMORY_SLOT);
+ gen.addLoad16Indexed(Register.R0, ETH_HEADER_LEN + IPV4_TCP_SRC_PORT_OFFSET);
+ gen.addJumpIfR0NotEquals(mPacket.srcPort, nextFilterLabel);
+ gen.addLoad16Indexed(Register.R0, ETH_HEADER_LEN + IPV4_TCP_DST_PORT_OFFSET);
+ gen.addJumpIfR0NotEquals(mPacket.dstPort, nextFilterLabel);
+ gen.addLoad32Indexed(Register.R0, ETH_HEADER_LEN + IPV4_TCP_SEQ_OFFSET);
+ gen.addJumpIfR0NotEquals(mPacket.seq, nextFilterLabel);
+ gen.addLoad32Indexed(Register.R0, ETH_HEADER_LEN + IPV4_TCP_ACK_OFFSET);
+ gen.addJumpIfR0NotEquals(mPacket.ack, nextFilterLabel);
+
+ maybeSetupCounter(gen, Counter.DROPPED_IPV4_KEEPALIVE_ACK);
+ gen.addJump(mCountAndDropLabel);
+ gen.defineLabel(nextFilterLabel);
+ }
+ }
+
+ private class TcpKeepaliveAckV6 extends TcpKeepaliveAck {
+ TcpKeepaliveAckV6(final TcpKeepalivePacketDataParcelable sentKeepalivePacket) {
+ this(new TcpKeepaliveAckData(sentKeepalivePacket));
+ }
+ TcpKeepaliveAckV6(final TcpKeepaliveAckData packet) {
+ super(packet, concatArrays(packet.srcAddress, packet.dstAddress) /* srcDstAddr */);
+ }
+
+ @Override
+ void generateFilterLocked(ApfGenerator gen) throws IllegalInstructionException {
+ throw new UnsupportedOperationException("IPv6 Keepalive is not supported yet");
+ }
+ }
+
// Maximum number of RAs to filter for.
private static final int MAX_RAS = 10;
@GuardedBy("this")
- private ArrayList<Ra> mRas = new ArrayList<Ra>();
+ private ArrayList<Ra> mRas = new ArrayList<>();
+ @GuardedBy("this")
+ private SparseArray<TcpKeepaliveAck> mKeepaliveAcks = new SparseArray<>();
// There is always some marginal benefit to updating the installed APF program when an RA is
// seen because we can extend the program's lifetime slightly, but there is some cost to
@@ -980,6 +1124,8 @@ public class ApfFilter {
// drop
// if it's IPv4 broadcast:
// drop
+ // if keepalive ack
+ // drop
// pass
if (mMulticastFilter) {
@@ -1023,6 +1169,9 @@ public class ApfFilter {
gen.addJumpIfR0Equals(broadcastAddr, mCountAndDropLabel);
}
+ // If any keepalive filters,
+ generateKeepaliveFilter(gen);
+
// If L2 broadcast packet, drop.
// TODO: can we invert this condition to fall through to the common pass case below?
maybeSetupCounter(gen, Counter.PASSED_IPV4_UNICAST);
@@ -1030,6 +1179,8 @@ public class ApfFilter {
gen.addJumpIfBytesNotEqual(Register.R0, ETH_BROADCAST_MAC_ADDRESS, mCountAndPassLabel);
maybeSetupCounter(gen, Counter.DROPPED_IPV4_L2_BROADCAST);
gen.addJump(mCountAndDropLabel);
+ } else {
+ generateKeepaliveFilter(gen);
}
// Otherwise, pass
@@ -1037,6 +1188,13 @@ public class ApfFilter {
gen.addJump(mCountAndPassLabel);
}
+ private void generateKeepaliveFilter(ApfGenerator gen) throws IllegalInstructionException {
+ // Drop IPv4 Keepalive acks
+ for (int i = 0; i < mKeepaliveAcks.size(); ++i) {
+ final TcpKeepaliveAck ack = mKeepaliveAcks.valueAt(i);
+ if (ack instanceof TcpKeepaliveAckV4) ack.generateFilterLocked(gen);
+ }
+ }
/**
* Generate filter code to process IPv6 packets. Execution of this code ends in either the
@@ -1057,6 +1215,8 @@ public class ApfFilter {
// drop
// if it's ICMPv6 NA to ff02::1:
// drop
+ // if keepalive ack
+ // drop
gen.addLoad8(Register.R0, IPV6_NEXT_HEADER_OFFSET);
@@ -1112,6 +1272,12 @@ public class ApfFilter {
maybeSetupCounter(gen, Counter.DROPPED_IPV6_MULTICAST_NA);
gen.addJump(mCountAndDropLabel);
gen.defineLabel(skipUnsolicitedMulticastNALabel);
+
+ // Drop IPv6 Keepalive acks
+ for (int i = 0; i < mKeepaliveAcks.size(); ++i) {
+ final TcpKeepaliveAck ack = mKeepaliveAcks.valueAt(i);
+ if (ack instanceof TcpKeepaliveAckV6) ack.generateFilterLocked(gen);
+ }
}
/**
@@ -1489,6 +1655,36 @@ public class ApfFilter {
installNewProgramLocked();
}
+ /**
+ * Add keepalive ack packet filter.
+ * This will add a filter to drop acks to the keepalive packet passed as an argument.
+ *
+ * @param slot The index used to access the filter.
+ * @param sentKeepalivePacket The attributes of the sent keepalive packet.
+ */
+ public synchronized void addKeepalivePacketFilter(final int slot,
+ final TcpKeepalivePacketDataParcelable sentKeepalivePacket) {
+ log("Adding keepalive ack(" + slot + ")");
+ if (null != mKeepaliveAcks.get(slot)) {
+ throw new IllegalArgumentException("Keepalive slot " + slot + " is occupied");
+ }
+ final int ipVersion = sentKeepalivePacket.srcAddress.length == 4 ? 4 : 6;
+ mKeepaliveAcks.put(slot, (ipVersion == 4)
+ ? new TcpKeepaliveAckV4(sentKeepalivePacket)
+ : new TcpKeepaliveAckV6(sentKeepalivePacket));
+ installNewProgramLocked();
+ }
+
+ /**
+ * Remove keepalive packet filter.
+ *
+ * @param slot The index used to access the filter.
+ */
+ public synchronized void removeKeepalivePacketFilter(int slot) {
+ mKeepaliveAcks.remove(slot);
+ installNewProgramLocked();
+ }
+
static public long counterValue(byte[] data, Counter counter)
throws ArrayIndexOutOfBoundsException {
// Follow the same wrap-around addressing scheme of the interpreter.
@@ -1541,6 +1737,17 @@ public class ApfFilter {
}
pw.decreaseIndent();
+ pw.println("Keepalive filter:");
+ pw.increaseIndent();
+ for (int i = 0; i < mKeepaliveAcks.size(); ++i) {
+ final TcpKeepaliveAck keepaliveAck = mKeepaliveAcks.valueAt(i);
+ pw.print("Slot ");
+ pw.print(mKeepaliveAcks.keyAt(i));
+ pw.print(" : ");
+ pw.println(keepaliveAck);
+ }
+ pw.decreaseIndent();
+
if (DBG) {
pw.println("Last program:");
pw.increaseIndent();
diff --git a/packages/NetworkStack/src/android/net/apf/ApfGenerator.java b/packages/NetworkStack/src/android/net/apf/ApfGenerator.java
index 87a1b5ea8b4d..809327a0b79d 100644
--- a/packages/NetworkStack/src/android/net/apf/ApfGenerator.java
+++ b/packages/NetworkStack/src/android/net/apf/ApfGenerator.java
@@ -476,7 +476,7 @@ public class ApfGenerator {
/**
* Add an instruction to the end of the program to load 16-bits from the packet into
- * {@code register}. The offset of the loaded 16-bits from the begining of the packet is
+ * {@code register}. The offset of the loaded 16-bits from the beginning of the packet is
* the sum of {@code offset} and the value in register R1.
*/
public ApfGenerator addLoad16Indexed(Register register, int offset) {
@@ -488,7 +488,7 @@ public class ApfGenerator {
/**
* Add an instruction to the end of the program to load 32-bits from the packet into
- * {@code register}. The offset of the loaded 32-bits from the begining of the packet is
+ * {@code register}. The offset of the loaded 32-bits from the beginning of the packet is
* the sum of {@code offset} and the value in register R1.
*/
public ApfGenerator addLoad32Indexed(Register register, int offset) {
diff --git a/packages/NetworkStack/src/android/net/ip/IpClient.java b/packages/NetworkStack/src/android/net/ip/IpClient.java
index 12fe8c507db4..9e5991298834 100644
--- a/packages/NetworkStack/src/android/net/ip/IpClient.java
+++ b/packages/NetworkStack/src/android/net/ip/IpClient.java
@@ -23,6 +23,7 @@ import static android.net.shared.LinkPropertiesParcelableUtil.toStableParcelable
import static com.android.server.util.PermissionUtil.checkNetworkStackCallingPermission;
+import android.annotation.NonNull;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.DhcpResults;
@@ -34,6 +35,7 @@ import android.net.ProvisioningConfigurationParcelable;
import android.net.ProxyInfo;
import android.net.ProxyInfoParcelable;
import android.net.RouteInfo;
+import android.net.TcpKeepalivePacketDataParcelable;
import android.net.apf.ApfCapabilities;
import android.net.apf.ApfFilter;
import android.net.dhcp.DhcpClient;
@@ -292,6 +294,8 @@ public class IpClient extends StateMachine {
private static final int EVENT_PROVISIONING_TIMEOUT = 10;
private static final int EVENT_DHCPACTION_TIMEOUT = 11;
private static final int EVENT_READ_PACKET_FILTER_COMPLETE = 12;
+ private static final int CMD_ADD_KEEPALIVE_PACKET_FILTER_TO_APF = 13;
+ private static final int CMD_REMOVE_KEEPALIVE_PACKET_FILTER_FROM_APF = 14;
// Internal commands to use instead of trying to call transitionTo() inside
// a given State's enter() method. Calling transitionTo() from enter/exit
@@ -522,6 +526,16 @@ public class IpClient extends StateMachine {
checkNetworkStackCallingPermission();
IpClient.this.setMulticastFilter(enabled);
}
+ @Override
+ public void addKeepalivePacketFilter(int slot, TcpKeepalivePacketDataParcelable pkt) {
+ checkNetworkStackCallingPermission();
+ IpClient.this.addKeepalivePacketFilter(slot, pkt);
+ }
+ @Override
+ public void removeKeepalivePacketFilter(int slot) {
+ checkNetworkStackCallingPermission();
+ IpClient.this.removeKeepalivePacketFilter(slot);
+ }
}
public String getInterfaceName() {
@@ -644,6 +658,22 @@ public class IpClient extends StateMachine {
}
/**
+ * Called by WifiStateMachine to add keepalive packet filter before setting up
+ * keepalive offload.
+ */
+ public void addKeepalivePacketFilter(int slot, @NonNull TcpKeepalivePacketDataParcelable pkt) {
+ sendMessage(CMD_ADD_KEEPALIVE_PACKET_FILTER_TO_APF, slot, 0 /* Unused */, pkt);
+ }
+
+ /**
+ * Called by WifiStateMachine to remove keepalive packet filter after stopping keepalive
+ * offload.
+ */
+ public void removeKeepalivePacketFilter(int slot) {
+ sendMessage(CMD_REMOVE_KEEPALIVE_PACKET_FILTER_FROM_APF, slot, 0 /* Unused */);
+ }
+
+ /**
* Dump logs of this IpClient.
*/
public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
@@ -1512,6 +1542,23 @@ public class IpClient extends StateMachine {
break;
}
+ case CMD_ADD_KEEPALIVE_PACKET_FILTER_TO_APF: {
+ final int slot = msg.arg1;
+ if (mApfFilter != null) {
+ mApfFilter.addKeepalivePacketFilter(slot,
+ (TcpKeepalivePacketDataParcelable) msg.obj);
+ }
+ break;
+ }
+
+ case CMD_REMOVE_KEEPALIVE_PACKET_FILTER_FROM_APF: {
+ final int slot = msg.arg1;
+ if (mApfFilter != null) {
+ mApfFilter.removeKeepalivePacketFilter(slot);
+ }
+ break;
+ }
+
case EVENT_DHCPACTION_TIMEOUT:
stopDhcpAction();
break;
diff --git a/packages/NetworkStack/tests/Android.bp b/packages/NetworkStack/tests/Android.bp
index 45fa2dc2f383..4a09b3e205a6 100644
--- a/packages/NetworkStack/tests/Android.bp
+++ b/packages/NetworkStack/tests/Android.bp
@@ -49,6 +49,7 @@ android_test {
"libhidlbase",
"libhidltransport",
"libhwbinder",
+ "libjsoncpp",
"liblog",
"liblzma",
"libnativehelper",
diff --git a/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java b/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java
index f76e41217c2a..a4a100000d12 100644
--- a/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java
+++ b/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java
@@ -39,13 +39,14 @@ import static org.mockito.Mockito.verify;
import android.content.Context;
import android.net.LinkAddress;
import android.net.LinkProperties;
+import android.net.SocketKeepalive;
+import android.net.TcpKeepalivePacketData;
+import android.net.TcpKeepalivePacketData.TcpSocketInfo;
import android.net.apf.ApfFilter.ApfConfiguration;
import android.net.apf.ApfGenerator.IllegalInstructionException;
import android.net.apf.ApfGenerator.Register;
import android.net.ip.IIpClientCallbacks;
-import android.net.ip.IpClient;
import android.net.ip.IpClient.IpClientCallbacksWrapper;
-import android.net.ip.IpClientCallbacks;
import android.net.metrics.IpConnectivityLog;
import android.net.metrics.RaEvent;
import android.net.util.InterfaceParams;
@@ -1003,15 +1004,31 @@ public class ApfTest {
private static final byte[] ETH_BROADCAST_MAC_ADDRESS =
{(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff };
+ private static final int IPV4_HEADER_LEN = 20;
private static final int IPV4_VERSION_IHL_OFFSET = ETH_HEADER_LEN + 0;
+ private static final int IPV4_TOTAL_LENGTH_OFFSET = ETH_HEADER_LEN + 2;
private static final int IPV4_PROTOCOL_OFFSET = ETH_HEADER_LEN + 9;
+ private static final int IPV4_SRC_ADDR_OFFSET = ETH_HEADER_LEN + 12;
private static final int IPV4_DEST_ADDR_OFFSET = ETH_HEADER_LEN + 16;
+ private static final int IPV4_TCP_HEADER_LEN = 20;
+ private static final int IPV4_TCP_HEADER_OFFSET = ETH_HEADER_LEN + IPV4_HEADER_LEN;
+ private static final int IPV4_TCP_SRC_PORT_OFFSET = IPV4_TCP_HEADER_OFFSET + 0;
+ private static final int IPV4_TCP_DEST_PORT_OFFSET = IPV4_TCP_HEADER_OFFSET + 2;
+ private static final int IPV4_TCP_SEQ_NUM_OFFSET = IPV4_TCP_HEADER_OFFSET + 4;
+ private static final int IPV4_TCP_ACK_NUM_OFFSET = IPV4_TCP_HEADER_OFFSET + 8;
+ private static final int IPV4_TCP_HEADER_LENGTH_OFFSET = IPV4_TCP_HEADER_OFFSET + 12;
private static final byte[] IPV4_BROADCAST_ADDRESS =
{(byte) 255, (byte) 255, (byte) 255, (byte) 255};
private static final int IPV6_NEXT_HEADER_OFFSET = ETH_HEADER_LEN + 6;
private static final int IPV6_HEADER_LEN = 40;
+ private static final int IPV6_SRC_ADDR_OFFSET = ETH_HEADER_LEN + 8;
private static final int IPV6_DEST_ADDR_OFFSET = ETH_HEADER_LEN + 24;
+ private static final int IPV6_TCP_HEADER_OFFSET = ETH_HEADER_LEN + IPV6_HEADER_LEN;
+ private static final int IPV6_TCP_SRC_PORT_OFFSET = IPV6_TCP_HEADER_OFFSET + 0;
+ private static final int IPV6_TCP_DEST_PORT_OFFSET = IPV6_TCP_HEADER_OFFSET + 2;
+ private static final int IPV6_TCP_SEQ_NUM_OFFSET = IPV6_TCP_HEADER_OFFSET + 4;
+ private static final int IPV6_TCP_ACK_NUM_OFFSET = IPV6_TCP_HEADER_OFFSET + 8;
// The IPv6 all nodes address ff02::1
private static final byte[] IPV6_ALL_NODES_ADDRESS =
{ (byte) 0xff, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 };
@@ -1491,6 +1508,200 @@ public class ApfTest {
return packet.array();
}
+ private static final byte[] IPV4_KEEPALIVE_SRC_ADDR = {10, 0, 0, 5};
+ private static final byte[] IPV4_KEEPALIVE_DST_ADDR = {10, 0, 0, 6};
+ private static final byte[] IPV4_ANOTHER_ADDR = {10, 0 , 0, 7};
+ private static final byte[] IPV6_KEEPALIVE_SRC_ADDR =
+ {(byte) 0x24, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xfa, (byte) 0xf1};
+ private static final byte[] IPV6_KEEPALIVE_DST_ADDR =
+ {(byte) 0x24, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xfa, (byte) 0xf2};
+ private static final byte[] IPV6_ANOTHER_ADDR =
+ {(byte) 0x24, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xfa, (byte) 0xf5};
+
+ @Test
+ public void testApfFilterKeepaliveAck() throws Exception {
+ final MockIpClientCallback cb = new MockIpClientCallback();
+ final ApfConfiguration config = getDefaultConfig();
+ config.multicastFilter = DROP_MULTICAST;
+ config.ieee802_3Filter = DROP_802_3_FRAMES;
+ final TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog);
+ byte[] program;
+ final int srcPort = 12345;
+ final int dstPort = 54321;
+ final int seqNum = 2123456789;
+ final int ackNum = 1234567890;
+ final int anotherSrcPort = 23456;
+ final int anotherDstPort = 65432;
+ final int anotherSeqNum = 2123456780;
+ final int anotherAckNum = 1123456789;
+ final int slot1 = 1;
+ final int slot2 = 2;
+ final int window = 14480;
+ final int windowScale = 4;
+
+ // src: 10.0.0.5, port: 12345
+ // dst: 10.0.0.6, port: 54321
+ InetAddress srcAddr = InetAddress.getByAddress(IPV4_KEEPALIVE_SRC_ADDR);
+ InetAddress dstAddr = InetAddress.getByAddress(IPV4_KEEPALIVE_DST_ADDR);
+
+ final TcpSocketInfo v4Tsi = new TcpSocketInfo(
+ srcAddr, srcPort, dstAddr, dstPort, seqNum, ackNum, window, windowScale);
+ final TcpKeepalivePacketData ipv4TcpKeepalivePacket =
+ TcpKeepalivePacketData.tcpKeepalivePacket(v4Tsi);
+
+ apfFilter.addKeepalivePacketFilter(slot1, ipv4TcpKeepalivePacket.toStableParcelable());
+ program = cb.getApfProgram();
+
+ // Verify IPv4 keepalive ack packet is dropped
+ // src: 10.0.0.6, port: 54321
+ // dst: 10.0.0.5, port: 12345
+ assertDrop(program,
+ ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum, seqNum + 1, 0 /* dataLength */));
+ // Verify IPv4 non-keepalive ack packet from the same source address is passed
+ assertPass(program,
+ ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum + 100, seqNum, 0 /* dataLength */));
+ assertPass(program,
+ ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum, seqNum + 1, 10 /* dataLength */));
+ // Verify IPv4 packet from another address is passed
+ assertPass(program,
+ ipv4Packet(IPV4_ANOTHER_ADDR, IPV4_KEEPALIVE_SRC_ADDR, anotherSrcPort,
+ anotherDstPort, anotherSeqNum, anotherAckNum));
+
+ // Remove IPv4 keepalive filter
+ apfFilter.removeKeepalivePacketFilter(slot1);
+
+ try {
+ // src: 2404:0:0:0:0:0:faf1, port: 12345
+ // dst: 2404:0:0:0:0:0:faf2, port: 54321
+ srcAddr = InetAddress.getByAddress(IPV6_KEEPALIVE_SRC_ADDR);
+ dstAddr = InetAddress.getByAddress(IPV6_KEEPALIVE_DST_ADDR);
+ final TcpSocketInfo v6Tsi = new TcpSocketInfo(
+ srcAddr, srcPort, dstAddr, dstPort, seqNum, ackNum, window, windowScale);
+ final TcpKeepalivePacketData ipv6TcpKeepalivePacket =
+ TcpKeepalivePacketData.tcpKeepalivePacket(v6Tsi);
+ apfFilter.addKeepalivePacketFilter(slot1, ipv6TcpKeepalivePacket.toStableParcelable());
+ program = cb.getApfProgram();
+
+ // Verify IPv6 keepalive ack packet is dropped
+ // src: 2404:0:0:0:0:0:faf2, port: 54321
+ // dst: 2404:0:0:0:0:0:faf1, port: 12345
+ assertDrop(program,
+ ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum, seqNum + 1));
+ // Verify IPv6 non-keepalive ack packet from the same source address is passed
+ assertPass(program,
+ ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum + 100, seqNum));
+ // Verify IPv6 packet from another address is passed
+ assertPass(program,
+ ipv6Packet(IPV6_ANOTHER_ADDR, IPV6_KEEPALIVE_SRC_ADDR, anotherSrcPort,
+ anotherDstPort, anotherSeqNum, anotherAckNum));
+
+ // Remove IPv6 keepalive filter
+ apfFilter.removeKeepalivePacketFilter(slot1);
+
+ // Verify multiple filters
+ apfFilter.addKeepalivePacketFilter(slot1, ipv4TcpKeepalivePacket.toStableParcelable());
+ apfFilter.addKeepalivePacketFilter(slot2, ipv6TcpKeepalivePacket.toStableParcelable());
+ program = cb.getApfProgram();
+
+ // Verify IPv4 keepalive ack packet is dropped
+ // src: 10.0.0.6, port: 54321
+ // dst: 10.0.0.5, port: 12345
+ assertDrop(program,
+ ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum, seqNum + 1));
+ // Verify IPv4 non-keepalive ack packet from the same source address is passed
+ assertPass(program,
+ ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum + 100, seqNum));
+ // Verify IPv4 packet from another address is passed
+ assertPass(program,
+ ipv4Packet(IPV4_ANOTHER_ADDR, IPV4_KEEPALIVE_SRC_ADDR, anotherSrcPort,
+ anotherDstPort, anotherSeqNum, anotherAckNum));
+
+ // Verify IPv6 keepalive ack packet is dropped
+ // src: 2404:0:0:0:0:0:faf2, port: 54321
+ // dst: 2404:0:0:0:0:0:faf1, port: 12345
+ assertDrop(program,
+ ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum, seqNum + 1));
+ // Verify IPv6 non-keepalive ack packet from the same source address is passed
+ assertPass(program,
+ ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum + 100, seqNum));
+ // Verify IPv6 packet from another address is passed
+ assertPass(program,
+ ipv6Packet(IPV6_ANOTHER_ADDR, IPV6_KEEPALIVE_SRC_ADDR, anotherSrcPort,
+ anotherDstPort, anotherSeqNum, anotherAckNum));
+
+ // Remove keepalive filters
+ apfFilter.removeKeepalivePacketFilter(slot1);
+ apfFilter.removeKeepalivePacketFilter(slot2);
+ } catch (SocketKeepalive.InvalidPacketException e) {
+ // TODO: support V6 packets
+ }
+
+ program = cb.getApfProgram();
+
+ // Verify IPv4, IPv6 packets are passed
+ assertPass(program,
+ ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum, seqNum + 1));
+ assertPass(program,
+ ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR,
+ dstPort, srcPort, ackNum, seqNum + 1));
+ assertPass(program,
+ ipv4Packet(IPV4_ANOTHER_ADDR, IPV4_KEEPALIVE_SRC_ADDR, srcPort,
+ dstPort, anotherSeqNum, anotherAckNum));
+ assertPass(program,
+ ipv6Packet(IPV6_ANOTHER_ADDR, IPV6_KEEPALIVE_SRC_ADDR, srcPort,
+ dstPort, anotherSeqNum, anotherAckNum));
+
+ apfFilter.shutdown();
+ }
+
+ private static byte[] ipv4Packet(byte[] sip, byte[] tip, int sport,
+ int dport, int seq, int ack) {
+ ByteBuffer packet = ByteBuffer.wrap(new byte[100]);
+ packet.putShort(ETH_ETHERTYPE_OFFSET, (short) ETH_P_IP);
+ packet.put(IPV4_VERSION_IHL_OFFSET, (byte) 0x45);
+ put(packet, IPV4_SRC_ADDR_OFFSET, sip);
+ put(packet, IPV4_DEST_ADDR_OFFSET, tip);
+ packet.putShort(IPV4_TCP_SRC_PORT_OFFSET, (short) sport);
+ packet.putShort(IPV4_TCP_DEST_PORT_OFFSET, (short) dport);
+ packet.putInt(IPV4_TCP_SEQ_NUM_OFFSET, seq);
+ packet.putInt(IPV4_TCP_ACK_NUM_OFFSET, ack);
+ return packet.array();
+ }
+
+ private static byte[] ipv4Packet(byte[] sip, byte[] tip, int sport,
+ int dport, int seq, int ack, int dataLength) {
+ final int totalLength = dataLength + IPV4_HEADER_LEN + IPV4_TCP_HEADER_LEN;
+
+ ByteBuffer packet = ByteBuffer.wrap(ipv4Packet(sip, tip, sport, dport, seq, ack));
+ packet.putShort(IPV4_TOTAL_LENGTH_OFFSET, (short) totalLength);
+ // TCP header length 5, reserved 3 bits, NS=0
+ packet.put(IPV4_TCP_HEADER_LENGTH_OFFSET, (byte) 0x50);
+ return packet.array();
+ }
+
+ private static byte[] ipv6Packet(byte[] sip, byte[] tip, int sport,
+ int dport, int seq, int ack) {
+ ByteBuffer packet = ByteBuffer.wrap(new byte[100]);
+ packet.putShort(ETH_ETHERTYPE_OFFSET, (short) ETH_P_IPV6);
+ put(packet, IPV6_SRC_ADDR_OFFSET, sip);
+ put(packet, IPV6_DEST_ADDR_OFFSET, tip);
+ packet.putShort(IPV6_TCP_SRC_PORT_OFFSET, (short) sport);
+ packet.putShort(IPV6_TCP_DEST_PORT_OFFSET, (short) dport);
+ packet.putInt(IPV6_TCP_SEQ_NUM_OFFSET, seq);
+ packet.putInt(IPV6_TCP_ACK_NUM_OFFSET, ack);
+ return packet.array();
+ }
+
// Verify that the last program pushed to the IpClient.Callback properly filters the
// given packet for the given lifetime.
private void verifyRaLifetime(byte[] program, ByteBuffer packet, int lifetime) {
diff --git a/packages/SettingsLib/HelpUtils/res/values-en-rXC/strings.xml b/packages/SettingsLib/HelpUtils/res/values-en-rXC/strings.xml
index 21084fbc0cea..e991f18b5f9f 100644
--- a/packages/SettingsLib/HelpUtils/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/HelpUtils/res/values-en-rXC/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="help_feedback_label" msgid="4550436169116444686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎Help &amp; feedback‎‏‎‎‏‎"</string>
+ <string name="help_feedback_label" msgid="4550436169116444686">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎Help &amp; feedback‎‏‎‎‏‎"</string>
</resources>
diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-en-rXC/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-en-rXC/strings.xml
index f329a76e5c85..8b19b6ee568c 100644
--- a/packages/SettingsLib/RestrictedLockUtils/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/RestrictedLockUtils/res/values-en-rXC/strings.xml
@@ -17,6 +17,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="enabled_by_admin" msgid="7797093432952898000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎Enabled by admin‎‏‎‎‏‎"</string>
- <string name="disabled_by_admin" msgid="1910810467107358241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎Disabled by admin‎‏‎‎‏‎"</string>
+ <string name="enabled_by_admin" msgid="7797093432952898000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎Enabled by admin‎‏‎‎‏‎"</string>
+ <string name="disabled_by_admin" msgid="1910810467107358241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎Disabled by admin‎‏‎‎‏‎"</string>
</resources>
diff --git a/packages/SettingsLib/SearchWidget/res/values-en-rXC/strings.xml b/packages/SettingsLib/SearchWidget/res/values-en-rXC/strings.xml
index c8627c8f1b08..5dae33600cef 100644
--- a/packages/SettingsLib/SearchWidget/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/SearchWidget/res/values-en-rXC/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="search_menu" msgid="1604061903696928905">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎Search settings‎‏‎‎‏‎"</string>
+ <string name="search_menu" msgid="1604061903696928905">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎Search settings‎‏‎‎‏‎"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml
index 5a96a5886f77..0e2d0e63580c 100644
--- a/packages/SettingsLib/res/values-af/arrays.xml
+++ b/packages/SettingsLib/res/values-af/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Gebruik HDCP-kontrolering net vir DRM-inhoud"</item>
<item msgid="45075631231212732">"Gebruik altyd HDCP-kontrolering"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Gedeaktiveer"</item>
+ <item msgid="1969681323976948639">"Het gefiltreer geaktiveer"</item>
+ <item msgid="8719029132154020716">"Geaktiveer"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (verstek)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml
index 0e46f610bc4d..0988cab78a49 100644
--- a/packages/SettingsLib/res/values-af/strings.xml
+++ b/packages/SettingsLib/res/values-af/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Outomaties deur %1$s gekoppel"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Outomaties deur netwerkgraderingverskaffer gekoppel"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Gekoppel via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> deur <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Gekoppel via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Beskikbaar via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tik om op te stel"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tik om aan te meld"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Gekoppel, geen internet nie"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Geen internet nie"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Aanmelding word vereis"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Toegangspunt is tydelik vol"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Gekoppel via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Beskikbaar via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Kon nie koppel nie"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ongeldige OSU-bediener-URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU-bediener kon nie koppel nie"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU-bediener kon nie gestaaf word nie"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ongeldige OSU-bedienersertifikaat"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Opstelling is gestaak"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Opstelling is nie beskikbaar nie"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ongeldige OSU-bediener-URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Onvoorsiene beveltipe"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Onvoorsiene SOAP-boodskapsoort"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-boodskappe kon nie uitgeruil word nie"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Herlei-luisteraar kon nie begin nie"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Wagperiode vir herleiding het uitgetel"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Geen OSU-aktiwiteit gekry nie"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Onvoorsiene SOAP-boodskapstatus"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Kon nie PPS-MO kry nie"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Kon nie vertroue-kernnodus vir AAA-bediener kry nie"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Kon nie vertroue-kernnodus vir regstellingbediener kry nie"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Kon nie vertroue-kernnodus vir beleidbediener kry nie"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Kon nie vertroue-kernsertifikate ophaal nie"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Kon nie vertroue-kernsertifikaat vir AAA-bediener kry nie"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Kon nie PassPoint-opstelling byvoeg nie"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Kon nie \'n OSU-verskaffer kry nie"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Koppel tans"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Gekoppel"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Koppel tans aan OSU-bediener"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-bediener is gestaaf"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Gekoppel aan OSU-bediener"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Aanvanklike SOAP-uitruiling"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Wag tans vir herlei-reaksie"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Het herlei-antwoord ontvang"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Tweede SOAP-uitruiling"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Derde SOAP-uitruiling"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Haal tans vertroue-kernsertifikate op"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Opstelling is voltooi"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Maak tans <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> oop"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Kon nie koppel nie"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Voltooi tans aanmelding …"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Kon nie aanmelding voltooi nie. Tik om weer te probeer."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Aanmelding is voltooi. Koppel tans …"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Baie stadig"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Stadig"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Bly wakker"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Skerm sal nooit slaap terwyl dit laai nie"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktiveer Bluetooth HCI-loerloglêer"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Vang Bluetooth-pakkette vas. (Wissel Bluetooth nadat jy hierdie instelling verander het)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-ontsluit"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Laat toe dat die selflaaiprogram ontsluit word"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Laat OEM-ontsluit toe?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Inligtingruiling"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Draadlose skermsertifisering"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktiveer Wi-Fi-woordryke aanmelding"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Gekoppelde MAC-verewekansiging"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiele data is altyd aktief"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardewareversnelling vir verbinding"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Wys Bluetooth-toestelle sonder name"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Kon nie koppel nie"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Wys opsies vir draadlose skermsertifisering"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Verhoog Wi-Fi-aantekeningvlak, wys per SSID RSSI in Wi‑Fi-kieser"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Verewekansig MAC-adres wanneer daar aan Wi‑Fi-netwerke gekoppel word"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Beperk"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Onbeperk"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Loggerbuffer se groottes"</string>
diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml
index b1acfb7aa47f..8138a6acd503 100644
--- a/packages/SettingsLib/res/values-am/arrays.xml
+++ b/packages/SettingsLib/res/values-am/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"ለDRM ይዘት ብቻ HDCP ምልከታን ተጠቀም"</item>
<item msgid="45075631231212732">"ሁልጊዜ የHDCP ምልከታ ተጠቀም"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"ተሰናክሏል"</item>
+ <item msgid="1969681323976948639">"ማጣሪያን አንቃ"</item>
+ <item msgid="8719029132154020716">"ነቅቷል"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (ነባሪ)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml
index 2304908b7db3..301d6099a6a7 100644
--- a/packages/SettingsLib/res/values-am/strings.xml
+++ b/packages/SettingsLib/res/values-am/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"በ%1$s በኩል በራስ-ሰር ተገናኝቷል"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"በአውታረ መረብ ደረጃ ሰጪ አቅራቢ በኩል በራስ-ሰር ተገናኝቷል"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"በ%1$s በኩል መገናኘት"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> በ<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"በ <xliff:g id="NAME">%1$s</xliff:g> በኩል ተገናኝተዋል"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"በ%1$s በኩል የሚገኝ"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"ለማዋቀር መታ ያድርጉ"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"ለመመዝገብ መታ ያድርጉ"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"ተገናኝቷል፣ ምንም በይነመረብ የለም"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ምንም በይነመረብ የለም"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"ወደ መለያ መግባት ያስፈልጋል"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"የመዳረሻ ነጥብ ለጊዜው ሞልቷል"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"በ%1$s በኩል ተገናኝቷል"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"በ%1$s በኩል የሚገኝ"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"ግንኙነት አልተሳካም"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ልክ ያልኾነ OSU አገልጋይ ዩአርኤል"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU አገልጋይ ግንኙነት አልተሳካም"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU አገልጋይ ማረጋገጥ አልተሳካም"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ልክ ያልኾነ OSU አገልጋይ ዩአርኤል"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"በባለቤትነት መያዝ ተጨናግፏል"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"በባለቤትነት መያዝ አይገኝም"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ልክ ያልኾነ OSU አገልጋይ ዩአርኤል"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ያልተጠበቀ የትዕዛዝ ዓይነት"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ያልተጠበቀ SOAP መልዕክት ዓይነት"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP መልዕክት ልውውጥ አልተሳካም"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"አቅጣጫ ቀይር አዳማጭ መጀመር አልቻለም"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"አቅጣጫን ቀይርን መጠበቅ ጊዜው አብቅቷል"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ምንም የOSU እንቅስቃሴ አልተገኘም"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ያልተጠበቀ SOAP መልዕክት ሁኔታ"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ማግኘት አልተሳካም"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"ለAAA አገልጋይ የታመነ የሥር እስር ማግኘት አልተቻለም"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ለማስተካከያ አገልጋይ የታመነ የሥር እስር ማግኘት አልተቻለም"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ለመመሪያ አገልጋይ የታመነ የሥር እስር ማግኘት አልተቻለም"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"የሥር እውቅና ማረጋገጫን ሰርስሮ ማውጣት አልተቻለም"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"ለ AAA አገልጋይ የሥር እውቅና ማረጋገጫ ማግኘት አልተሳካም"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPointን ውቅረት ማከል አልተሳካም"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"የOSU አቅራቢን ማግኘት አልተሳካም"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"በመገናኘት ላይ"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"ተገናኝቷል"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"ወደ OSU አገልጋይ በማገናኘት ላይ"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU አገልጋይ ተረጋግጧል"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"ወደ OSU አገልጋይ ተገናኝቷል"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"የመጀመሪያ SOAP ልውውጥ"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ለአቅጣጫ ቀይር ምላሽ በመጠባበቅ ላይ"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"የአቅጣጫ ቀይር ምላሽ ተቀብሏል"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ሁለተኛ SOAP ልውውጥ"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ሦስተኛ SOAP ልውውጥ"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"የሥር እውቅና ማረጋገጫዎችን ሰርስሮ በማውጣት ላይ"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"በባለቤትነት መያዝ ተጠናቋል"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>ን በመክፈት ላይ"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"መገናኘት አልተቻለም"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"መመዝገብን በማጠናቀቅ ላይ…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"መመዝገብን ማጠናቀቅ አልተቻለም። እንደገና ለመሞከር መታ ያድርጉ።"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"ምዝገባ ተጠናቋል። በማገናኘት ላይ…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"በጣም ቀርፋፋ"</string>
<string name="speed_label_slow" msgid="813109590815810235">"አዘግይ"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"እሺ"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"ነቅተህ ቆይ"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ማያኃይል በመሙላት ላይበፍፁም አይተኛም"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"የብሉቱዝ HCI ስለላ ምዝግብ ማስታወሻን ያንቁ"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"የብሉቱዝ ጥቅሎችን ያዝል። (ይህን ቅንብር ከቀየሩ በኋላ ብሉቱዝን ያብሩ/ያጥፉ)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM መክፈቻ"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"የማስነሻ ተሸካሚ እንዲከፈት ፍቀድ"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"የOEM መክፈቻ ይፈቀድ?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"አውታረ መረብ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"የገመድ አልባ ማሳያ እውቅና ማረጋገጫ"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"የWi‑Fi ተጨማሪ ቃላት ምዝግብ ማስታወሻ መያዝ"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"የተገናኘ የማክ ዘፈቀደ መስሪያ"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"የተንቀሳቃሽ ስልክ ውሂብ ሁልጊዜ ገቢር ነው"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"የሃርድዌር ማቀላጠፊያን በማስተሳሰር ላይ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"የብሉቱዝ መሣሪያዎችን ያለ ስሞች አሳይ"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"መገናኘት አልተቻለም"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"የገመድ አልባ ማሳያ እውቅና ማረጋገጫ አማራጮችን አሳይ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"የWi‑Fi ምዝግብ ማስታወሻ አያያዝ ደረጃ ጨምር፣ በWi‑Fi መምረጫ ውስጥ በአንድ SSID RSSI አሳይ"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ከWi-Fi አውታረ መረቦች ጋር ሲገናኙ የማክ አድራሻን በዘፈቀደ ይስሩ"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"የሚለካ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"ያልተለካ"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"የምዝግብ ማስታወሻ ያዥ መጠኖች"</string>
diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml
index 49a080ebfdaf..7a4dac8fdace 100644
--- a/packages/SettingsLib/res/values-ar/arrays.xml
+++ b/packages/SettingsLib/res/values-ar/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"‏استخدام التحقق من HDCP لمحتوى DRM فقط"</item>
<item msgid="45075631231212732">"‏استخدام التحقق من HDCP دومًا"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"موقوف"</item>
+ <item msgid="1969681323976948639">"تمّ تفعيل التصفية"</item>
+ <item msgid="8719029132154020716">"مفعّل"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"‏AVRCP 1.4 (التلقائي)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml
index 09cf92561fd1..91de9e3f693c 100644
--- a/packages/SettingsLib/res/values-ar/strings.xml
+++ b/packages/SettingsLib/res/values-ar/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"‏تم الاتصال تلقائيًا عبر %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"تم الاتصال تلقائيًا عبر مقدم خدمة تقييم الشبكة"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"‏تم الاتصال عبر %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> بواسطة <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"تم الاتصال عبر <xliff:g id="NAME">%1$s</xliff:g>."</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"‏متوفرة عبر %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"انقر للإعداد."</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"انقر للاشتراك."</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"متصلة ولكن بلا إنترنت"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"لا يتوفر اتصال إنترنت."</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"يلزم تسجيل الدخول"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"نقطة الدخول ممتلئة مؤقتًا"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"‏تم الاتصال عبر %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"‏متوفرة عبر %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"تعذّر الاتصال"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"‏عنوان URL لخادم OSU غير صالح"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"‏تعذّر الاتصال بخادم OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"‏تعذّر التحقق من خادم OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"‏شهادة خادم OSU غير صالحة"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"تم إلغاء إدارة الحسابات"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"إدارة الحسابات غير متاحة"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"‏عنوان URL لخادم OSU غير صالح"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"نوع الطلب غير متوقّع"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"‏نوع رسالة SOAP غير متوقّع"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"‏تعذّر تبادل رسالة SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"تعذّر تشغيل إعادة توجيه المستمع"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"انتهت مهلة انتظار إعادة التوجيه"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"‏لم يتم العثور على نشاط OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"‏حالة رسالة SOAP غير متوقعة"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"‏تعذّر العثور على PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"‏تعذّر العثور على عقدة جذر الثقة لخادم AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"تعذّر العثور على عقدة جذر الثقة لخادم المعالجة"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"تعذّر العثور على عقدة جذر الثقة لخادم السياسة"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"تعذّر استرداد شهادات جذر الثقة"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"‏تعذّر العثور على شهادة جذر ثقة لخادم AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"‏تعذّرت إضافة ضبط PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"‏تعذّر العثور على مقدّم OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"جارٍ الاتصال"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"تم الاتصال"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"‏جارٍ الاتصال بخادم OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"‏تم التحقق من خادم OSU"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"‏تم الاتصال بخادم OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"‏تبادل SOAP الأوّل"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"في انتظار رد إعادة التوجيه"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"تم تلقّي رد إعادة توجيه"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"‏تبادل SOAP الثاني"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"‏تبادل SOAP الثالث"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"جارٍ استرداد شهادات جذر الثقة"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"اكتملت إدارة الحسابات"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"فتح <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"تعذّر الاتصال."</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"جارٍ إكمال الاشتراك…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"تعذّر إكمال الاشتراك. انقر للمحاولة مرة أخرى."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"اكتمل الاشتراك. جارٍ الاتصال…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"بطيئة جدًا"</string>
<string name="speed_label_slow" msgid="813109590815810235">"بطيئة"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"موافق"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"البقاء في الوضع النشط"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"لا يتم مطلقًا دخول الشاشة في وضع السكون أثناء الشحن"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"تفعيل سجلّ تطفّل بواجهة وحدة تحكّم المضيف عبر بلوتوث"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"رَقمِن محتوى حزم بيانات البلوتوث. (تبديل البلوتوث بعد تغيير هذا الإعداد)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"إلغاء قفل المصنّع الأصلي للجهاز"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"‏السماح بإلغاء قفل برنامج bootloader"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"هل تريد السماح بإلغاء قفل المصنّع الأصلي للجهاز؟"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"الشبكات"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"شهادة عرض شاشة لاسلكي"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"‏تفعيل تسجيل Wi‑Fi Verbose"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"‏اختيار عشوائي لعنوان MAC"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"بيانات الجوّال نشطة دائمًا"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"تسريع الأجهزة للتوصيل"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"عرض أجهزة البلوتوث بدون أسماء"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"تعذّر الاتصال"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"عرض خيارات شهادة عرض شاشة لاسلكي"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"‏زيادة مستوى تسجيل Wi-Fi، وعرض لكل SSID RSSI في منتقي Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"‏اختيار عشوائي لعنوان MAC عند الاتصال بشبكات Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"تفرض تكلفة استخدام"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"بدون قياس"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"أحجام ذاكرة التخزين المؤقت للتسجيل"</string>
diff --git a/packages/SettingsLib/res/values-as/arrays.xml b/packages/SettingsLib/res/values-as/arrays.xml
index e930fe35bd37..183b3107cc10 100644
--- a/packages/SettingsLib/res/values-as/arrays.xml
+++ b/packages/SettingsLib/res/values-as/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"কেৱল DRM সমলৰ বাবে HDCP পৰীক্ষণ ব্যৱহাৰ কৰক"</item>
<item msgid="45075631231212732">"সদায় HDCP পৰীক্ষণ ব্যৱহাৰ কৰক"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"অক্ষম আছে"</item>
+ <item msgid="1969681323976948639">"সক্ষম কৰাবিলাক ফিল্টাৰ কৰা হৈছে"</item>
+ <item msgid="8719029132154020716">"সক্ষম কৰা আছে"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP ১.৪ (ডিফ’ল্ট)"</item>
<item msgid="2809759619990248160">"AVRCP ১.৩"</item>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index b95680f6c59c..e726ae46e3a2 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -38,50 +38,27 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s মাধ্যমেদি স্বয়ংক্ৰিয়ভাৱে সংযোগ কৰা হৈছে"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"নেটৱৰ্ক ৰেটিং প্ৰদানকাৰীৰ জৰিয়তে স্বয়ং সংয়োগ কৰা হ’ল"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-ৰ মাধ্যমেদি সংযোগ কৰা হৈছে"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>ৰ <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <!-- no translation found for connected_via_app (5571999941988929520) -->
+ <skip />
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$sৰ মাধ্যমেৰে উপলব্ধ"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"ছেট আপ কৰিবলৈ টিপক"</string>
+ <!-- no translation found for tap_to_sign_up (6449724763052579434) -->
+ <skip />
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"সংযোজিত, ইণ্টাৰনেট নাই"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ইণ্টাৰনেট সংযোগ নাই"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"ছাইন ইন কৰা দৰকাৰী"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"একচেছ পইণ্ট কিছু সময়ৰ বাবে পূৰ্ণ হৈ আছে"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$sৰ যোগেৰে সংযোজিত"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$sৰ মাধ্যমেৰে উপলব্ধ"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"সংযোগ কৰিব পৰা নগ\'ল"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU ছাৰ্ভাৰৰ URLটো অমান্য"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ছাৰ্ভাৰৰ সৈতে সংযোগ কৰিব পৰা নগ\'ল"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ছাৰ্ভাৰ সত্যাপন কৰিব পৰা নগ\'ল"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU ছাৰ্ভাৰৰ প্ৰমাণপত্ৰ অমান্য"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"প্ৰৱন্ধন কৰাটো আধাতে বন্ধ কৰা হ\'ল"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"প্ৰৱন্ধন কৰিব নোৱাৰি"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU ছাৰ্ভাৰৰ URLটো অমান্য"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"অনাকাংক্ষিত কামাণ্ডৰ ধৰণ"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"অনাকাংক্ষিত SOAP বাৰ্তাৰ ধৰণ"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP বাৰ্তা অদল-বদল কৰাত বিফল হ\'ল"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"পুনৰ্নিৰ্দেশ কৰা শুনোতা আৰম্ভ কৰিব পৰা নগ\'ল"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"পুনৰ্নিৰ্দেশ হোৱালৈ ৰৈ থকা সময় সমাপ্ত হ\'ল"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"কোনো OSU কাৰ্যকলাপ বিচাৰি পোৱা নগ\'ল"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP বাৰ্তাৰ স্থিতি অনাকাংক্ষিত"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO বিচাৰি পোৱা নগ\'ল"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ছাৰ্ভাৰৰ বাবে বিশ্বাসযোগ্য মূল ন\'ড বিচাৰি পোৱা নগ\'ল"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ৰিমেডিয়েশ্বন ছাৰ্ভাৰৰ বাবে বিশ্বাসযোগ্য মূল ন\'ড পোৱা নগ\'ল"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"পলিচি ছাৰ্ভাৰৰ বাবে বিশ্বাসযোগ্য মূল ন\'ড বিচাৰি পোৱা নগ\'ল"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"বিশ্বাসযোগ্য মূল প্ৰমাণপত্ৰ পুনৰুদ্ধাৰ কৰিব পৰা নগ\'ল"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ছাৰ্ভাৰৰ বাবে বিশ্বাসযোগ্য মূল প্ৰমাণপত্ৰ পোৱা নগ\'ল"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"পাছপইণ্ট কনফিগাৰেশ্বন যোগ কৰিব পৰা নগ\'ল"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU প্ৰদান কৰোঁতা বিচাৰি পোৱা নগ\'ল"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"সংযোগ কৰি থকা হৈছে"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"সংযোগ কৰা হ’ল"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ছাৰ্ভাৰৰ সৈতে সংযোগ কৰি থকা হৈছে"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ছাৰ্ভাৰ সত্যাপন কৰা হ\'ল"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ছাৰ্ভাৰৰ সৈতে সংযোগ কৰা হৈছে"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"প্ৰাৰম্ভিক SOAP এক্সেঞ্জ"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"পুনৰ্নিৰ্দেশৰ সঁহাৰিৰ বাবে অপেক্ষা কৰি থকা হৈছে"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"পুনৰ্নিৰ্দেশৰ সঁহাৰি পোৱা গৈছে"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"দ্বিতীয় SOAP এক্সেঞ্জ"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"তৃতীয় SOAP এক্সেঞ্জ"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"বিশ্বাসযোগ্য মূল প্ৰমাণপত্ৰ পুনৰুদ্ধাৰ কৰি থকা হৈছে"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"প্রৱন্ধন কৰা সম্পূৰ্ণ হ\'ল"</string>
+ <!-- no translation found for osu_opening_provider (5488997661548640424) -->
+ <skip />
+ <!-- no translation found for osu_connect_failed (2187750899158158934) -->
+ <skip />
+ <!-- no translation found for osu_completing_sign_up (9037638564719197082) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_failed (7296159750352873260) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_complete (8207626049093289203) -->
+ <skip />
<string name="speed_label_very_slow" msgid="1867055264243608530">"অতি লেহেম"</string>
<string name="speed_label_slow" msgid="813109590815810235">"লেহেমীয়া"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ঠিক"</string>
@@ -234,8 +211,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"জাগ্ৰত কৰি ৰাখক"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"চ্চাৰ্জ হৈ থকাৰ সময়ত স্ক্ৰীণ কেতিয়াও সুপ্ত অৱস্থালৈ নাযায়"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ব্লুটুথ HCI স্নুপ ল’গ সক্ষম কৰক"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ব্লুটুথ পেকেট সংগ্ৰহ কৰক। (এই ছেটিংটো সলনি কৰাৰ পিছত ব্লুটুথ ট’গল কৰক)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"ঔইএম আনলক"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"বুটল\'ডাৰটো আনলক কৰিবলৈ অনুমতি দিয়ক"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ঔইএম আনলক কৰাৰ অনুমতি দিবনে?"</string>
@@ -246,7 +222,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"নেটৱৰ্কিং"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"বেতাঁৰ ডিছপ্লে’ প্ৰমাণীকৰণ"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"ৱাই-ফাই ভাৰ্ব\'ছ লগিং সক্ষম কৰক"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"সংযুক্ত MAC যাদৃচ্ছিকৰণ"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"ম’বাইল ডেটা সদা-সক্ৰিয়"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"টেডাৰিং হাৰ্ডৱেৰ ত্বৰণ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"নামবিহীন ব্লুটুথ ডিভাইচসমূহ দেখুৱাওক"</string>
@@ -273,7 +248,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"সংযোগ কৰিব পৰা নগ\'ল"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"বেতাঁৰ ডিছপ্লে’ প্ৰমাণপত্ৰৰ বাবে বিকল্পসমূহ দেখুৱাওক"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ৱাই-ফাই লগিঙৰ মাত্ৰা বঢ়াওক, Wi‑Fi পিকাৰত প্ৰতি SSID RSSI দেখুৱাওক"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ৱাই-ফাই নেটৱৰ্কৰ লগত সংযোগ কৰি থকাৰ সময়ত MAC ঠিকনা যাদৃচ্ছিক কৰক"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"নিৰিখ-নিৰ্দিষ্ট"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"নিৰিখ অনিৰ্দিষ্ট"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"লগাৰৰ বাফাৰৰ আকাৰ"</string>
diff --git a/packages/SettingsLib/res/values-az/arrays.xml b/packages/SettingsLib/res/values-az/arrays.xml
index a66218297d14..ddb289cc3d92 100644
--- a/packages/SettingsLib/res/values-az/arrays.xml
+++ b/packages/SettingsLib/res/values-az/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Yalnız DRM məzmun oxumaq üçün HDCP istifadə edin"</item>
<item msgid="45075631231212732">"Həmişə HDCP yoxlama istifadə edin"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Deaktivdir"</item>
+ <item msgid="1969681323976948639">"Filtrləmə aktivdir"</item>
+ <item msgid="8719029132154020716">"Aktivdir"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Defolt)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml
index 110c8da8d372..4dd4817cee8a 100644
--- a/packages/SettingsLib/res/values-az/strings.xml
+++ b/packages/SettingsLib/res/values-az/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s üzərindən avtomatik qoşuldu"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Avtomatik olaraq şəbəkə reytinq provayderi ilə qoşuludur"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s vasitəsilə qoşuludur"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> tərəfindən <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> ilə qoşulub"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s vasitəsilə əlçatandır"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Quraşdırmaq üçün klikləyin"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Qeydiyyatdan keçmək üçün klikləyin"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Qoşuludur, internet yoxdur"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"İnternet yoxdur"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Giriş tələb olunur"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Giriş nöqtəsi müvəqqəti olaraq doludur"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ilə qoşuludur"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s vasitəsilə əlçatandır"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Bağlantı alınmadı"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Yalnış OSU server linki"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU serverinə qoşulmadı"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU serveri doğrulanmadı"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Yalnış OSU server sertifikatı"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Təchizat prosesi ləğv edildi"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Təchizat prosesi əlçatan deyil"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Yalnış OSU server linki"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Gözlənilməyən əmr növü"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Gözlənilməz SOAP mesaj növü"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP mesaj mübadiləsi alınmadı"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Yönləndirmə dinləyicisini başlatmaq alınmadı"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Yönləndirmə dinləyicisinin gözlənilməsi üçün vaxt bitdi"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU fəaliyyəti yoxdur"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Gözlənilməz SOAP mesaj statusu"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO tapılmadı"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA serveri üçün güvənli mənbə şəbəkəsi tapılmadı"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Bərpa serveri üçün güvənli mənbə şəbəkəsi tapılmadı"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Siyasət serveri üçün güvənli mənbə şəbəkəsi tapılmadı"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Güvənli mənbə sertifikatları əldə edilmədi"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA serveri üçün güvənli mənbə sertifikatı tapılmadı"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint konfiqurasiyası əlavə edilmədi"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU provayderi tapılmadı"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Qoşulur"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Qoşuldu"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU serverinə qoşulur"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU serveri doğrulandı"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU serverinə qoşuldu"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"İlk SOAP mübadiləsi"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Yönləndirmə cavabı gözlənilir"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Yönləndirilmiş cavab qəbul edildi"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"İkinci SOAP mübadiləsi"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Üçüncü SOAP mübadiləsi"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Güvənli mənbə sertifikatları əldə edilir"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Təchizat prosesi tamamlandı"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> açılır"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Qoşulmaq mümkün olmadı"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Qeydiyyat tamamlanır…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Qeydiyyat tamamlanmadı. Yenidən cəhd etmək üçün klikləyin."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Qeydiyyat tamamlandı. Qoşulur…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Çox Yavaş"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Yavaş"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Oyaq qal"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Enereji doldurularkən ekran heç vaxt yuxu rejimində olmur"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI izləmə jurnalını aktivləşdir"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth paketləri əldə edin. (Bu ayarı dəyişdikdən sonra Bluetooth\'u aktiv/deaktiv edin)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM kilidinin açılması"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Əməliyyat sistemi yükləyicisinin kilidinin açılmasına icazə ver"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM kilidinin açılmasına icazə verilsin?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Şəbəkələşmə"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Simsiz displey sertifikatlaşması"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi Çoxsözlü Girişə icazə verin"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Qoşulmuş MAC Randomizasiyası"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil data həmişə aktiv"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Birləşmə üçün avadanlıq akselerasiyası"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth cihazlarını adsız göstərin"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Qoşulmaq mümkün olmadı"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Simsiz displey sertifikatlaşması üçün seçimləri göstərir"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi giriş səviyyəsini qaldırın, Wi‑Fi seçəndə hər SSID RSSI üzrə göstərin"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi şəbkələrinə qoşulan zaman ixtiyari MAC ünvanı seçin"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Ödənişli"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Limitsiz"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Logger bufer ölçüləri"</string>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
index 2b7d87ef6436..5b72fca82f59 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Koristi HDCP proveru samo za DRM sadržaj"</item>
<item msgid="45075631231212732">"Uvek koristi HDCP proveru"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Onemogućeno"</item>
+ <item msgid="1969681323976948639">"Omogućeno filtrirano"</item>
+ <item msgid="8719029132154020716">"Omogućeno"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (podrazumevano)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
index 3d34593438d3..dc5430114ba7 100644
--- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
+++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatski povezano preko %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatski povezano preko dobavljača ocene mreže"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Veza je uspostavljena preko pristupne tačke %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> – <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Povezano preko: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Dostupna je preko pristupne tačke %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Dodirnite da biste podesili"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Dodirnite da biste se registrovali"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Veza je uspostavljena, nema interneta"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Nema interneta"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Treba da se prijavite"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna tačka je privremeno zauzeta"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Povezano preko %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Dostupno preko %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Povezivanje nije uspelo"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nevažeći URL OSU servera"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Povezivanje sa OSU serverom nije uspelo"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Potvrda OSU servera nije uspela"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nevažeći sertifikat OSU servera"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Dodela je otkazana"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Dodela nije dostupna"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nevažeći URL OSU servera"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočekivani tip komande"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočekivani tip SOAP poruke"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Razmena SOAP poruka nije uspela"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Pokretanje obrađivača preusmeravanja nije uspelo"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Vreme čekanja preusmeravanja je isteklo"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nije pronađena nijedna OSU aktivnost"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neočekivani status SOAP poruke"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO nije pronađen"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Pouzdani čvor osnovnog nivoa za AAA server nije pronađen"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Pouzdani čvor osnovnog nivoa za server za otklanjanje propusta nije pronađen"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Pouzdani čvor osnovnog nivoa za server za smernice nije pronađen"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Preuzimanje pouzdanih sertifikata osnovnog nivoa nije uspelo"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Pouzdani sertifikat osnovnog nivoa za server AAA nije pronađen"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Dodavanje PassPoint konfiguracije nije uspelo"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU dobavljač nije pronađen"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Povezuje se"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Povezan"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Povezujete se sa OSU serverom"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Potvrđen je OSU server"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Veza sa OSU serverom je uspostavljena"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Prva razmena SOAP-a"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čeka se odgovor o preusmeravanju"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Primljen je odgovor o preusmeravanju"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga razmena SOAP-a"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Treća razmena SOAP-a"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Preuzimaju se pouzdani sertifikati osnovnog nivoa"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Dodela pristupa je završena"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Otvara se <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Povezivanje nije uspelo"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Registracija se dovršava…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Dovršavanje registracije nije uspelo. Dodirnite da biste probali ponovo."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registracija je dovršena. Povezuje se…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Veoma spora"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Spora"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Potvrdi"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Ne zaključavaj"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekran neće biti u režimu spavanja tokom punjenja"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Omogući snoop evidenciju za Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Snimi Bluetooth pakete. (Uključite/isključite Bluetooth kada promenite ovo podešavanje)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Otključavanje OEM-a"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Dozvoli otključavanje funkcije za pokretanje"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite li da dozvolite otključavanje proizvođača originalne opreme (OEM)?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Umrežavanje"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Sertifikacija bežičnog ekrana"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogući detaljniju evidenciju za Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nasumičan izbor MAC adrese tokom povezivanja"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilni podaci su uvek aktivni"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzanje privezivanja"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Povezivanje nije uspelo"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaz opcija za sertifikaciju bežičnog ekrana"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećava nivo evidentiranja za Wi‑Fi. Prikaz po SSID RSSI-u u biraču Wi‑Fi mreže"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Izaberi nasumičnu MAC adresu tokom povezivanja na Wi‑Fi mreže"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Sa ograničenjem"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Bez ograničenja"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Veličine bafera podataka u programu za evidentiranje"</string>
diff --git a/packages/SettingsLib/res/values-be/arrays.xml b/packages/SettingsLib/res/values-be/arrays.xml
index 9aaa559672f1..25f2cedc5537 100644
--- a/packages/SettingsLib/res/values-be/arrays.xml
+++ b/packages/SettingsLib/res/values-be/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Выкарыстанне праверкі HDCP только для змесціва, абароненага DRM"</item>
<item msgid="45075631231212732">"Заўсёды выкарыстоўваць праверку HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Выключана"</item>
+ <item msgid="1969681323976948639">"Уключана з фільтрацыяй"</item>
+ <item msgid="8719029132154020716">"Уключана"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (стандартная)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml
index 02b045160cba..2fa2692a3bbf 100644
--- a/packages/SettingsLib/res/values-be/strings.xml
+++ b/packages/SettingsLib/res/values-be/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Аўтаматычна падключана праз %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Аўтаматычна падключана праз пастаўшчыка паслугі ацэнкі сеткі"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Падлучана праз %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> (<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>)"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Падключана праз праграму \"<xliff:g id="NAME">%1$s</xliff:g>\""</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Даступна праз %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Дакраніцеся, каб наладзіць"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Націсніце, каб зарэгістравацца"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Падключана, без доступу да інтэрнэту"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Не падключана да інтэрнэту"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Трэба выканаць уваход"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Пункт доступу часова заняты"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Падлучана праз %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Даступна праз %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Памылка падключэння"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Несапраўдны URL-адрас сервера OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Не ўдалося падключыцца да сервера OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Не ўдалося праверыць сервер OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Несапраўдны сертыфікат сервера OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Сінхранізацыя спынена"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Сінхранізацыя недаступная"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Несапраўдны URL-адрас сервера OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Нечаканы тып каманды"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Нечаканы тып паведамлення SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Не ўдалося выканаць абмен паведамленнямі SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Не ўдалося запусціць праслухоўванне перанакіравання"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Час чакання перанакіравання скончыўся"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Дзеянняў OSU не знойдзена"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Нечаканы статус паведамлення SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Не ўдалося знайсці PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Не ўдалося знайсці давераны каранёвы вузел для сервера AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Не ўдалося знайсці давераны каранёвы вузел для сервера выпраўленняў"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Не ўдалося знайсці давераны каранёвы вузел для сервера палітыкі"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Не ўдалося атрымаць давераныя каранёвыя сертыфікаты"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Не ўдалося знайсці давераны каранёвы сертыфікат для сервера AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Не ўдалося дадаць канфігурацыю PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Не ўдалося знайсці аператара OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Ідзе падключэнне"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Падключана"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Ідзе падключэнне да сервера OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Сервер OSU пацверджаны"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Падключана да сервера OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Першапачатковы абмен SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Чаканне адказу на перанакіраванне"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Атрыманы адказ на перанакіраванне"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Другі абмен SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Трэці абмен SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ідзе атрыманне давераных каранёвых сертыфікатаў"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Сінхранізацыя завершана"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Адкрываецца <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Не ўдалося падключыцца"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Рэгістрацыя завяршаецца…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Не ўдалося выканаць рэгістрацыю. Дакраніцеся, каб паўтарыць спробу."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Рэгістрацыя завершана. Ідзе падключэнне…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Вельмі павольная"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Павольная"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Прадухіляць ад пераходу ў рэжым сну"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Падчас зарадкі экран будзе пастаянна ўключаны"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Уключыць журнал адсочвання Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Захоўваць пакеты Bluetooth. (Пасля змены гэтай налады выключыце і ўключыце Bluetooth.)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Разблакіроўка OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дазволіць разблакіроўку загрузчыка"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Дазволіць разблакіроўку OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Сеткі"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Сертыфікацыя бесправаднога дысплея"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Уключыць падрабязны журнал Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Стварэнне выпадковых MAC-адрасоў пры падключэнні па Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Мабільная перадача даных заўсёды актыўная"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Апаратнае паскарэнне ў рэжыме мадэма"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Паказваць прылады Bluetooth без назваў"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Не атрымалася падключыцца"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Паказаць опцыі сертыфікацыі бесправаднога дысплея"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Пры выбары Wi Fi указваць у журнале RSSI для кожнага SSID"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Генерыраваць выпадковы MAC-адрас пры падключэнні да сетак Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"З улікам трафіка"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Без уліку трафіка"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Памеры буфера для сродку вядзення журнала"</string>
diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml
index 8484090413e3..994f0add34ff 100644
--- a/packages/SettingsLib/res/values-bg/arrays.xml
+++ b/packages/SettingsLib/res/values-bg/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Да се използва проверка с HDCP само за DRM съдържание"</item>
<item msgid="45075631231212732">"Винаги да се използва проверка с HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Деактивирано"</item>
+ <item msgid="1969681323976948639">"Филтрирането е активирано"</item>
+ <item msgid="8719029132154020716">"Активирано"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (по подразбиране)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml
index 4efbe6443387..1454118c46c0 100644
--- a/packages/SettingsLib/res/values-bg/strings.xml
+++ b/packages/SettingsLib/res/values-bg/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Автоматично е установена връзка чрез %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Автоматично е установена връзка чрез доставчик на услуги за оценяване на мрежите"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Установена е връзка през „%1$s“"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> на <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Установена е връзка през <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Мрежата е достъпна през „%1$s“"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Докоснете, за да настроите"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Докоснете, за да се регистрирате"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Установена е връзка – няма достъп до интернет"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Няма връзка с интернет"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Изисква се вход в профила"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Точката за достъп временно е пълна"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Установена е връзка през %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Мрежата е достъпна през %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Свързването не бе успешно"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Невалиден URL адрес на OSU сървъра"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Свързването с OSU сървъра не бе успешно"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Потвърждаването на OSU сървъра не бе успешно"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Невалиден сертификат на OSU сървъра"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Обезпечаването бе прекратено"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Обезпечаването не е възможно"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Невалиден URL адрес на OSU сървъра"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неочакван тип команда"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неочакван тип съобщение през SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Обменът на съобщения през SOAP не бе успешен"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Стартирането на приемателя за пренасочване не бе успешно"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Времето за изчакване на пренасочването изтече"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Няма намерена OSU активност"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Състояние за неочаквано съобщение през SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Намирането на PPS-MO не бе успешно"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Намирането на надежден основен възел за AAA сървъра не бе успешно"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Намирането на надежден основен възел за сървъра за отстраняване на проблеми не бе успешно"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Намирането на надежден основен възел за сървъра за правила не бе успешно"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Извличането на надеждните основни сертификати не бе успешно"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Намирането на надежден основен сертификат за AAA сървъра не бе успешно"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Добавянето на PassPoint конфигурация не бе успешно"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Намирането на OSU доставчик не бе успешно"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Установява се връзка"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Установена е връзка"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Установява се връзка с OSU сървъра"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU сървърът е потвърден"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Установена е връзка с OSU сървъра"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Първоначален обмен на данни през SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Изчаква се отговор за пренасочването"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Отговорът за пренасочването е получен"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Втори обмен на данни през SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Трети обмен на данни през SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Надеждните основни сертификати се извличат"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Обезпечаването е завършено"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> се отваря"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Не можа да се установи връзка"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Регистрацията се завършва…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Регистрацията не можа да бъде завършена. Докоснете, за да опитате отново."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Регистрацията е завършена. Установява се връзка…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Много бавна"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Бавна"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ОK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Да остане активен"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Екранът никога няма да е в спящ режим при зареждане"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Активиране на рег. файл за анализ за Bluetooth с протокола HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Запис на Bluetooth пакетите. (Превключване на Bluetooth след промяна на тази настройка)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Отключване от OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Разрешаване на първонач. зареждащата прогр. да се откл."</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Да се разреши ли отключване от OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Мрежи"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Безжичен дисплей"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"„Многословно“ регистр. на Wi‑Fi: Актив."</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Рандомизиране на свързания MAC адрес"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Винаги активни мобилни данни"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Хардуерно ускорение за тетъринга"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Показване на устройствата с Bluetooth без имена"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Не можа да се установи връзка"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показване на опциите за сертифициране на безжичния дисплей"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"По-подробно регистр. на Wi‑Fi – данни за RSSI на SSID в инстр. за избор на Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Рандомизиране на MAC адреса при свързване с Wi-Fi мрежи"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"С отчитане"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Без отчитане"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Размери на регистрац. буфери"</string>
diff --git a/packages/SettingsLib/res/values-bn/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml
index f05574239abc..ce3ca16bbe56 100644
--- a/packages/SettingsLib/res/values-bn/arrays.xml
+++ b/packages/SettingsLib/res/values-bn/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"শুধুমাত্র DRM সামগ্রীর জন্য HDCP চেক করা ব্যবহার করুন"</item>
<item msgid="45075631231212732">"সর্বদা HDCP পরীক্ষণ ব্যবহার করুন"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"বন্ধ করা আছে"</item>
+ <item msgid="1969681323976948639">"ফিল্টার করা চালু আছে"</item>
+ <item msgid="8719029132154020716">"চালু করা আছে"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (ডিফল্ট)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml
index 913c0c442e40..dbf397f10c2a 100644
--- a/packages/SettingsLib/res/values-bn/strings.xml
+++ b/packages/SettingsLib/res/values-bn/strings.xml
@@ -38,50 +38,27 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"স্বয়ংক্রিয়ভাবে %1$s এর মাধ্যমে কানেক্ট হয়েছে"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"নেটওয়ার্কের রেটিং প্রদানকারীর মাধ্যমে অটোমেটিক কানেক্ট"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s মাধ্যমে কানেক্ট হয়েছে"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> এর <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <!-- no translation found for connected_via_app (5571999941988929520) -->
+ <skip />
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s এর মাধ্যমে উপলব্ধ"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"সেট-আপ করতে ট্যাপ করুন"</string>
+ <!-- no translation found for tap_to_sign_up (6449724763052579434) -->
+ <skip />
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"কানেক্ট, ইন্টারনেট নেই"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ইন্টারনেট কানেকশন নেই"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"সাইন-ইন করা দরকার"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"এই মুহূর্তে অ্যাক্সেস পয়েন্টের কোনও কানেকশন ফাঁকা নেই"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s এর মাধ্যমে কানেক্ট হয়েছে"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s এর মাধ্যমে পাওয়া যাচ্ছে"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"কানেক্ট করা যায়নি"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ভুল OSU সার্ভার ইউআরএল"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU সার্ভারে কানেক্ট করা যায়নি"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU সার্ভার যাচাই করা যায়নি"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ভুল OSU সার্ভার সার্টিফিকেট"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"প্রভিশনিং বাতিল করা হয়েছে"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"প্রভিশনিং উপলভ্য নেই"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ভুল OSU সার্ভার ইউআরএল"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"অপ্রত্যাশিত কমান্ডের ধরন"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"অপ্রত্যাশিত SOAP মেসেজের ধরন"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP মেসেজ এক্সচেঞ্জ করা যায়নি"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"রিডাইরেক্ট লিসনার শুরু হয়নি"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"রিডাইরেক্টের জন্য অপেক্ষা করার সময় শেষ হয়েছে"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"কোনও OSU অ্যাক্টিভিটি খুঁজে পাওয়া যায়নি"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"অপ্রত্যাশিত SOAP মেসেজের স্ট্যাটাস"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO খুঁজে পাওয়া যায়নি"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA সার্ভারের জন্য ট্রাস্ট রুট নোড খুঁজে পাওয়া যায়নি"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"রেমেডিয়েশন সার্ভারের জন্য ট্রাস্ট রুট নোড খুঁজে পাওয়া যায়নি"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"নীতি সার্ভারের জন্য ট্রাস্ট রুট নোড খুঁজে পাওয়া যায়নি"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"\'ট্রাস্ট রুট সার্টিফিকেট ফিরিয়ে আনা যায়নি"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA সার্ভারের জন্য ট্রাস্ট রুট সার্টিফিকেট খুঁজে পাওয়া যায়নি"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint কনফিগারেশন যোগ করা যায়নি"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU প্রদানকারী খুঁজে পাওয়া যায়নি"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"কানেক্ট হচ্ছে"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"কানেক্ট করা হয়েছে"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU সার্ভারের সাথে কানেক্ট করা হচ্ছে"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU সার্ভার যাচাই করা হয়েছে"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU সার্ভারের সাথে কানেক্ট করা আছে"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"প্রারম্ভিক SOAP এক্সচেঞ্জ"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"রিডাইরেক্টের উত্তর পাওয়ার জন্য অপেক্ষা করা হচ্ছে"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"রিডাইরেক্টের উত্তর পাওয়া গেছে"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"সেকেন্ড SOAP এক্সচেন্জ"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"থার্ড SOAP এক্সচেন্জ"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ট্রাস্ট রুট সার্টিফিকেট ফিরিয়ে আনা হচ্ছে"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"প্রভিশনিং সম্পূর্ণ হয়েছে"</string>
+ <!-- no translation found for osu_opening_provider (5488997661548640424) -->
+ <skip />
+ <!-- no translation found for osu_connect_failed (2187750899158158934) -->
+ <skip />
+ <!-- no translation found for osu_completing_sign_up (9037638564719197082) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_failed (7296159750352873260) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_complete (8207626049093289203) -->
+ <skip />
<string name="speed_label_very_slow" msgid="1867055264243608530">"খুব ধীরে"</string>
<string name="speed_label_slow" msgid="813109590815810235">"ধীরে"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ঠিক আছে"</string>
@@ -234,8 +211,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"জাগিয়ে রাখুন"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"চার্জ হওয়ার স্ক্রিন কখনই নিদ্রা মোডে যাবে না"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ব্লুটুথ HCI স্নুপ লগ সক্ষম করুন"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ব্লুটুথ প্যাকেট ক্যাপচার করুন। (এই সেটিং পরিবর্তন করার পরে ব্লুটুথ চালু অথবা বন্ধ করুন)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM আনলক করা হচ্ছে"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"বুট-লোডার আনলক করার অনুমতি দিন"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM আনলক করার অনুমতি দিতে চান?"</string>
@@ -246,7 +222,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"নেটওয়ার্কিং"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"ওয়্যারলেস ডিসপ্লে সার্টিফিকেশন"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"ওয়াই-ফাই ভারবোস লগিং সক্ষম করুন"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"কানেক্ট MAC র‍্যান্ডমাইজেশন"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"মোবাইল ডেটা সব সময় সক্রিয় থাক"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"টিথারিং হার্ডওয়্যার অ্যাক্সিলারেশন"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"নামহীন ব্লুটুথ ডিভাইসগুলি দেখুন"</string>
@@ -273,7 +248,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"কানেক্ট করা যায়নি"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ওয়্যারলেস প্রদর্শন সার্টিফিকেশন জন্য বিকল্পগুলি দেখান"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ওয়াই-ফাই লগিং স্তর বাড়ান, ওয়াই-ফাই চয়নকারীতে SSID RSSI অনুযায়ী দেখান"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ওয়াই-ফাই নেটওয়ার্কে কানেক্ট করার সময় MAC অ্যাড্রেস র‍্যান্ডমাইজ করুন"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"পরিমাপ করা"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"পরিমাপ করা নয়"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"লগার বাফারের আকারগুলি"</string>
diff --git a/packages/SettingsLib/res/values-bs/arrays.xml b/packages/SettingsLib/res/values-bs/arrays.xml
index bcb35f1e49fe..96772b6a139b 100644
--- a/packages/SettingsLib/res/values-bs/arrays.xml
+++ b/packages/SettingsLib/res/values-bs/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Koristi HDCP provjeru samo za DRM sadržaj"</item>
<item msgid="45075631231212732">"Uvijek koristi HDCP provjeru"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Onemogućeno"</item>
+ <item msgid="1969681323976948639">"Omogućeno filtrirano"</item>
+ <item msgid="8719029132154020716">"Omogućeno"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (zadano)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml
index 1ba69048b3ea..272e7971e5bf 100644
--- a/packages/SettingsLib/res/values-bs/strings.xml
+++ b/packages/SettingsLib/res/values-bs/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatski povezano koristeći %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatski povezano putem ocjenjivača mreže"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Povezani preko %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> autora <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Povezano preko <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Dostupan preko %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Dodirnite za postavljanje"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Dodirnite za prijavu"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Povezano, nema interneta"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Nema internetske veze"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Potrebna je prijava"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna tačka je privremeno puna"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Povezano koristeći %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Dostupna koristeći %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Veza nije uspjela"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nevažeći URL OSU servera"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Povezivanje s OSU serverom nije uspjelo"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Potvrda OSU servera nije uspjela"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nevažeći certifikat OSU servera"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Pružanje usluga je prekinuto"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Pružanje usluga nije dostupno"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nevažeći URL OSU servera"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočekivana vrsta komande"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočekivana vrsta poruke SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Razmjena SOAP poruka nije uspjela"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Preusmjereni slušalac nije pokrenuo sadržaj"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Vrijeme za preusmjeravanje je isteklo"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU aktivnosti nisu pronađene"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status neočekivane SOAP poruke"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO nije pronađen"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Pouzdani temeljni čvor za AAA server nije pronađen"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Pouzdani temeljni čvor za server za uklanjanje problema nije pronađen"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Pouzdani temeljni čvor za server pravila nije pronađen"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Preuzimanje temeljnih pouzdanih certifikata nije uspjelo"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Pouzdani temeljni certifikat za AAA server nije pronađen"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Nije moguće dodati PassPoint konfiguraciju"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU pružatelj usluga nije pronađen"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Povezivanje"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Povezano"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Povezivanje na OSU server"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server je potvrđen"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Povezano na OSU server"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Prva SOAP razmjena"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čekanje odgovora za preusmjeravanje"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Primljen je odgovor o preusmjeravanju"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga SOAP razmjena"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Treća SOAP razmjena"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Preuzimanje pouzdanih temeljnih certifikata"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Pružanje usluge je završeno"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Otvaranje <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Povezivanje nije uspjelo"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Završavanje registracije…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registraciju nije moguće izvršiti. Dodirnite da pokušate ponovo."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registracija je završena. Povezivanje…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Veoma sporo"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Sporo"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"UREDU"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Ostani aktivan"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekran neće prelaziti u stanje mirovanja tokom punjenja"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Omogući Bluetooth HCI snoop zapis"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Snimite Bluetooth pakete. (Uključite/isključite Bluetooth nakon što promijenite ovu postavku)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM otključavanje"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Dozvoli otključavanje bootloadera"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite li dozvoliti OEM otključavanje?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Umrežavanje"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certifikacija bežičnog prikaza"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogući detaljniju evidenciju za WiFi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nasumični odabir MAC adrese pri povezivanju"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilna mreža za prijenos podataka je uvijek aktivna"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzavanje za povezivanje putem mobitela"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Povezivanje nije uspjelo"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaži opcije za certifikaciju bežičnog prikaza"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećava nivo evidentiranja za WiFi. Prikaz po SSID RSSI-ju u Biraču WiFi-ja"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Nasumično odaberi MAC adresu prilikom povezivanja na WiFi mreže"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"S naplatom"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Mreža bez ograničenja prometa"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Veličine bafera za zapisnik"</string>
diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml
index fd0df047e42e..33385e4e0587 100644
--- a/packages/SettingsLib/res/values-ca/arrays.xml
+++ b/packages/SettingsLib/res/values-ca/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Utilitza la comprovació HDCP només per a contingut DRM"</item>
<item msgid="45075631231212732">"Utilitza sempre la comprovació HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Desactivat"</item>
+ <item msgid="1969681323976948639">"Activat amb filtres"</item>
+ <item msgid="8719029132154020716">"Activat"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (predeterminada)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 8133559b9468..5d2dd65f9824 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Connectada automàticament a través de: %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Connectada automàticament a través d\'un proveïdor de valoració de xarxes"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connectada mitjançant %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de: <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Connectat mitjançant <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Disponible mitjançant %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Toca per configurar"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Toca per registrar-te"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connectada, sense Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Sense connexió a Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Cal iniciar la sessió"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"El punt d\'accés està temporalment ple"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Connectat mitjançant %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Disponible mitjançant %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connexió fallida"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL de servidor OSU no vàlid"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"No s\'ha pogut connectar al servidor OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"No s\'ha pogut validar el servidor OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificat de servidor OSU no vàlid"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Proveïment anul·lat"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Proveïment no disponible"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL de servidor OSU no vàlid"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipus d\'ordre inesperada"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipus de missatge SOAP inesperat"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"No s\'ha pogut intercanviar el missatge SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"No s\'ha pogut iniciar el processador de redirecció"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Temps d\'espera de redirecció esgotat"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No s\'ha trobat cap activitat OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estat de missatge SOAP inesperat"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"No s\'ha pogut trobar PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"No s\'ha pogut trobar el node arrel de confiança del servidor AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"No s\'ha pogut trobar el node arrel de confiança del servidor de solucions"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"No s\'ha pogut trobar el node arrel de confiança del servidor de polítiques"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"No s\'han pogut recuperar els certificats arrel de confiança"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"No s\'ha pogut trobar el certificat arrel de confiança del servidor AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"No s\'ha pogut afegir la configuració PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"No s\'ha pogut trobar el proveïdor OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"S\'està connectant"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connectat"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"S\'està connectant al servidor OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validat"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Connectat a un servidor OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Primer intercanvi SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"S\'està esperant la resposta de redirecció"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirecció rebuda"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segon intercanvi SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tercer intercanvi SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"S\'estan recuperant els certificats arrel de confiança"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Proveïment complet"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"S\'està obrint <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"No s\'ha pogut connectar"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"S\'està completant el registre…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"No s\'ha pogut completar el registre. Toca per tornar-ho a provar."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"S\'ha completat el registre. S\'està connectant…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Molt lenta"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Correcta"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Pantalla sempre activa"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla no entra mai en mode de repòs si el dispositiu està carregant-se"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activa registre de Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Captura els paquets de Bluetooth. Activa el Bluetooth un cop hagis canviat aquesta opció."</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueig d\'OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permet desbloquejar el bootloader"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permetre el desbloqueig d\'OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Xarxes"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificació de pantalla sense fil"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Activa el registre Wi‑Fi detallat"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Ordre aleatori d\'adreces MAC amb connexió"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Dades mòbils sempre actives"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Acceleració per maquinari per a compartició de xarxa"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostra els dispositius Bluetooth sense el nom"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"No s\'ha pogut connectar"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra les opcions per a la certificació de pantalla sense fil"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Augmenta nivell de registre Wi‑Fi i mostra\'l per SSID RSSI al Selector de Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Ordena les adreces MAC de manera aleatòria en connectar-se a xarxes Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Amb límit de dades"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Sense límit de dades"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Mides memòria intermèdia registrador"</string>
diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml
index 29beb774dee8..cdd70947b7b3 100644
--- a/packages/SettingsLib/res/values-cs/arrays.xml
+++ b/packages/SettingsLib/res/values-cs/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Použít kontrolu HDCP pouze pro obsah DRM"</item>
<item msgid="45075631231212732">"Vždy používat kontrolu HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Vypnuto"</item>
+ <item msgid="1969681323976948639">"Povolit filtrované"</item>
+ <item msgid="8719029132154020716">"Zapnuto"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (výchozí)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml
index 42e2ad3dee3a..19a042ed2f6d 100644
--- a/packages/SettingsLib/res/values-cs/strings.xml
+++ b/packages/SettingsLib/res/values-cs/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automaticky připojeno přes poskytovatele %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automaticky připojeno přes poskytovatele hodnocení sítí"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Připojeno prostřednictvím %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>: <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Připojeno přes <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Dostupné prostřednictvím %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Nastavíte klepnutím"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Klepnutím se zaregistrujete"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Připojeno, není k dispozici internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Nejste připojeni k internetu"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Je vyžadováno přihlášení"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Přístupový bod je dočasně zaplněn"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Připojeno prostřednictvím %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Dostupné prostřednictvím %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Připojení se nezdařilo"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Neplatná adresa URL serveru OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Připojení k serveru OSU se nezdařilo"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Ověření serveru OSU se nezdařilo"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Neplatný certifikát serveru OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Zajišťování bylo zrušeno"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Zajišťování není k dispozici"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Neplatná adresa URL serveru OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočekávaný typ příkazu"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočekávaný typ zprávy SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Výměna zpráva SOAP se nezdařila"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Poslech za účelem přesměrování se nepodařilo zahájit"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Vypršel časový limit čekání na přesměrování"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nebyla nalezena žádná aktivita OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neočekávaný stav zprávy SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO se nepodařilo najít"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Kořenový uzel důvěry pro server AAA se nepodařilo najít"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Kořenový uzel důvěry pro server nápravy se nepodařilo najít"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Kořenový uzel důvěry pro server zásad se nepodařilo najít"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Kořenové certifikáty důvěry se nepodařilo načíst"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Kořenový uzel důvěry pro server AAA se nepodařilo najít"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Konfiguraci PassPoint se nepodařilo přidat"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Poskytovatele OSU se nepodařilo najít"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Připojování"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Připojeno"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Připojování k serveru OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU byl ověřen"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Připojeno k serveru OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"První výměna SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čekání na odpověď s přesměrováním"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Byla přijata odpověď s přesměrováním"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druhá výměna SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Třetí výměna SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Načítání kořenových certifikátů důvěry"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Zajišťování bylo dokončeno"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Spouštění aplikace <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Nelze se připojit"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Dokončování registrace…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registraci se nepodařilo dokončit. Klepnutím opakujte akci."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registrace byla dokončena. Připojování…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Velmi pomalá"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Pomalá"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Nevypínat obrazovku"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Obrazovka se při nabíjení nepřepne do režimu spánku"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Povolit protokol Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Zaznamenávat pakety Bluetooth. (Po změně tohoto nastavení zapněte nebo vypněte Bluetooth.)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Odemknutí OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Povolit odemknutí zavaděče"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Povolit odemknutí OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Sítě"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certifikace bezdrát. displeje"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Podrobné protokolování Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Náhodné adresy MAC při připojení"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilní data jsou vždy aktivní"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwarová akcelerace tetheringu"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Zobrazovat zařízení Bluetooth bez názvů"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nelze se připojit"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Zobrazit možnosti certifikace bezdrátového displeje"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšit úroveň protokolování Wi‑Fi zobrazenou v SSID a RSSI při výběru sítě Wi‑Fi."</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Při připojení k sítím Wi-Fi používat náhodnou adresu MAC"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Měřená"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Neměřená"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Vyrovnávací paměť protokol. nástroje"</string>
diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml
index 97e2b0542444..358efff338af 100644
--- a/packages/SettingsLib/res/values-da/arrays.xml
+++ b/packages/SettingsLib/res/values-da/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Brug kun HDCP-kontrol ved DRM-indhold"</item>
<item msgid="45075631231212732">"Brug altid HDCP-kontrol"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Deaktiveret"</item>
+ <item msgid="1969681323976948639">"Filtreret er aktiveret"</item>
+ <item msgid="8719029132154020716">"Aktiveret"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (standard)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml
index f504afbd761b..bde67fde480f 100644
--- a/packages/SettingsLib/res/values-da/strings.xml
+++ b/packages/SettingsLib/res/values-da/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatisk tilsluttet via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatisk forbundet via udbyder af netværksvurdering"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Tilsluttet via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> fra <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Forbundet via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Tilgængelig via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tryk for at konfigurere"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tryk for at registrere dig"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Tilsluttet – intet internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Intet internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Login er påkrævet"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Adgangspunktet er midlertidigt fuldt"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Tilsluttet via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Tilgængelig via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Der kunne ikke oprettes forbindelse"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ugyldig webadresse for OSU-serveren"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Der kunne ikke oprettes forbindelse til OSU-serveren"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU-servervalideringen mislykkedes"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ugyldigt OSU-servercertifikat"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioneringen blev annulleret"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisionering er ikke tilgængelig"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ugyldig webadresse for OSU-serveren"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Uventet kommandotype"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Uventet SOAP-meddelelsestype"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Udvekslingen af SOAP-meddelelser mislykkedes"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Lyttefunktionen til omdirigering kunne ikke starte"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Der opstod timeout under ventetiden for omdirigering"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Der blev ikke fundet nogen OSU-aktivitet"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Uventet SOAP-meddelelsesstatus"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO kunne ikke findes"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Der blev ikke fundet nogen godkendt rodnode til AAA-serveren"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Der blev ikke fundet nogen godkendt rodnode til afhjælpningsserveren"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Der blev ikke fundet nogen godkendt rodnode til politikserveren"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Der kunne ikke hentes godkendte rodcertifikater"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Det lykkedes ikke at finde et godkendt rodcertifikat til AAA-serveren"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Der kunne ikke tilføjes PassPoint-konfiguration"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Der kunne ikke findes en OSU-udbyder"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Opretter forbindelse"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Der er oprettet forbindelse"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Opretter forbindelse til OSU-serveren"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-serveren blev godkendt"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Der er oprettet forbindelse til OSU-serveren"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Første SOAP-udveksling"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Venter på omdirigeringssvar"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Der blev modtaget et omdirigeringssvar"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Anden SOAP-udveksling"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tredje SOAP-udveksling"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Henter godkendte rodcertifikater"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioneringen er udført"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Åbner <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Der kunne ikke oprettes forbindelse"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Fuldfører registrering…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registreringen kunne ikke fuldføres. Tryk for at prøve igen."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registreringen er fuldført. Opretter forbindelse…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Meget langsom"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Langsom"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Lås ikke"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Skærmen går ikke i dvale under opladning"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktivér Bluetooth HCI spionlog"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Gem Bluetooth-pakker. (slå Bluetooth til/fra, efter du har ændret denne indstilling)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-oplåsning"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Tillad, at startindlæseren låses op"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vil du tillade OEM-oplåsning?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Netværk"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificering af trådløs skærm"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktivér detaljeret Wi-Fi-logføring"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Forbindelse med tilfældig MAC-adresse"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata er altid aktiveret"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwareacceleration ved netdeling"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Vis Bluetooth-enheder uden navne"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Der kunne ikke oprettes forbindelse"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vis valgmuligheder for certificering af trådløs skærm"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Øg mængden af Wi‑Fi-logføring. Vis opdelt efter SSID RSSI i Wi‑Fi-vælgeren"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Brug en tilfældig MAC-adresse, når der oprettes forbindelse til Wi‑Fi-netværk"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Forbrugsafregnet"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Ikke forbrugsafregnet"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Størrelser for Logger-buffer"</string>
diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml
index 755b6bbcbb4e..90e26d23a610 100644
--- a/packages/SettingsLib/res/values-de/arrays.xml
+++ b/packages/SettingsLib/res/values-de/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"HDCP-Prüfung nur für DRM-Inhalte verwenden"</item>
<item msgid="45075631231212732">"HDCP-Prüfung immer verwenden"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Deaktiviert"</item>
+ <item msgid="1969681323976948639">"Filter aktiviert"</item>
+ <item msgid="8719029132154020716">"Aktiviert"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Standard)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index ad676691aafe..543e8f86ee71 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatisch über %1$s verbunden"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatisch über Anbieter von Netzwerkbewertungen verbunden"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Über %1$s verbunden"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> von <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Verbunden über <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Verfügbar über %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Zum Einrichten tippen"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Zum Anmelden tippen"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Verbunden, kein Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Kein Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Anmeldung erforderlich"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Zugangspunkt vorübergehend voll belegt"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Über %1$s verbunden"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Verfügbar über %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Fehler beim Herstellen der Verbindung"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ungültige OSU-Server-URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Fehler beim Verbinden mit dem OSU-Server"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Fehler bei der OSU-Servervalidierung"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ungültiges OSU-Serverzertifikat"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Bereitstellung abgebrochen"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Bereitstellung nicht verfügbar"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ungültige OSU-Server-URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unerwarteter Befehlstyp"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unerwarteter SOAP-Nachrichtentyp"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Fehler beim SOAP-Nachrichtenaustausch"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Weiterleitungs-Listener konnte nicht gestartet werden"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Zeitüberschreitung beim Warten auf die Weiterleitung"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Es wurde keine OSU-Aktivität gefunden"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unerwarteter SOAP-Nachrichtenstatus"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO konnte nicht gefunden werden"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Es konnte kein vertrauenswürdiger Root-Knoten für den AAA-Server gefunden werden"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Es konnte kein vertrauenswürdiger Root-Knoten für den Wiederherstellungsserver gefunden werden"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Es konnte kein vertrauenswürdiger Root-Knoten für den Richtlinienserver gefunden werden"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Es konnten keine vertrauenswürdigen Root-Zertifikate abgerufen werden"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Es konnte kein vertrauenswürdiges Root-Zertifikat für den AAA-Server gefunden werden"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint-Konfiguration konnte nicht hinzugefügt werden"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Es konnte kein OSU-Anbieter gefunden werden"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Wird verbunden"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Verbunden"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Verbindung zum OSU-Server wird hergestellt"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-Server validiert"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Mit OSU-Server verbunden"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Erster SOAP-Nachrichtenaustausch"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Warten auf Weiterleitung"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Als Antwort Weiterleitung erhalten"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Zweiter SOAP-Nachrichtenaustausch"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Dritter SOAP-Nachrichtenaustausch"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Vertrauenswürdige Root-Zertifikate werden abgerufen"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Bereitstellung abgeschlossen"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> wird geöffnet"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Verbindung nicht möglich"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Anmeldung wird abgeschlossen…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Anmeldung konnte nicht abgeschlossen werden. Tippe, um es noch einmal zu versuchen."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Anmeldung abgeschlossen. Verbindung wird hergestellt…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Sehr langsam"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Langsam"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Aktiv lassen"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Display wird beim Laden nie in den Ruhezustand versetzt"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI-Snoop-Protokoll aktivieren"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth-Pakete erfassen. Nach der Änderung muss Bluetooth aus- und wieder eingeschaltet werden"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-Entsperrung"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Bootloader-Entsperrung zulassen"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM-Entsperrung zulassen?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Netzwerke"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Kabellose Übertragung"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Ausführliche WLAN-Protokolle aktivieren"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Verbundene randomisierte MAC-Adresse"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile Datennutzung immer aktiviert"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwarebeschleunigung für Tethering"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-Geräte ohne Namen anzeigen"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Verbindung nicht möglich"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Optionen zur Zertifizierung für kabellose Übertragung anzeigen"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Level für WLAN-Protokollierung erhöhen, in WiFi Picker pro SSID-RSSI anzeigen"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"MAC-Adresse randomisieren, wenn WLAN-Verbindungen hergestellt werden"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Kostenpflichtig"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Nicht kostenpflichtig"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Logger-Puffergrößen"</string>
diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml
index 3d91c1d17fa8..96a6086273f5 100644
--- a/packages/SettingsLib/res/values-el/arrays.xml
+++ b/packages/SettingsLib/res/values-el/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Χρήση ελέγχου HDCP μόνο για περιεχόμενο DRM"</item>
<item msgid="45075631231212732">"Να χρησιμοποιείται πάντα έλεγχος HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Απενεργοποιήθηκε"</item>
+ <item msgid="1969681323976948639">"Ενεργοποιήθηκε το φιλτράρισμα"</item>
+ <item msgid="8719029132154020716">"Ενεργοποιήθηκε"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Προεπιλογή)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml
index 370c9c0d1e9a..f7ec12be8651 100644
--- a/packages/SettingsLib/res/values-el/strings.xml
+++ b/packages/SettingsLib/res/values-el/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Συνδέθηκε αυτόματα μέσω %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Συνδέθηκε αυτόματα μέσω παρόχου αξιολόγησης δικτύου"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Συνδέθηκε μέσω %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> από <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Συνδέθηκε μέσω <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Διαθέσιμο μέσω %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Πατήστε για ρύθμιση"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Πατήστε για εγγραφή"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Συνδέθηκε, χωρίς σύνδεση στο διαδίκτυο"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Δεν υπάρχει σύνδεση στο διαδίκτυο"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Απαιτείται σύνδεση"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Το σημείο πρόσβασης είναι προσωρινά πλήρες"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Συνδέθηκε μέσω %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Διαθέσιμο μέσω %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Η σύνδεση απέτυχε"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Μη έγκυρο URL διακομιστή OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Η σύνδεση με τον διακομιστή OSU απέτυχε"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Η επαλήθευση του διακομιστή OSU απέτυχε"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Μη έγκυρο πιστοποιητικό διακομιστή OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Η παροχή ακυρώθηκε"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Η παροχή δεν είναι διαθέσιμη"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Μη έγκυρο URL διακομιστή OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Μη αναμενόμενος τύπος εντολής"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Μη αναμενόμενος τύπος μηνύματος SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Η ανταλλαγή μηνύματος SOAP απέτυχε"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Αποτυχία εκκίνησης λειτουργίας ακρόασης ανακατεύθυνσης"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Έληξε το χρονικό όριο αναμονής για ανακατεύθυνση"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Δεν βρέθηκε δραστηριότητα OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Μη αναμενόμενη κατάσταση μηνύματος SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Η εύρεση PPS-MO απέτυχε"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Η εύρεση αξιόπιστου ριζικού κόμβου για τον διακομιστή AAA απέτυχε"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Η εύρεση αξιόπιστου ριζικού κόμβου για τον διακομιστή αποκατάστασης απέτυχε"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Η εύρεση αξιόπιστου ριζικού κόμβου για τον διακομιστή πολιτικής απέτυχε"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Η ανάκτηση αξιόπιστων πιστοποιητικών ρίζας απέτυχε"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Η εύρεση αξιόπιστου πιστοποιητικού ρίζας για τον διακομιστή AAA απέτυχε"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Η προσθήκη διαμόρφωσης PassPoint απέτυχε"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Η εύρεση παρόχου OSU απέτυχε"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Σύνδεση"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Συνδέθηκε"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Σύνδεση σε διακομιστή OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Ο διακομιστής OSU επαληθεύτηκε"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Συνδέθηκε σε διακομιστή OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Αρχική ανταλλαγή SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Αναμονή για απόκριση ανατακατεύθυνσης"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Ελήφθη απόκριση ανακατεύθυνσης"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Δεύτερη ανταλλαγή SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Τρίτη ανταλλαγή SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ανάκτηση αξιόπιστων πιστοποιητικών ρίζας"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Η παροχή ολοκληρώθηκε"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Άνοιγμα <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Δεν ήταν δυνατή η σύνδεση"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Ολοκλήρωση εγγραφής…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Δεν ήταν δυνατή η ολοκλήρωση της εγγραφής. Πατήστε για να δοκιμάσετε ξανά."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Η εγγραφή ολοκληρώθηκε. Σύνδεση…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Πολύ αργή"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Αργή"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ΟΚ"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Παραμονή σε λειτουργία"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Η οθόνη δεν θα μεταβαίνει ποτέ σε κατάσταση αδράνειας κατά τη φόρτιση"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ενερ/ση καταγρ. Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Λήψη πακέτων Bluetooth. (Εναλλαγή Bluetooth μετά την αλλαγή αυτής της ρύθμισης)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Ξεκλείδωμα OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Να επιτρέπεται το ξεκλείδωμα λειτουργίας εκκίνησης"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Να επιτρέπεται το ξεκλείδωμα OEM;"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Δικτύωση"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Πιστοποίηση ασύρματης οθόνης"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Ενεργοποίηση λεπτομερ. καταγραφής Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Τυχαιοποίηση συνδεδεμένης διεύθυνσης MAC"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Πάντα ενεργά δεδομένα κινητής τηλεφωνίας"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Σύνδεση επιτάχυνσης υλικού"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Εμφάνιση συσκευών Bluetooth χωρίς ονόματα"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Δεν ήταν δυνατή η σύνδεση"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Εμφάνιση επιλογών για πιστοποίηση ασύρματης οθόνης"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Αύξηση επιπέδου καταγ. Wi-Fi, εμφάνιση ανά SSID RSSI στο εργαλείο επιλογής Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Τυχαιοποίηση διεύθυνσης MAC κατά τη σύνδεση σε δίκτυα Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Μέτρηση με βάση τη χρήση"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Χωρίς μέτρηση με βάση τη χρήση"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Μέγεθος προσωρινής μνήμης για τη λειτουργία καταγραφής"</string>
diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml
index e7d0bd4753c3..c48f62b7e9e2 100644
--- a/packages/SettingsLib/res/values-en-rAU/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Disabled"</item>
+ <item msgid="1969681323976948639">"Enabled Filtered"</item>
+ <item msgid="8719029132154020716">"Enabled"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml
index 5684369fb23d..b9d309398d67 100644
--- a/packages/SettingsLib/res/values-en-rAU/strings.xml
+++ b/packages/SettingsLib/res/values-en-rAU/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> by <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tap to set up"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap to sign up"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"No Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign-in required"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connection failed"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid OSU server URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU server connection failed"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU server validation failed"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid OSU server certificate"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning aborted"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning not available"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid OSU server URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unexpected command type"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unexpected SOAP message type"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP message exchange failed"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Redirect listener failed to start"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timed out waiting for redirect"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No OSU activity found"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unexpected SOAP message status"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Failed to find PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Failed to find trust root node for AAA server"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Failed to find trust root node for remediation server"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Failed to find trust root node for policy server"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Failed to retrieve trust root certificates"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Failed to find trust root certificate for AAA server"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Failed to add PassPoint configuration"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Failed to find an OSU provider"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connecting"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connected"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connecting to OSU server"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server validated"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Connected to OSU server"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Initial SOAP exchange"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Waiting for redirect response"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Received redirect response"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Second SOAP exchange"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Third SOAP exchange"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Retrieving trust root certificates"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning complete"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Couldn’t connect"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completing sign-up…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Couldn’t complete sign-up. Tap to try again"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Sign-up complete. Connecting…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Slow"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Connected MAC randomisation"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomise MAC address when connecting to Wi‑Fi networks"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string>
diff --git a/packages/SettingsLib/res/values-en-rCA/arrays.xml b/packages/SettingsLib/res/values-en-rCA/arrays.xml
index e7d0bd4753c3..c48f62b7e9e2 100644
--- a/packages/SettingsLib/res/values-en-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rCA/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Disabled"</item>
+ <item msgid="1969681323976948639">"Enabled Filtered"</item>
+ <item msgid="8719029132154020716">"Enabled"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml
index 5684369fb23d..b9d309398d67 100644
--- a/packages/SettingsLib/res/values-en-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-en-rCA/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> by <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tap to set up"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap to sign up"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"No Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign-in required"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connection failed"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid OSU server URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU server connection failed"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU server validation failed"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid OSU server certificate"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning aborted"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning not available"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid OSU server URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unexpected command type"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unexpected SOAP message type"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP message exchange failed"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Redirect listener failed to start"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timed out waiting for redirect"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No OSU activity found"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unexpected SOAP message status"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Failed to find PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Failed to find trust root node for AAA server"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Failed to find trust root node for remediation server"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Failed to find trust root node for policy server"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Failed to retrieve trust root certificates"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Failed to find trust root certificate for AAA server"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Failed to add PassPoint configuration"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Failed to find an OSU provider"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connecting"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connected"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connecting to OSU server"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server validated"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Connected to OSU server"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Initial SOAP exchange"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Waiting for redirect response"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Received redirect response"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Second SOAP exchange"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Third SOAP exchange"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Retrieving trust root certificates"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning complete"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Couldn’t connect"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completing sign-up…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Couldn’t complete sign-up. Tap to try again"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Sign-up complete. Connecting…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Slow"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Connected MAC randomisation"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomise MAC address when connecting to Wi‑Fi networks"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string>
diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml
index e7d0bd4753c3..c48f62b7e9e2 100644
--- a/packages/SettingsLib/res/values-en-rGB/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Disabled"</item>
+ <item msgid="1969681323976948639">"Enabled Filtered"</item>
+ <item msgid="8719029132154020716">"Enabled"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml
index 5684369fb23d..b9d309398d67 100644
--- a/packages/SettingsLib/res/values-en-rGB/strings.xml
+++ b/packages/SettingsLib/res/values-en-rGB/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> by <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tap to set up"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap to sign up"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"No Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign-in required"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connection failed"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid OSU server URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU server connection failed"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU server validation failed"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid OSU server certificate"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning aborted"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning not available"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid OSU server URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unexpected command type"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unexpected SOAP message type"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP message exchange failed"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Redirect listener failed to start"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timed out waiting for redirect"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No OSU activity found"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unexpected SOAP message status"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Failed to find PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Failed to find trust root node for AAA server"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Failed to find trust root node for remediation server"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Failed to find trust root node for policy server"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Failed to retrieve trust root certificates"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Failed to find trust root certificate for AAA server"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Failed to add PassPoint configuration"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Failed to find an OSU provider"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connecting"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connected"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connecting to OSU server"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server validated"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Connected to OSU server"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Initial SOAP exchange"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Waiting for redirect response"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Received redirect response"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Second SOAP exchange"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Third SOAP exchange"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Retrieving trust root certificates"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning complete"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Couldn’t connect"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completing sign-up…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Couldn’t complete sign-up. Tap to try again"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Sign-up complete. Connecting…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Slow"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Connected MAC randomisation"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomise MAC address when connecting to Wi‑Fi networks"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string>
diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml
index e7d0bd4753c3..c48f62b7e9e2 100644
--- a/packages/SettingsLib/res/values-en-rIN/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item>
<item msgid="45075631231212732">"Always use HDCP checking"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Disabled"</item>
+ <item msgid="1969681323976948639">"Enabled Filtered"</item>
+ <item msgid="8719029132154020716">"Enabled"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml
index 5684369fb23d..b9d309398d67 100644
--- a/packages/SettingsLib/res/values-en-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-en-rIN/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> by <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tap to set up"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap to sign up"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"No Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign-in required"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connection failed"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid OSU server URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU server connection failed"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU server validation failed"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid OSU server certificate"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning aborted"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning not available"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid OSU server URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unexpected command type"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unexpected SOAP message type"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP message exchange failed"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Redirect listener failed to start"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timed out waiting for redirect"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No OSU activity found"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unexpected SOAP message status"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Failed to find PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Failed to find trust root node for AAA server"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Failed to find trust root node for remediation server"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Failed to find trust root node for policy server"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Failed to retrieve trust root certificates"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Failed to find trust root certificate for AAA server"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Failed to add PassPoint configuration"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Failed to find an OSU provider"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connecting"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connected"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connecting to OSU server"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server validated"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Connected to OSU server"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Initial SOAP exchange"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Waiting for redirect response"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Received redirect response"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Second SOAP exchange"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Third SOAP exchange"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Retrieving trust root certificates"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning complete"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Couldn’t connect"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completing sign-up…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Couldn’t complete sign-up. Tap to try again"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Sign-up complete. Connecting…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Slow"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Connected MAC randomisation"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomise MAC address when connecting to Wi‑Fi networks"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string>
diff --git a/packages/SettingsLib/res/values-en-rXC/arrays.xml b/packages/SettingsLib/res/values-en-rXC/arrays.xml
index 6dd2e0e0f429..90594fd670a8 100644
--- a/packages/SettingsLib/res/values-en-rXC/arrays.xml
+++ b/packages/SettingsLib/res/values-en-rXC/arrays.xml
@@ -22,241 +22,243 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string-array name="wifi_status">
<item msgid="1922181315419294640"></item>
- <item msgid="8934131797783724664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎Scanning…‎‏‎‎‏‎"</item>
- <item msgid="8513729475867537913">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎Connecting…‎‏‎‎‏‎"</item>
- <item msgid="515055375277271756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎Authenticating…‎‏‎‎‏‎"</item>
- <item msgid="1943354004029184381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎Obtaining IP address…‎‏‎‎‏‎"</item>
- <item msgid="4221763391123233270">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎Connected‎‏‎‎‏‎"</item>
- <item msgid="624838831631122137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎Suspended‎‏‎‎‏‎"</item>
- <item msgid="7979680559596111948">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‎Disconnecting…‎‏‎‎‏‎"</item>
- <item msgid="1634960474403853625">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎Disconnected‎‏‎‎‏‎"</item>
- <item msgid="746097431216080650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‎Unsuccessful‎‏‎‎‏‎"</item>
- <item msgid="6367044185730295334">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‎Blocked‎‏‎‎‏‎"</item>
- <item msgid="503942654197908005">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎Temporarily avoiding poor connection‎‏‎‎‏‎"</item>
+ <item msgid="8934131797783724664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎Scanning…‎‏‎‎‏‎"</item>
+ <item msgid="8513729475867537913">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎Connecting…‎‏‎‎‏‎"</item>
+ <item msgid="515055375277271756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎Authenticating…‎‏‎‎‏‎"</item>
+ <item msgid="1943354004029184381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎Obtaining IP address…‎‏‎‎‏‎"</item>
+ <item msgid="4221763391123233270">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎Connected‎‏‎‎‏‎"</item>
+ <item msgid="624838831631122137">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎Suspended‎‏‎‎‏‎"</item>
+ <item msgid="7979680559596111948">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‎Disconnecting…‎‏‎‎‏‎"</item>
+ <item msgid="1634960474403853625">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎Disconnected‎‏‎‎‏‎"</item>
+ <item msgid="746097431216080650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‎Unsuccessful‎‏‎‎‏‎"</item>
+ <item msgid="6367044185730295334">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‎Blocked‎‏‎‎‏‎"</item>
+ <item msgid="503942654197908005">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎Temporarily avoiding poor connection‎‏‎‎‏‎"</item>
</string-array>
<string-array name="wifi_status_with_ssid">
<item msgid="7714855332363650812"></item>
- <item msgid="8878186979715711006">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎Scanning…‎‏‎‎‏‎"</item>
- <item msgid="355508996603873860">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎Connecting to ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
- <item msgid="554971459996405634">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎Authenticating with ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
- <item msgid="7928343808033020343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎Obtaining IP address from ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
- <item msgid="8937994881315223448">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎Connected to ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</item>
- <item msgid="1330262655415760617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎Suspended‎‏‎‎‏‎"</item>
- <item msgid="7698638434317271902">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎Disconnecting from ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
- <item msgid="197508606402264311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎Disconnected‎‏‎‎‏‎"</item>
- <item msgid="8578370891960825148">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎Unsuccessful‎‏‎‎‏‎"</item>
- <item msgid="5660739516542454527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎Blocked‎‏‎‎‏‎"</item>
- <item msgid="1805837518286731242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎Temporarily avoiding poor connection‎‏‎‎‏‎"</item>
+ <item msgid="8878186979715711006">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎Scanning…‎‏‎‎‏‎"</item>
+ <item msgid="355508996603873860">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎Connecting to ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
+ <item msgid="554971459996405634">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎Authenticating with ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
+ <item msgid="7928343808033020343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‏‎Obtaining IP address from ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
+ <item msgid="8937994881315223448">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎Connected to ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</item>
+ <item msgid="1330262655415760617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‎‏‎Suspended‎‏‎‎‏‎"</item>
+ <item msgid="7698638434317271902">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‎Disconnecting from ‎‏‎‎‏‏‎<xliff:g id="NETWORK_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</item>
+ <item msgid="197508606402264311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎Disconnected‎‏‎‎‏‎"</item>
+ <item msgid="8578370891960825148">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎Unsuccessful‎‏‎‎‏‎"</item>
+ <item msgid="5660739516542454527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‏‏‏‎Blocked‎‏‎‎‏‎"</item>
+ <item msgid="1805837518286731242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎Temporarily avoiding poor connection‎‏‎‎‏‎"</item>
</string-array>
<string-array name="hdcp_checking_titles">
- <item msgid="441827799230089869">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎Never check‎‏‎‎‏‎"</item>
- <item msgid="6042769699089883931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎Check for DRM content only‎‏‎‎‏‎"</item>
- <item msgid="9174900380056846820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎Always check‎‏‎‎‏‎"</item>
+ <item msgid="441827799230089869">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎Never check‎‏‎‎‏‎"</item>
+ <item msgid="6042769699089883931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎Check for DRM content only‎‏‎‎‏‎"</item>
+ <item msgid="9174900380056846820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎Always check‎‏‎‎‏‎"</item>
</string-array>
<string-array name="hdcp_checking_summaries">
- <item msgid="505558545611516707">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎Never use HDCP checking‎‏‎‎‏‎"</item>
- <item msgid="3878793616631049349">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎Use HDCP checking for DRM content only‎‏‎‎‏‎"</item>
- <item msgid="45075631231212732">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎Always use HDCP checking‎‏‎‎‏‎"</item>
+ <item msgid="505558545611516707">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎Never use HDCP checking‎‏‎‎‏‎"</item>
+ <item msgid="3878793616631049349">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎Use HDCP checking for DRM content only‎‏‎‎‏‎"</item>
+ <item msgid="45075631231212732">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎Always use HDCP checking‎‏‎‎‏‎"</item>
+ </string-array>
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‏‎‎‎‎Disabled‎‏‎‎‏‎"</item>
+ <item msgid="1969681323976948639">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎Enabled Filtered‎‏‎‎‏‎"</item>
+ <item msgid="8719029132154020716">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎Enabled‎‏‎‎‏‎"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
<string-array name="bluetooth_avrcp_versions">
- <item msgid="5347678900838034763">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎AVRCP 1.4 (Default)‎‏‎‎‏‎"</item>
- <item msgid="2809759619990248160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎AVRCP 1.3‎‏‎‎‏‎"</item>
- <item msgid="6199178154704729352">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎AVRCP 1.5‎‏‎‎‏‎"</item>
- <item msgid="5172170854953034852">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎AVRCP 1.6‎‏‎‎‏‎"</item>
+ <item msgid="5347678900838034763">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎AVRCP 1.4 (Default)‎‏‎‎‏‎"</item>
+ <item msgid="2809759619990248160">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎AVRCP 1.3‎‏‎‎‏‎"</item>
+ <item msgid="6199178154704729352">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎AVRCP 1.5‎‏‎‎‏‎"</item>
+ <item msgid="5172170854953034852">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎AVRCP 1.6‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_avrcp_version_values">
- <item msgid="2838624067805073303">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎avrcp14‎‏‎‎‏‎"</item>
- <item msgid="3011533352527449572">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎avrcp13‎‏‎‎‏‎"</item>
- <item msgid="8837606198371920819">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎avrcp15‎‏‎‎‏‎"</item>
- <item msgid="3422726142222090896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‎avrcp16‎‏‎‎‏‎"</item>
+ <item msgid="2838624067805073303">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎avrcp14‎‏‎‎‏‎"</item>
+ <item msgid="3011533352527449572">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎avrcp13‎‏‎‎‏‎"</item>
+ <item msgid="8837606198371920819">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎avrcp15‎‏‎‎‏‎"</item>
+ <item msgid="3422726142222090896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‎avrcp16‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
- <item msgid="7539690996561263909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎SBC‎‏‎‎‏‎"</item>
- <item msgid="686685526567131661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎AAC‎‏‎‎‏‎"</item>
- <item msgid="5254942598247222737">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX">aptX™</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
- <item msgid="2091430979086738145">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX_HD">aptX™ HD</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
- <item msgid="6751080638867012696">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‎LDAC‎‏‎‎‏‎"</item>
- <item msgid="723675059572222462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎Enable Optional Codecs‎‏‎‎‏‎"</item>
- <item msgid="3304843301758635896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎Disable Optional Codecs‎‏‎‎‏‎"</item>
+ <item msgid="7065842274271279580">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+ <item msgid="7539690996561263909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎SBC‎‏‎‎‏‎"</item>
+ <item msgid="686685526567131661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎AAC‎‏‎‎‏‎"</item>
+ <item msgid="5254942598247222737">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX">aptX™</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
+ <item msgid="2091430979086738145">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX_HD">aptX™ HD</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
+ <item msgid="6751080638867012696">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‎‎LDAC‎‏‎‎‏‎"</item>
+ <item msgid="723675059572222462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎Enable Optional Codecs‎‏‎‎‏‎"</item>
+ <item msgid="3304843301758635896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎Disable Optional Codecs‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
- <item msgid="6898329690939802290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‎SBC‎‏‎‎‏‎"</item>
- <item msgid="6839647709301342559">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‎AAC‎‏‎‎‏‎"</item>
- <item msgid="7848030269621918608">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX">aptX™</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
- <item msgid="298198075927343893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX_HD">aptX™ HD</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
- <item msgid="7950781694447359344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎LDAC‎‏‎‎‏‎"</item>
- <item msgid="2209680154067241740">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎‎Enable Optional Codecs‎‏‎‎‏‎"</item>
- <item msgid="741805482892725657">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎Disable Optional Codecs‎‏‎‎‏‎"</item>
+ <item msgid="5062108632402595000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+ <item msgid="6898329690939802290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‎‎SBC‎‏‎‎‏‎"</item>
+ <item msgid="6839647709301342559">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‎AAC‎‏‎‎‏‎"</item>
+ <item msgid="7848030269621918608">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX">aptX™</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
+ <item msgid="298198075927343893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="QUALCOMM">Qualcomm®</xliff:g>‎‏‎‎‏‏‏‎ ‎‏‎‎‏‏‎<xliff:g id="APTX_HD">aptX™ HD</xliff:g>‎‏‎‎‏‏‏‎ audio‎‏‎‎‏‎"</item>
+ <item msgid="7950781694447359344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎LDAC‎‏‎‎‏‎"</item>
+ <item msgid="2209680154067241740">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‎‏‏‎‎‎Enable Optional Codecs‎‏‎‎‏‎"</item>
+ <item msgid="741805482892725657">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎Disable Optional Codecs‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="3093023430402746802">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
- <item msgid="8895532488906185219">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎44.1 kHz‎‏‎‎‏‎"</item>
- <item msgid="2909915718994807056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎48.0 kHz‎‏‎‎‏‎"</item>
- <item msgid="3347287377354164611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎88.2 kHz‎‏‎‎‏‎"</item>
- <item msgid="1234212100239985373">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎96.0 kHz‎‏‎‎‏‎"</item>
+ <item msgid="3093023430402746802">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+ <item msgid="8895532488906185219">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎44.1 kHz‎‏‎‎‏‎"</item>
+ <item msgid="2909915718994807056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎48.0 kHz‎‏‎‎‏‎"</item>
+ <item msgid="3347287377354164611">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎88.2 kHz‎‏‎‎‏‎"</item>
+ <item msgid="1234212100239985373">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎96.0 kHz‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="3214516120190965356">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
- <item msgid="4482862757811638365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎44.1 kHz‎‏‎‎‏‎"</item>
- <item msgid="354495328188724404">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎48.0 kHz‎‏‎‎‏‎"</item>
- <item msgid="7329816882213695083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎88.2 kHz‎‏‎‎‏‎"</item>
- <item msgid="6967397666254430476">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎96.0 kHz‎‏‎‎‏‎"</item>
+ <item msgid="3214516120190965356">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+ <item msgid="4482862757811638365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎44.1 kHz‎‏‎‎‏‎"</item>
+ <item msgid="354495328188724404">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎48.0 kHz‎‏‎‎‏‎"</item>
+ <item msgid="7329816882213695083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎88.2 kHz‎‏‎‎‏‎"</item>
+ <item msgid="6967397666254430476">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎96.0 kHz‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="2684127272582591429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
- <item msgid="5618929009984956469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎16 bits/sample‎‏‎‎‏‎"</item>
- <item msgid="3412640499234627248">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎24 bits/sample‎‏‎‎‏‎"</item>
- <item msgid="121583001492929387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎32 bits/sample‎‏‎‎‏‎"</item>
+ <item msgid="2684127272582591429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+ <item msgid="5618929009984956469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎16 bits/sample‎‏‎‎‏‎"</item>
+ <item msgid="3412640499234627248">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎24 bits/sample‎‏‎‎‏‎"</item>
+ <item msgid="121583001492929387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎32 bits/sample‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="1081159789834584363">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
- <item msgid="4726688794884191540">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎16 bits/sample‎‏‎‎‏‎"</item>
- <item msgid="305344756485516870">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎24 bits/sample‎‏‎‎‏‎"</item>
- <item msgid="244568657919675099">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎32 bits/sample‎‏‎‎‏‎"</item>
+ <item msgid="1081159789834584363">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+ <item msgid="4726688794884191540">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎16 bits/sample‎‏‎‎‏‎"</item>
+ <item msgid="305344756485516870">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎24 bits/sample‎‏‎‎‏‎"</item>
+ <item msgid="244568657919675099">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‎32 bits/sample‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="5226878858503393706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
- <item msgid="4106832974775067314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎Mono‎‏‎‎‏‎"</item>
- <item msgid="5571632958424639155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‎Stereo‎‏‎‎‏‎"</item>
+ <item msgid="5226878858503393706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+ <item msgid="4106832974775067314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎Mono‎‏‎‎‏‎"</item>
+ <item msgid="5571632958424639155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‎Stereo‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="4118561796005528173">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
- <item msgid="8900559293912978337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‏‎Mono‎‏‎‎‏‎"</item>
- <item msgid="8883739882299884241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎Stereo‎‏‎‎‏‎"</item>
+ <item msgid="4118561796005528173">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‏‎Use System Selection (Default)‎‏‎‎‏‎"</item>
+ <item msgid="8900559293912978337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‎‎‎‎‏‎Mono‎‏‎‎‏‎"</item>
+ <item msgid="8883739882299884241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‏‎Stereo‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles">
- <item msgid="7158319962230727476">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎Optimized for Audio Quality (990kbps/909kbps)‎‏‎‎‏‎"</item>
- <item msgid="2921767058740704969">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎Balanced Audio And Connection Quality (660kbps/606kbps)‎‏‎‎‏‎"</item>
- <item msgid="8860982705384396512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎Optimized for Connection Quality (330kbps/303kbps)‎‏‎‎‏‎"</item>
- <item msgid="4414060457677684127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎Best Effort (Adaptive Bit Rate)‎‏‎‎‏‎"</item>
+ <item msgid="7158319962230727476">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎Optimized for Audio Quality (990kbps/909kbps)‎‏‎‎‏‎"</item>
+ <item msgid="2921767058740704969">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎Balanced Audio And Connection Quality (660kbps/606kbps)‎‏‎‎‏‎"</item>
+ <item msgid="8860982705384396512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎Optimized for Connection Quality (330kbps/303kbps)‎‏‎‎‏‎"</item>
+ <item msgid="4414060457677684127">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎Best Effort (Adaptive Bit Rate)‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries">
- <item msgid="6398189564246596868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎Optimized for Audio Quality‎‏‎‎‏‎"</item>
- <item msgid="4327143584633311908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎Balanced Audio And Connection Quality‎‏‎‎‏‎"</item>
- <item msgid="4681409244565426925">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎Optimized for Connection Quality‎‏‎‎‏‎"</item>
- <item msgid="364670732877872677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎Best Effort (Adaptive Bit Rate)‎‏‎‎‏‎"</item>
+ <item msgid="6398189564246596868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎Optimized for Audio Quality‎‏‎‎‏‎"</item>
+ <item msgid="4327143584633311908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎Balanced Audio And Connection Quality‎‏‎‎‏‎"</item>
+ <item msgid="4681409244565426925">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎Optimized for Connection Quality‎‏‎‎‏‎"</item>
+ <item msgid="364670732877872677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎Best Effort (Adaptive Bit Rate)‎‏‎‎‏‎"</item>
</string-array>
<string-array name="bluetooth_audio_active_device_summaries">
<item msgid="4862957058729193940"></item>
- <item msgid="6481691720774549651">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎, active‎‏‎‎‏‎"</item>
- <item msgid="8962366465966010158">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎, active (media)‎‏‎‎‏‎"</item>
- <item msgid="4046665544396189228">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎, active (phone)‎‏‎‎‏‎"</item>
+ <item msgid="6481691720774549651">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎, active‎‏‎‎‏‎"</item>
+ <item msgid="8962366465966010158">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎, active (media)‎‏‎‎‏‎"</item>
+ <item msgid="4046665544396189228">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎, active (phone)‎‏‎‎‏‎"</item>
</string-array>
<string-array name="select_logd_size_titles">
- <item msgid="8665206199209698501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎Off‎‏‎‎‏‎"</item>
- <item msgid="1593289376502312923">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎64K‎‏‎‎‏‎"</item>
- <item msgid="487545340236145324">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎256K‎‏‎‎‏‎"</item>
- <item msgid="2423528675294333831">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎1M‎‏‎‎‏‎"</item>
- <item msgid="180883774509476541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎4M‎‏‎‎‏‎"</item>
- <item msgid="2803199102589126938">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎16M‎‏‎‎‏‎"</item>
+ <item msgid="8665206199209698501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎Off‎‏‎‎‏‎"</item>
+ <item msgid="1593289376502312923">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‏‎64K‎‏‎‎‏‎"</item>
+ <item msgid="487545340236145324">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎256K‎‏‎‎‏‎"</item>
+ <item msgid="2423528675294333831">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎1M‎‏‎‎‏‎"</item>
+ <item msgid="180883774509476541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎4M‎‏‎‎‏‎"</item>
+ <item msgid="2803199102589126938">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‎‎16M‎‏‎‎‏‎"</item>
</string-array>
<string-array name="select_logd_size_lowram_titles">
- <item msgid="6089470720451068364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎Off‎‏‎‎‏‎"</item>
- <item msgid="4622460333038586791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎64K‎‏‎‎‏‎"</item>
- <item msgid="2212125625169582330">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎256K‎‏‎‎‏‎"</item>
- <item msgid="1704946766699242653">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‏‎1M‎‏‎‎‏‎"</item>
+ <item msgid="6089470720451068364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎Off‎‏‎‎‏‎"</item>
+ <item msgid="4622460333038586791">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎64K‎‏‎‎‏‎"</item>
+ <item msgid="2212125625169582330">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎256K‎‏‎‎‏‎"</item>
+ <item msgid="1704946766699242653">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‏‎1M‎‏‎‎‏‎"</item>
</string-array>
<string-array name="select_logd_size_summaries">
- <item msgid="6921048829791179331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎Off‎‏‎‎‏‎"</item>
- <item msgid="2969458029344750262">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎64K per log buffer‎‏‎‎‏‎"</item>
- <item msgid="1342285115665698168">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎256K per log buffer‎‏‎‎‏‎"</item>
- <item msgid="1314234299552254621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‎1M per log buffer‎‏‎‎‏‎"</item>
- <item msgid="3606047780792894151">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎4M per log buffer‎‏‎‎‏‎"</item>
- <item msgid="5431354956856655120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎16M per log buffer‎‏‎‎‏‎"</item>
+ <item msgid="6921048829791179331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎Off‎‏‎‎‏‎"</item>
+ <item msgid="2969458029344750262">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎64K per log buffer‎‏‎‎‏‎"</item>
+ <item msgid="1342285115665698168">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎256K per log buffer‎‏‎‎‏‎"</item>
+ <item msgid="1314234299552254621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‎1M per log buffer‎‏‎‎‏‎"</item>
+ <item msgid="3606047780792894151">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎4M per log buffer‎‏‎‎‏‎"</item>
+ <item msgid="5431354956856655120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎16M per log buffer‎‏‎‎‏‎"</item>
</string-array>
<string-array name="select_logpersist_titles">
- <item msgid="1744840221860799971">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎Off‎‏‎‎‏‎"</item>
- <item msgid="3054662377365844197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎All‎‏‎‎‏‎"</item>
- <item msgid="688870735111627832">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎All but radio‎‏‎‎‏‎"</item>
- <item msgid="2850427388488887328">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎kernel only‎‏‎‎‏‎"</item>
+ <item msgid="1744840221860799971">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‏‎Off‎‏‎‎‏‎"</item>
+ <item msgid="3054662377365844197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‎All‎‏‎‎‏‎"</item>
+ <item msgid="688870735111627832">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎All but radio‎‏‎‎‏‎"</item>
+ <item msgid="2850427388488887328">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎kernel only‎‏‎‎‏‎"</item>
</string-array>
<string-array name="select_logpersist_summaries">
- <item msgid="2216470072500521830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎Off‎‏‎‎‏‎"</item>
- <item msgid="172978079776521897">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎All log buffers‎‏‎‎‏‎"</item>
- <item msgid="3873873912383879240">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎All but radio log buffers‎‏‎‎‏‎"</item>
- <item msgid="8489661142527693381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎kernel log buffer only‎‏‎‎‏‎"</item>
+ <item msgid="2216470072500521830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎Off‎‏‎‎‏‎"</item>
+ <item msgid="172978079776521897">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎All log buffers‎‏‎‎‏‎"</item>
+ <item msgid="3873873912383879240">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎All but radio log buffers‎‏‎‎‏‎"</item>
+ <item msgid="8489661142527693381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎kernel log buffer only‎‏‎‎‏‎"</item>
</string-array>
<string-array name="window_animation_scale_entries">
- <item msgid="8134156599370824081">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎Animation off‎‏‎‎‏‎"</item>
- <item msgid="6624864048416710414">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎Animation scale .5x‎‏‎‎‏‎"</item>
- <item msgid="2219332261255416635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎Animation scale 1x‎‏‎‎‏‎"</item>
- <item msgid="3544428804137048509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎Animation scale 1.5x‎‏‎‎‏‎"</item>
- <item msgid="3110710404225974514">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎Animation scale 2x‎‏‎‎‏‎"</item>
- <item msgid="4402738611528318731">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎Animation scale 5x‎‏‎‎‏‎"</item>
- <item msgid="6189539267968330656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‎Animation scale 10x‎‏‎‎‏‎"</item>
+ <item msgid="8134156599370824081">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‎Animation off‎‏‎‎‏‎"</item>
+ <item msgid="6624864048416710414">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‎Animation scale .5x‎‏‎‎‏‎"</item>
+ <item msgid="2219332261255416635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‏‏‎Animation scale 1x‎‏‎‎‏‎"</item>
+ <item msgid="3544428804137048509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎Animation scale 1.5x‎‏‎‎‏‎"</item>
+ <item msgid="3110710404225974514">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎‎‏‎‎Animation scale 2x‎‏‎‎‏‎"</item>
+ <item msgid="4402738611528318731">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎Animation scale 5x‎‏‎‎‏‎"</item>
+ <item msgid="6189539267968330656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‎Animation scale 10x‎‏‎‎‏‎"</item>
</string-array>
<string-array name="transition_animation_scale_entries">
- <item msgid="8464255836173039442">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎Animation off‎‏‎‎‏‎"</item>
- <item msgid="3375781541913316411">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎Animation scale .5x‎‏‎‎‏‎"</item>
- <item msgid="1991041427801869945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎Animation scale 1x‎‏‎‎‏‎"</item>
- <item msgid="4012689927622382874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎Animation scale 1.5x‎‏‎‎‏‎"</item>
- <item msgid="3289156759925947169">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎Animation scale 2x‎‏‎‎‏‎"</item>
- <item msgid="7705857441213621835">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎Animation scale 5x‎‏‎‎‏‎"</item>
- <item msgid="6660750935954853365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎Animation scale 10x‎‏‎‎‏‎"</item>
+ <item msgid="8464255836173039442">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎Animation off‎‏‎‎‏‎"</item>
+ <item msgid="3375781541913316411">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎Animation scale .5x‎‏‎‎‏‎"</item>
+ <item msgid="1991041427801869945">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎Animation scale 1x‎‏‎‎‏‎"</item>
+ <item msgid="4012689927622382874">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎Animation scale 1.5x‎‏‎‎‏‎"</item>
+ <item msgid="3289156759925947169">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎Animation scale 2x‎‏‎‎‏‎"</item>
+ <item msgid="7705857441213621835">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎Animation scale 5x‎‏‎‎‏‎"</item>
+ <item msgid="6660750935954853365">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎Animation scale 10x‎‏‎‎‏‎"</item>
</string-array>
<string-array name="animator_duration_scale_entries">
- <item msgid="6039901060648228241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‎Animation off‎‏‎‎‏‎"</item>
- <item msgid="1138649021950863198">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‏‎‎Animation scale .5x‎‏‎‎‏‎"</item>
- <item msgid="4394388961370833040">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎Animation scale 1x‎‏‎‎‏‎"</item>
- <item msgid="8125427921655194973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎Animation scale 1.5x‎‏‎‎‏‎"</item>
- <item msgid="3334024790739189573">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎Animation scale 2x‎‏‎‎‏‎"</item>
- <item msgid="3170120558236848008">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎Animation scale 5x‎‏‎‎‏‎"</item>
- <item msgid="1069584980746680398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎Animation scale 10x‎‏‎‎‏‎"</item>
+ <item msgid="6039901060648228241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‎Animation off‎‏‎‎‏‎"</item>
+ <item msgid="1138649021950863198">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‏‎‎Animation scale .5x‎‏‎‎‏‎"</item>
+ <item msgid="4394388961370833040">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎Animation scale 1x‎‏‎‎‏‎"</item>
+ <item msgid="8125427921655194973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎Animation scale 1.5x‎‏‎‎‏‎"</item>
+ <item msgid="3334024790739189573">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎Animation scale 2x‎‏‎‎‏‎"</item>
+ <item msgid="3170120558236848008">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‎‎‏‎‎‎‎Animation scale 5x‎‏‎‎‏‎"</item>
+ <item msgid="1069584980746680398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎Animation scale 10x‎‏‎‎‏‎"</item>
</string-array>
<string-array name="overlay_display_devices_entries">
- <item msgid="1606809880904982133">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎None‎‏‎‎‏‎"</item>
- <item msgid="9033194758688161545">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎480p‎‏‎‎‏‎"</item>
- <item msgid="1025306206556583600">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎480p (secure)‎‏‎‎‏‎"</item>
- <item msgid="1853913333042744661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎720p‎‏‎‎‏‎"</item>
- <item msgid="3414540279805870511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎720p (secure)‎‏‎‎‏‎"</item>
- <item msgid="9039818062847141551">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎1080p‎‏‎‎‏‎"</item>
- <item msgid="4939496949750174834">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎1080p (secure)‎‏‎‎‏‎"</item>
- <item msgid="1833612718524903568">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎4K‎‏‎‎‏‎"</item>
- <item msgid="238303513127879234">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎4K (secure)‎‏‎‎‏‎"</item>
- <item msgid="3547211260846843098">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎4K (upscaled)‎‏‎‎‏‎"</item>
- <item msgid="5411365648951414254">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎4K (upscaled, secure)‎‏‎‎‏‎"</item>
- <item msgid="1311305077526792901">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎720p, 1080p (dual screen)‎‏‎‎‏‎"</item>
+ <item msgid="1606809880904982133">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎None‎‏‎‎‏‎"</item>
+ <item msgid="9033194758688161545">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎480p‎‏‎‎‏‎"</item>
+ <item msgid="1025306206556583600">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎480p (secure)‎‏‎‎‏‎"</item>
+ <item msgid="1853913333042744661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎720p‎‏‎‎‏‎"</item>
+ <item msgid="3414540279805870511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‏‎720p (secure)‎‏‎‎‏‎"</item>
+ <item msgid="9039818062847141551">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎1080p‎‏‎‎‏‎"</item>
+ <item msgid="4939496949750174834">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎1080p (secure)‎‏‎‎‏‎"</item>
+ <item msgid="1833612718524903568">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‎‎4K‎‏‎‎‏‎"</item>
+ <item msgid="238303513127879234">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎‎4K (secure)‎‏‎‎‏‎"</item>
+ <item msgid="3547211260846843098">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎4K (upscaled)‎‏‎‎‏‎"</item>
+ <item msgid="5411365648951414254">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎4K (upscaled, secure)‎‏‎‎‏‎"</item>
+ <item msgid="1311305077526792901">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎720p, 1080p (dual screen)‎‏‎‎‏‎"</item>
</string-array>
<string-array name="enable_opengl_traces_entries">
- <item msgid="3191973083884253830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎None‎‏‎‎‏‎"</item>
- <item msgid="9089630089455370183">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎Logcat‎‏‎‎‏‎"</item>
- <item msgid="5397807424362304288">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎Systrace (Graphics)‎‏‎‎‏‎"</item>
- <item msgid="1340692776955662664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎Call stack on glGetError‎‏‎‎‏‎"</item>
+ <item msgid="3191973083884253830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎None‎‏‎‎‏‎"</item>
+ <item msgid="9089630089455370183">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎Logcat‎‏‎‎‏‎"</item>
+ <item msgid="5397807424362304288">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎Systrace (Graphics)‎‏‎‎‏‎"</item>
+ <item msgid="1340692776955662664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‎Call stack on glGetError‎‏‎‎‏‎"</item>
</string-array>
<string-array name="show_non_rect_clip_entries">
- <item msgid="993742912147090253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎Off‎‏‎‎‏‎"</item>
- <item msgid="675719912558941285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‎Draw non-rectangular clip region in blue‎‏‎‎‏‎"</item>
- <item msgid="1064373276095698656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎Highlight tested drawing commands in green‎‏‎‎‏‎"</item>
+ <item msgid="993742912147090253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎Off‎‏‎‎‏‎"</item>
+ <item msgid="675719912558941285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‎Draw non-rectangular clip region in blue‎‏‎‎‏‎"</item>
+ <item msgid="1064373276095698656">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎Highlight tested drawing commands in green‎‏‎‎‏‎"</item>
</string-array>
<string-array name="track_frame_time_entries">
- <item msgid="2193584639058893150">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎Off‎‏‎‎‏‎"</item>
- <item msgid="2751513398307949636">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎On screen as bars‎‏‎‎‏‎"</item>
- <item msgid="2355151170975410323">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎In ‎‏‎‎‏‏‎<xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</item>
+ <item msgid="2193584639058893150">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎Off‎‏‎‎‏‎"</item>
+ <item msgid="2751513398307949636">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎On screen as bars‎‏‎‎‏‎"</item>
+ <item msgid="2355151170975410323">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎In ‎‏‎‎‏‏‎<xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</item>
</string-array>
<string-array name="debug_hw_overdraw_entries">
- <item msgid="8190572633763871652">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎Off‎‏‎‎‏‎"</item>
- <item msgid="7688197031296835369">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎Show overdraw areas‎‏‎‎‏‎"</item>
- <item msgid="2290859360633824369">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎Show areas for Deuteranomaly‎‏‎‎‏‎"</item>
+ <item msgid="8190572633763871652">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎Off‎‏‎‎‏‎"</item>
+ <item msgid="7688197031296835369">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‎‎‏‎Show overdraw areas‎‏‎‎‏‎"</item>
+ <item msgid="2290859360633824369">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎Show areas for Deuteranomaly‎‏‎‎‏‎"</item>
</string-array>
<string-array name="app_process_limit_entries">
- <item msgid="3401625457385943795">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎Standard limit‎‏‎‎‏‎"</item>
- <item msgid="4071574792028999443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎No background processes‎‏‎‎‏‎"</item>
- <item msgid="4810006996171705398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎At most 1 process‎‏‎‎‏‎"</item>
- <item msgid="8586370216857360863">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎At most 2 processes‎‏‎‎‏‎"</item>
- <item msgid="836593137872605381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎At most 3 processes‎‏‎‎‏‎"</item>
- <item msgid="7899496259191969307">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎At most 4 processes‎‏‎‎‏‎"</item>
+ <item msgid="3401625457385943795">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎Standard limit‎‏‎‎‏‎"</item>
+ <item msgid="4071574792028999443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎No background processes‎‏‎‎‏‎"</item>
+ <item msgid="4810006996171705398">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎At most 1 process‎‏‎‎‏‎"</item>
+ <item msgid="8586370216857360863">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎At most 2 processes‎‏‎‎‏‎"</item>
+ <item msgid="836593137872605381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎At most 3 processes‎‏‎‎‏‎"</item>
+ <item msgid="7899496259191969307">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‎‏‏‎At most 4 processes‎‏‎‎‏‎"</item>
</string-array>
<string-array name="usb_configuration_titles">
- <item msgid="488237561639712799">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎Charging‎‏‎‎‏‎"</item>
- <item msgid="5220695614993094977">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎MTP (Media Transfer Protocol)‎‏‎‎‏‎"</item>
- <item msgid="2086000968159047375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎PTP (Picture Transfer Protocol)‎‏‎‎‏‎"</item>
- <item msgid="7398830860950841822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎RNDIS (USB Ethernet)‎‏‎‎‏‎"</item>
- <item msgid="1718924214939774352">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎Audio Source‎‏‎‎‏‎"</item>
- <item msgid="8126315616613006284">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎MIDI‎‏‎‎‏‎"</item>
+ <item msgid="488237561639712799">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎Charging‎‏‎‎‏‎"</item>
+ <item msgid="5220695614993094977">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎MTP (Media Transfer Protocol)‎‏‎‎‏‎"</item>
+ <item msgid="2086000968159047375">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎PTP (Picture Transfer Protocol)‎‏‎‎‏‎"</item>
+ <item msgid="7398830860950841822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎RNDIS (USB Ethernet)‎‏‎‎‏‎"</item>
+ <item msgid="1718924214939774352">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‎Audio Source‎‏‎‎‏‎"</item>
+ <item msgid="8126315616613006284">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎MIDI‎‏‎‎‏‎"</item>
</string-array>
</resources>
diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml
index 71c14f57e342..2d3e8301cb1e 100644
--- a/packages/SettingsLib/res/values-en-rXC/strings.xml
+++ b/packages/SettingsLib/res/values-en-rXC/strings.xml
@@ -20,473 +20,440 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_fail_to_scan" msgid="1265540342578081461">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎Can\'t scan for networks‎‏‎‎‏‎"</string>
- <string name="wifi_security_none" msgid="7985461072596594400">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎None‎‏‎‎‏‎"</string>
- <string name="wifi_remembered" msgid="4955746899347821096">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎Saved‎‏‎‎‏‎"</string>
- <string name="wifi_disabled_generic" msgid="4259794910584943386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎Disabled‎‏‎‎‏‎"</string>
- <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎IP Configuration Failure‎‏‎‎‏‎"</string>
- <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎Not connected due to low quality network‎‏‎‎‏‎"</string>
- <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎WiFi Connection Failure‎‏‎‎‏‎"</string>
- <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎Authentication problem‎‏‎‎‏‎"</string>
- <string name="wifi_cant_connect" msgid="5410016875644565884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎Can\'t connect‎‏‎‎‏‎"</string>
- <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎Can\'t connect to \'‎‏‎‎‏‏‎<xliff:g id="AP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎\'‎‏‎‎‏‎"</string>
- <string name="wifi_check_password_try_again" msgid="516958988102584767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎Check password and try again‎‏‎‎‏‎"</string>
- <string name="wifi_not_in_range" msgid="1136191511238508967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎Not in range‎‏‎‎‏‎"</string>
- <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎Won\'t automatically connect‎‏‎‎‏‎"</string>
- <string name="wifi_no_internet" msgid="4663834955626848401">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎No internet access‎‏‎‎‏‎"</string>
- <string name="saved_network" msgid="4352716707126620811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎Saved by ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="connected_via_network_scorer" msgid="5713793306870815341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‏‎Automatically connected via %1$s‎‏‎‎‏‎"</string>
- <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎Automatically connected via network rating provider‎‏‎‎‏‎"</string>
- <string name="connected_via_passpoint" msgid="2826205693803088747">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎Connected via %1$s‎‏‎‎‏‎"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="SSID">%1$s</xliff:g>‎‏‎‎‏‏‏‎ by ‎‏‎‎‏‏‎<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="available_via_passpoint" msgid="1617440946846329613">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎Available via %1$s‎‏‎‎‏‎"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎Tap to set up‎‏‎‎‏‎"</string>
- <string name="wifi_connected_no_internet" msgid="8202906332837777829">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎Connected, no internet‎‏‎‎‏‎"</string>
- <string name="wifi_status_no_internet" msgid="5784710974669608361">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎No internet‎‏‎‎‏‎"</string>
- <string name="wifi_status_sign_in_required" msgid="123517180404752756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‎Sign in required‎‏‎‎‏‎"</string>
- <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎Access point temporarily full‎‏‎‎‏‎"</string>
- <string name="connected_via_carrier" msgid="7583780074526041912">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎Connected via %1$s‎‏‎‎‏‎"</string>
- <string name="available_via_carrier" msgid="1469036129740799053">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎Available via %1$s‎‏‎‎‏‎"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎Connection failed‎‏‎‎‏‎"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎Invalid OSU server URL‎‏‎‎‏‎"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎OSU server connection failed‎‏‎‎‏‎"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‎OSU server validation failed‎‏‎‎‏‎"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎Invalid OSU server certificate‎‏‎‎‏‎"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎Provisioning aborted‎‏‎‎‏‎"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎Provisioning not available‎‏‎‎‏‎"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‎‏‏‏‎‎Invalid OSU server URL‎‏‎‎‏‎"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎Unexpected command type‎‏‎‎‏‎"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎Unexpected SOAP message type‎‏‎‎‏‎"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‎‎‎SOAP message exchange failed‎‏‎‎‏‎"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎Redirect listener failed to start‎‏‎‎‏‎"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎Timed out waiting for redirect‎‏‎‎‏‎"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‎No OSU activity found‎‏‎‎‏‎"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‎‏‏‎Unexpected SOAP message status‎‏‎‎‏‎"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎Failed to find PPS-MO‎‏‎‎‏‎"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎Failed to find trust root node for AAA server‎‏‎‎‏‎"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎Failed to find trust root node for remediation server‎‏‎‎‏‎"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎Failed to find trust root node for policy server‎‏‎‎‏‎"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎Failed to retrieve trust root certificates‎‏‎‎‏‎"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‎Failed to find trust root certificate for AAA server‎‏‎‎‏‎"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎Failed to add PassPoint configuration‎‏‎‎‏‎"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎Failed to find an OSU provider‎‏‎‎‏‎"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎Connecting‎‏‎‎‏‎"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‎Connected‎‏‎‎‏‎"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎Connecting to OSU server‎‏‎‎‏‎"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‎OSU server validated‎‏‎‎‏‎"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‎‎‎‎Connected to OSU server‎‏‎‎‏‎"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‏‏‎‏‎Initial SOAP exchange‎‏‎‎‏‎"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎Waiting for redirect response‎‏‎‎‏‎"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‏‎‏‎Received redirect response‎‏‎‎‏‎"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎Second SOAP exchange‎‏‎‎‏‎"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎Third SOAP exchange‎‏‎‎‏‎"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎Retrieving trust root certificates‎‏‎‎‏‎"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎Provisioning complete‎‏‎‎‏‎"</string>
- <string name="speed_label_very_slow" msgid="1867055264243608530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎Very Slow‎‏‎‎‏‎"</string>
- <string name="speed_label_slow" msgid="813109590815810235">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎Slow‎‏‎‎‏‎"</string>
- <string name="speed_label_okay" msgid="2331665440671174858">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎OK‎‏‎‎‏‎"</string>
- <string name="speed_label_medium" msgid="3175763313268941953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎Medium‎‏‎‎‏‎"</string>
- <string name="speed_label_fast" msgid="7715732164050975057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎Fast‎‏‎‎‏‎"</string>
- <string name="speed_label_very_fast" msgid="2265363430784523409">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎Very Fast‎‏‎‎‏‎"</string>
- <string name="preference_summary_default_combination" msgid="8532964268242666060">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="STATE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ / ‎‏‎‎‏‏‎<xliff:g id="DESCRIPTION">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_disconnected" msgid="6557104142667339895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎Disconnected‎‏‎‎‏‎"</string>
- <string name="bluetooth_disconnecting" msgid="8913264760027764974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎Disconnecting…‎‏‎‎‏‎"</string>
- <string name="bluetooth_connecting" msgid="8555009514614320497">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎Connecting…‎‏‎‎‏‎"</string>
- <string name="bluetooth_connected" msgid="5427152882755735944">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎Connected‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_pairing" msgid="1426882272690346242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎Pairing…‎‏‎‎‏‎"</string>
- <string name="bluetooth_connected_no_headset" msgid="616068069034994802">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎Connected (no phone)‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_connected_no_a2dp" msgid="3736431800395923868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎Connected (no media)‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_connected_no_map" msgid="3200033913678466453">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎Connected (no message access)‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2047403011284187056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎Connected (no phone or media)‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_connected_battery_level" msgid="5162924691231307748">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎Connected, battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_connected_no_headset_battery_level" msgid="1610296229139400266">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‎Connected (no phone), battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_connected_no_a2dp_battery_level" msgid="3908466636369853652">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎Connected (no media), battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1163440823807659316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎Connected (no phone or media), battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_active_battery_level" msgid="3149689299296462009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎Active, ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎"</string>
- <string name="bluetooth_battery_level" msgid="1447164613319663655">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎"</string>
- <string name="bluetooth_active_no_battery_level" msgid="8380223546730241956">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎Active‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎Media audio‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_headset" msgid="7815495680863246034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎Phone calls‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_opp" msgid="9168139293654233697">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‏‎File transfer‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_hid" msgid="3680729023366986480">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‎Input device‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_pan" msgid="3391606497945147673">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎Internet access‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎Contact sharing‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎Use for contact sharing‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎Internet connection sharing‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_map" msgid="1019763341565580450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎Text Messages‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_sap" msgid="5764222021851283125">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎SIM Access‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎HD audio: ‎‏‎‎‏‏‎<xliff:g id="CODEC_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎HD audio‎‏‎‎‏‎"</string>
- <string name="bluetooth_profile_hearing_aid" msgid="7999237886427812595">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎Hearing Aid‎‏‎‎‏‎"</string>
- <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="7188282786730266159">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‎Connected to Hearing Aid‎‏‎‎‏‎"</string>
- <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎Connected to media audio‎‏‎‎‏‎"</string>
- <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎Connected to phone audio‎‏‎‎‏‎"</string>
- <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎Connected to file transfer server‎‏‎‎‏‎"</string>
- <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎Connected to map‎‏‎‎‏‎"</string>
- <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎Connected to SAP‎‏‎‎‏‎"</string>
- <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎Not connected to file transfer server‎‏‎‎‏‎"</string>
- <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎Connected to input device‎‏‎‎‏‎"</string>
- <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎Connected to device for internet access‎‏‎‎‏‎"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎Sharing local internet connection with device‎‏‎‎‏‎"</string>
- <string name="bluetooth_pan_profile_summary_use_for" msgid="5736111170225304239">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‎Use for internet access‎‏‎‎‏‎"</string>
- <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎Use for map‎‏‎‎‏‎"</string>
- <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎Use for SIM access‎‏‎‎‏‎"</string>
- <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎Use for media audio‎‏‎‎‏‎"</string>
- <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎Use for phone audio‎‏‎‎‏‎"</string>
- <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‎‎Use for file transfer‎‏‎‎‏‎"</string>
- <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎Use for input‎‏‎‎‏‎"</string>
- <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="908775281788309484">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎Use for Hearing Aid‎‏‎‎‏‎"</string>
- <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎Pair‎‏‎‎‏‎"</string>
- <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎PAIR‎‏‎‎‏‎"</string>
- <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎Cancel‎‏‎‎‏‎"</string>
- <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎Pairing grants access to your contacts and call history when connected.‎‏‎‎‏‎"</string>
- <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎Couldn\'t pair with ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
- <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎Couldn\'t pair with ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ because of an incorrect PIN or passkey.‎‏‎‎‏‎"</string>
- <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎Can\'t communicate with ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
- <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎Pairing rejected by ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
- <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎Computer‎‏‎‎‏‎"</string>
- <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎Headset‎‏‎‎‏‎"</string>
- <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎Phone‎‏‎‎‏‎"</string>
- <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎Imaging‎‏‎‎‏‎"</string>
- <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎Headphone‎‏‎‎‏‎"</string>
- <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎Input Peripheral‎‏‎‎‏‎"</string>
- <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎Bluetooth‎‏‎‎‏‎"</string>
- <string name="bluetooth_hearingaid_left_pairing_message" msgid="7378813500862148102">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎Pairing left hearing aid…‎‏‎‎‏‎"</string>
- <string name="bluetooth_hearingaid_right_pairing_message" msgid="1550373802309160891">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎Pairing right hearing aid…‎‏‎‎‏‎"</string>
- <string name="bluetooth_hearingaid_left_battery_level" msgid="8797811465352097562">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎Left - ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎"</string>
- <string name="bluetooth_hearingaid_right_battery_level" msgid="7309476148173459677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎Right - ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎"</string>
- <string name="accessibility_wifi_off" msgid="1166761729660614716">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎Wifi off.‎‏‎‎‏‎"</string>
- <string name="accessibility_no_wifi" msgid="8834610636137374508">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎Wifi disconnected.‎‏‎‎‏‎"</string>
- <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎Wifi one bar.‎‏‎‎‏‎"</string>
- <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎Wifi two bars.‎‏‎‎‏‎"</string>
- <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎Wifi three bars.‎‏‎‎‏‎"</string>
- <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎Wifi signal full.‎‏‎‎‏‎"</string>
- <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎Open network‎‏‎‎‏‎"</string>
- <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‎Secure network‎‏‎‎‏‎"</string>
- <string name="process_kernel_label" msgid="3916858646836739323">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎Android OS‎‏‎‎‏‎"</string>
- <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎Removed apps‎‏‎‎‏‎"</string>
- <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‎‎Removed apps and users‎‏‎‎‏‎"</string>
- <string name="tether_settings_title_usb" msgid="6688416425801386511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎USB tethering‎‏‎‎‏‎"</string>
- <string name="tether_settings_title_wifi" msgid="3277144155960302049">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎Portable hotspot‎‏‎‎‏‎"</string>
- <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎Bluetooth tethering‎‏‎‎‏‎"</string>
- <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎Tethering‎‏‎‎‏‎"</string>
- <string name="tether_settings_title_all" msgid="8356136101061143841">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎Tethering &amp; portable hotspot‎‏‎‎‏‎"</string>
- <string name="managed_user_title" msgid="8109605045406748842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎All work apps‎‏‎‎‏‎"</string>
- <string name="user_guest" msgid="8475274842845401871">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎Guest‎‏‎‎‏‎"</string>
- <string name="unknown" msgid="1592123443519355854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎Unknown‎‏‎‎‏‎"</string>
- <string name="running_process_item_user_label" msgid="3129887865552025943">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎User: ‎‏‎‎‏‏‎<xliff:g id="USER_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="launch_defaults_some" msgid="313159469856372621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎Some defaults set‎‏‎‎‏‎"</string>
- <string name="launch_defaults_none" msgid="4241129108140034876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎No defaults set‎‏‎‎‏‎"</string>
- <string name="tts_settings" msgid="8186971894801348327">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎Text-to-speech settings‎‏‎‎‏‎"</string>
- <string name="tts_settings_title" msgid="1237820681016639683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎Text-to-speech output‎‏‎‎‏‎"</string>
- <string name="tts_default_rate_title" msgid="6030550998379310088">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎Speech rate‎‏‎‎‏‎"</string>
- <string name="tts_default_rate_summary" msgid="4061815292287182801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎Speed at which the text is spoken‎‏‎‎‏‎"</string>
- <string name="tts_default_pitch_title" msgid="6135942113172488671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎Pitch‎‏‎‎‏‎"</string>
- <string name="tts_default_pitch_summary" msgid="1944885882882650009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎Affects the tone of the synthesized speech‎‏‎‎‏‎"</string>
- <string name="tts_default_lang_title" msgid="8018087612299820556">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎Language‎‏‎‎‏‎"</string>
- <string name="tts_lang_use_system" msgid="2679252467416513208">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎Use system language‎‏‎‎‏‎"</string>
- <string name="tts_lang_not_selected" msgid="7395787019276734765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎Language not selected‎‏‎‎‏‎"</string>
- <string name="tts_default_lang_summary" msgid="5219362163902707785">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎Sets the language-specific voice for the spoken text‎‏‎‎‏‎"</string>
- <string name="tts_play_example_title" msgid="7094780383253097230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎Listen to an example‎‏‎‎‏‎"</string>
- <string name="tts_play_example_summary" msgid="8029071615047894486">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎Play a short demonstration of speech synthesis‎‏‎‎‏‎"</string>
- <string name="tts_install_data_title" msgid="4264378440508149986">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎Install voice data‎‏‎‎‏‎"</string>
- <string name="tts_install_data_summary" msgid="5742135732511822589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎Install the voice data required for speech synthesis‎‏‎‎‏‎"</string>
- <string name="tts_engine_security_warning" msgid="8786238102020223650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎This speech synthesis engine may be able to collect all the text that will be spoken, including personal data like passwords and credit card numbers. It comes from the ‎‏‎‎‏‏‎<xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ engine. Enable the use of this speech synthesis engine?‎‏‎‎‏‎"</string>
- <string name="tts_engine_network_required" msgid="1190837151485314743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎This language requires a working network connection for text-to-speech output.‎‏‎‎‏‎"</string>
- <string name="tts_default_sample_string" msgid="4040835213373086322">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎This is an example of speech synthesis‎‏‎‎‏‎"</string>
- <string name="tts_status_title" msgid="7268566550242584413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‎Default language status‎‏‎‎‏‎"</string>
- <string name="tts_status_ok" msgid="1309762510278029765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="LOCALE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is fully supported‎‏‎‎‏‎"</string>
- <string name="tts_status_requires_network" msgid="6042500821503226892">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="LOCALE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ requires network connection‎‏‎‎‏‎"</string>
- <string name="tts_status_not_supported" msgid="4491154212762472495">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="LOCALE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is not supported‎‏‎‎‏‎"</string>
- <string name="tts_status_checking" msgid="5339150797940483592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎Checking…‎‏‎‎‏‎"</string>
- <string name="tts_engine_settings_title" msgid="3499112142425680334">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎Settings for ‎‏‎‎‏‏‎<xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="tts_engine_settings_button" msgid="1030512042040722285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‎Launch engine settings‎‏‎‎‏‎"</string>
- <string name="tts_engine_preference_section_title" msgid="448294500990971413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎Preferred engine‎‏‎‎‏‎"</string>
- <string name="tts_general_section_title" msgid="4402572014604490502">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎General‎‏‎‎‏‎"</string>
- <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎Reset speech pitch‎‏‎‎‏‎"</string>
- <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎Reset the pitch at which the text is spoken to default.‎‏‎‎‏‎"</string>
+ <string name="wifi_fail_to_scan" msgid="1265540342578081461">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎Can\'t scan for networks‎‏‎‎‏‎"</string>
+ <string name="wifi_security_none" msgid="7985461072596594400">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎None‎‏‎‎‏‎"</string>
+ <string name="wifi_remembered" msgid="4955746899347821096">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎Saved‎‏‎‎‏‎"</string>
+ <string name="wifi_disabled_generic" msgid="4259794910584943386">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‎Disabled‎‏‎‎‏‎"</string>
+ <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎IP Configuration Failure‎‏‎‎‏‎"</string>
+ <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎‎‎Not connected due to low quality network‎‏‎‎‏‎"</string>
+ <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‎WiFi Connection Failure‎‏‎‎‏‎"</string>
+ <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎Authentication problem‎‏‎‎‏‎"</string>
+ <string name="wifi_cant_connect" msgid="5410016875644565884">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‏‏‎‎‎Can\'t connect‎‏‎‎‏‎"</string>
+ <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎Can\'t connect to \'‎‏‎‎‏‏‎<xliff:g id="AP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎\'‎‏‎‎‏‎"</string>
+ <string name="wifi_check_password_try_again" msgid="516958988102584767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎Check password and try again‎‏‎‎‏‎"</string>
+ <string name="wifi_not_in_range" msgid="1136191511238508967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‎‎‏‏‏‎Not in range‎‏‎‎‏‎"</string>
+ <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎Won\'t automatically connect‎‏‎‎‏‎"</string>
+ <string name="wifi_no_internet" msgid="4663834955626848401">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎No internet access‎‏‎‎‏‎"</string>
+ <string name="saved_network" msgid="4352716707126620811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎Saved by ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="connected_via_network_scorer" msgid="5713793306870815341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‏‎Automatically connected via %1$s‎‏‎‎‏‎"</string>
+ <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎Automatically connected via network rating provider‎‏‎‎‏‎"</string>
+ <string name="connected_via_passpoint" msgid="2826205693803088747">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎Connected via %1$s‎‏‎‎‏‎"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎Connected via ‎‏‎‎‏‏‎<xliff:g id="NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="available_via_passpoint" msgid="1617440946846329613">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎Available via %1$s‎‏‎‎‏‎"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎Tap to sign up‎‏‎‎‏‎"</string>
+ <string name="wifi_connected_no_internet" msgid="8202906332837777829">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎Connected, no internet‎‏‎‎‏‎"</string>
+ <string name="wifi_status_no_internet" msgid="5784710974669608361">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎No internet‎‏‎‎‏‎"</string>
+ <string name="wifi_status_sign_in_required" msgid="123517180404752756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‎Sign in required‎‏‎‎‏‎"</string>
+ <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎Access point temporarily full‎‏‎‎‏‎"</string>
+ <string name="connected_via_carrier" msgid="7583780074526041912">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎Connected via %1$s‎‏‎‎‏‎"</string>
+ <string name="available_via_carrier" msgid="1469036129740799053">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎Available via %1$s‎‏‎‎‏‎"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎Opening ‎‏‎‎‏‏‎<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‎‎Couldn’t connect‎‏‎‎‏‎"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎Completing sign-up…‎‏‎‎‏‎"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‎‎‎Couldn’t complete sign-up. Tap to try again.‎‏‎‎‏‎"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‎Sign-up complete. Connecting…‎‏‎‎‏‎"</string>
+ <string name="speed_label_very_slow" msgid="1867055264243608530">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎Very Slow‎‏‎‎‏‎"</string>
+ <string name="speed_label_slow" msgid="813109590815810235">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎Slow‎‏‎‎‏‎"</string>
+ <string name="speed_label_okay" msgid="2331665440671174858">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎OK‎‏‎‎‏‎"</string>
+ <string name="speed_label_medium" msgid="3175763313268941953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎Medium‎‏‎‎‏‎"</string>
+ <string name="speed_label_fast" msgid="7715732164050975057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎Fast‎‏‎‎‏‎"</string>
+ <string name="speed_label_very_fast" msgid="2265363430784523409">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎Very Fast‎‏‎‎‏‎"</string>
+ <string name="preference_summary_default_combination" msgid="8532964268242666060">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="STATE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ / ‎‏‎‎‏‏‎<xliff:g id="DESCRIPTION">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_disconnected" msgid="6557104142667339895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎Disconnected‎‏‎‎‏‎"</string>
+ <string name="bluetooth_disconnecting" msgid="8913264760027764974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‏‏‎‎Disconnecting…‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connecting" msgid="8555009514614320497">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‎Connecting…‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connected" msgid="5427152882755735944">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎Connected‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pairing" msgid="1426882272690346242">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎Pairing…‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connected_no_headset" msgid="616068069034994802">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‎Connected (no phone)‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connected_no_a2dp" msgid="3736431800395923868">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎Connected (no media)‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connected_no_map" msgid="3200033913678466453">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎Connected (no message access)‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2047403011284187056">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎Connected (no phone or media)‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connected_battery_level" msgid="5162924691231307748">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‎Connected, battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connected_no_headset_battery_level" msgid="1610296229139400266">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‎Connected (no phone), battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connected_no_a2dp_battery_level" msgid="3908466636369853652">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎Connected (no media), battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1163440823807659316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎Connected (no phone or media), battery ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_active_battery_level" msgid="3149689299296462009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎Active, ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎"</string>
+ <string name="bluetooth_battery_level" msgid="1447164613319663655">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎"</string>
+ <string name="bluetooth_active_no_battery_level" msgid="8380223546730241956">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎Active‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎Media audio‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_headset" msgid="7815495680863246034">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎Phone calls‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_opp" msgid="9168139293654233697">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‏‎File transfer‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_hid" msgid="3680729023366986480">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‎Input device‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_pan" msgid="3391606497945147673">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎Internet access‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎Contact sharing‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎Use for contact sharing‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎Internet connection sharing‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_map" msgid="1019763341565580450">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎Text Messages‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_sap" msgid="5764222021851283125">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‏‎SIM Access‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎HD audio: ‎‏‎‎‏‏‎<xliff:g id="CODEC_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎HD audio‎‏‎‎‏‎"</string>
+ <string name="bluetooth_profile_hearing_aid" msgid="7999237886427812595">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎Hearing Aid‎‏‎‎‏‎"</string>
+ <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="7188282786730266159">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‎Connected to Hearing Aid‎‏‎‎‏‎"</string>
+ <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‏‏‏‎‎Connected to media audio‎‏‎‎‏‎"</string>
+ <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎Connected to phone audio‎‏‎‎‏‎"</string>
+ <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎Connected to file transfer server‎‏‎‎‏‎"</string>
+ <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‎Connected to map‎‏‎‎‏‎"</string>
+ <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎Connected to SAP‎‏‎‎‏‎"</string>
+ <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎Not connected to file transfer server‎‏‎‎‏‎"</string>
+ <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎Connected to input device‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎Connected to device for internet access‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎Sharing local internet connection with device‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pan_profile_summary_use_for" msgid="5736111170225304239">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‎Use for internet access‎‏‎‎‏‎"</string>
+ <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎Use for map‎‏‎‎‏‎"</string>
+ <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎Use for SIM access‎‏‎‎‏‎"</string>
+ <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎Use for media audio‎‏‎‎‏‎"</string>
+ <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‏‎Use for phone audio‎‏‎‎‏‎"</string>
+ <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‎‎Use for file transfer‎‏‎‎‏‎"</string>
+ <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎Use for input‎‏‎‎‏‎"</string>
+ <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="908775281788309484">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎Use for Hearing Aid‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎Pair‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‎‏‎PAIR‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎Cancel‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎Pairing grants access to your contacts and call history when connected.‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎Couldn\'t pair with ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎Couldn\'t pair with ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ because of an incorrect PIN or passkey.‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‏‎‏‎Can\'t communicate with ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+ <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎Pairing rejected by ‎‏‎‎‏‏‎<xliff:g id="DEVICE_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎.‎‏‎‎‏‎"</string>
+ <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎Computer‎‏‎‎‏‎"</string>
+ <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎Headset‎‏‎‎‏‎"</string>
+ <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‎Phone‎‏‎‎‏‎"</string>
+ <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎Imaging‎‏‎‎‏‎"</string>
+ <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎Headphone‎‏‎‎‏‎"</string>
+ <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎Input Peripheral‎‏‎‎‏‎"</string>
+ <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎Bluetooth‎‏‎‎‏‎"</string>
+ <string name="bluetooth_hearingaid_left_pairing_message" msgid="7378813500862148102">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎Pairing left hearing aid…‎‏‎‎‏‎"</string>
+ <string name="bluetooth_hearingaid_right_pairing_message" msgid="1550373802309160891">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎Pairing right hearing aid…‎‏‎‎‏‎"</string>
+ <string name="bluetooth_hearingaid_left_battery_level" msgid="8797811465352097562">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎Left - ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎"</string>
+ <string name="bluetooth_hearingaid_right_battery_level" msgid="7309476148173459677">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎Right - ‎‏‎‎‏‏‎<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎"</string>
+ <string name="accessibility_wifi_off" msgid="1166761729660614716">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎Wifi off.‎‏‎‎‏‎"</string>
+ <string name="accessibility_no_wifi" msgid="8834610636137374508">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎Wifi disconnected.‎‏‎‎‏‎"</string>
+ <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎Wifi one bar.‎‏‎‎‏‎"</string>
+ <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎Wifi two bars.‎‏‎‎‏‎"</string>
+ <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎Wifi three bars.‎‏‎‎‏‎"</string>
+ <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‎‎Wifi signal full.‎‏‎‎‏‎"</string>
+ <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‏‏‎Open network‎‏‎‎‏‎"</string>
+ <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‏‏‎Secure network‎‏‎‎‏‎"</string>
+ <string name="process_kernel_label" msgid="3916858646836739323">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎Android OS‎‏‎‎‏‎"</string>
+ <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‎Removed apps‎‏‎‎‏‎"</string>
+ <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎‏‎‎‏‎‏‎‎Removed apps and users‎‏‎‎‏‎"</string>
+ <string name="tether_settings_title_usb" msgid="6688416425801386511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎USB tethering‎‏‎‎‏‎"</string>
+ <string name="tether_settings_title_wifi" msgid="3277144155960302049">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎Portable hotspot‎‏‎‎‏‎"</string>
+ <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎Bluetooth tethering‎‏‎‎‏‎"</string>
+ <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎Tethering‎‏‎‎‏‎"</string>
+ <string name="tether_settings_title_all" msgid="8356136101061143841">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎Tethering &amp; portable hotspot‎‏‎‎‏‎"</string>
+ <string name="managed_user_title" msgid="8109605045406748842">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎‏‎‎‎‎‏‎‏‎‏‎‏‎‎All work apps‎‏‎‎‏‎"</string>
+ <string name="user_guest" msgid="8475274842845401871">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‎Guest‎‏‎‎‏‎"</string>
+ <string name="unknown" msgid="1592123443519355854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎Unknown‎‏‎‎‏‎"</string>
+ <string name="running_process_item_user_label" msgid="3129887865552025943">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎User: ‎‏‎‎‏‏‎<xliff:g id="USER_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="launch_defaults_some" msgid="313159469856372621">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎Some defaults set‎‏‎‎‏‎"</string>
+ <string name="launch_defaults_none" msgid="4241129108140034876">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎No defaults set‎‏‎‎‏‎"</string>
+ <string name="tts_settings" msgid="8186971894801348327">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎Text-to-speech settings‎‏‎‎‏‎"</string>
+ <string name="tts_settings_title" msgid="1237820681016639683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎Text-to-speech output‎‏‎‎‏‎"</string>
+ <string name="tts_default_rate_title" msgid="6030550998379310088">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎Speech rate‎‏‎‎‏‎"</string>
+ <string name="tts_default_rate_summary" msgid="4061815292287182801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎Speed at which the text is spoken‎‏‎‎‏‎"</string>
+ <string name="tts_default_pitch_title" msgid="6135942113172488671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎Pitch‎‏‎‎‏‎"</string>
+ <string name="tts_default_pitch_summary" msgid="1944885882882650009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎Affects the tone of the synthesized speech‎‏‎‎‏‎"</string>
+ <string name="tts_default_lang_title" msgid="8018087612299820556">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎Language‎‏‎‎‏‎"</string>
+ <string name="tts_lang_use_system" msgid="2679252467416513208">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎Use system language‎‏‎‎‏‎"</string>
+ <string name="tts_lang_not_selected" msgid="7395787019276734765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‏‎‏‎Language not selected‎‏‎‎‏‎"</string>
+ <string name="tts_default_lang_summary" msgid="5219362163902707785">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‏‎Sets the language-specific voice for the spoken text‎‏‎‎‏‎"</string>
+ <string name="tts_play_example_title" msgid="7094780383253097230">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎Listen to an example‎‏‎‎‏‎"</string>
+ <string name="tts_play_example_summary" msgid="8029071615047894486">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎Play a short demonstration of speech synthesis‎‏‎‎‏‎"</string>
+ <string name="tts_install_data_title" msgid="4264378440508149986">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎Install voice data‎‏‎‎‏‎"</string>
+ <string name="tts_install_data_summary" msgid="5742135732511822589">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎Install the voice data required for speech synthesis‎‏‎‎‏‎"</string>
+ <string name="tts_engine_security_warning" msgid="8786238102020223650">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‎‎‏‎‎This speech synthesis engine may be able to collect all the text that will be spoken, including personal data like passwords and credit card numbers. It comes from the ‎‏‎‎‏‏‎<xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎ engine. Enable the use of this speech synthesis engine?‎‏‎‎‏‎"</string>
+ <string name="tts_engine_network_required" msgid="1190837151485314743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎This language requires a working network connection for text-to-speech output.‎‏‎‎‏‎"</string>
+ <string name="tts_default_sample_string" msgid="4040835213373086322">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‎‏‎‎This is an example of speech synthesis‎‏‎‎‏‎"</string>
+ <string name="tts_status_title" msgid="7268566550242584413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‎Default language status‎‏‎‎‏‎"</string>
+ <string name="tts_status_ok" msgid="1309762510278029765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="LOCALE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is fully supported‎‏‎‎‏‎"</string>
+ <string name="tts_status_requires_network" msgid="6042500821503226892">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="LOCALE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ requires network connection‎‏‎‎‏‎"</string>
+ <string name="tts_status_not_supported" msgid="4491154212762472495">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="LOCALE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is not supported‎‏‎‎‏‎"</string>
+ <string name="tts_status_checking" msgid="5339150797940483592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎Checking…‎‏‎‎‏‎"</string>
+ <string name="tts_engine_settings_title" msgid="3499112142425680334">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎Settings for ‎‏‎‎‏‏‎<xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="tts_engine_settings_button" msgid="1030512042040722285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‎Launch engine settings‎‏‎‎‏‎"</string>
+ <string name="tts_engine_preference_section_title" msgid="448294500990971413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎Preferred engine‎‏‎‎‏‎"</string>
+ <string name="tts_general_section_title" msgid="4402572014604490502">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎General‎‏‎‎‏‎"</string>
+ <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‏‏‏‎‏‏‎Reset speech pitch‎‏‎‎‏‎"</string>
+ <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‎Reset the pitch at which the text is spoken to default.‎‏‎‎‏‎"</string>
<string-array name="tts_rate_entries">
- <item msgid="6695494874362656215">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎Very slow‎‏‎‎‏‎"</item>
- <item msgid="4795095314303559268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎Slow‎‏‎‎‏‎"</item>
- <item msgid="8903157781070679765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎Normal‎‏‎‎‏‎"</item>
- <item msgid="164347302621392996">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎Fast‎‏‎‎‏‎"</item>
- <item msgid="5794028588101562009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎Faster‎‏‎‎‏‎"</item>
- <item msgid="7163942783888652942">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎Very fast‎‏‎‎‏‎"</item>
- <item msgid="7831712693748700507">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎Rapid‎‏‎‎‏‎"</item>
- <item msgid="5194774745031751806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎Very rapid‎‏‎‎‏‎"</item>
- <item msgid="9085102246155045744">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎Fastest‎‏‎‎‏‎"</item>
+ <item msgid="6695494874362656215">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎Very slow‎‏‎‎‏‎"</item>
+ <item msgid="4795095314303559268">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎Slow‎‏‎‎‏‎"</item>
+ <item msgid="8903157781070679765">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‎Normal‎‏‎‎‏‎"</item>
+ <item msgid="164347302621392996">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎Fast‎‏‎‎‏‎"</item>
+ <item msgid="5794028588101562009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎Faster‎‏‎‎‏‎"</item>
+ <item msgid="7163942783888652942">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎Very fast‎‏‎‎‏‎"</item>
+ <item msgid="7831712693748700507">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎Rapid‎‏‎‎‏‎"</item>
+ <item msgid="5194774745031751806">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎Very rapid‎‏‎‎‏‎"</item>
+ <item msgid="9085102246155045744">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‎‎Fastest‎‏‎‎‏‎"</item>
</string-array>
- <string name="choose_profile" msgid="6921016979430278661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‏‎Choose profile‎‏‎‎‏‎"</string>
- <string name="category_personal" msgid="1299663247844969448">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎Personal‎‏‎‎‏‎"</string>
- <string name="category_work" msgid="8699184680584175622">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎Work‎‏‎‎‏‎"</string>
- <string name="development_settings_title" msgid="215179176067683667">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎Developer options‎‏‎‎‏‎"</string>
- <string name="development_settings_enable" msgid="542530994778109538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎Enable developer options‎‏‎‎‏‎"</string>
- <string name="development_settings_summary" msgid="1815795401632854041">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎Set options for app development‎‏‎‎‏‎"</string>
- <string name="development_settings_not_available" msgid="4308569041701535607">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎Developer options are not available for this user‎‏‎‎‏‎"</string>
- <string name="vpn_settings_not_available" msgid="956841430176985598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎VPN settings are not available for this user‎‏‎‎‏‎"</string>
- <string name="tethering_settings_not_available" msgid="6765770438438291012">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎Tethering settings are not available for this user‎‏‎‎‏‎"</string>
- <string name="apn_settings_not_available" msgid="7873729032165324000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎Access Point Name settings are not available for this user‎‏‎‎‏‎"</string>
- <string name="enable_adb" msgid="7982306934419797485">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎USB debugging‎‏‎‎‏‎"</string>
- <string name="enable_adb_summary" msgid="4881186971746056635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎Debug mode when USB is connected‎‏‎‎‏‎"</string>
- <string name="clear_adb_keys" msgid="4038889221503122743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎Revoke USB debugging authorizations‎‏‎‎‏‎"</string>
- <string name="bugreport_in_power" msgid="7923901846375587241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎Bug report shortcut‎‏‎‎‏‎"</string>
- <string name="bugreport_in_power_summary" msgid="1778455732762984579">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎Show a button in the power menu for taking a bug report‎‏‎‎‏‎"</string>
- <string name="keep_screen_on" msgid="1146389631208760344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎Stay awake‎‏‎‎‏‎"</string>
- <string name="keep_screen_on_summary" msgid="2173114350754293009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎Screen will never sleep while charging‎‏‎‎‏‎"</string>
- <string name="bt_hci_snoop_log" msgid="3340699311158865670">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎Enable Bluetooth HCI snoop log‎‏‎‎‏‎"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
- <string name="oem_unlock_enable" msgid="6040763321967327691">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎OEM unlocking‎‏‎‎‏‎"</string>
- <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎Allow the bootloader to be unlocked‎‏‎‎‏‎"</string>
- <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎Allow OEM unlocking?‎‏‎‎‏‎"</string>
- <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎WARNING: Device protection features will not work on this device while this setting is turned on.‎‏‎‎‏‎"</string>
- <string name="mock_location_app" msgid="7966220972812881854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎Select mock location app‎‏‎‎‏‎"</string>
- <string name="mock_location_app_not_set" msgid="809543285495344223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎No mock location app set‎‏‎‎‏‎"</string>
- <string name="mock_location_app_set" msgid="8966420655295102685">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎Mock location app: ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="debug_networking_category" msgid="7044075693643009662">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎Networking‎‏‎‎‏‎"</string>
- <string name="wifi_display_certification" msgid="8611569543791307533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎Wireless display certification‎‏‎‎‏‎"</string>
- <string name="wifi_verbose_logging" msgid="4203729756047242344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎Enable Wi‑Fi Verbose Logging‎‏‎‎‏‎"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎Connected MAC Randomization‎‏‎‎‏‎"</string>
- <string name="mobile_data_always_on" msgid="8774857027458200434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎Mobile data always active‎‏‎‎‏‎"</string>
- <string name="tethering_hardware_offload" msgid="7470077827090325814">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎Tethering hardware acceleration‎‏‎‎‏‎"</string>
- <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎Show Bluetooth devices without names‎‏‎‎‏‎"</string>
- <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎Disable absolute volume‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎Bluetooth AVRCP Version‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎Select Bluetooth AVRCP Version‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎Bluetooth Audio Codec‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎Trigger Bluetooth Audio Codec‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Selection‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎Bluetooth Audio Sample Rate‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎Trigger Bluetooth Audio Codec‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Selection: Sample Rate‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎Bluetooth Audio Bits Per Sample‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎Trigger Bluetooth Audio Codec‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Selection: Bits Per Sample‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎Bluetooth Audio Channel Mode‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎Trigger Bluetooth Audio Codec‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Selection: Channel Mode‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎Bluetooth Audio LDAC Codec: Playback Quality‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎Trigger Bluetooth Audio LDAC‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Codec Selection: Playback Quality‎‏‎‎‏‎"</string>
- <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎Streaming: ‎‏‎‎‏‏‎<xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎Private DNS‎‏‎‎‏‎"</string>
- <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎Select Private DNS Mode‎‏‎‎‏‎"</string>
- <string name="private_dns_mode_off" msgid="8236575187318721684">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‎Off‎‏‎‎‏‎"</string>
- <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎Automatic‎‏‎‎‏‎"</string>
- <string name="private_dns_mode_provider" msgid="8354935160639360804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎Private DNS provider hostname‎‏‎‎‏‎"</string>
- <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎Enter hostname of DNS provider‎‏‎‎‏‎"</string>
- <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎Couldn\'t connect‎‏‎‎‏‎"</string>
- <string name="wifi_display_certification_summary" msgid="1155182309166746973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎Show options for wireless display certification‎‏‎‎‏‎"</string>
- <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker‎‏‎‎‏‎"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎Randomize MAC address when connecting to Wi‑Fi networks‎‏‎‎‏‎"</string>
- <string name="wifi_metered_label" msgid="4514924227256839725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎Metered‎‏‎‎‏‎"</string>
- <string name="wifi_unmetered_label" msgid="6124098729457992931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‎Unmetered‎‏‎‎‏‎"</string>
- <string name="select_logd_size_title" msgid="7433137108348553508">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎Logger buffer sizes‎‏‎‎‏‎"</string>
- <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎Select Logger sizes per log buffer‎‏‎‎‏‎"</string>
- <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎Clear logger persistent storage?‎‏‎‎‏‎"</string>
- <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎When we no longer are monitoring with the persistent logger, we are required to erase the logger data resident on your device.‎‏‎‎‏‎"</string>
- <string name="select_logpersist_title" msgid="7530031344550073166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎Store logger data persistently on device‎‏‎‎‏‎"</string>
- <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎Select log buffers to store persistently on device‎‏‎‎‏‎"</string>
- <string name="select_usb_configuration_title" msgid="2649938511506971843">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎Select USB Configuration‎‏‎‎‏‎"</string>
- <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎Select USB Configuration‎‏‎‎‏‎"</string>
- <string name="allow_mock_location" msgid="2787962564578664888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎Allow mock locations‎‏‎‎‏‎"</string>
- <string name="allow_mock_location_summary" msgid="317615105156345626">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎Allow mock locations‎‏‎‎‏‎"</string>
- <string name="debug_view_attributes" msgid="6485448367803310384">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎Enable view attribute inspection‎‏‎‎‏‎"</string>
- <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎Always keep mobile data active, even when Wi‑Fi is active (for fast network switching).‎‏‎‎‏‎"</string>
- <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎Use tethering hardware acceleration if available‎‏‎‎‏‎"</string>
- <string name="adb_warning_title" msgid="6234463310896563253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‎Allow USB debugging?‎‏‎‎‏‎"</string>
- <string name="adb_warning_message" msgid="7316799925425402244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‎USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data.‎‏‎‎‏‎"</string>
- <string name="adb_keys_warning_message" msgid="5659849457135841625">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎Revoke access to USB debugging from all computers you’ve previously authorized?‎‏‎‎‏‎"</string>
- <string name="dev_settings_warning_title" msgid="7244607768088540165">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎Allow development settings?‎‏‎‎‏‎"</string>
- <string name="dev_settings_warning_message" msgid="2298337781139097964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave.‎‏‎‎‏‎"</string>
- <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎Verify apps over USB‎‏‎‎‏‎"</string>
- <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎Check apps installed via ADB/ADT for harmful behavior.‎‏‎‎‏‎"</string>
- <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎Bluetooth devices without names (MAC addresses only) will be displayed‎‏‎‎‏‎"</string>
- <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control.‎‏‎‎‏‎"</string>
- <string name="enable_terminal_title" msgid="95572094356054120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎Local terminal‎‏‎‎‏‎"</string>
- <string name="enable_terminal_summary" msgid="67667852659359206">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎Enable terminal app that offers local shell access‎‏‎‎‏‎"</string>
- <string name="hdcp_checking_title" msgid="8605478913544273282">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎HDCP checking‎‏‎‎‏‎"</string>
- <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎Set HDCP checking behavior‎‏‎‎‏‎"</string>
- <string name="debug_debugging_category" msgid="6781250159513471316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‎Debugging‎‏‎‎‏‎"</string>
- <string name="debug_app" msgid="8349591734751384446">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎Select debug app‎‏‎‎‏‎"</string>
- <string name="debug_app_not_set" msgid="718752499586403499">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‎No debug application set‎‏‎‎‏‎"</string>
- <string name="debug_app_set" msgid="2063077997870280017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎Debugging application: ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="select_application" msgid="5156029161289091703">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎Select application‎‏‎‎‏‎"</string>
- <string name="no_application" msgid="2813387563129153880">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎Nothing‎‏‎‎‏‎"</string>
- <string name="wait_for_debugger" msgid="1202370874528893091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎Wait for debugger‎‏‎‎‏‎"</string>
- <string name="wait_for_debugger_summary" msgid="1766918303462746804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎Debugged application waits for debugger to attach before executing‎‏‎‎‏‎"</string>
- <string name="debug_input_category" msgid="1811069939601180246">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎Input‎‏‎‎‏‎"</string>
- <string name="debug_drawing_category" msgid="6755716469267367852">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎Drawing‎‏‎‎‏‎"</string>
- <string name="debug_hw_drawing_category" msgid="6220174216912308658">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎Hardware accelerated rendering‎‏‎‎‏‎"</string>
- <string name="media_category" msgid="4388305075496848353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎Media‎‏‎‎‏‎"</string>
- <string name="debug_monitoring_category" msgid="7640508148375798343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎Monitoring‎‏‎‎‏‎"</string>
- <string name="strict_mode" msgid="1938795874357830695">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎Strict mode enabled‎‏‎‎‏‎"</string>
- <string name="strict_mode_summary" msgid="142834318897332338">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎Flash screen when apps do long operations on main thread‎‏‎‎‏‎"</string>
- <string name="pointer_location" msgid="6084434787496938001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎Pointer location‎‏‎‎‏‎"</string>
- <string name="pointer_location_summary" msgid="840819275172753713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎Screen overlay showing current touch data‎‏‎‎‏‎"</string>
- <string name="show_touches" msgid="2642976305235070316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‎‎Show taps‎‏‎‎‏‎"</string>
- <string name="show_touches_summary" msgid="6101183132903926324">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎Show visual feedback for taps‎‏‎‎‏‎"</string>
- <string name="show_screen_updates" msgid="5470814345876056420">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎Show surface updates‎‏‎‎‏‎"</string>
- <string name="show_screen_updates_summary" msgid="2569622766672785529">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎Flash entire window surfaces when they update‎‏‎‎‏‎"</string>
- <string name="show_hw_screen_updates" msgid="4117270979975470789">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎Show view updates‎‏‎‎‏‎"</string>
- <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎Flash views inside windows when drawn‎‏‎‎‏‎"</string>
- <string name="show_hw_layers_updates" msgid="5645728765605699821">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎Show hardware layers updates‎‏‎‎‏‎"</string>
- <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎Flash hardware layers green when they update‎‏‎‎‏‎"</string>
- <string name="debug_hw_overdraw" msgid="2968692419951565417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎Debug GPU overdraw‎‏‎‎‏‎"</string>
- <string name="disable_overlays" msgid="2074488440505934665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎Disable HW overlays‎‏‎‎‏‎"</string>
- <string name="disable_overlays_summary" msgid="3578941133710758592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎Always use GPU for screen compositing‎‏‎‎‏‎"</string>
- <string name="simulate_color_space" msgid="6745847141353345872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎Simulate color space‎‏‎‎‏‎"</string>
- <string name="enable_opengl_traces_title" msgid="6790444011053219871">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎Enable OpenGL traces‎‏‎‎‏‎"</string>
- <string name="usb_audio_disable_routing" msgid="8114498436003102671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎Disable USB audio routing‎‏‎‎‏‎"</string>
- <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎Disable automatic routing to USB audio peripherals‎‏‎‎‏‎"</string>
- <string name="debug_layout" msgid="5981361776594526155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎Show layout bounds‎‏‎‎‏‎"</string>
- <string name="debug_layout_summary" msgid="2001775315258637682">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎Show clip bounds, margins, etc.‎‏‎‎‏‎"</string>
- <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎Force RTL layout direction‎‏‎‎‏‎"</string>
- <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎Force screen layout direction to RTL for all locales‎‏‎‎‏‎"</string>
- <string name="force_msaa" msgid="7920323238677284387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎Force 4x MSAA‎‏‎‎‏‎"</string>
- <string name="force_msaa_summary" msgid="9123553203895817537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎Enable 4x MSAA in OpenGL ES 2.0 apps‎‏‎‎‏‎"</string>
- <string name="show_non_rect_clip" msgid="505954950474595172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎Debug non-rectangular clip operations‎‏‎‎‏‎"</string>
- <string name="track_frame_time" msgid="6094365083096851167">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎Profile HWUI rendering‎‏‎‎‏‎"</string>
- <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎Enable GPU debug layers‎‏‎‎‏‎"</string>
- <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎Allow loading GPU debug layers for debug apps‎‏‎‎‏‎"</string>
- <string name="window_animation_scale_title" msgid="6162587588166114700">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎Window animation scale‎‏‎‎‏‎"</string>
- <string name="transition_animation_scale_title" msgid="387527540523595875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎Transition animation scale‎‏‎‎‏‎"</string>
- <string name="animator_duration_scale_title" msgid="3406722410819934083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎Animator duration scale‎‏‎‎‏‎"</string>
- <string name="overlay_display_devices_title" msgid="5364176287998398539">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎Simulate secondary displays‎‏‎‎‏‎"</string>
- <string name="debug_applications_category" msgid="4206913653849771549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‎Apps‎‏‎‎‏‎"</string>
- <string name="immediately_destroy_activities" msgid="1579659389568133959">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎Don’t keep activities‎‏‎‎‏‎"</string>
- <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎Destroy every activity as soon as the user leaves it‎‏‎‎‏‎"</string>
- <string name="app_process_limit_title" msgid="4280600650253107163">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎Background process limit‎‏‎‎‏‎"</string>
- <string name="show_all_anrs" msgid="4924885492787069007">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎Show background ANRs‎‏‎‎‏‎"</string>
- <string name="show_all_anrs_summary" msgid="6636514318275139826">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎Display App Not Responding dialog for background apps‎‏‎‎‏‎"</string>
- <string name="show_notification_channel_warnings" msgid="1399948193466922683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎Show notification channel warnings‎‏‎‎‏‎"</string>
- <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎Displays on-screen warning when an app posts a notification without a valid channel‎‏‎‎‏‎"</string>
- <string name="force_allow_on_external" msgid="3215759785081916381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎Force allow apps on external‎‏‎‎‏‎"</string>
- <string name="force_allow_on_external_summary" msgid="3640752408258034689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎Makes any app eligible to be written to external storage, regardless of manifest values‎‏‎‎‏‎"</string>
- <string name="force_resizable_activities" msgid="8615764378147824985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‎‏‎Force activities to be resizable‎‏‎‎‏‎"</string>
- <string name="force_resizable_activities_summary" msgid="6667493494706124459">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎Make all activities resizable for multi-window, regardless of manifest values.‎‏‎‎‏‎"</string>
- <string name="enable_freeform_support" msgid="1461893351278940416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎Enable freeform windows‎‏‎‎‏‎"</string>
- <string name="enable_freeform_support_summary" msgid="8247310463288834487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎Enable support for experimental freeform windows.‎‏‎‎‏‎"</string>
- <string name="local_backup_password_title" msgid="3860471654439418822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎Desktop backup password‎‏‎‎‏‎"</string>
- <string name="local_backup_password_summary_none" msgid="6951095485537767956">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎Desktop full backups aren’t currently protected‎‏‎‎‏‎"</string>
- <string name="local_backup_password_summary_change" msgid="5376206246809190364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎Tap to change or remove the password for desktop full backups‎‏‎‎‏‎"</string>
- <string name="local_backup_password_toast_success" msgid="582016086228434290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎New backup password set‎‏‎‎‏‎"</string>
- <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎New password and confirmation don’t match‎‏‎‎‏‎"</string>
- <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎Failure setting backup password‎‏‎‎‏‎"</string>
- <string name="loading_injected_setting_summary" msgid="4095178591461231376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‎‎Loading…‎‏‎‎‏‎"</string>
+ <string name="choose_profile" msgid="6921016979430278661">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‎‏‎Choose profile‎‏‎‎‏‎"</string>
+ <string name="category_personal" msgid="1299663247844969448">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎Personal‎‏‎‎‏‎"</string>
+ <string name="category_work" msgid="8699184680584175622">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‎‎Work‎‏‎‎‏‎"</string>
+ <string name="development_settings_title" msgid="215179176067683667">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‏‏‎Developer options‎‏‎‎‏‎"</string>
+ <string name="development_settings_enable" msgid="542530994778109538">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‎‏‎‎Enable developer options‎‏‎‎‏‎"</string>
+ <string name="development_settings_summary" msgid="1815795401632854041">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎Set options for app development‎‏‎‎‏‎"</string>
+ <string name="development_settings_not_available" msgid="4308569041701535607">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎Developer options are not available for this user‎‏‎‎‏‎"</string>
+ <string name="vpn_settings_not_available" msgid="956841430176985598">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‎VPN settings are not available for this user‎‏‎‎‏‎"</string>
+ <string name="tethering_settings_not_available" msgid="6765770438438291012">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎Tethering settings are not available for this user‎‏‎‎‏‎"</string>
+ <string name="apn_settings_not_available" msgid="7873729032165324000">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‎Access Point Name settings are not available for this user‎‏‎‎‏‎"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎USB debugging‎‏‎‎‏‎"</string>
+ <string name="enable_adb_summary" msgid="4881186971746056635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‏‎Debug mode when USB is connected‎‏‎‎‏‎"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎Revoke USB debugging authorizations‎‏‎‎‏‎"</string>
+ <string name="bugreport_in_power" msgid="7923901846375587241">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎Bug report shortcut‎‏‎‎‏‎"</string>
+ <string name="bugreport_in_power_summary" msgid="1778455732762984579">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎Show a button in the power menu for taking a bug report‎‏‎‎‏‎"</string>
+ <string name="keep_screen_on" msgid="1146389631208760344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎Stay awake‎‏‎‎‏‎"</string>
+ <string name="keep_screen_on_summary" msgid="2173114350754293009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎Screen will never sleep while charging‎‏‎‎‏‎"</string>
+ <string name="bt_hci_snoop_log" msgid="3340699311158865670">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎Enable Bluetooth HCI snoop log‎‏‎‎‏‎"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)‎‏‎‎‏‎"</string>
+ <string name="oem_unlock_enable" msgid="6040763321967327691">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎OEM unlocking‎‏‎‎‏‎"</string>
+ <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎Allow the bootloader to be unlocked‎‏‎‎‏‎"</string>
+ <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎Allow OEM unlocking?‎‏‎‎‏‎"</string>
+ <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎WARNING: Device protection features will not work on this device while this setting is turned on.‎‏‎‎‏‎"</string>
+ <string name="mock_location_app" msgid="7966220972812881854">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎Select mock location app‎‏‎‎‏‎"</string>
+ <string name="mock_location_app_not_set" msgid="809543285495344223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎No mock location app set‎‏‎‎‏‎"</string>
+ <string name="mock_location_app_set" msgid="8966420655295102685">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‏‎Mock location app: ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="debug_networking_category" msgid="7044075693643009662">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎Networking‎‏‎‎‏‎"</string>
+ <string name="wifi_display_certification" msgid="8611569543791307533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎Wireless display certification‎‏‎‎‏‎"</string>
+ <string name="wifi_verbose_logging" msgid="4203729756047242344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎Enable Wi‑Fi Verbose Logging‎‏‎‎‏‎"</string>
+ <string name="mobile_data_always_on" msgid="8774857027458200434">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‎‎Mobile data always active‎‏‎‎‏‎"</string>
+ <string name="tethering_hardware_offload" msgid="7470077827090325814">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‎‎Tethering hardware acceleration‎‏‎‎‏‎"</string>
+ <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎Show Bluetooth devices without names‎‏‎‎‏‎"</string>
+ <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‏‎‎‏‎Disable absolute volume‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎Bluetooth AVRCP Version‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎Select Bluetooth AVRCP Version‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎Bluetooth Audio Codec‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎Trigger Bluetooth Audio Codec‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Selection‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎Bluetooth Audio Sample Rate‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‏‎Trigger Bluetooth Audio Codec‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Selection: Sample Rate‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎Bluetooth Audio Bits Per Sample‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎Trigger Bluetooth Audio Codec‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Selection: Bits Per Sample‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎Bluetooth Audio Channel Mode‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‎‏‏‎‏‎Trigger Bluetooth Audio Codec‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Selection: Channel Mode‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎Bluetooth Audio LDAC Codec: Playback Quality‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎Trigger Bluetooth Audio LDAC‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Codec Selection: Playback Quality‎‏‎‎‏‎"</string>
+ <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎Streaming: ‎‏‎‎‏‏‎<xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎Private DNS‎‏‎‎‏‎"</string>
+ <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎Select Private DNS Mode‎‏‎‎‏‎"</string>
+ <string name="private_dns_mode_off" msgid="8236575187318721684">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‎Off‎‏‎‎‏‎"</string>
+ <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎Automatic‎‏‎‎‏‎"</string>
+ <string name="private_dns_mode_provider" msgid="8354935160639360804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎Private DNS provider hostname‎‏‎‎‏‎"</string>
+ <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎Enter hostname of DNS provider‎‏‎‎‏‎"</string>
+ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎Couldn\'t connect‎‏‎‎‏‎"</string>
+ <string name="wifi_display_certification_summary" msgid="1155182309166746973">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎Show options for wireless display certification‎‏‎‎‏‎"</string>
+ <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker‎‏‎‎‏‎"</string>
+ <string name="wifi_metered_label" msgid="4514924227256839725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎Metered‎‏‎‎‏‎"</string>
+ <string name="wifi_unmetered_label" msgid="6124098729457992931">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‎Unmetered‎‏‎‎‏‎"</string>
+ <string name="select_logd_size_title" msgid="7433137108348553508">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎Logger buffer sizes‎‏‎‎‏‎"</string>
+ <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎Select Logger sizes per log buffer‎‏‎‎‏‎"</string>
+ <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎Clear logger persistent storage?‎‏‎‎‏‎"</string>
+ <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‎When we no longer are monitoring with the persistent logger, we are required to erase the logger data resident on your device.‎‏‎‎‏‎"</string>
+ <string name="select_logpersist_title" msgid="7530031344550073166">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‎Store logger data persistently on device‎‏‎‎‏‎"</string>
+ <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎Select log buffers to store persistently on device‎‏‎‎‏‎"</string>
+ <string name="select_usb_configuration_title" msgid="2649938511506971843">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎Select USB Configuration‎‏‎‎‏‎"</string>
+ <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎Select USB Configuration‎‏‎‎‏‎"</string>
+ <string name="allow_mock_location" msgid="2787962564578664888">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‎‎‎Allow mock locations‎‏‎‎‏‎"</string>
+ <string name="allow_mock_location_summary" msgid="317615105156345626">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎Allow mock locations‎‏‎‎‏‎"</string>
+ <string name="debug_view_attributes" msgid="6485448367803310384">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎Enable view attribute inspection‎‏‎‎‏‎"</string>
+ <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎Always keep mobile data active, even when Wi‑Fi is active (for fast network switching).‎‏‎‎‏‎"</string>
+ <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎Use tethering hardware acceleration if available‎‏‎‎‏‎"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‎Allow USB debugging?‎‏‎‎‏‎"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‎‎USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data.‎‏‎‎‏‎"</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‎‏‎Revoke access to USB debugging from all computers you’ve previously authorized?‎‏‎‎‏‎"</string>
+ <string name="dev_settings_warning_title" msgid="7244607768088540165">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎Allow development settings?‎‏‎‎‏‎"</string>
+ <string name="dev_settings_warning_message" msgid="2298337781139097964">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‎‎‎These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave.‎‏‎‎‏‎"</string>
+ <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎Verify apps over USB‎‏‎‎‏‎"</string>
+ <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎Check apps installed via ADB/ADT for harmful behavior.‎‏‎‎‏‎"</string>
+ <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‎Bluetooth devices without names (MAC addresses only) will be displayed‎‏‎‎‏‎"</string>
+ <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‎‏‎‏‎Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control.‎‏‎‎‏‎"</string>
+ <string name="enable_terminal_title" msgid="95572094356054120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‎‎‎Local terminal‎‏‎‎‏‎"</string>
+ <string name="enable_terminal_summary" msgid="67667852659359206">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎Enable terminal app that offers local shell access‎‏‎‎‏‎"</string>
+ <string name="hdcp_checking_title" msgid="8605478913544273282">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎HDCP checking‎‏‎‎‏‎"</string>
+ <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎Set HDCP checking behavior‎‏‎‎‏‎"</string>
+ <string name="debug_debugging_category" msgid="6781250159513471316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‎Debugging‎‏‎‎‏‎"</string>
+ <string name="debug_app" msgid="8349591734751384446">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎Select debug app‎‏‎‎‏‎"</string>
+ <string name="debug_app_not_set" msgid="718752499586403499">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‎No debug application set‎‏‎‎‏‎"</string>
+ <string name="debug_app_set" msgid="2063077997870280017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‎Debugging application: ‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="select_application" msgid="5156029161289091703">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‏‏‎Select application‎‏‎‎‏‎"</string>
+ <string name="no_application" msgid="2813387563129153880">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‎‎‎‎Nothing‎‏‎‎‏‎"</string>
+ <string name="wait_for_debugger" msgid="1202370874528893091">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‎Wait for debugger‎‏‎‎‏‎"</string>
+ <string name="wait_for_debugger_summary" msgid="1766918303462746804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎Debugged application waits for debugger to attach before executing‎‏‎‎‏‎"</string>
+ <string name="debug_input_category" msgid="1811069939601180246">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎Input‎‏‎‎‏‎"</string>
+ <string name="debug_drawing_category" msgid="6755716469267367852">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎Drawing‎‏‎‎‏‎"</string>
+ <string name="debug_hw_drawing_category" msgid="6220174216912308658">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎Hardware accelerated rendering‎‏‎‎‏‎"</string>
+ <string name="media_category" msgid="4388305075496848353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎Media‎‏‎‎‏‎"</string>
+ <string name="debug_monitoring_category" msgid="7640508148375798343">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎Monitoring‎‏‎‎‏‎"</string>
+ <string name="strict_mode" msgid="1938795874357830695">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‎Strict mode enabled‎‏‎‎‏‎"</string>
+ <string name="strict_mode_summary" msgid="142834318897332338">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‎‎Flash screen when apps do long operations on main thread‎‏‎‎‏‎"</string>
+ <string name="pointer_location" msgid="6084434787496938001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‎Pointer location‎‏‎‎‏‎"</string>
+ <string name="pointer_location_summary" msgid="840819275172753713">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‎‎‎‏‎Screen overlay showing current touch data‎‏‎‎‏‎"</string>
+ <string name="show_touches" msgid="2642976305235070316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‎‎‎Show taps‎‏‎‎‏‎"</string>
+ <string name="show_touches_summary" msgid="6101183132903926324">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎Show visual feedback for taps‎‏‎‎‏‎"</string>
+ <string name="show_screen_updates" msgid="5470814345876056420">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‎Show surface updates‎‏‎‎‏‎"</string>
+ <string name="show_screen_updates_summary" msgid="2569622766672785529">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎Flash entire window surfaces when they update‎‏‎‎‏‎"</string>
+ <string name="show_hw_screen_updates" msgid="4117270979975470789">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎Show view updates‎‏‎‎‏‎"</string>
+ <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎Flash views inside windows when drawn‎‏‎‎‏‎"</string>
+ <string name="show_hw_layers_updates" msgid="5645728765605699821">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎Show hardware layers updates‎‏‎‎‏‎"</string>
+ <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎Flash hardware layers green when they update‎‏‎‎‏‎"</string>
+ <string name="debug_hw_overdraw" msgid="2968692419951565417">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‏‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‏‎Debug GPU overdraw‎‏‎‎‏‎"</string>
+ <string name="disable_overlays" msgid="2074488440505934665">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‏‎Disable HW overlays‎‏‎‎‏‎"</string>
+ <string name="disable_overlays_summary" msgid="3578941133710758592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎Always use GPU for screen compositing‎‏‎‎‏‎"</string>
+ <string name="simulate_color_space" msgid="6745847141353345872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎‎Simulate color space‎‏‎‎‏‎"</string>
+ <string name="enable_opengl_traces_title" msgid="6790444011053219871">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎Enable OpenGL traces‎‏‎‎‏‎"</string>
+ <string name="usb_audio_disable_routing" msgid="8114498436003102671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎Disable USB audio routing‎‏‎‎‏‎"</string>
+ <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎Disable automatic routing to USB audio peripherals‎‏‎‎‏‎"</string>
+ <string name="debug_layout" msgid="5981361776594526155">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎Show layout bounds‎‏‎‎‏‎"</string>
+ <string name="debug_layout_summary" msgid="2001775315258637682">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎Show clip bounds, margins, etc.‎‏‎‎‏‎"</string>
+ <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‏‎‎Force RTL layout direction‎‏‎‎‏‎"</string>
+ <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎Force screen layout direction to RTL for all locales‎‏‎‎‏‎"</string>
+ <string name="force_msaa" msgid="7920323238677284387">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎Force 4x MSAA‎‏‎‎‏‎"</string>
+ <string name="force_msaa_summary" msgid="9123553203895817537">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎Enable 4x MSAA in OpenGL ES 2.0 apps‎‏‎‎‏‎"</string>
+ <string name="show_non_rect_clip" msgid="505954950474595172">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎Debug non-rectangular clip operations‎‏‎‎‏‎"</string>
+ <string name="track_frame_time" msgid="6094365083096851167">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‏‎Profile HWUI rendering‎‏‎‎‏‎"</string>
+ <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‎Enable GPU debug layers‎‏‎‎‏‎"</string>
+ <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‏‎‎‎Allow loading GPU debug layers for debug apps‎‏‎‎‏‎"</string>
+ <string name="window_animation_scale_title" msgid="6162587588166114700">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎Window animation scale‎‏‎‎‏‎"</string>
+ <string name="transition_animation_scale_title" msgid="387527540523595875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎Transition animation scale‎‏‎‎‏‎"</string>
+ <string name="animator_duration_scale_title" msgid="3406722410819934083">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎Animator duration scale‎‏‎‎‏‎"</string>
+ <string name="overlay_display_devices_title" msgid="5364176287998398539">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‎Simulate secondary displays‎‏‎‎‏‎"</string>
+ <string name="debug_applications_category" msgid="4206913653849771549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‎Apps‎‏‎‎‏‎"</string>
+ <string name="immediately_destroy_activities" msgid="1579659389568133959">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎Don’t keep activities‎‏‎‎‏‎"</string>
+ <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎Destroy every activity as soon as the user leaves it‎‏‎‎‏‎"</string>
+ <string name="app_process_limit_title" msgid="4280600650253107163">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎Background process limit‎‏‎‎‏‎"</string>
+ <string name="show_all_anrs" msgid="4924885492787069007">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‏‎Show background ANRs‎‏‎‎‏‎"</string>
+ <string name="show_all_anrs_summary" msgid="6636514318275139826">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎Display App Not Responding dialog for background apps‎‏‎‎‏‎"</string>
+ <string name="show_notification_channel_warnings" msgid="1399948193466922683">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‏‎Show notification channel warnings‎‏‎‎‏‎"</string>
+ <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎Displays on-screen warning when an app posts a notification without a valid channel‎‏‎‎‏‎"</string>
+ <string name="force_allow_on_external" msgid="3215759785081916381">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‏‎Force allow apps on external‎‏‎‎‏‎"</string>
+ <string name="force_allow_on_external_summary" msgid="3640752408258034689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‎Makes any app eligible to be written to external storage, regardless of manifest values‎‏‎‎‏‎"</string>
+ <string name="force_resizable_activities" msgid="8615764378147824985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‎‏‏‎‎‏‎Force activities to be resizable‎‏‎‎‏‎"</string>
+ <string name="force_resizable_activities_summary" msgid="6667493494706124459">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎Make all activities resizable for multi-window, regardless of manifest values.‎‏‎‎‏‎"</string>
+ <string name="enable_freeform_support" msgid="1461893351278940416">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‎‎‎‎‎‎Enable freeform windows‎‏‎‎‏‎"</string>
+ <string name="enable_freeform_support_summary" msgid="8247310463288834487">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎Enable support for experimental freeform windows.‎‏‎‎‏‎"</string>
+ <string name="local_backup_password_title" msgid="3860471654439418822">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎Desktop backup password‎‏‎‎‏‎"</string>
+ <string name="local_backup_password_summary_none" msgid="6951095485537767956">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎Desktop full backups aren’t currently protected‎‏‎‎‏‎"</string>
+ <string name="local_backup_password_summary_change" msgid="5376206246809190364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎Tap to change or remove the password for desktop full backups‎‏‎‎‏‎"</string>
+ <string name="local_backup_password_toast_success" msgid="582016086228434290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎New backup password set‎‏‎‎‏‎"</string>
+ <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‎‎‎‎‎‎New password and confirmation don’t match‎‏‎‎‏‎"</string>
+ <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‎‎‏‏‎Failure setting backup password‎‏‎‎‏‎"</string>
+ <string name="loading_injected_setting_summary" msgid="4095178591461231376">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‎‎Loading…‎‏‎‎‏‎"</string>
<string-array name="color_mode_names">
- <item msgid="2425514299220523812">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎Vibrant (default)‎‏‎‎‏‎"</item>
- <item msgid="8446070607501413455">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎Natural‎‏‎‎‏‎"</item>
- <item msgid="6553408765810699025">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎Standard‎‏‎‎‏‎"</item>
+ <item msgid="2425514299220523812">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‎Vibrant (default)‎‏‎‎‏‎"</item>
+ <item msgid="8446070607501413455">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎Natural‎‏‎‎‏‎"</item>
+ <item msgid="6553408765810699025">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‎Standard‎‏‎‎‏‎"</item>
</string-array>
<string-array name="color_mode_descriptions">
- <item msgid="4979629397075120893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎Enhanced colors‎‏‎‎‏‎"</item>
- <item msgid="8280754435979370728">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎Natural colors as seen by the eye‎‏‎‎‏‎"</item>
- <item msgid="5363960654009010371">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎Colors optimized for digital content‎‏‎‎‏‎"</item>
+ <item msgid="4979629397075120893">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎Enhanced colors‎‏‎‎‏‎"</item>
+ <item msgid="8280754435979370728">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‏‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎Natural colors as seen by the eye‎‏‎‎‏‎"</item>
+ <item msgid="5363960654009010371">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‏‎Colors optimized for digital content‎‏‎‎‏‎"</item>
</string-array>
- <string name="inactive_apps_title" msgid="9042996804461901648">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎Standby apps‎‏‎‎‏‎"</string>
- <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎Inactive. Tap to toggle.‎‏‎‎‏‎"</string>
- <string name="inactive_app_active_summary" msgid="4174921824958516106">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎Active. Tap to toggle.‎‏‎‎‏‎"</string>
- <string name="standby_bucket_summary" msgid="6567835350910684727">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎App standby state:‎‏‎‎‏‏‎<xliff:g id="BUCKET"> %s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="runningservices_settings_title" msgid="8097287939865165213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎Running services‎‏‎‎‏‎"</string>
- <string name="runningservices_settings_summary" msgid="854608995821032748">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎View and control currently running services‎‏‎‎‏‎"</string>
- <string name="select_webview_provider_title" msgid="4628592979751918907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎WebView implementation‎‏‎‎‏‎"</string>
- <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎Set WebView implementation‎‏‎‎‏‎"</string>
- <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‎This choice is no longer valid. Try again.‎‏‎‎‏‎"</string>
- <string name="convert_to_file_encryption" msgid="3060156730651061223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‎Convert to file encryption‎‏‎‎‏‎"</string>
- <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎Convert…‎‏‎‎‏‎"</string>
- <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‏‎Already file encrypted‎‏‎‎‏‎"</string>
- <string name="title_convert_fbe" msgid="1263622876196444453">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎Converting to file based encryption‎‏‎‎‏‎"</string>
- <string name="convert_to_fbe_warning" msgid="6139067817148865527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎Convert data partition to file based encryption.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ !!Warning!! This will erase all your data.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ This feature is alpha, and may not work correctly.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Press \'Wipe and convert…\' to continue.‎‏‎‎‏‎"</string>
- <string name="button_convert_fbe" msgid="5152671181309826405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎Wipe and convert…‎‏‎‎‏‎"</string>
- <string name="picture_color_mode" msgid="4560755008730283695">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎Picture color mode‎‏‎‎‏‎"</string>
- <string name="picture_color_mode_desc" msgid="1141891467675548590">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎Use sRGB‎‏‎‎‏‎"</string>
- <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎Disabled‎‏‎‎‏‎"</string>
- <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎Monochromacy‎‏‎‎‏‎"</string>
- <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎Deuteranomaly (red-green)‎‏‎‎‏‎"</string>
- <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‏‎Protanomaly (red-green)‎‏‎‎‏‎"</string>
- <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎Tritanomaly (blue-yellow)‎‏‎‎‏‎"</string>
- <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎Color correction‎‏‎‎‏‎"</string>
- <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‎This feature is experimental and may affect performance.‎‏‎‎‏‎"</string>
- <string name="daltonizer_type_overridden" msgid="3116947244410245916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎Overridden by ‎‏‎‎‏‏‎<xliff:g id="TITLE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="power_remaining_settings_home_page" msgid="4845022416859002011">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="TIME_STRING">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="power_remaining_duration_only" msgid="6123167166221295462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎About ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
- <string name="power_discharging_duration" msgid="8848256785736335185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎About ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="power_remaining_duration_only_enhanced" msgid="4189311599812296592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎About ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left based on your usage‎‏‎‎‏‎"</string>
- <string name="power_discharging_duration_enhanced" msgid="1992003260664804080">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎About ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left based on your usage (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="power_remaining_duration_only_short" msgid="3463575350656389957">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
- <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎Should last until about ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ based on your usage (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎Should last until about ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ based on your usage‎‏‎‎‏‎"</string>
- <string name="power_discharge_by" msgid="6453537733650125582">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎Should last until about ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="power_discharge_by_only" msgid="107616694963545745">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎Should last until about ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="power_discharge_by_only_short" msgid="1372817269546888804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎Until ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‎‎‎‎‏‎Less than ‎‏‎‎‏‏‎<xliff:g id="THRESHOLD">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining‎‏‎‎‏‎"</string>
- <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎Less than ‎‏‎‎‏‏‎<xliff:g id="THRESHOLD">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎More than ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="power_remaining_only_more_than_subtext" msgid="8931654680569617380">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎More than ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining‎‏‎‎‏‎"</string>
- <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="1181059207608751924">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎Phone may shutdown soon‎‏‎‎‏‎"</string>
- <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="2606370266981054691">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎Tablet may shutdown soon‎‏‎‎‏‎"</string>
- <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="2918084807716859985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎Device may shutdown soon‎‏‎‎‏‎"</string>
- <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="3090926004324573908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎Phone may shutdown soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7466484148515796216">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎Tablet may shutdown soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="603933521600231649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‏‎Device may shutdown soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="power_charging" msgid="1779532561355864267">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="STATE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left until fully charged‎‏‎‎‏‎"</string>
- <string name="power_charging_duration" msgid="4676999980973411875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="TIME">%2$s</xliff:g>‎‏‎‎‏‏‏‎ until fully charged‎‏‎‎‏‎"</string>
- <string name="battery_info_status_unknown" msgid="196130600938058547">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎Unknown‎‏‎‎‏‎"</string>
- <string name="battery_info_status_charging" msgid="1705179948350365604">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎Charging‎‏‎‎‏‎"</string>
- <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎charging‎‏‎‎‏‎"</string>
- <string name="battery_info_status_discharging" msgid="310932812698268588">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎Not charging‎‏‎‎‏‎"</string>
- <string name="battery_info_status_not_charging" msgid="8523453668342598579">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎Plugged in, can\'t charge right now‎‏‎‎‏‎"</string>
- <string name="battery_info_status_full" msgid="2824614753861462808">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎Full‎‏‎‎‏‎"</string>
- <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎Controlled by admin‎‏‎‎‏‎"</string>
- <string name="disabled" msgid="9206776641295849915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎Disabled‎‏‎‎‏‎"</string>
- <string name="external_source_trusted" msgid="2707996266575928037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎Allowed‎‏‎‎‏‎"</string>
- <string name="external_source_untrusted" msgid="2677442511837596726">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎Not allowed‎‏‎‎‏‎"</string>
- <string name="install_other_apps" msgid="6986686991775883017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎Install unknown apps‎‏‎‎‏‎"</string>
- <string name="home" msgid="3256884684164448244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎Settings Home‎‏‎‎‏‎"</string>
+ <string name="inactive_apps_title" msgid="9042996804461901648">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎Standby apps‎‏‎‎‏‎"</string>
+ <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎Inactive. Tap to toggle.‎‏‎‎‏‎"</string>
+ <string name="inactive_app_active_summary" msgid="4174921824958516106">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‏‏‏‎‎‎‏‎‏‎‎Active. Tap to toggle.‎‏‎‎‏‎"</string>
+ <string name="standby_bucket_summary" msgid="6567835350910684727">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎App standby state:‎‏‎‎‏‏‎<xliff:g id="BUCKET"> %s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="runningservices_settings_title" msgid="8097287939865165213">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎Running services‎‏‎‎‏‎"</string>
+ <string name="runningservices_settings_summary" msgid="854608995821032748">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‏‎‎‎View and control currently running services‎‏‎‎‏‎"</string>
+ <string name="select_webview_provider_title" msgid="4628592979751918907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎WebView implementation‎‏‎‎‏‎"</string>
+ <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎‎‎Set WebView implementation‎‏‎‎‏‎"</string>
+ <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‎‏‏‏‎This choice is no longer valid. Try again.‎‏‎‎‏‎"</string>
+ <string name="convert_to_file_encryption" msgid="3060156730651061223">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‎Convert to file encryption‎‏‎‎‏‎"</string>
+ <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎Convert…‎‏‎‎‏‎"</string>
+ <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‎‏‎Already file encrypted‎‏‎‎‏‎"</string>
+ <string name="title_convert_fbe" msgid="1263622876196444453">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎Converting to file based encryption‎‏‎‎‏‎"</string>
+ <string name="convert_to_fbe_warning" msgid="6139067817148865527">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎Convert data partition to file based encryption.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ !!Warning!! This will erase all your data.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ This feature is alpha, and may not work correctly.‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎ Press \'Wipe and convert…\' to continue.‎‏‎‎‏‎"</string>
+ <string name="button_convert_fbe" msgid="5152671181309826405">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎Wipe and convert…‎‏‎‎‏‎"</string>
+ <string name="picture_color_mode" msgid="4560755008730283695">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎Picture color mode‎‏‎‎‏‎"</string>
+ <string name="picture_color_mode_desc" msgid="1141891467675548590">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎Use sRGB‎‏‎‎‏‎"</string>
+ <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎Disabled‎‏‎‎‏‎"</string>
+ <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‎Monochromacy‎‏‎‎‏‎"</string>
+ <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‏‎‎‏‏‎‎‏‎Deuteranomaly (red-green)‎‏‎‎‏‎"</string>
+ <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‏‎Protanomaly (red-green)‎‏‎‎‏‎"</string>
+ <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‎‏‎Tritanomaly (blue-yellow)‎‏‎‎‏‎"</string>
+ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎Color correction‎‏‎‎‏‎"</string>
+ <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‎This feature is experimental and may affect performance.‎‏‎‎‏‎"</string>
+ <string name="daltonizer_type_overridden" msgid="3116947244410245916">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎Overridden by ‎‏‎‎‏‏‎<xliff:g id="TITLE">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="power_remaining_settings_home_page" msgid="4845022416859002011">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="PERCENTAGE">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="TIME_STRING">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="power_remaining_duration_only" msgid="6123167166221295462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‎‎About ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
+ <string name="power_discharging_duration" msgid="8848256785736335185">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‏‎About ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="power_remaining_duration_only_enhanced" msgid="4189311599812296592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‎About ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left based on your usage‎‏‎‎‏‎"</string>
+ <string name="power_discharging_duration_enhanced" msgid="1992003260664804080">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎About ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left based on your usage (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="power_remaining_duration_only_short" msgid="3463575350656389957">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
+ <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎Should last until about ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ based on your usage (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‎Should last until about ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ based on your usage‎‏‎‎‏‎"</string>
+ <string name="power_discharge_by" msgid="6453537733650125582">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‎Should last until about ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="power_discharge_by_only" msgid="107616694963545745">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‏‎Should last until about ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="power_discharge_by_only_short" msgid="1372817269546888804">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‎Until ‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‎‎‎‎‏‎Less than ‎‏‎‎‏‏‎<xliff:g id="THRESHOLD">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining‎‏‎‎‏‎"</string>
+ <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎Less than ‎‏‎‎‏‏‎<xliff:g id="THRESHOLD">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎More than ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%2$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="power_remaining_only_more_than_subtext" msgid="8931654680569617380">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‎More than ‎‏‎‎‏‏‎<xliff:g id="TIME_REMAINING">%1$s</xliff:g>‎‏‎‎‏‏‏‎ remaining‎‏‎‎‏‎"</string>
+ <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="1181059207608751924">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎Phone may shutdown soon‎‏‎‎‏‎"</string>
+ <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="2606370266981054691">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎Tablet may shutdown soon‎‏‎‎‏‎"</string>
+ <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="2918084807716859985">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‎‏‎Device may shutdown soon‎‏‎‎‏‎"</string>
+ <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="3090926004324573908">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‎Phone may shutdown soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7466484148515796216">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎Tablet may shutdown soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="603933521600231649">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‏‎Device may shutdown soon (‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="power_charging" msgid="1779532561355864267">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="STATE">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎<xliff:g id="TIME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left until fully charged‎‏‎‎‏‎"</string>
+ <string name="power_charging_duration" msgid="4676999980973411875">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="LEVEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - ‎‏‎‎‏‏‎<xliff:g id="TIME">%2$s</xliff:g>‎‏‎‎‏‏‏‎ until fully charged‎‏‎‎‏‎"</string>
+ <string name="battery_info_status_unknown" msgid="196130600938058547">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎Unknown‎‏‎‎‏‎"</string>
+ <string name="battery_info_status_charging" msgid="1705179948350365604">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎Charging‎‏‎‎‏‎"</string>
+ <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎charging‎‏‎‎‏‎"</string>
+ <string name="battery_info_status_discharging" msgid="310932812698268588">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎Not charging‎‏‎‎‏‎"</string>
+ <string name="battery_info_status_not_charging" msgid="8523453668342598579">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‏‏‎Plugged in, can\'t charge right now‎‏‎‎‏‎"</string>
+ <string name="battery_info_status_full" msgid="2824614753861462808">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎Full‎‏‎‎‏‎"</string>
+ <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎Controlled by admin‎‏‎‎‏‎"</string>
+ <string name="disabled" msgid="9206776641295849915">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎Disabled‎‏‎‎‏‎"</string>
+ <string name="external_source_trusted" msgid="2707996266575928037">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎Allowed‎‏‎‎‏‎"</string>
+ <string name="external_source_untrusted" msgid="2677442511837596726">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎Not allowed‎‏‎‎‏‎"</string>
+ <string name="install_other_apps" msgid="6986686991775883017">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎Install unknown apps‎‏‎‎‏‎"</string>
+ <string name="home" msgid="3256884684164448244">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎Settings Home‎‏‎‎‏‎"</string>
<string-array name="battery_labels">
- <item msgid="8494684293649631252">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎0%‎‏‎‎‏‎"</item>
- <item msgid="8934126114226089439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎50%‎‏‎‎‏‎"</item>
- <item msgid="1286113608943010849">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎100%‎‏‎‎‏‎"</item>
+ <item msgid="8494684293649631252">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‎‎0%‎‏‎‎‏‎"</item>
+ <item msgid="8934126114226089439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‎‏‏‏‏‏‎50%‎‏‎‎‏‎"</item>
+ <item msgid="1286113608943010849">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎100%‎‏‎‎‏‎"</item>
</string-array>
- <string name="charge_length_format" msgid="8978516217024434156">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ ago‎‏‎‎‏‎"</string>
- <string name="remaining_length_format" msgid="7886337596669190587">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
- <string name="screen_zoom_summary_small" msgid="5867245310241621570">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎Small‎‏‎‎‏‎"</string>
- <string name="screen_zoom_summary_default" msgid="2247006805614056507">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎Default‎‏‎‎‏‎"</string>
- <string name="screen_zoom_summary_large" msgid="4835294730065424084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎Large‎‏‎‎‏‎"</string>
- <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎Larger‎‏‎‎‏‎"</string>
- <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎Largest‎‏‎‎‏‎"</string>
- <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎Custom (‎‏‎‎‏‏‎<xliff:g id="DENSITYDPI">%d</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
- <string name="content_description_menu_button" msgid="8182594799812351266">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎Menu‎‏‎‎‏‎"</string>
- <string name="retail_demo_reset_message" msgid="118771671364131297">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎Enter password to perform factory reset in demo mode‎‏‎‎‏‎"</string>
- <string name="retail_demo_reset_next" msgid="8356731459226304963">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎Next‎‏‎‎‏‎"</string>
- <string name="retail_demo_reset_title" msgid="696589204029930100">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎Password required‎‏‎‎‏‎"</string>
- <string name="active_input_method_subtypes" msgid="3596398805424733238">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎Active input methods‎‏‎‎‏‎"</string>
- <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎Use system languages‎‏‎‎‏‎"</string>
- <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‎‎Failed to open settings for ‎‏‎‎‏‏‎<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="ime_security_warning" msgid="4135828934735934248">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the app ‎‏‎‎‏‏‎<xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Use this input method?‎‏‎‎‏‎"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎Note: After a reboot, this app can\'t start until you unlock your phone‎‏‎‎‏‎"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‎IMS registration state‎‏‎‎‏‎"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‎‎‎Registered‎‏‎‎‏‎"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎Not registered‎‏‎‎‏‎"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎Unavailable‎‏‎‎‏‎"</string>
- <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎MAC is randomized‎‏‎‎‏‎"</string>
+ <string name="charge_length_format" msgid="8978516217024434156">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‏‎‎‎‏‏‏‎‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ ago‎‏‎‎‏‎"</string>
+ <string name="remaining_length_format" msgid="7886337596669190587">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="ID_1">%1$s</xliff:g>‎‏‎‎‏‏‏‎ left‎‏‎‎‏‎"</string>
+ <string name="screen_zoom_summary_small" msgid="5867245310241621570">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎Small‎‏‎‎‏‎"</string>
+ <string name="screen_zoom_summary_default" msgid="2247006805614056507">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‏‏‎Default‎‏‎‎‏‎"</string>
+ <string name="screen_zoom_summary_large" msgid="4835294730065424084">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‎Large‎‏‎‎‏‎"</string>
+ <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‏‏‎‎‏‏‎‎‏‏‎Larger‎‏‎‎‏‎"</string>
+ <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‎‎‎‏‏‎Largest‎‏‎‎‏‎"</string>
+ <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎Custom (‎‏‎‎‏‏‎<xliff:g id="DENSITYDPI">%d</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
+ <string name="content_description_menu_button" msgid="8182594799812351266">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎Menu‎‏‎‎‏‎"</string>
+ <string name="retail_demo_reset_message" msgid="118771671364131297">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎Enter password to perform factory reset in demo mode‎‏‎‎‏‎"</string>
+ <string name="retail_demo_reset_next" msgid="8356731459226304963">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‎Next‎‏‎‎‏‎"</string>
+ <string name="retail_demo_reset_title" msgid="696589204029930100">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎‎Password required‎‏‎‎‏‎"</string>
+ <string name="active_input_method_subtypes" msgid="3596398805424733238">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎Active input methods‎‏‎‎‏‎"</string>
+ <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‎Use system languages‎‏‎‎‏‎"</string>
+ <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‎‏‏‏‏‎‎‎‏‏‏‎‎Failed to open settings for ‎‏‎‎‏‏‎<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="ime_security_warning" msgid="4135828934735934248">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the app ‎‏‎‎‏‏‎<xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎. Use this input method?‎‏‎‎‏‎"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‏‏‏‎‎‎‏‎‏‎Note: After a reboot, this app can\'t start until you unlock your phone‎‏‎‎‏‎"</string>
+ <string name="ims_reg_title" msgid="7609782759207241443">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‏‎‎‎‏‏‎IMS registration state‎‏‎‎‏‎"</string>
+ <string name="ims_reg_status_registered" msgid="933003316932739188">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‎‎‎Registered‎‏‎‎‏‎"</string>
+ <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‏‏‎‎Not registered‎‏‎‎‏‎"</string>
+ <string name="status_unavailable" msgid="7862009036663793314">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‏‎‎Unavailable‎‏‎‎‏‎"</string>
+ <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‏‎MAC is randomized‎‏‎‎‏‎"</string>
<plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780">
- <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎%1$d devices connected‎‏‎‎‏‎</item>
- <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎%1$d device connected‎‏‎‎‏‎</item>
+ <item quantity="other">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎%1$d devices connected‎‏‎‎‏‎</item>
+ <item quantity="one">‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‎%1$d device connected‎‏‎‎‏‎</item>
</plurals>
- <string name="accessibility_manual_zen_more_time" msgid="1636187409258564291">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‏‎More time.‎‏‎‎‏‎"</string>
- <string name="accessibility_manual_zen_less_time" msgid="6590887204171164991">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‏‎Less time.‎‏‎‎‏‎"</string>
- <string name="cancel" msgid="6859253417269739139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎Cancel‎‏‎‎‏‎"</string>
- <string name="okay" msgid="1997666393121016642">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎OK‎‏‎‎‏‎"</string>
- <string name="zen_mode_enable_dialog_turn_on" msgid="8287824809739581837">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎Turn on‎‏‎‎‏‎"</string>
- <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎Turn on Do Not Disturb‎‏‎‎‏‎"</string>
- <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎Never‎‏‎‎‏‎"</string>
- <string name="zen_interruption_level_priority" msgid="2078370238113347720">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎Priority only‎‏‎‎‏‎"</string>
- <string name="zen_mode_and_condition" msgid="4927230238450354412">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="ZEN_MODE">%1$s</xliff:g>‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="zen_alarm_warning_indef" msgid="3007988140196673193">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎You won\'t hear your next alarm ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎ unless you turn this off before then‎‏‎‎‏‎"</string>
- <string name="zen_alarm_warning" msgid="6236690803924413088">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎You won\'t hear your next alarm ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="alarm_template" msgid="4996153414057676512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‎at ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="alarm_template_far" msgid="3779172822607461675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎on ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
- <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎Duration‎‏‎‎‏‎"</string>
- <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎Ask every time‎‏‎‎‏‎"</string>
- <string name="zen_mode_forever" msgid="2704305038191592967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎Until you turn off‎‏‎‎‏‎"</string>
- <string name="time_unit_just_now" msgid="6363336622778342422">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎Just now‎‏‎‎‏‎"</string>
- <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎Phone speaker‎‏‎‎‏‎"</string>
+ <string name="accessibility_manual_zen_more_time" msgid="1636187409258564291">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‎‏‏‎More time.‎‏‎‎‏‎"</string>
+ <string name="accessibility_manual_zen_less_time" msgid="6590887204171164991">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‏‎Less time.‎‏‎‎‏‎"</string>
+ <string name="cancel" msgid="6859253417269739139">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‏‎Cancel‎‏‎‎‏‎"</string>
+ <string name="okay" msgid="1997666393121016642">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎OK‎‏‎‎‏‎"</string>
+ <string name="zen_mode_enable_dialog_turn_on" msgid="8287824809739581837">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‎‏‏‎‏‎Turn on‎‏‎‎‏‎"</string>
+ <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎Turn on Do Not Disturb‎‏‎‎‏‎"</string>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‏‎‏‏‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎Never‎‏‎‎‏‎"</string>
+ <string name="zen_interruption_level_priority" msgid="2078370238113347720">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‎‎Priority only‎‏‎‎‏‎"</string>
+ <string name="zen_mode_and_condition" msgid="4927230238450354412">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‎<xliff:g id="ZEN_MODE">%1$s</xliff:g>‎‏‎‎‏‏‏‎. ‎‏‎‎‏‏‎<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="zen_alarm_warning_indef" msgid="3007988140196673193">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎You won\'t hear your next alarm ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎ unless you turn this off before then‎‏‎‎‏‎"</string>
+ <string name="zen_alarm_warning" msgid="6236690803924413088">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎You won\'t hear your next alarm ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="alarm_template" msgid="4996153414057676512">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‎‏‏‏‎‏‏‏‎‎‎‎‎‎at ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="alarm_template_far" msgid="3779172822607461675">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎on ‎‏‎‎‏‏‎<xliff:g id="WHEN">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎Duration‎‏‎‎‏‎"</string>
+ <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎Ask every time‎‏‎‎‏‎"</string>
+ <string name="zen_mode_forever" msgid="2704305038191592967">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎Until you turn off‎‏‎‎‏‎"</string>
+ <string name="time_unit_just_now" msgid="6363336622778342422">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎Just now‎‏‎‎‏‎"</string>
+ <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎Phone speaker‎‏‎‎‏‎"</string>
</resources>
diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml
index 4899346914e5..053ef4851b5b 100644
--- a/packages/SettingsLib/res/values-es-rUS/arrays.xml
+++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Usar comprobación HDCP para contenido DRM solamente"</item>
<item msgid="45075631231212732">"Siempre utilizar comprobación HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Inhabilitado"</item>
+ <item msgid="1969681323976948639">"Filtrado habilitado"</item>
+ <item msgid="8719029132154020716">"Habilitado"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (predeterminado)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml
index eef0fb10d070..00f85e665112 100644
--- a/packages/SettingsLib/res/values-es-rUS/strings.xml
+++ b/packages/SettingsLib/res/values-es-rUS/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Conexión automática mediante %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectado automáticamente mediante proveedor de calificación de red"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conexión a través de %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Conexión a través de <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Presiona para configurar"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Presiona para registrarte"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conectado pero sin conexión a Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Sin Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Acceso obligatorio"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"El punto de acceso está completo temporalmente"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Conexión a través de %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Disponible a través de %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Error de conexión"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"No es válida la URL del servidor OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"No se pudo establecer conexión con el servidor OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"No se pudo validar el servidor OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"No es válido el certificado del servidor OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Se anuló el aprovisionamiento"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"No está disponible el aprovisionamiento"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"No es válida la URL del servidor OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensaje SOAP inesperado"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"No se pudo realizar el intercambio de mensajes SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"No se pudo iniciar la recepción de redireccionamiento"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Se agotó el tiempo de espera de redireccionamiento"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No se encontró actividad OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estado de mensaje SOAP inesperado"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"No se encontró PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"No se encontró ningún nodo raíz de confianza para el servidor AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"No se encontró ningún nodo raíz de confianza para el servidor de soluciones"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"No se pudo recuperar el nodo raíz de confianza del servidor de políticas"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"No se pudieron recuperar los certificados raíz de confianza"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"No se encontró ningún certificado raíz de confianza para el servidor AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"No se pudo agregar la configuración de PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"No se encontró ningún proveedor OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Estableciendo conexión"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Se estableció conexión"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Estableciendo conexión con el servidor OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Se validó el servidor OSU"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Se estableció conexión con el servidor OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Intercambio SOAP inicial"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Esperando respuesta de redireccionamiento"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Se recibió la respuesta de redireccionamiento"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segundo intercambio SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tercer intercambio SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recuperando certificados raíz de confianza"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Se completó el aprovisionamiento"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Abriendo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"No se pudo establecer conexión"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completando registro…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"No se pudo completar el registro. Presiona para volver a intentarlo."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Se completó el registro. Conectando…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Muy lenta"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Permanecer activo"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla nunca quedará inactiva mientras el dispositivo se esté cargando."</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Registro de Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar paquetes de Bluetooth (activa/desactiva el Bluetooth después de cambiar esta configuración)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo de OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que el cargador de inicio se desbloquee"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"¿Permitir desbloqueo de OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificación de pantalla inalámbrica"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Habilitar registro detallado de Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Selección aleatoria de MAC conectada"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móviles siempre activados"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleración de hardware de conexión mediante dispositivo portátil"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sin nombre"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"No se pudo establecer conexión"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opciones de certificación de pantalla inalámbrica"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar nivel de registro Wi-Fi; mostrar por SSID RSSI en el selector de Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Seleccionar la dirección MAC de forma aleatoria cuando se establezca conexión con redes Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Con uso medido"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Sin tarifa plana"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de Logger"</string>
diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml
index 52362de587b0..c87bcae0fe74 100644
--- a/packages/SettingsLib/res/values-es/arrays.xml
+++ b/packages/SettingsLib/res/values-es/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Utilizar comprobación de HDCP solo para contenido DRM"</item>
<item msgid="45075631231212732">"Utilizar siempre comprobación de HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Inhabilitado"</item>
+ <item msgid="1969681323976948639">"Habilitado con filtros"</item>
+ <item msgid="8719029132154020716">"Habilitado"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Predeterminada)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml
index 64b710a0801e..b21b7d1ead5f 100644
--- a/packages/SettingsLib/res/values-es/strings.xml
+++ b/packages/SettingsLib/res/values-es/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectada automáticamente a través de %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectado automáticamente a través de un proveedor de valoración de redes"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Conectado a través de <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Toca para configurar"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Toca para registrarte"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conexión sin Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Sin Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Debes iniciar sesión"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punto de acceso temporalmente lleno"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Conectado a través de %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Disponible a través de %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"No se ha podido establecer conexión"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL del servidor OSU no válida"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"No se ha podido establecer conexión con el servidor OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"No se ha podido validar el servidor OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado del servidor OSU no válido"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Aprovisionamiento anulado"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Aprovisionamiento no disponible"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL del servidor OSU no válida"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensaje SOAP inesperado"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"No se ha podido completar el intercambio de mensajes SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"No se ha podido iniciar la recepción de redirección"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Se ha agotado el tiempo de espera de redirección"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No se ha encontrado actividad de OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estado de mensaje SOAP inesperado"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"No se ha podido encontrar PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"No se ha podido encontrar el nodo raíz de confianza del servidor AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"No se ha podido encontrar el nodo raíz de confianza del servidor de soluciones"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"No se ha podido encontrar el nodo raíz de confianza del servidor de políticas"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"No se han podido obtener certificados raíz de confianza"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"No se ha podido encontrar el certificado raíz de confianza del servidor AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"No se ha podido añadir la configuración de PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"No se ha podido encontrar ningún servidor OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Conectando"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectado"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Estableciendo conexión con el servidor OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Se ha establecido conexión con el servidor OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Intercambio SOAP inicial"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Esperando respuesta de redirección"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Respuesta de redirección recibida"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segundo intercambio SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tercer intercambio SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Obteniendo certificados raíz de confianza"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Aprovisionamiento completado"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Abriendo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"No se ha podido conectar"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completando registro…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"No se ha podido completar el registro. Toca para volver a intentarlo."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Se ha completado el registro. Conectando…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Muy lenta"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Aceptable"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Pantalla siempre encendida al cargar"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla nunca entra en modo de suspensión si el dispositivo se está cargando"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Habilitar registro de Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar paquetes de Bluetooth (después de cambiar esta opción, desactiva y activa el Bluetooth)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo de OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir desbloquear el bootloader"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"¿Permitir desbloqueo de OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificación de pantalla inalámbrica"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Habilitar registro Wi-Fi detallado"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Orden aleatorio de direcciones MAC conectadas"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móviles siempre activos"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleración por hardware para conexión compartida"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sin nombre"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"No se ha podido establecer la conexión"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opciones para la certificación de la pantalla inalámbrica"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar el nivel de registro de Wi-Fi, mostrar por SSID RSSI en el selector Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Ordenar las direcciones MAC de forma aleatoria al conectarse a redes Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Medida"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"No medida"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños del búfer para registrar"</string>
diff --git a/packages/SettingsLib/res/values-et/arrays.xml b/packages/SettingsLib/res/values-et/arrays.xml
index 76a972dccaf0..e36251b95176 100644
--- a/packages/SettingsLib/res/values-et/arrays.xml
+++ b/packages/SettingsLib/res/values-et/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Kasuta HDCP-kontrolli ainult DRM-sisu korral"</item>
<item msgid="45075631231212732">"Kasuta alati HDCP-kontrollimist"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Keelatud"</item>
+ <item msgid="1969681323976948639">"Luba filtreeritud"</item>
+ <item msgid="8719029132154020716">"Lubatud"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (vaikeseade)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml
index 900860163390..fab137519725 100644
--- a/packages/SettingsLib/res/values-et/strings.xml
+++ b/packages/SettingsLib/res/values-et/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Ühendus loodi automaatselt teenusega %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Ühendus loodi automaatselt võrgukvaliteedi hinnangute pakkuja kaudu"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Ühendatud üksuse %1$s kaudu"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> – <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Ühendatud võrgu <xliff:g id="NAME">%1$s</xliff:g> kaudu"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Saadaval üksuse %1$s kaudu"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Puudutage seadistamiseks"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Puudutage registreerumiseks"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Ühendatud, Interneti-ühendus puudub"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Interneti-ühendus puudub"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Nõutav on sisselogimine"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pääsupunkt on ajutiselt täis"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Ühendatud operaatori %1$s kaudu"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Saadaval operaatori %1$s kaudu"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ühendamine ebaõnnestus"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU serveri kehtetu URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU serveriga ühendamine ebaõnnestus"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU serveri valideerimine ebaõnnestus"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU serveri kehtetu sertifikaat"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Ettevalmistamine katkestati"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Ettevalmistamine pole saadaval"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU serveri kehtetu URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Ootamatu käsutüüp"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Ootamatu SOAP-sõnumi tüüp"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-sõnumi saatmine ebaõnnestus"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Kuulaja ümbersuunamist ei saanud käivitada"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Ümbersuunamine aegus"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU tegevusi ei leitud"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP-sõnumi ootamatu olek"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO-d ei leitud"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA serveri usaldusväärset juursõlme ei leitud"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Abinõude serveri usaldusväärset juursõlme ei leitud"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Eeskirjade serveri usaldusväärset juursõlme ei leitud"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Usaldusväärseid juursertifikaate ei õnnestunud tuua"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA serveri usaldusväärset juursertifikaati ei leitud"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPointi konfiguratsiooni lisamine ebaõnnestus"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU teenusepakkujat ei leitud"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Ühendamine"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ühendatud"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Ühendamine OSU serveriga"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server valideeriti"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Ühendatud OSU serveriga"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Esialgne SOAP-andmevahetus"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Otsevastuse ootel"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Saadi otsevastus"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Teine SOAP-andmevahetus"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Kolmas SOAP-andmevahetus"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Usaldusväärsete juursertifikaatide toomine"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Ettevalmistamine on lõpetatud"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Teenuse <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> avamine"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Ühendust ei saanud luua"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Registreerimise lõpuleviimine …"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registreerimist ei saanud lõpule viia. Puudutage, et uuesti proovida."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registreerimine on lõpule viidud. Ühendamine …"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Väga aeglane"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Aeglane"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Hea"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Jää sisselülitatuks"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekraan ei lähe kunagi laadimise ajal unerežiimi"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Luba Bluetoothi HCI jälgimise logi"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Jäädvusta Bluetoothi paketid. (pärast seade muutmist muuda Bluetoothi olekut)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-i avamine"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Luba buudilaadur avada"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Kas lubada OEM-i avamine?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Võrgustik"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Juhtmeta ekraaniühenduse sertifitseerimine"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Luba WiFi sõnaline logimine"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Juhusliku MAC-aadressi määramine ühendamisel"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Hoia mobiilne andmeside alati aktiivne"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Ühenduse jagamise riistvaraline kiirendus"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Kuva ilma nimedeta Bluetoothi seadmed"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ühendamine ebaõnnestus"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Juhtmeta ekraaniühenduse sertifitseerimisvalikute kuvamine"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Suurenda WiFi logimistaset, kuva WiFi valijas SSID RSSI järgi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Määra WiFi-võrkudega ühenduse loomisel juhuslik MAC-aadress"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Mahupõhine"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Mittemahupõhine"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Logija puhvri suurused"</string>
diff --git a/packages/SettingsLib/res/values-eu/arrays.xml b/packages/SettingsLib/res/values-eu/arrays.xml
index 90df3546f38b..aa048b1a17f7 100644
--- a/packages/SettingsLib/res/values-eu/arrays.xml
+++ b/packages/SettingsLib/res/values-eu/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Erabili HDCP egiaztapena DRM edukirako soilik"</item>
<item msgid="45075631231212732">"Erabili beti HDCP egiaztapena"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Desgaituta"</item>
+ <item msgid="1969681323976948639">"Gaituta baina iragazita"</item>
+ <item msgid="8719029132154020716">"Gaituta"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (lehenetsia)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml
index ae0fd47c932d..7d3e1f3049da 100644
--- a/packages/SettingsLib/res/values-eu/strings.xml
+++ b/packages/SettingsLib/res/values-eu/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s bidez automatikoki konektatuta"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatikoki konektatuta sareen balorazioen hornitzailearen bidez"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s bidez konektatuta"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> (<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>)"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> bidez konektatuta"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s bidez erabilgarri"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Sakatu konfiguratzeko"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Sakatu erregistratzeko"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Konektatuta; ezin da atzitu Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Ez dago Interneteko konexiorik"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Saioa hasi behar da"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Sarbide-puntua beteta dago aldi baterako"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s bidez konektatuta"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s bidez erabilgarri"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ezin izan da konektatu"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU zerbitzariaren URLak ez du balio"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Ezin izan da konektatu OSU zerbitzarira"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Ezin izan da balidatu OSU zerbitzaria"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU zerbitzariaren ziurtagiriak ez du balio"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Bertan behera utzi da hornitze-prozesua"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Ez dago horniketarik erabilgarri"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU zerbitzariaren URLak ez du balio"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Ustekabeko agindu mota"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Ustekabeko SOAP mezu mota"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Ezin izan da trukatu SOAP mezua"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Ezin izan da abiarazi birbideratze-hautemailea"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Birbideratzea jasotzeko denbora-muga gainditu da"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Ez da aurkitu OSU jarduerarik"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP mezuaren ustekabeko egoera"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Ezin izan da aurkitu PPS-MO objektua"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Ezin izan da aurkitu AAA zerbitzariaren fidagarritasunaren erroko nodoa"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Ezin izan da aurkitu konponketa-zerbitzariaren fidagarritasunaren erroko nodoa"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Ezin izan da aurkitu gidalerro-zerbitzariaren fidagarritasunaren erroko nodoa"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Ezin izan dira eskuratu fidagarritasunaren erroko ziurtagiriak"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Ezin izan da aurkitu AAA zerbitzariaren fidagarritasunaren erroko ziurtagiria"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Ezin izan da gehitu PassPoint konfigurazioa"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Ezin izan da aurkitu OSU hornitzailerik"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Konektatzen"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Konektatuta"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU zerbitzariarekin konektatzen"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Balidatu da OSU zerbitzaria"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU zerbitzarira konektatuta"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Hasierako SOAP trukaketa"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Birbideratze-erantzunaren zain"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Jaso da birbideratze-erantzun bat"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Bigarren SOAP trukaketa"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Hirugarren SOAP trukaketa"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Fidagarritasunaren erroko ziurtagiriak eskuratzen"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Osatu da hornitze-prozesua"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> irekitzen"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Ezin izan da konektatu"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Erregistroa osatzen…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Ezin izan da osatu erregistroa. Berriro saiatzeko, ukitu hau."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Erregistratu da. Konektatzen…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Oso motela"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Motela"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Ados"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Mantendu aktibo"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Pantaila ez da inoiz inaktibo ezarriko kargatu bitartean"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Gaitu Bluetooth HCI miatze-erregistroa"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Hauteman Bluetooth paketeak (aktibatu edo desaktibatu Bluetooth konexioa ezarpena aldatu ostean)."</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM desblokeoa"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Onartu abiarazlea desblokeatzea"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM desblokeoa onartu nahi duzu?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Sareak"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Hari gabeko bistaratze-egiaztapena"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Gaitu Wi-Fi sareetan saioa hasteko modu xehatua"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Konektatutako MAC helbideak ausaz aukeratzea"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Datu-konexioa beti aktibo"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Konexioa partekatzeko hardwarearen azelerazioa"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Erakutsi Bluetooth gailuak izenik gabe"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ezin izan da konektatu"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Erakutsi hari gabeko bistaratze-egiaztapenaren aukerak"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Erakutsi datu gehiago Wi-Fi sareetan saioa hasterakoan. Erakutsi sarearen identifikatzailea eta seinalearen indarra Wi‑Fi sareen hautagailuan."</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Aukeratu ausaz MAC helbideak Wi‑Fi sareetara konektatzean"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Sare mugatua"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Sare ez-mugatua"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Erregistroen buffer-tamainak"</string>
diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml
index 85720e47bd6d..2019cafdf90e 100644
--- a/packages/SettingsLib/res/values-fa/arrays.xml
+++ b/packages/SettingsLib/res/values-fa/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"‏استفاده از بررسی HDCP فقط برای محتوای DRM"</item>
<item msgid="45075631231212732">"‏همیشه از بررسی HDCP استفاده شود"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"غیرفعال"</item>
+ <item msgid="1969681323976948639">"فیلترشده فعال شده است"</item>
+ <item msgid="8719029132154020716">"فعال"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"‏AVRCP نسخه ۱.۴ (پیش‌فرض)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml
index e9c93132a035..293c463334fd 100644
--- a/packages/SettingsLib/res/values-fa/strings.xml
+++ b/packages/SettingsLib/res/values-fa/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"‏اتصال خودکار ازطریق %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"اتصال خودکار ازطریق ارائه‌دهنده رتبه‌بندی شبکه"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"‏متصل از طریق %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> از <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"متصل شده ازطریق <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"‏در دسترس از طریق %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"برای راه‌اندازی ضربه بزنید"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"برای ثبت‌نام ضربه بزنید"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"متصل، بدون اینترنت"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"عدم دسترسی به اینترنت"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"ورود به سیستم لازم است"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ظرفیت نقطه دسترسی موقتاً تکمیل شده است"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"‏متصل ازطریق %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"‏در دسترس ازطریق %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"اتصال ناموفق بود"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"‏نشانی وب سرور OSU نامعتبر است"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"‏اتصال سرور OSU ناموفق بود"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"‏تأییداعتبار سرور OSU ناموفق بود"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"‏گواهینامه سرور OSU نامعتبر است"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ارائه لغو شد"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ارائه امکان‌پذیر نیست"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"‏نشانی وب سرور OSU نامعتبر است"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"نوع فرمان غیرمنتظره"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"‏نوع پیام SOAP غیرمنتظره"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"‏تبادل پیام SOAP ناموفق بود"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"هدایت پاسخ تماس غیرهمزمان شروع نشد"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"مهلت انتظار برای هدایت تمام شد"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"‏فعالیت OSU پیدا نشد"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"‏وضعیت پیام SOAP غیرمنتظره"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"‏PPS-MO پیدا نشد"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"‏گره ریشه مطمئن برای سرور AAA پیدا نشد"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"گره ریشه مطمئن برای سرور جبران خسارت پیدا نشد"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"گروه ریشه مطمئن برای سرور خط‌مشی پیدا نشد"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"گواهینامه ریشه مطمئن بازیابی نشد"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"‏گواهینامه ریشه مطمئن برای سرور AAA پیدا نشد"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"‏پیکربندی PassPoint اضافه نشد"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"‏ارائه‌دهنده OSU پیدا نشد"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"درحال برقراری ارتباط"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"متصل"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"‏اتصال به سرور OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"‏سرور OSU تأییداعتبار شد"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"‏متصل به سرور OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"‏تبادل SOAP اولیه"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"درانتظار پاسخ هدایت"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"پاسخ هدایت دریافتی"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"‏تبادل SOAP دوم"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"‏تبادل SOAP سوم"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"بازیابی گواهینامه‌های ریشه مطمئن"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"ارائه کامل شد"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"درحال بازکردن <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"متصل نشد"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"درحال تکمیل ثبت‌نام…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"ثبت‌نام تکمیل نشد. برای امتحان مجدد ضربه بزنید."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"ثبت‌نام کامل شد. درحال اتصال…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"بسیار آهسته"</string>
<string name="speed_label_slow" msgid="813109590815810235">"آهسته"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"تأیید"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"بیدار ماندن"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"صفحه هرگز در حین شارژ شدن به حالت خواب نمی‌رود"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"‏فعال کردن گزارش تجسس Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"بسته‌های بلوتوث ضبط شود. (بعد از تغییر این تنظیم، بلوتوث را روشن/خاموش کنید)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"بازکردن سازنده تجهیزات اصلی"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"اجازه دهید قفل بوت‌لودر باز شود"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"‏بازکردن سازنده تجهیزات اصلی مجاز (OEM) است؟"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"شبکه"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"گواهینامه نمایش بی‌سیم"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"‏فعال کردن گزارش‌گیری طولانی Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"‏تصادفی‌سازی MAC متصل"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"داده تلفن همراه همیشه فعال باشد"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"شتاب سخت‌افزاری اتصال به اینترنت با تلفن همراه"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"نمایش دستگاه‌های بلوتوث بدون نام"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"متصل نشد"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"نمایش گزینه‌ها برای گواهینامه نمایش بی‌سیم"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"‏افزایش سطح گزارش‌گیری Wi‑Fi، نمایش به ازای SSID RSSI در انتخاب‌کننده Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"‏تصادفی کردن نشانی MAC هنگام اتصال به شبکه‌های Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"کنتوردار"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"بدون کنتور"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"اندازه‌های حافظه موقت ثبت‌کننده"</string>
diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml
index 33b1ffcf9b7e..9566a29dc2ca 100644
--- a/packages/SettingsLib/res/values-fi/arrays.xml
+++ b/packages/SettingsLib/res/values-fi/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Käytä HDCP-tarkistusta vain DRM-suojatulle sisällölle."</item>
<item msgid="45075631231212732">"Käytä aina HDCP-tarkistusta"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Ei käytössä"</item>
+ <item msgid="1969681323976948639">"Suodatus käytössä"</item>
+ <item msgid="8719029132154020716">"Käytössä"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (oletus)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml
index 3f9afb085403..f335eb930c1c 100644
--- a/packages/SettingsLib/res/values-fi/strings.xml
+++ b/packages/SettingsLib/res/values-fi/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automaattinen yhteys muodostettu palvelun %1$s kautta"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Yhdistetty automaattisesti verkon arviointipalvelun kautta"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Yhdistetty seuraavan kautta: %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>: <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Yhdistetty (<xliff:g id="NAME">%1$s</xliff:g>)"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Käytettävissä seuraavan kautta: %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Määritä napauttamalla"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Rekisteröidy napauttamalla"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Yhdistetty, ei internetyhteyttä"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Ei internetyhteyttä"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sisäänkirjautuminen vaaditaan"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Yhteyspiste tilapäisesti täynnä"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Yhdistetty, verkko: %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Käytettävissä, verkko: %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Yhteys katkesi"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Virheellinen OSU-palvelimen URL-osoite"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU-palvelimen yhteys epäonnistui"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU-palvelimen vahvistus epäonnistui"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Virheellinen OSU-palvelimen varmenne"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Käyttäjien hallinta keskeytetty"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Käyttäjien hallinta ei ole käytettävissä"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Virheellinen OSU-palvelimen URL-osoite"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Odottamaton komentotyyppi"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Odottamaton SOAP-viestityyppi"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-viestinvaihto epäonnistui"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Uudelleenohjausten seurain ei käynnistynyt"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Aikakatkaistiin odottaessa uudelleenohjausta"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU-toimintaa ei löytynyt"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Odottamaton SOAP-viestin tila"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO:ta ei löytynyt"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA-palvelimelle ei löydetty luotettavaa pääsolmua"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Hyvityskeinopalvelimelle ei löydetty luotettavaa pääsolmua"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Käytäntöpalvelimelle ei löydetty luotettavaa pääsolmua"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Luotettavien juurivarmenteiden nouto epäonnistui"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA-palvelimelle ei löydetty luotettavaa juurivarmennetta"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint-määrityksen lisääminen epäonnistui"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU-palveluntarjoajaa ei löytynyt"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Yhdistetään"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Yhdistetty"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Yhdistetään OSU-palvelimeen"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-palvelin vahvistettu"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Yhdistetty OSU-palvelimeen"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Ensimmäinen SOAP-vaihto"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Odotetaan uudelleenohjausvastausta"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Uudelleenohjausvastaus vastaanotettu"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Toinen SOAP-vaihto"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Kolmas SOAP-vaihto"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Noudetaan luotettavia juurivarmenteita"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Käyttäjien hallinta valmis"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Avataan <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Ei yhteyttä"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Viimeistellään rekisteröitymistä…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Rekisteröityminen epäonnistui. Yritä uudelleen napauttamalla."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Rekisteröityminen valmis. Yhdistetään…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Hyvin hidas"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Hidas"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Pysy käynnissä"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Näyttö ei sammu puhelimen latautuessa."</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ota Bluetoothin HCI-tarkkailuloki käyttöön"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Tallenna Bluetoothin HCl-paketit tiedostoon (ota Bluetooth käyttöön asetuksen muuttamisen jälkeen)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM:n lukituksen avaus"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Salli käynnistysohjelman lukituksen avaaminen"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Sallitaanko OEM:n lukituksen avaus?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Yhteysominaisuudet"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Langattoman näytön sertifiointi"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Käytä Wi-Fin laajennettua lokikirjausta"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Yhdistetty MAC-satunnaistaminen"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiilidata aina käytössä"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Laitteistokiihdytyksen yhteyden jakaminen"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Näytä nimettömät Bluetooth-laitteet"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ei yhteyttä"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Näytä langattoman näytön sertifiointiin liittyvät asetukset."</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Lisää Wi‑Fin lokikirjaustasoa, näytä SSID RSSI -kohtaisesti Wi‑Fi-valitsimessa."</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Käytä satunnaista MAC-osoitetta, kun yhdistät Wi-Fi-verkkoon."</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Maksullinen"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Maksuton"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Lokipuskurien koot"</string>
diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
index 145bd98e5125..a02406fed494 100644
--- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Utiliser la vérification HDCP uniquement pour le contenu GDN"</item>
<item msgid="45075631231212732">"Toujours utiliser la vérification HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Désactivé"</item>
+ <item msgid="1969681323976948639">"Filtres activés"</item>
+ <item msgid="8719029132154020716">"Activé"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (par défaut)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml
index 4fbc0ca81450..49591039178c 100644
--- a/packages/SettingsLib/res/values-fr-rCA/strings.xml
+++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatiquement connecté par %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Connecté automatiquement par le fournisseur d\'avis sur le réseau"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté par %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Connecté sur le réseau <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Accessible par %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Touchez pour configurer"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Toucher pour vous connecter"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connecté, aucun accès à Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Aucune connexion Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Connexion requise"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Le point d\'accès est temporairement plein"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Connecté par %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Accessible par %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Échec de connexion"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL de serveur OSU non valide"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Échec de la connexion avec le serveur OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Échec de la validation du serveur OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificat de serveur OSU non valide"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"L\'approvisionnement a été abandonné"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"L\'approvisionnement n\'est pas accessible"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL de serveur OSU non valide"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Type de commande inattendu"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Type de message SOAP inattendu"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Échec de l\'échange de messages SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Impossible de démarrer l\'écoute de redirection"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Délai d\'attente pour la redirection"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Aucune activité OSU trouvée"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"État de message SOAP inattendu"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Impossible de trouver PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Impossible de trouver le nœud racine de confiance pour le serveur AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Impossible de trouver le nœud racine de confiance pour le serveur de recours"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Impossible de trouver le nœud racine de confiance pour le serveur de politiques"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Impossible de récupérer les certificats racine de confiance"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Impossible de trouver le certificat racine de confiance pour le serveur AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Impossible d\'ajouter la configuration PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Impossible de trouver un fournisseur OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connexion en cours…"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connecté"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connexion au serveur OSU en cours…"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Serveur OSU validé"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Connecté au serveur OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Échange SOAP initial"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"En attente de la réponse de redirection…"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Réponse de redirection reçue"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Deuxième échange SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Échange SOAP tiers"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Récupération des certificats racine de confiance"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Approvisionnement terminé"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Ouverture de <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> en cours…"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Impossible de se connecter"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Terminaison de l\'inscription en cours…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Impossible de terminer l\'inscription. Touchez pour réessayer."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscription terminée. Connexion en cours…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Très lente"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lente"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Rester activé"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"L\'écran ne se met jamais en veille lors du chargement"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activer le journal HCI Snoop Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturer les paquets Bluetooth. (Désactivez et réactivez le Bluetooth après le chang. de ce param.)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Déverrouillage par le fabricant"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Autoriser le déverrouillage du fichier d\'amorce"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permettre le déverrouillage par le fabricant?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Réseautage"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certification de l\'affichage sans fil"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Autoriser enreg. données Wi-Fi détaillées"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Sélection aléatoire de l\'adresse MAC lors de la connexion"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Données cellulaires toujours actives"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Accélération matérielle pour le partage de connexion"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Afficher les appareils Bluetooth sans nom"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Impossible de se connecter"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afficher les options pour la certification d\'affichage sans fil"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Détailler davantage les données Wi-Fi, afficher par SSID RSSI dans sélect. Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Sélectionner l\'adresse MAC de manière aléatoire lors de la connexion aux réseaux Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Mesuré"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Non mesuré"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Tailles des mémoires tampons d\'enregistreur"</string>
diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml
index 34cedd8873f9..d87388d816de 100644
--- a/packages/SettingsLib/res/values-fr/arrays.xml
+++ b/packages/SettingsLib/res/values-fr/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Utiliser la vérification HDCP uniquement pour le contenu DRM"</item>
<item msgid="45075631231212732">"Toujours utiliser la vérification HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Désactivé"</item>
+ <item msgid="1969681323976948639">"Activé et filtré"</item>
+ <item msgid="8719029132154020716">"Activé"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (par défaut)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml
index c4b8b3f05a82..1f071de1ac6b 100644
--- a/packages/SettingsLib/res/values-fr/strings.xml
+++ b/packages/SettingsLib/res/values-fr/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Connecté automatiquement via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Connecté automatiquement via un fournisseur d\'évaluation de l\'état du réseau"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> par <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Connecté via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Disponible via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Appuyer pour configurer"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Appuyez ici pour vous connecter"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connecté, aucun accès à Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Aucun accès à Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Connexion requise"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Point d\'accès temporairement plein"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Connecté via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Disponible via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Échec de la connexion"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"L\'URL du serveur OSU n\'est pas valide"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Échec de la connexion au serveur OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Échec de la validation du serveur OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificat du serveur OSU non valide"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Préparation annulée"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Préparation non disponible"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"L\'URL du serveur OSU n\'est pas valide"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Type de commande inattendu"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Type de message SOAP inattendu"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Échec de l\'échange de messages SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Échec du démarrage de l\'écouteur de redirection"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Délai dépassé ou en attente de redirection"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Aucune activité OSU trouvée"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"État inattendu du message SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Échec de la recherche de PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Échec de la recherche de nœud racine de confiance pour le serveur AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Échec de la recherche de nœud racine de confiance pour le serveur de réparation"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Échec de la recherche de nœud racine de confiance pour le serveur de règles"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Échec de la récupération des certificats racine de confiance"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Échec de la recherche de certificat racine de confiance pour le serveur AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Échec de l\'ajout de la configuration PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Échec de la recherche de fournisseur OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connexion…"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connecté"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connexion au serveur OSU…"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Serveur OSU validé"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Connecté au serveur OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Échange SOAP initial"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"En attente de la réponse de redirection…"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Réponse de redirection reçue"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Deuxième échange SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Troisième échange SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Récupération des certificats racine de confiance…"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Préparation terminée"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Ouverture de <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>…"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Impossible de se connecter"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Finalisation de l\'inscription…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Impossible de finaliser l\'inscription. Appuyez ici pour réessayer."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscription terminée. Connexion…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Très lente"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lente"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Correct"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Rester activé"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"L\'écran ne se met jamais en veille lors du chargement."</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activer journaux HCI Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturer les paquets Bluetooth. (Activer/Désactiver le Bluetooth après avoir modifié ce paramètre)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Déverrouillage OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Autoriser le déverrouillage du chargeur d\'amorçage"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Autoriser le déverrouillage OEM ?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Mise en réseau"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certification affichage sans fil"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Autoriser enreg. infos Wi-Fi détaillées"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Sélection aléatoire de l\'adresse MAC lors de la connexion"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Données mobiles toujours actives"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Accélération matérielle pour le partage de connexion"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Afficher les appareils Bluetooth sans nom"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Impossible de se connecter"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afficher les options de la certification de l\'affichage sans fil"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Détailler plus infos Wi-Fi, afficher par RSSI de SSID dans outil sélection Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Sélectionner l\'adresse MAC de manière aléatoire lors de la connexion aux réseaux Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Facturé à l\'usage"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Non facturé à l\'usage"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Tailles mémoires tampons enregistr."</string>
diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml
index a0bc977fdf34..a7325c20f0f0 100644
--- a/packages/SettingsLib/res/values-gl/arrays.xml
+++ b/packages/SettingsLib/res/values-gl/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Utiliza a comprobación HDCP só para contido DRM"</item>
<item msgid="45075631231212732">"Utilizar sempre a comprobación HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Opción desactivada"</item>
+ <item msgid="1969681323976948639">"Está activado o filtrado"</item>
+ <item msgid="8719029132154020716">"Opción activada"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (predeterminado)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml
index 786e2c5849fd..06faf00036dd 100644
--- a/packages/SettingsLib/res/values-gl/strings.xml
+++ b/packages/SettingsLib/res/values-gl/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectouse automaticamente a través de %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectada automaticamente a través dun provedor de valoración de rede"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Wifi conectada a través de <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Dispoñible a través de %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Toca aquí para configuralo"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Toca para rexistrarte"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conexión sen Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Non hai conexión a Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"É obrigatorio iniciar sesión"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"O punto de acceso está temporalmente cheo"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Conectado a través de %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Dispoñible a través de %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Produciuse un erro coa conexión"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL do servidor OSU non-válido"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Produciuse un erro na conexión do servidor OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Non se puido validar o servidor OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado do servidor OSU non-válido"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Abastecemento anulado"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Abastecemento non-dispoñible"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL do servidor OSU non-válido"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensaxe SOAP inesperado"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Produciuse un erro no intercambio da mensaxe SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Non se puido iniciar a recepción de redirección"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Esgotouse o tempo de espera de redirección"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Non se encontrou a actividade de OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estado da mensaxe SOAP inesperado"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"No se puido encontrar PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"No se puido encontrar o nodo raíz de confianza do servidor AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"No se puido encontrar o nodo raíz de confianza do servidor de solucións"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Non se puido encontrar o nodo raíz de confianza do servidor da política"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Produciuse un erro ao recuperar os certificados raíz de confianza"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Non se puido encontrar o certificado raíz de confianza do servidor AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Non se puido engadir a configuración de PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"No se puido encontrar ningún servidor OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Conectando"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectado"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Conectándose ao servidor OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Conectado ao servidor OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Intercambio SOAP inicial"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Agardando pola resposta de redirección"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirección recibida"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segundo intercambio SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terceiro intercambio SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recuperando certificados raíz de confianza"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Abastecemento completado"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Abrindo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Non se puido establecer conexión"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completando o rexistro…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Non se puido completar o rexistro. Toca para tentalo de novo."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Completouse o rexistro. Conectando…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Moi lenta"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Pantalla activa"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"A pantalla nunca estará en modo de suspensión durante a carga"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activar rexistro de busca HCI Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar paquetes de Bluetooth. (Activa/desactiva o Bluetooth despois de cambiar esta opción)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo do OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que se desbloqueo o cargador de inicio"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Queres permitir o desbloqueo do OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificado de visualización sen fíos"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Activar rexistro detallado da wifi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Selección aleatoria de enderezo MAC coa conexión"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móbiles sempre activados"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleración de hardware para conexión compartida"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sen nomes"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Non se puido conectar"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opcións para o certificado de visualización sen fíos"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumenta o nivel de rexistro da wifi, móstrao por SSID RSSI no selector de wifi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Selecciona aleatoriamente o enderezo MAC cando te conectes a redes wifi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"De pago por consumo"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Sen pago por consumo"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de rexistrador"</string>
diff --git a/packages/SettingsLib/res/values-gu/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml
index 92f52b8eca82..cf1f6516a750 100644
--- a/packages/SettingsLib/res/values-gu/arrays.xml
+++ b/packages/SettingsLib/res/values-gu/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"ફક્ત DRM કન્ટેન્ટ માટે HDCP તપાસનો ઉપયોગ કરો"</item>
<item msgid="45075631231212732">"હંમેશા HDCP તપાસનો ઉપયોગ કરો"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"બંધ છે"</item>
+ <item msgid="1969681323976948639">"ફિલ્ટર કરેલ ચાલુ છે"</item>
+ <item msgid="8719029132154020716">"ચાલુ છે"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (ડિફૉલ્ટ)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml
index 492eaf0015fe..232dea9e1f1a 100644
--- a/packages/SettingsLib/res/values-gu/strings.xml
+++ b/packages/SettingsLib/res/values-gu/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s દ્વારા સ્વત: કનેક્ટ થયેલ"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"નેટવર્ક રેટિંગ પ્રદાતા દ્વારા આપમેળે કનેક્ટ થયું"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s દ્વારા કનેક્ટ થયેલ"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>નું <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> દ્વારા કનેક્ટ થયેલ"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s દ્વારા ઉપલબ્ધ"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"સેટઅપ કરવા માટે ટૅપ કરો"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"સાઇન અપ કરવા માટે ટૅપ કરો"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"કનેક્ટ કર્યું, કોઈ ઇન્ટરનેટ નથી"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ઇન્ટરનેટ ઍક્સેસ નથી"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"સાઇન ઇન આવશ્યક"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ઍક્સેસ પૉઇન્ટ અસ્થાયીરૂપે ભરાયેલ છે"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s દ્વારા કનેક્ટ થયેલ"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s દ્વારા ઉપલબ્ધ"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"કનેક્શન નિષ્ફળ થયું"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU સર્વરનું URL માન્ય નથી"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU સર્વર કનેક્ટ કરવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU સર્વર માન્ય કરવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU સર્વરનું પ્રમાણપત્ર માન્ય નથી"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"જોગવાઈ કરવાનું રદ કરવામાં આવ્યું"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"જોગવાઈ કરવાનું ઉપલબ્ધ નથી"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU સર્વરનું URL માન્ય નથી"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"આદેશનો અનપેક્ષિત પ્રકાર"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP સંદેશનો અનપેક્ષિત પ્રકાર"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP સંદેશ વિનિમયમાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"રીડાયરેક્ટ લિસનર શરૂ કરવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"રીડાયરેક્ટ કરવાની રાહ જોવાનો સમય સમાપ્ત થયો"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"કોઈ OSU પ્રવૃત્તિ મળી નથી"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP સંદેશનું અનપેક્ષિત સ્ટેટસ"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO શોધવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA સર્વર માટે ટ્રસ્ટ રૂટ નોડ શોધવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"રેમિડીયેશન સર્વર માટે ટ્રસ્ટ રૂટ નોડ શોધવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"પૉલિસી સર્વર માટે ટ્રસ્ટ રૂટ નોડ શોધવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ટ્રસ્ટ રૂટ પ્રમાણપત્રો ફરી મેળવવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA સર્વર માટે ટ્રસ્ટ રૂટ પ્રમાણપત્ર શોધવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint ગોઠવણી ઉમેરવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU પ્રદાતા શોધવામાં નિષ્ફ્ળતા મળી"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"કનેક્ટ થઈ રહ્યું છે"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"કનેક્ટેડ"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU સર્વર સાથે કનેક્ટ કરી રહ્યાં છીએ"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU સર્વર માન્ય કરવામાં આવેલ"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU સર્વર સાથે કનેક્ટ કરેલ છે"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"પ્રારંભિક SOAP વિનિમય"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"રીડાયરેક્ટ કરવા માટેના પ્રતિસાદની રાહ જુએ છે"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"રીડાયરેક્ટ કરવા માટેનો પ્રતિસાદ પ્રાપ્ત થયો"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"દ્વિતીય SOAP વિનિમય"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"તૃતીય SOAP વિનિમય"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ટ્રસ્ટ રૂટ પ્રમાણપત્રો ફરી મેળવાઈ રહ્યાં છે"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"જોગવાઈ કરવાનું પૂર્ણ થયું"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ખોલી રહ્યાં છીએ"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"કનેક્ટ કરી શકાયું નથી"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"સાઇન અપ પૂર્ણ કરી રહ્યા છીએ…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"સાઇન અપ પૂર્ણ કરી શકાયું નથી. ફરી પ્રયાસ કરવા માટે ટૅપ કરો."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"સાઇન અપ પૂર્ણ. કનેક્ટ કરી રહ્યાં છીએ…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"ખૂબ જ ધીમી"</string>
<string name="speed_label_slow" msgid="813109590815810235">"ધીમી"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ઓકે"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"સક્રિય રાખો"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ચાર્જિંગ દરમિયાન સ્ક્રીન ક્યારેય નિષ્ક્રિય થશે નહીં"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"બ્લૂટૂથ HCI સ્નૂપ લૉગ ચાલુ કરો"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"બ્લૂટૂથ પૅકેટ કૅપ્ચર કરો. (આ સેટિંગ બદલ્યા પછી બ્લૂટૂથને ટૉગલ કરો)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM અનલૉકિંગ"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"બુટલોડર અનલૉક કરવાની મંજૂરી આપો"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM ને અનલૉક કરવાની મંજૂરી આપીએ?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"નેટવર્કિંગ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"વાયરલેસ ડિસ્પ્લે પ્રમાણન"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"વાઇ-ફાઇ વર્બોઝ લૉગિંગ ચાલુ કરો"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"કનેક્ટ કરેલ MAC ઍડ્રેસને રેન્ડમાઇઝ કરવાનું ચાલુ કરો"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"મોબાઇલ ડેટા હંમેશાં સક્રિય"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ટિથરિંગ માટે હાર્ડવેર ગતિવૃદ્ધિ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"નામ વિનાના બ્લૂટૂથ ઉપકરણો બતાવો"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"કનેક્ટ કરી શકાયું નથી"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"વાયરલેસ ડિસ્પ્લે પ્રમાણપત્ર માટેના વિકલ્પો બતાવો"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"વાઇ-ફાઇ લોગિંગ સ્તર વધારો, વાઇ-ફાઇ પીકરમાં SSID RSSI દીઠ બતાવો"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"વાઇ-ફાઇ નેટવર્ક સાથે જ્યારે કનેક્ટ કરી રહ્યાં હોય ત્યારે MAC ઍડ્રેસને રેન્ડમાઇઝ કરો"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"મીટર કરેલ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"મીટર ન કરેલ"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"લોગર બફર કદ"</string>
diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml
index dd5ef6c335b4..5ad9b0191c77 100644
--- a/packages/SettingsLib/res/values-hi/arrays.xml
+++ b/packages/SettingsLib/res/values-hi/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"एचडीसीपी जाँच का उपयोग केवल डीआरएम सामग्री के लिए करें"</item>
<item msgid="45075631231212732">"हमेशा HDCP जाँच का उपयोग करें"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"बंद है"</item>
+ <item msgid="1969681323976948639">"चालू और फ़िल्टर किया गया"</item>
+ <item msgid="8719029132154020716">"चालू है"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"एवीआरसीपी 1.4 (डिफ़ॉल्ट)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index c32a0395b857..2f03eb1b9c3a 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s के ज़रिए ऑटोमैटिक रूप से कनेक्ट है"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"नेटवर्क रेटिंग प्रदाता के ज़रिए अपने आप कनेक्ट है"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s के द्वारा उपलब्ध"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> का <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> के ज़रिए कनेक्ट किया गया"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s के द्वारा उपलब्ध"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"सेट अप करने के लिए टैप करें"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"साइन अप करने के लिए टैप करें"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"कनेक्ट हो गया है, लेकिन इंटरनेट नहीं है"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"इंटरनेट कनेक्शन नहीं है"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"साइन इन करना ज़रूरी है"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"एक्सेस पॉइंट फ़िलहाल भरा हुआ है"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s के ज़रिए कनेक्ट"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s के ज़रिए उपलब्ध"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"कनेक्‍शन नहीं जोड़ा जा सका"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"अमान्य ओएसयू सर्वर यूआरएल"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"ओएसयू सर्वर कनेक्शन नहीं जुड़ा"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"ओएसयू सर्वर की पुष्टि नहीं हो सकी"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"अमान्य ओएसयू सर्वर सर्टिफ़िकेट"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"प्रावधान रद्द किया गया"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"प्रावधान उपलब्ध नहीं है"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"अमान्य ओएसयू सर्वर यूआरएल"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ऐसा निर्देश जिसकी उम्मीद नहीं थी"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ऐसा एसओएपी मैसेज जिसकी उम्मीद नहीं थी"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"एसओएपी मैसेज एक्सचेंज नहीं हो सका"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"रीडायरेक्ट लिसनर चालू नहीं हुआ"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"रीडायरेक्ट के लिए इंतज़ार करते हुए समय खत्म"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"कोई ओएसयू गतिविधि नहीं मिली"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ऐसी एसओएपी मैसेज स्थिति, जिसकी उम्मीद नहीं थी"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"पीपीएस-एमओ नहीं मिला"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"एएए सर्वर के लिए भरोसेमंद रूट नोड नहीं मिला"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"रिमीडीएशन सर्वर के लिए भरोसेमंद रूट नोड नहीं मिला"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"पॉलिसी सर्वर के लिए भरोसेमंद रूट नोड नहीं मिला"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"भरोसेमंद रूट सर्टिफ़िकेट वापस नहीं लाए जा सके"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"एएए सर्वर के लिए भरोसेमंद रूट सर्टिफ़िकेट नहीं मिला"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint कॉन्फ़िगरेशन नहीं जोड़ा जा सका"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ओएसयू प्रोवाइडर नहीं मिला"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"कनेक्‍ट हो रहा है"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"जुड़ गया है"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"ओएसयू सर्वर से जोड़ा जा रहा है"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"ओएसयू सर्वर की पुष्टि की गई"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"ओएसयू सर्वर से कनेक्ट किया गया है"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"शुरुआती एसओएपी एक्सचेंज"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"रीडायरेक्ट जवाब का इंतज़ार किया जा रहा है"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"रीडायरेक्ट जवाब मिला"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"दूसरा एसओएपी एक्सचेंज"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"तीसरा एसओएपी एक्सचेंज"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"भरोसेमंद रूट सर्टिफ़िकेट वापस लाए जा रहे हैं"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"प्रावधान पूरा हुआ"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> खोला जा रहा है"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"कनेक्ट नहीं किया जा सका"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"साइन-अप पूरा हो रहा है…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"साइन-अप पूरा नहीं हो सका. फिर से कोशिश करने के लिए टैप करें."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"साइन-अप पूरा हुआ. कनेक्ट हो रहा है…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"अत्‍यधिक धीमी"</string>
<string name="speed_label_slow" msgid="813109590815810235">"धीमी"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ठीक है"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"स्क्रीन को चालू रखें"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज करते समय स्‍क्रीन कभी भी कम बैटरी मोड में नहीं जाएगी"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटूथ एचसीआई स्‍नूप लॉग चालू करें"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ब्लूटूथ पैकेट कैप्चर करें. (यह सेटिंग बदलने के बाद ब्लूटूथ टॉगल करें)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"ओईएम अनलॉक करना"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"बूटलोडर को अनलाॅक किए जाने की अनुमति दें"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलॉक करने की अनुमति दें?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस डिसप्ले सर्टिफ़िकेशन"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"वाई-फ़ाई वर्बोस लॉगिंग चालू करें"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"जुड़े हुए एमएसी (मैक) रैंडमाइज़ेशन (वाई-फ़ाई नेटवर्क से जुड़ते समय एमएसी पता बदले जाने की सुविधा)"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा हमेशा चालू"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"हार्डवेयर से तेज़ी लाने के लिए टेदर करें"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"बिना नाम वाले ब्लूटूथ डिवाइस दिखाएं"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"कनेक्‍ट नहीं हो सका"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस डिसप्ले सर्टिफ़िकेशन के विकल्प दिखाएं"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाई-फ़ाई लॉगिंग का स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"वाई-फ़ाई से जुड़ते समय अलग-अलग एमएसी पते इस्तेमाल करें"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"डेटा इस्तेमाल करने की सीमा तय की गई है"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"डेटा इस्तेमाल करने की सीमा तय नहीं की गई है"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"लॉगर बफ़र आकार"</string>
diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml
index fcf0e0956ecf..8453c4c494a8 100644
--- a/packages/SettingsLib/res/values-hr/arrays.xml
+++ b/packages/SettingsLib/res/values-hr/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Upotrebljavaj HDCP provjeru samo za DRM sadržaj"</item>
<item msgid="45075631231212732">"Uvijek upotrebljavaj HDCP provjeru"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Onemogućeno"</item>
+ <item msgid="1969681323976948639">"Omogućeno filtrirano"</item>
+ <item msgid="8719029132154020716">"Omogućeno"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (zadano)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml
index 8b238756ce45..bb14b066276b 100644
--- a/packages/SettingsLib/res/values-hr/strings.xml
+++ b/packages/SettingsLib/res/values-hr/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatski povezan putem %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatski povezan putem ocjenjivača mreže"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Povezano putem %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Povezan putem mreže <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Dostupno putem %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Dodirnite za postavljanje"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Dodirnite da biste se registrirali"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Povezano, bez interneta"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Nema interneta"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Obavezna prijava"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna je točka privremeno puna"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Povezano putem mreže %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Dostupno putem mreže %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Povezivanje nije uspjelo"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nevažeći URL OSU poslužitelja"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Veza s OSU poslužiteljem nije uspjela"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Ovjera OSU poslužitelja nije uspjela"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nevažeći certifikat OSU poslužitelja"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Davanje pristupa je prekinuto"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Pružanje usluga nije dostupno"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nevažeći URL OSU poslužitelja"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočekivana vrsta naredbe"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočekivana vrsta SOAP poruke"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Razmjena SOAP poruke nije uspjela"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Nije moguće pokrenuti osluškivač preusmjeravanja"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Isteklo je vrijeme čekanja za preusmjeravanje"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nije pronađena OSU aktivnost"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neočekivana poruka o statusu SOAP-a"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nije pronađen PPS MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nije pronađen pouzdani korijenski čvor za AAA poslužitelj"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nije pronađen pouzdani korijenski čvor za poslužitelj za popravak"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nije pronađen pouzdani korijenski čvor za poslužitelj za pravila"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Dohvaćanje pouzdanih korijenskih certifikata nije uspjelo"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nije pronađen pouzdani korijenski certifikat za AAA poslužitelj"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Dodavanje konfiguracije PassPointa nije uspjelo"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nije pronađen OSU davatelj usluga"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Povezivanje"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Povezano"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Povezivanje s OSU poslužiteljem"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Potvrđen je OSU poslužitelj"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Povezano s OSU poslužiteljem"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Početna razmjena SOAP-a"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čekanje na odgovor o preusmjeravanju"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Primljen je odgovor o preusmjeravanju"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga razmjena SOAP-a"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Treća razmjena SOAP-a"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Dohvaćanje pouzdanih korijenskih certifikata"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Dovršeno je davanje pristupa"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Otvaranje aplikacije <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Povezivanje nije uspjelo"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Dovršavanje registracije…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nije moguće dovršiti registraciju. Dodirnite za ponovni pokušaj."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registracija je dovršena. Povezivanje…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Vrlo sporo"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Sporo"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"U redu"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Ne pokreći mirovanje"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Zaslon nikad neće prijeći u mirovanje tijekom punjenja"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Zapisi za Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Dohvati Bluetooth pakete. (Uključi Bluetooth nakon promjene ove postavke)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM otključavanje"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Neka kôd za pokretanje sustava bude otključan"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite li dopustiti OEM otključavanje?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Umrežavanje"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certifikacija bežičnog prikaza"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogući opširnu prijavu na Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nasumični odabir MAC-a pri povezivanju"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilni podaci uvijek aktivni"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzanje za modemsko povezivanje"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Povezivanje nije moguće"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaži opcije za certifikaciju bežičnog prikaza"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećana razina prijave na Wi‑Fi, prikaz po SSID RSSI-ju u Biraču Wi‑Fi-ja"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Nasumično odaberi MAC adresu pri povezivanju s Wi-Fi mrežama"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"S ograničenim prometom"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Bez ograničenja prometa"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Veličine međuspremnika zapisnika"</string>
diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml
index 2e02a5997220..8713fc18ddf6 100644
--- a/packages/SettingsLib/res/values-hu/arrays.xml
+++ b/packages/SettingsLib/res/values-hu/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Csak DRM-tartalomhoz használjon HDCP ellenőrzést"</item>
<item msgid="45075631231212732">"Mindig használjon HDCP ellenőrzést"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Letiltva"</item>
+ <item msgid="1969681323976948639">"Szűrtek engedélyezve"</item>
+ <item msgid="8719029132154020716">"Engedélyezve"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (alapértelmezett)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml
index 589aa408f673..14d8c78ed6b8 100644
--- a/packages/SettingsLib/res/values-hu/strings.xml
+++ b/packages/SettingsLib/res/values-hu/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatikusan csatlakozott a következőn keresztül: %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatikusan csatlakozott a hálózatértékelés szolgáltatóján keresztül"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Csatlakozva a következőn keresztül: %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>: <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Kapcsolódva a következőn keresztül: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Elérhető a következőn keresztül: %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Koppintson ide a beállításhoz"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Koppintson a regisztrációhoz"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Csatlakozva, nincs internet-hozzáférés"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Nincs internetkapcsolat"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Bejelentkezést igényel"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"A hozzáférési pont átmenetileg megtelt"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Csatlakozva a következőn keresztül: %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Elérhető a következőn keresztül: %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Sikertelen kapcsolódás"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Érvénytelen az OSU-szerver URL-je"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Nem sikerült csatlakozni az OSU-szerverhez"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Nem sikerült az OSU-szerver ellenőrzése"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Érvénytelen az OSU-szerver tanúsítványa"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Hozzárendelés megszakítva"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"A hozzárendelés nem lehetséges"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Érvénytelen az OSU-szerver URL-je"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Váratlan parancstípus"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Váratlan SOAP-üzenettípus"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Sikertelen SOAP-üzenetváltás"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Nem sikerült elindítani az átirányítási eseményfigyelőt"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Időtúllépés az átirányításra várakozás közben"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nem található OSU-tevékenység"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Váratlan SOAP-üzenetállapot"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nem található PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nem található az AAA-szerver megbízható gyökércsomópontja"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nem található a szerverkiszolgáló megbízható gyökércsomópontja"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nem található a házirendszerver megbízható gyökércsomópontja"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Nem sikerült a megbízható gyökérszintű tanúsítványok lekérése"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nem található az AAA-szerver megbízható gyökértanúsítványa"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Nem sikerült a PassPoint-konfiguráció hozzáadása"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nem található OSU-szolgáltató"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Csatlakozás…"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Csatlakozva"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Csatlakozás az OSU-szerverhez…"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-szerver ellenőrizve"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Csatlakoztatva az OSU-szerverhez"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Első SOAP-üzenetváltás"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Várakozás az átirányítási válaszra…"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Átirányítási válasz érkezett"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Második SOAP-üzenetváltás"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Harmadik SOAP-üzenetváltás"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Megbízható gyökérszintű tanúsítványok lekérése…"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Hozzárendelés kész"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> megnyitása"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Nem sikerült csatlakozni"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Regisztráció befejezése…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nem sikerült a regisztráció befejezése. Koppintással újrapróbálkozhat."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"A regisztráció befejeződött. Csatlakozás…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Nagyon lassú"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lassú"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Rendben"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Nem kapcsolódik ki"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"A képernyő soha nem kapcsol ki töltés során"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI snoop napló engedélyezése"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth-csomagok rögzítése. (Bluetooth be-, illetve kikapcsolása a beállítás módosítása után)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-feloldás"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"A rendszerbetöltő feloldásának engedélyezése"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Engedélyezi az OEM-feloldást?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Hálózatok"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Vezeték nélküli kijelző tanúsítványa"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Részletes Wi-Fi-naplózás engedélyezése"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Csatlakoztatott MAC-címek randomizálása"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"A mobilhálózati kapcsolat mindig aktív"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Internetmegosztás hardveres gyorsítása"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Név nélküli Bluetooth-eszközök megjelenítése"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nem sikerült kapcsolódni"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vezeték nélküli kijelző tanúsítványával kapcsolatos lehetőségek megjelenítése"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi-naplózási szint növelése, RSSI/SSID megjelenítése a Wi‑Fi-választóban"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"MAC-cím véletlenszerű generálása Wi‑Fi-hálózatra való csatlakozáskor"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Forgalomkorlátos"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Nem forgalomkorlátos"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Naplózási puffer mérete"</string>
diff --git a/packages/SettingsLib/res/values-hy/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml
index 1e1f4bfd5f61..5cffafed6689 100644
--- a/packages/SettingsLib/res/values-hy/arrays.xml
+++ b/packages/SettingsLib/res/values-hy/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Օգտագործել HDCP-ը` միայն DRM-ի բովանդակությունը ստուգելու համար"</item>
<item msgid="45075631231212732">"Միշտ օգտագործել HDCP ստուգումը"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Անջատված է"</item>
+ <item msgid="1969681323976948639">"Միացված է զտիչներով"</item>
+ <item msgid="8719029132154020716">"Միացված է"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (կանխադրված)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml
index eb061727b89f..28ebe4febea9 100644
--- a/packages/SettingsLib/res/values-hy/strings.xml
+++ b/packages/SettingsLib/res/values-hy/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Ավտոմատ կերպով կապակցվել է %1$s-ի միջոցով"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Ավտոմատ կերպով միացել է ցանցի վարկանիշի ծառայության մատակարարի միջոցով"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Կապակցված է %1$s-ի միջոցով"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"«<xliff:g id="SSID">%1$s</xliff:g>», <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Միացված է <xliff:g id="NAME">%1$s</xliff:g>-ի միջոցով"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Հասանելի է %1$s-ի միջոցով"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Հպեք՝ կարգավորելու համար"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Հպեք՝ գրանցվելու համար"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Միացված է, սակայն ինտերնետ կապ չկա"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Ինտերնետ կապ չկա"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Անհրաժեշտ է մուտք գործել"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Հասանելիության կետը ժամանակավորապես լիքն է"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Միացված է %1$s-ի միջոցով"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Հասանելի է %1$s-ի միջոցով"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Չհաջողվեց միանալ"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU սերվերի անվավեր URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Չհաջողվեց միանալ OSU սերվերին"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Չհաջողվեց ստուգել OSU սերվերը"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU սերվերի անվավեր հավաստագիր"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Համաժամեցումն ընդհատվեց"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Համաժամեցումն անհասանելի է"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU սերվերի անվավեր URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Հրահանգի անհայտ տեսակ"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP հաղորդագրության անհայտ տեսակ"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Չհաջողվեց փոխանակել SOAP հաղորդագրությունները"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Չհաջողվեց գործարկել վերահասցեավորվող զանգերի ընդունիչը"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Սպասման ժամանակը լրացել է"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU գործողություններ չեն հայտնաբերվել"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP հաղորդագրության անհայտ կարգավիճակ"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Չհաջողվեց գտնել PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Չհաջողվեց գտնել AAA սերվերի վստահված արմատային հանգույցը"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Չհաջողվեց գտնել ուղղումների սերվերի վստահված արմատային հանգույցը"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Չհաջողվեց գտնել կանոնների սերվերի վստահված արմատային հանգույցը"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Չհաջողվեց բեռնել վստահված արմատային հավաստագրերը"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Չհաջողվեց գտնել AAA սերվերի վստահված արմատային հավաստագիրը"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Չհաջողվեց ավելացնել PassPoint-ի կարգավորումները"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Չհաջողվեց գտնել OSU-ի մատակարարին"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Միացում"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Միացած է"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Միացում OSU սերվերին"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU սերվերը ստուգված է"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Միացած է OSU սերվերին"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Առաջին փոխանակումը SOAP-ով"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Վերահասցեավորվող պատասխանի սպասում"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Պատասխանը ստացված է"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Երկրորդ փոխանակում SOAP-ով"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Երրորդ փոխանակում SOAP-ով"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Վստահված արմատային հավաստագրերը բեռնվում են"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Համաժամեցումն ավարտված է"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>, բացվում է"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Չհաջողվեց միանալ"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Գրանցումն ավարտվում է…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Չհաջողվեց ավարտել գրանցումը: Հպեք` նորից փորձելու համար:"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Գրանցումն ավարտված է: Միացում…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Շատ դանդաղ"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Դանդաղ"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Հաստատել"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Մնալ արթուն"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Էկրանը երբեք չի քնի լիցքավորման ընթացքում"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Միացնել Bluetooth HCI snoop log-ը"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Պահել Bluetooth փաթեթները (այս կարգավորումը փոխելուց հետո անհրաժեշտ է վերագործարկել Bluetooth-ը)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ապակողպում"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Թույլ տալ սկզբնաբեռնման բեռնիչի ապակողպումը"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Թույլատրե՞լ OEM ապակողպումը:"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Ցանց"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Անլար էկրանների հավաստագրում"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Միացնել Wi‑Fi մանրամասն գրանցամատյանները"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"MAC հասցեների պատահական ընտրություն Wi-Fi-ին միանալիս"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Բջջային ինտերնետը միշտ ակտիվ է"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Սարքակազմի արագացման միացում"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Ցուցադրել Bluetooth սարքերն առանց անունների"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Չհաջողվեց միանալ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Ցույց տալ անլար էկրանի հավաստագրման ընտրանքները"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Բարձրացնել մակարդակը, Wi‑Fi ընտրիչում ամեն մի SSID-ի համար ցույց տալ RSSI"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Պատահականորեն ընտրել MAC հասցեն Wi-Fi ցանցերին միանալիս"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Վճարովի թրաֆիկ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Անսահմանափակ թրաֆիկ"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Մատյանի բուֆերի չափերը"</string>
diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml
index 8d858a530f81..867f9eaa73a8 100644
--- a/packages/SettingsLib/res/values-in/arrays.xml
+++ b/packages/SettingsLib/res/values-in/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Gunakan pemeriksaan HDCP untuk konten DRM saja"</item>
<item msgid="45075631231212732">"Selalu gunakan pemeriksaan HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Nonaktif"</item>
+ <item msgid="1969681323976948639">"Diaktifkan Difilter"</item>
+ <item msgid="8719029132154020716">"Diaktifkan"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml
index 208508e30e64..182e52338891 100644
--- a/packages/SettingsLib/res/values-in/strings.xml
+++ b/packages/SettingsLib/res/values-in/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Tersambung otomatis melalui %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Otomatis tersambung melalui penyedia rating jaringan"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Terhubung melalui %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> oleh <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Tersambung melalui <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tap untuk menyiapkan"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap untuk mendaftar"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Tersambung, tidak ada internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Tidak ada internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Perlu login"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Titik akses penuh untuk sementara"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Tersambung melalui %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Tersedia melalui %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Koneksi gagal"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL server OSU tidak valid"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Koneksi server OSU gagal"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Validasi server OSU gagal"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Sertifikat server OSU tidak valid"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning dibatalkan"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning tidak tersedia"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL server OSU tidak valid"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Jenis perintah yang tidak terduga"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Jenis pesan SOAP yang tidak terduga"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Pertukaran pesan SOAP gagal"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Listener pengalihan gagal dimulai"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Waktu tunggu pengalihan habis"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Tidak ditemukan aktivitas OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status pesan SOAP yang tidak terduga"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Gagal menemukan PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Gagal menemukan node root tepercaya untuk server AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Gagal menemukan node root tepercaya untuk server perbaikan"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Gagal menemukan node root tepercaya untuk server kebijakan"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Gagal mengambil root certificate tepercaya"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Gagal menemukan root certificate tepercaya untuk server AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Gagal menambahkan konfigurasi PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Gagal menemukan penyedia OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Menghubungkan"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Tersambung"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Menyambungkan ke server OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU divalidasi"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Tersambung ke server OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Pertukaran SOAP awal"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Menunggu respons pengalihan"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Respons pengalihan diterima"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Pertukaran SOAP kedua"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Pertukaran SOAP ketiga"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Mengambil root certificate tepercaya"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning selesai"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Membuka <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Tidak dapat tersambung"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Menyelesaikan pendaftaran…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Tidak dapat menyelesaikan pendaftaran. Tap untuk mencoba lagi."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Pendaftaran selesai. Menyambungkan…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Sangat Lambat"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lambat"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Oke"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Tetap terjaga"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Layar tidak akan redup selama mengisi daya"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktifkan log pengintaian HCI Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Ambil paket Bluetooth. (Aktifkan/nonaktifkan Bluetooth setelah mengubah setelan ini)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Buka kunci OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Izinkan bootloader dibuka kuncinya"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Izinkan buka kunci OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Jaringan"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Sertifikasi layar nirkabel"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktifkan Pencatatan Log Panjang Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Pengacakan MAC yang Terhubung"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Data seluler selalu aktif"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Akselerasi hardware tethering"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Tampilkan perangkat Bluetooth tanpa nama"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Tidak dapat terhubung"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Tampilkan opsi untuk sertifikasi layar nirkabel"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tingkatkan level pencatatan log Wi-Fi, tampilkan per SSID RSSI di Pemilih Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Acak alamat MAC saat menghubungkan ke jaringan Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Berbayar"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Tidak berbayar"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Ukuran buffer pencatat log"</string>
diff --git a/packages/SettingsLib/res/values-is/arrays.xml b/packages/SettingsLib/res/values-is/arrays.xml
index 16d5b8a4b6f9..d467a68199f6 100644
--- a/packages/SettingsLib/res/values-is/arrays.xml
+++ b/packages/SettingsLib/res/values-is/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Nota HDCP-athugun aðeins fyrir höfundarréttarvarið efni"</item>
<item msgid="45075631231212732">"Nota alltaf HDCP-eftirlit"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Slökkt"</item>
+ <item msgid="1969681323976948639">"Kveikt á síuðu"</item>
+ <item msgid="8719029132154020716">"Kveikt"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (sjálfgefið)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml
index ffa3ddce5e36..577b7ae4dadb 100644
--- a/packages/SettingsLib/res/values-is/strings.xml
+++ b/packages/SettingsLib/res/values-is/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Sjálfkrafa tengt um %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Sjálfkrafa tengt um netgæðaveitu"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Tengt í gegnum %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> með <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Tenging í gegnum <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Í boði í gegnum %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Ýttu til að setja upp"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Ýttu til að skrá þig"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Tengt, enginn netaðgangur"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Engin nettenging"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Innskráningar krafist"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Aðgangsstaður tímabundið fullur"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Tengt í gegnum %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Í boði í gegnum %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Tenging mistókst"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ógild vefslóð OSU-þjóns"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Tenging OSU-þjóns mistókst"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Staðfesting OSU-þjóns mistókst"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ógilt vottorð OSU-þjóns"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Hætt við úthlutun"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Úthlutun ekki tiltæk"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ógild vefslóð OSU-þjóns"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Óvænt tegund skipunar"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Óvænt gerð SOAP- skilaboða"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Skipti SOAP-skilaboða mistókust"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Ekki tókst að ræsa framsenda hlustunarþjónustu"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tímamörk runnu út við að bíða eftir framsendingu"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Engin OSU-virkni fannst"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Óvænt staða SOAP-skilaboða"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Ekki tókst að finna PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Ekki tókst að finna traustan rótarhnút fyrir AAA-þjón"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Ekki tókst að finna traustan rótarhnút fyrir úrbótaþjón"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Ekki tókst að finna traustan rótarhnút fyrir regluþjón"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Ekki tókst að sækja traust rótarvottorð"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Ekki tókst að finna traust rótarvottorð fyrir AAA-þjón"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Ekki tókst að bæta við PassPoint-stillingu"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Ekki tókst að finna OSU-veitu"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Tengist"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Tengt"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Tengist við OSU-þjón"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-þjónn staðfestur"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Tengt við OSU-þjón"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Fyrstu SOAP-skipti"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Bíður eftir framsendu svari"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Framsent svar móttekið"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Önnur SOAP-skipti"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Þriðju SOAP-skipti"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Sækir traust rótarvottorð"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Úthlutun lokið"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Opnar <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Ekki tókst að tengjast"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Gengur frá nýskráningu…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Ekki tókst að ljúka við nýskráningu. Ýttu til að reyna aftur."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Nýskráningu lokið. Tengist…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Mjög hægt"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Hægt"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Í lagi"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Vaka"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Skjárinn fer aldrei í hvíld við hleðslu"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Gera HCI-snuðraraskrá Bluetooth virka"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Fanga Bluetooth-pakka. (Velja skal Bluetooth eftir að þessari stillingu er breytt)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Opnun framleiðanda"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Leyfa opnun ræsiforritsins"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Leyfa opnun framleiðanda?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Netkerfi"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Vottun þráðlausra skjáa"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Kveikja á ítarlegri skráningu Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Slembival MAC-vistfanga við tengingu"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Alltaf kveikt á farsímagögnum"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Vélbúnaðarhröðun fyrir tjóðrun"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Sýna Bluetooth-tæki án heita"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Tenging mistókst"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Sýna valkosti fyrir vottun þráðlausra skjáa"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Auka skráningarstig Wi-Fi, sýna RSSI fyrir hvert SSID í Wi-Fi vali"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Velja MAC-vistfang af handahófi þegar tengst er við Wi‑Fi net"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Mæld notkun"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Notkun ekki mæld"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Annálsritastærðir biðminna"</string>
diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml
index 555cd1c7dc5a..7d316ab8433d 100644
--- a/packages/SettingsLib/res/values-it/arrays.xml
+++ b/packages/SettingsLib/res/values-it/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Usa la verifica HDCP solo per contenuti DRM"</item>
<item msgid="45075631231212732">"Usa sempre la verifica HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Non attiva"</item>
+ <item msgid="1969681323976948639">"Filtro attivo"</item>
+ <item msgid="8719029132154020716">"Attiva"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (predefinita)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml
index a370ad184f65..9fc32949db38 100644
--- a/packages/SettingsLib/res/values-it/strings.xml
+++ b/packages/SettingsLib/res/values-it/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Collegato automaticamente tramite %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Collegato automaticamente tramite fornitore di servizi di valutazione rete"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Collegato tramite %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> di <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Connesso tramite <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Disponibile tramite %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tocca per configurare"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tocca per registrarti"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connesso, senza Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Nessuna connessione a Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Accesso richiesto"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punto di accesso momentaneamente al completo"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Connesso tramite %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Disponibile tramite %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connessione non riuscita"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL del server OSU non valido"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Connessione al server OSU non riuscita"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Convalida del server OSU non riuscita"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificato server OSU non valido"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning interrotto"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning non disponibile"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL del server OSU non valido"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo di comando imprevisto"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo di messaggio SOAP imprevisto"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Scambio messaggi SOAP non riuscito"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Avvio del listener di reindirizzamento non riuscito"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timeout durante l\'attesa del reindirizzamento"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nessuna attività OSU rilevata"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Stato imprevisto del messaggio SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Individuazione di PPS-MO non riuscita"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Individuazione del nodo radice di attendibilità per il server AAA non riuscita"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Individuazione del nodo radice di attendibilità per il server di correzione non riuscita"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Individuazione del nodo radice di attendibilità per il server delle norme non riuscita"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Recupero dei certificati radice di attendibilità non riuscito"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Individuazione del certificato radice di attendibilità per il server AAA non riuscita"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Aggiunta della configurazione PassPoint non riuscita."</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Individuazione di un provider OSU non riuscita"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connessione"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connesso"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connessione al server OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU convalidato"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Connessione con server OSU stabilita"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Scambio SOAP iniziale"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"In attesa della risposta di reindirizzamento"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"È stata ricevuta una risposta di reindirizzamento"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Secondo scambio SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terzo scambio SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recupero dei certificati radice di attendibilità"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning completato"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Apertura di <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>…"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Impossibile collegarsi"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completamento della registrazione…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Impossibile completare la registrazione. Tocca per riprovare."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registrazione completata. Connessione…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Molto lenta"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Rimani attivo"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Lo schermo non va mai in stand-by se sotto carica"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Attiva log di esame HCI Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Acquisisci pacchetti Bluetooth. Attiva/disattiva Bluetooth dopo aver modificato questa impostazione."</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Sblocco OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Consenti lo sblocco del bootloader"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Consentire lo sblocco OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Reti"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificazione display wireless"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Attiva registrazione dettagliata Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Selezione casuale dell\'indirizzo MAC con connessione"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Dati mobili sempre attivi"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering accelerazione hardware"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostra dispositivi Bluetooth senza nome"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Impossibile collegarsi"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opzioni per la certificazione display wireless"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumenta il livello di registrazione Wi-Fi, mostrando il SSID RSSI nel selettore Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Seleziona indirizzo MAC casuale con reti Wi-Fi collegate"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"A consumo"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Non a consumo"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Dimensioni buffer Logger"</string>
diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml
index 4ad9b3493bc4..9feaa2a50c67 100644
--- a/packages/SettingsLib/res/values-iw/arrays.xml
+++ b/packages/SettingsLib/res/values-iw/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"‏השתמש בבדיקת HDCP עבור תוכן DRM בלבד"</item>
<item msgid="45075631231212732">"‏תמיד השתמש בבדיקת HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"מושבת"</item>
+ <item msgid="1969681323976948639">"המסננים המופעלים"</item>
+ <item msgid="8719029132154020716">"מופעל"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"‏AVRCP 1.4 (ברירת המחדל)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml
index 04fd750820ae..8ee11e4b2069 100644
--- a/packages/SettingsLib/res/values-iw/strings.xml
+++ b/packages/SettingsLib/res/values-iw/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"‏מחובר אוטומטית דרך %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"מחובר אוטומטית דרך ספק של דירוג רשת"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"‏מחובר דרך %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> של <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"מחוברת באמצעות <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"‏זמינה דרך %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"יש להקיש כדי להגדיר"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"יש להקיש כדי להירשם"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"מחובר. אין אינטרנט"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"אין אינטרנט"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"נדרשת כניסה"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"נקודת הגישה מלאה באופן זמני"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"‏מחובר לרשת של %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"‏זמינה דרך %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"החיבור נכשל"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"‏כתובת URL לא חוקית של שרת OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"‏נכשל חיבור לשרת OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"‏נכשל אימות של שרת OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"‏אישור לא חוקי של שרת OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ניהול תצורה בוטל"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ניהול תצורה לא זמין"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"‏כתובת URL לא חוקית של שרת OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"סוג פקודה לא צפוי"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"‏סוג הודעה לא צפוי של SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"‏נכשלו חילופין של הודעת SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"נכשלה התחלה של הפניה אוטומטית של מאזין"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"תם פרק הזמן הקצוב לתפוגה בהמתנה להפניה אוטומטית"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"‏לא נמצאה פעילות OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"‏סטטוס לא צפוי של הודעת SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"‏נכשלה מציאה של PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"‏נכשלה מציאה של צומת בסיס למהימנות עבור שרת AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"נכשלה מציאה של צומת בסיס למהימנות עבור שרת תיקון"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"נכשלה מציאה של צומת בסיס למהימנות עבור שרת מדיניות"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"נכשל אחזור של אישורי בסיס למהימנות"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"‏נכשלה מציאה של אישור בסיס למהימנות עבור שרת AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"‏נכשלה הוספה של הגדרת PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"‏נכשלה מציאה של ספק OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"מתבצעת התחברות"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"מחובר"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"‏מתבצע חיבור לשרת OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"‏שרת OSU אומת"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"‏יש חיבור לשרת OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"‏חילופי SOAP ראשוניים"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"בהמתנה לתגובה להפניה אוטומטית"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"התקבלה תגובה להפניה אוטומטית"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"‏חילופי SOAP בפעם השנייה"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"‏חילופי SOAP בפעם השלישית"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"מתבצע אחזור של אישורי בסיס למהימנות"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"ניהול תצורה הושלם"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"מתבצעת פתיחה של <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"לא ניתן היה להתחבר"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"מתבצעת השלמה של ההרשמה…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"לא ניתן היה להשלים את ההרשמה. יש להקיש כדי לנסות שוב."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"תהליך ההרשמה הסתיים. בתהליך התחברות…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"איטית מאוד"</string>
<string name="speed_label_slow" msgid="813109590815810235">"איטית"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"אישור"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"השאר פועל"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"המסך לעולם לא יהיה במצב שינה במהלך טעינה"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"‏הפעלת Snoop Log של Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"‏איחוד חבילות Bluetooth. (יש להחליף מצב Bluetooth לאחר שינוי הגדרה זו)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"‏ביטול נעילה של OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"אפשר ביטול של נעילת מנהל האתחול"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"‏האם לאפשר ביטול נעילה של OEM (יצרן ציוד מקורי)?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"תקשורת רשתות"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"‏אישור של תצוגת WiFi"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"‏הפעל רישום מפורט של Wi‑Fi ביומן"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"‏חיבור כתובת MAC אקראית"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"חבילת הגלישה פעילה תמיד"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"שיפור מהירות באמצעות חומרה לצורך שיתוף אינטרנט בין ניידים"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"‏הצגת מכשירי Bluetooth ללא שמות"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"לא ניתן היה להתחבר"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"‏הצג אפשרויות עבור אישור של תצוגת WiFi"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"‏העלה את רמת הרישום של Wi‑Fi ביומן, הצג לכל SSID RSSI ב-Wi‑Fi Picker"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"‏יצירת כתובת MAC אקראית בהתחברות לרשתות Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"נמדדת"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"לא נמדדת"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"גדלי מאגר של יומן רישום"</string>
diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml
index 978f6daa745d..2de8c86cb55d 100644
--- a/packages/SettingsLib/res/values-ja/arrays.xml
+++ b/packages/SettingsLib/res/values-ja/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"DRMコンテンツにのみHDCPチェックを使用する"</item>
<item msgid="45075631231212732">"HDCPチェックを常に使用する"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"無効"</item>
+ <item msgid="1969681323976948639">"有効(フィルタ済み)"</item>
+ <item msgid="8719029132154020716">"有効"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4(デフォルト)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml
index 9699e8648b3f..4efd61b37383 100644
--- a/packages/SettingsLib/res/values-ja/strings.xml
+++ b/packages/SettingsLib/res/values-ja/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s 経由で自動的に接続しています"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ネットワーク評価プロバイダ経由で自動的に接続しています"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s経由で接続"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>(<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>)"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> で接続しました"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s経由で使用可能"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"設定するにはタップします"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"タップして登録してください"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"接続済み、インターネット接続なし"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"インターネット未接続"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"ログインが必要"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"アクセス ポイントが一時的にいっぱいです"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s 経由で接続済み"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s 経由で使用可能"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"接続できませんでした"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU サーバーの URL が無効です"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU サーバーに接続できませんでした"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU サーバーの検証に失敗しました"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU サーバー証明書が無効です"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"プロビジョニングが中断されました"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"プロビジョニングは利用できません"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU サーバーの URL が無効です"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"予期しないコマンドタイプです"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"予期しない SOAP メッセージ タイプです"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP メッセージの交換に失敗しました"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"リダイレクト リスナーを起動できませんでした"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"リダイレクトの待機中にタイムアウトになりました"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU アクティビティが見つかりませんでした"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"予期しない SOAP メッセージ ステータスです"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO が見つかりませんでした"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA サーバー用の信頼できるルートノードが見つかりませんでした"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"修復サーバー用の信頼できるルートノードが見つかりませんでした"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ポリシー サーバー用の信頼できるルートノードが見つかりませんでした"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"信頼できるルート証明書を取得できませんでした"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA サーバー用の信頼できるルート証明書が見つかりませんでした"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint 設定を追加できませんでした"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU プロバイダが見つかりませんでした"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"接続しています"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"接続しました"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU サーバーに接続しています"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU サーバーの検証が完了しました"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU サーバーに接続しました"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"1 回目の SOAP 交換です"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"リダイレクト レスポンスを待機しています"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"リダイレクト レスポンスを受信しました"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"2 回目の SOAP 交換です"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"3 回目の SOAP 交換です"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"信頼できるルート証明書を取得しています"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"プロビジョニングが完了しました"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"「<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>」を開いています"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"接続できませんでした"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"登録を完了しています…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"登録を完了できませんでした。タップしてもう一度お試しください。"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"登録が完了しました。接続しています…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"とても遅い"</string>
<string name="speed_label_slow" msgid="813109590815810235">"遅い"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"スリープモードにしない"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"充電中に画面をスリープにしない"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCIスヌープログをON"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth パケットをキャプチャします(この設定を変更した場合は Bluetooth を切り替えてください)。"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEMロック解除"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ブートローダーによるロック解除を許可する"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEMロック解除の許可"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ネットワーク"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"ワイヤレスディスプレイ認証"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi詳細ログの有効化"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"接続先 MAC のランダム化"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"モバイルデータを常に ON にする"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"テザリング時のハードウェア アクセラレーション"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth デバイスを名前なしで表示"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"接続できませんでした"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ワイヤレスディスプレイ認証のオプションを表示"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fiログレベルを上げて、Wi-Fi選択ツールでSSID RSSIごとに表示します"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi-Fi ネットワーク接続時の MAC アドレスのランダム化"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"従量制"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"定額制"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ログバッファのサイズ"</string>
diff --git a/packages/SettingsLib/res/values-ka/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml
index 73dbdfa1472a..d315bfe8f128 100644
--- a/packages/SettingsLib/res/values-ka/arrays.xml
+++ b/packages/SettingsLib/res/values-ka/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"HDCP შემოწმების გამოყენება მხოლოდ DRM კონტენტის შემთხვევაში"</item>
<item msgid="45075631231212732">"ყოველთვის გამოიყენე HDCP შემოწმება"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"გათიშულია"</item>
+ <item msgid="1969681323976948639">"გაფილტრულის ჩართვა"</item>
+ <item msgid="8719029132154020716">"ჩართულია"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (ნაგულისხმევი)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml
index 64d78bbc9acf..c613a06b2544 100644
--- a/packages/SettingsLib/res/values-ka/strings.xml
+++ b/packages/SettingsLib/res/values-ka/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"ავტომატურად დაკავშირდა %1$s-ის მეშვეობით"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ავტომატურად დაკავშირდა ქსელის ხარისხის შეფასების პროვაიდერის მეშვეობით"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-ით დაკავშირებული"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, უზრუნველყოფს <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"დაკავშირებულია <xliff:g id="NAME">%1$s</xliff:g>-ით"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"ხელმისაწვდომია %1$s-ით"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"შეეხეთ დასაყენებლად"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"შეეხეთ რეგისტრაციისთვის"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"დაკავშირებულია, ინტერნეტის გარეშე"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ინტერნეტ-კავშირი არ არის"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"აუცილებელია სისტემაში შესვლა"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"წვდომის წერტილი დროებით გადატვირთულია"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s-ით დაკავშირებული"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"ხელმისაწვდომია %1$s-ით"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"დაკავშირება ვერ მოხერხდა"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU სერვერის URL არასწორია"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU სერვერთან დაკავშირება ვერ მოხერხდა"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU სერვერის დადასტურება ვერ მოხერხდა"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU სერვერის სერტიფიკატი არასწორია"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"უზრუნველყოფა შეწყვეტილია"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"უზრუნველყოფა მიუწვდომელია"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU სერვერის URL არასწორია"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ბრძანების ტიპი მოულოდნელია"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP-შეტყობინების ტიპი მოულოდნელია"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-შეტყობინებების მიმოცვლა ვერ მოხერხდა"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"გადამისამართებების მიმღების გაშვება ვერ მოხერხდა"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"გადამისამართების მოლოდინის დრო ამოიწურა"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU აქტივობა ვერ მოიძებნა"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP-შეტყობინების სტატუსი მოულოდნელია"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ვერ მოიძებნა"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA სერვერისთვის ნდობით აღჭურვილი ძირეული კვანძი ვერ მოიძებნა"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"გამართვების სერვერისთვის ნდობით აღჭურვილი ძირეული კვანძი ვერ მოიძებნა"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"წესების სერვერისთვის ნდობით აღჭურვილი ძირეული კვანძი ვერ მოიძებნა"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ნდობით აღჭურვილი ძირეული სერტიფიკატების მოძიება ვერ მოხერხდა"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA სერვერისთვის ნდობით აღჭურვილი ძირეული სერტიფიკატი ვერ მოიძებნა"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint კონფიგურაციის დამატება ვერ მოხერხდა"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU პროვაიდერი ვერ მოიძებნა"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"მიმდინარეობს დაკავშირება"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"დაკავშირებულია"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"მიმდინარეობს დაკავშირება OSU სერვერთან"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU სერვერი დადასტურებულია"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"დაკავშირებულია OSU სერვერთან"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"SOAP-შეტყობინებების საწყისი მიმოცვლა"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"გადამისამართების პასუხის მოლოდინში"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"მიღებულია გადამისამართების პასუხი"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"SOAP-შეტყობინებების მეორე მიმოცვლა"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"SOAP-შეტყობინებების მესამე მიმოცვლა"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"მინდინარეობს ნდობით აღჭურვილი ძირეული სერტიფიკატების მოძიება"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"უზრუნველყოფა დასრულებულია"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"მიმდინარეობს <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>-ის გახსნა"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"დაკავშირება ვერ მოხერხდა"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"მიმდინარეობს რეგისტრაციის დასრულება…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"რეგისტრაციის დასრულება ვერ მოხერხდა. შეეხეთ ხელახლა საცდელად."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"რეგისტრაცია დასრულდა. მიმდინარეობს დაკავშირება…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"ძალიან ნელი"</string>
<string name="speed_label_slow" msgid="813109590815810235">"ნელი"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"კარგი"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"არ დაიძინო"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"დატენვისას ეკრანი არ დაიძინებს"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI snoop ჟურნალის ჩართვა"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth პაკეტების წატაცება. (ამ პარამეტრის შეცვლის შემდეგ ჩართეთ და გამორთეთ Bluetooth)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM განბლოკვა"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ნება დართოს განბლოკოს ჩამტვირთველმა"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"მისცეს ნება OEM განბლოკვას?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ქსელი"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"უსადენო ეკრანის სერტიფიცირება"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi-ს დაწვრილებითი აღრიცხვის ჩართვა"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"დაკავშირებული MAC მისამართის შემთხვევითობა"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"მობილური ინტერნეტის ყოველთვის გააქტიურება"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ტეტერინგის აპარატურული აჩქარება"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-მოწყობილობების ჩვენება სახელების გარეშე"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"დაკავშირება ვერ მოხერხდა"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"უსადენო ეკრანის სერტიფიცირების ვარიანტების ჩვენება"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi-ს აღრიცხვის დონის გაზრდა, Wi‑Fi ამომრჩეველში ყოველ SSID RSSI-ზე ჩვენება"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"MAC მისამართის შემთხვევითობა ჩაირთოს, როცა Wi‑Fi-ქსელებთან დაკავშირება ხდება"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"ლიმიტირებული"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"არალიმიტირებული"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ჟურნალიზაციის ბუფერის ზომები"</string>
diff --git a/packages/SettingsLib/res/values-kk/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml
index 0f06e3954a43..af578a94ad0e 100644
--- a/packages/SettingsLib/res/values-kk/arrays.xml
+++ b/packages/SettingsLib/res/values-kk/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"HDCP тексерісін DRM мазмұны үшін ғана қолдану"</item>
<item msgid="45075631231212732">"Әрқашан HDCP (жоғары кең жолақты сандық мазмұн қорғаушы) тексерулерін қолданыңыз"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Өшірулі"</item>
+ <item msgid="1969681323976948639">"Сүзгіленгендері қосулы"</item>
+ <item msgid="8719029132154020716">"Қосулы"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (әдепкі)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml
index 58f10ac86301..8d6d76ecd30d 100644
--- a/packages/SettingsLib/res/values-kk/strings.xml
+++ b/packages/SettingsLib/res/values-kk/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s арқылы автоматты қосылды"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Желі рейтингі провайдері арқылы автоматты түрде қосылған"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s арқылы қосылған"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ұсынған <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> арқылы жалғанған"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s арқылы қолжетімді"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Реттеу үшін түртіңіз"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Тіркелу үшін түртіңіз."</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Қосылған, интернет жоқ"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Интернетпен байланыс жоқ"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Есептік жазбаға кіру керек"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Кіру нүктесі уақытша бос емес"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s арқылы қосылды"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s арқылы қолжетімді"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Байланыс орнатылмады"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU серверінің URL мекенжайы жарамсыз"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU серверімен байланыс қатесі шықты"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU сервері тексеруден өтпеді"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU серверінің сертификаты жарамсыз"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Дайындық процесі үзілді"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Дайындықты жүзеге асыру мүмкін емес"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU серверінің URL мекенжайы жарамсыз"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Күтпеген пәрмен түрі"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP хабарының белгісіз түрі"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP хабарын алмасу мүмкін болмады"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Тыңдаушының бағытын ауыстыру мүмкін болмады"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Бағыттың ауыстырылуын күту уақыты бітті"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Ешқандай OSU әрекеті табылмады"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP хабарының белгісіз күйі"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO табылмады"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA сервері үшін сенімді түбір табылмады"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Жөндеулер сервері үшін сенімді түбір табылмады"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Саясат сервері үшін сенімді түбір табылмады"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Сенімді түбірлік сертификаттар алынбады"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA сервері үшін сенімді түбірлік сертификатты табу мүмкін болмады"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint конфигурациясы енгізілмеді"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU провайдері табылмады"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Жалғануда"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Жалғанды"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU серверіне жалғануда"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU сервері тексерілді"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU серверіне жалғанды"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Бастапқы SOAP алмасуы"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Бағытты ауыстыру туралы жауап күтілуде"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Бағытты ауыстыру туралы жауап алынды"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Екінші SOAP алмасуы"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Үшінші SOAP алмасуы"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Сенімді түбірлік сертификаттар алынуда"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Дайындық аяқталды"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ашылуда"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Жалғанбады"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Тіркелу процесі аяқталуда…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Тіркелу процесі аяқталмады. Әрекетті қайталау үшін түртіңіз."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Тіркелу процесі аяқталды. Жалғануда…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Өте баяу"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Баяу"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Жарайды"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Ояу тұру"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Зарядтау кезінде экран ұйықтамайды"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI snoop тіркелімін қосу"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth пакеттерін алу (осы параметрді өзгерткен соң, Bluetooth-ды қосыңыз немесе өшіріңіз)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM бекітпесін ашу"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Жүктеуші бекітпесін ашуға рұқсат ету"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM бекітпесін ашуға рұқсат ету керек пе?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Желі орнату"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Сымсыз дисплей сертификаты"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi егжей-тегжейлі журналы"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Қосылу кезінде MAC мекенжайларын еркін таңдау"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Мобильдік деректер әрқашан қосулы"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Тетерингтің аппараттық жеделдетуі"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth құрылғыларын атаусыз көрсету"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Қосылмады"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Сымсыз дисплей сертификаты опцияларын көрсету"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi тіркеу деңгейін арттыру, Wi‑Fi таңдағанда әр SSID RSSI бойынша көрсету"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi желісіне қосылу кезінде MAC мекенжайларын еркін таңдау"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Шектелген"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Шектелмеген"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Журналға тіркеуші буферінің өлшемдері"</string>
diff --git a/packages/SettingsLib/res/values-km/arrays.xml b/packages/SettingsLib/res/values-km/arrays.xml
index 4867c8fb20d8..88583ad9eebb 100644
--- a/packages/SettingsLib/res/values-km/arrays.xml
+++ b/packages/SettingsLib/res/values-km/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"ប្រើ​ការ​ពិនិត្យ HDCP សម្រាប់​តែ​មាតិកា DRM ប៉ុណ្ណោះ"</item>
<item msgid="45075631231212732">"ប្រើ​ការ​ពិនិត្យ HDCP ជា​និច្ច"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"បាន​បិទ"</item>
+ <item msgid="1969681323976948639">"បានបើក​ការត្រង"</item>
+ <item msgid="8719029132154020716">"បាន​បើក"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (លំនាំដើម)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml
index 45723ed0b348..990320108698 100644
--- a/packages/SettingsLib/res/values-km/strings.xml
+++ b/packages/SettingsLib/res/values-km/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"បានភ្ជាប់ដោយស្វ័យប្រវត្តិតាមរយៈ %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"បានភ្ជាប់​ដោយស្វ័យប្រវត្តិ​តាម​រយៈក្រុមហ៊ុនផ្តល់​ការ​វាយ​តម្លៃលើ​បណ្តាញ"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"បានភ្ជាប់តាមរយៈ %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> ដោយ <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"ភ្ជាប់​តាម <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"មានតាមរយៈ %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"ចុច​ដើម្បី​រៀបចំ"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"ចុច​ដើម្បី​ចុះឈ្មោះ"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"បាន​ភ្ជាប់ ប៉ុន្តែ​គ្មាន​អ៊ីនធឺណិត​ទេ"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"គ្មាន​អ៊ីនធឺណិតទេ"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"តម្រូវ​ឱ្យ​ចូល​គណនី"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ចំណុចចូលប្រើពេញជាបណ្តោះអាសន្ន"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"បានភ្ជាប់តាមរយៈ %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"មានតាមរយៈ %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"ការតភ្ជាប់​មិនបាន​សម្រេច"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL ម៉ាស៊ីនមេ OSU មិន​ត្រឹមត្រូវទេ"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"មិនអាច​ផ្ទៀងផ្ទាត់​ការតភ្ជាប់​ម៉ាស៊ីនមេ OSU បានទេ"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"មិនអាច​ផ្ទៀងផ្ទាត់​ម៉ាស៊ីនមេ OSU បានទេ"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"វិញ្ញាបនបត្រ​ម៉ាស៊ីនមេ OSU មិនត្រឹមត្រូវទេ"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"បាន​បោះបង់​ការផ្ដល់ជូន"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"គ្មាន​ការផ្ដល់​ជូនទេ"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL ម៉ាស៊ីនមេ OSU មិន​ត្រឹមត្រូវទេ"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ប្រភេទការបញ្ជា​ដែល​មិនបាន​រំពឹងទុក"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ប្រភេទ​សារ SOAP ដែល​មិនបាន​រំពឺងទុក"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"មិនអាច​ផ្លាស់ប្ដូរ​សារ SOAP បានទេ"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"មិនអាច​ចាប់ផ្ដើម​ការបញ្ជូន​អ្នកស្ដាប់​បន្តបានទេ"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ការរង់ចាំ​ដើម្បី​បញ្ជូនបន្ត​អស់ម៉ោង​ហើយ"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"រកមិនឃើញ​សកម្មភាព OSU ទេ"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ស្ថានភាព​សារ SOAP ដែល​មិនបាន​រំពឺងទុក"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"រកមិនឃើញ PPS-MO ទេ"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"រកមិនឃើញ​ថ្នាំងឫស​ដែលទុកចិត្ត​សម្រាប់​ម៉ាស៊ីនមេ AAA ទេ"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"រកមិនឃើញ​ថ្នាំងឫស​ដែលទុកចិត្ត​សម្រាប់​ម៉ាស៊ីនមេកែបញ្ហាទេ"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"រកមិនឃើញ​ថ្នាំងឫស​ដែលទុកចិត្ត​សម្រាប់​ម៉ាស៊ីនមេ​ដែលផ្អែកតាម​គោលការណ៍ទេ"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"មិនអាច​ទាញយក​វិញ្ញាបនបត្រគោល​ដែល​ទុកចិត្ត​បានទេ"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"រកមិនឃើញ​វិញ្ញាបនបត្រគោល​ដែលទុកចិត្ត​សម្រាប់​ម៉ាស៊ីនមេ AAA ទេ"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"មិនអាច​បញ្ចូល​ការកំណត់​រចនាសម្ព័ន្ធ PassPoint បានទេ"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"រកមិនឃើញ​បណ្ដាញផ្ដល់ OSU ទេ"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"កំពុងភ្ជាប់"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"បានភ្ជាប់"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"កំពុងភ្ជាប់​ទៅ​ម៉ាស៊ីនមេ OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"បាន​ផ្ទៀងផ្ទាត់​ម៉ាស៊ីនមេ OSU ហើយ"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"បានភ្ជាប់​ទៅ​ម៉ាស៊ីនមេ OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ការផ្លាស់ប្ដូរ SOAP ដំបូង"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"កំពុង​រង់ចាំ​ការឆ្លើយតប​បន្ត"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"បាន​ទទួល​ការឆ្លើយ​តបបន្ត"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ការផ្លាស់ប្ដូរ SOAP ទីពីរ"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ការផ្លាស់ប្ដូរ SOAP ទីបី"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"កំពុង​ទាញយក​វិញ្ញាបនបត្រគោល​ដែល​ទុកចិត្ត"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"ការផ្ដល់ជូន​បានបញ្ចប់"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"កំពុង​បើក <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"មិន​អាចភ្ជាប់​បានទេ"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"កំពុង​បញ្ចប់​ការចុះឈ្មោះ…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"មិនអាច​បញ្ចប់​ការចុះឈ្មោះ​បានទេ។ សូមចុច ដើម្បី​ព្យាយាម​ម្ដង​ទៀត។"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"ការចុះ​ឈ្មោះ​បានបញ្ចប់។ កំពុងភ្ជាប់…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"យឺតណាស់"</string>
<string name="speed_label_slow" msgid="813109590815810235">"យឺត"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"យល់ព្រម"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"ទុកឲ្យបើកចោល"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"អេក្រង់​នឹង​មិន​ដេក​ពេល​បញ្ចូល​ថ្ម"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"បើក​កំណត់​ហេតុ HCI snoop ប៊្លូធូស"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ចាប់​យក​កញ្ចប់​ប៊្លូធូស។ (បិទ/​បើក​ប៊្លូធូស ​បន្ទាប់ពី​ប្ដូរ​ការកំណត់​នេះ)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"ការដោះសោ OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"អនុញ្ញាតឲ្យដោះសោកម្មវិធីចាប់ផ្តើមប្រព័ន្ធ"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"អនុញ្ញាតការដោះសោ OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ការភ្ជាប់បណ្ដាញ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"សេចក្តីបញ្ជាក់ការបង្ហាញ​ឥត​ខ្សែ"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"បើក​កំណត់ហេតុ​រៀបរាប់​ Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"ការជ្រើសរើស MAC ដោយចៃដន្យ នៅពេលបានភ្ជាប់"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"ទិន្នន័យទូរសព្ទចល័តដំណើរការជានិច្ច"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ការ​បង្កើនល្បឿន​ផ្នែករឹងសម្រាប់​ការភ្ជាប់"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"បង្ហាញ​ឧបករណ៍​ប្ល៊ូធូស​គ្មានឈ្មោះ"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"មិន​អាចភ្ជាប់​បានទេ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"បង្ហាញ​ជម្រើស​សម្រាប់​សេចក្តីបញ្ជាក់ការបង្ហាញ​ឥត​ខ្សែ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"បង្កើនកម្រិតកំណត់ហេតុវ៉ាយហ្វាយបង្ហាញក្នុង SSID RSSI ក្នុងកម្មវិធីជ្រើស​វ៉ាយហ្វាយ"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ជ្រើសរើសអាសយដ្ឋាន MAC ដោយចៃដន្យ នៅពេល​ភ្ជាប់​បណ្តាញ Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"មានការកំណត់"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"មិនមានការកំណត់"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ទំហំ buffer របស់ Logger"</string>
diff --git a/packages/SettingsLib/res/values-kn/arrays.xml b/packages/SettingsLib/res/values-kn/arrays.xml
index 4ac8d56ff2b0..96e5fc341e89 100644
--- a/packages/SettingsLib/res/values-kn/arrays.xml
+++ b/packages/SettingsLib/res/values-kn/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"DRM ವಿಷಯಗಳಿಗೆ ಮಾತ್ರ HDCP ಪರೀಕ್ಷಿಸುವಿಕೆಯನ್ನು ಬಳಸು"</item>
<item msgid="45075631231212732">"HDCP ಪರಿಶೀಲನೆಯನ್ನು ಯಾವಾಗಲೂ ಬಳಸು"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ"</item>
+ <item msgid="1969681323976948639">"ಫಿಲ್ಟರ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</item>
+ <item msgid="8719029132154020716">"ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (ಡಿಫಾಲ್ಟ್)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml
index bb889e93a3a8..888b93fb17ad 100644
--- a/packages/SettingsLib/res/values-kn/strings.xml
+++ b/packages/SettingsLib/res/values-kn/strings.xml
@@ -38,50 +38,27 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ಮೂಲಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ನೆಟ್‌ವರ್ಕ್ ರೇಟಿಂಗ್ ಒದಗಿಸುವವರ ಮೂಲಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ಮೂಲಕ <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <!-- no translation found for connected_via_app (5571999941988929520) -->
+ <skip />
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"ಸೆಟಪ್‌ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <!-- no translation found for tap_to_sign_up (6449724763052579434) -->
+ <skip />
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ, ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"ಸೈನ್ ಇನ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ಪ್ರವೇಶ ಕೇಂದ್ರ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"ಸಂಪರ್ಕ ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ಅಮಾನ್ಯ OSU ಸರ್ವರ್ URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ಸರ್ವರ್ ಸಂಪರ್ಕ ವಿಫಲಗೊಂಡಿದೆ"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ಸರ್ವರ್ ಮೌಲ್ಯಮಾಪನ ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ಅಮಾನ್ಯ OSU ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರ"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ಪೂರೈಕೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ಪೂರೈಕೆ ಲಭ್ಯವಿಲ್ಲ"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ಅಮಾನ್ಯ OSU ಸರ್ವರ್ URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ಅನಿರೀಕ್ಷಿತ ಕಮಾಂಡ್ ಪ್ರಕಾರ"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ಅನಿರೀಕ್ಷಿತ SOAP ಸಂದೇಶ ಪ್ರಕಾರ"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP ಸಂದೇಶ ವಿನಿಮಿಯ ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ಮರುನಿರ್ದೇಶನ ಆಲಿಸುವವರು ಪ್ರಾರಂಭಿಸುವಲ್ಲ ವಿಫಲರಾಗಿದ್ದಾರೆ"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ಮರುನಿರ್ದೇಶನಕ್ಕಾಗಿ ನಿರೀಕ್ಷಿಸುತ್ತಿರುವ ಅವಧಿ ಮೀರಿದೆ"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU ಚಟುವಟಿಕೆ ಕಂಡುಬಂದಿಲ್ಲ"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ಅನಿರೀಕ್ಷಿತ SOAP ಸಂದೇಶ ಸ್ಥಿತಿ"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ಸರ್ವರ್‌ಗಾಗಿ ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ನೋಡ್ ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ಪರಿಹಾರ ಸರ್ವರ್‌ಗಾಗಿ ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ನೋಡ್ ಅನ್ನು ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ಕಾರ್ಯನೀತಿ ಸರ್ವರ್‌ಗಾಗಿ ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ನೋಡ್ ಅನ್ನು ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಹಿಂಪಡೆಯಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ಸರ್ವರ್‌ಗಾಗಿ ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಸೇರಿಸಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU ಒದಗಿಸುವವರನ್ನು ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ಸರ್ವರ್ ಮೌಲ್ಯಮಾಪನ ಮಾಡಲಾಗಿದೆ"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ಸರ್ವರ್‌ಗೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ಆರಂಭಿಕ SOAP ವಿನಿಮಯ"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ಮರುನಿರ್ದೇಶನ ಪ್ರತಿಕ್ರಿಯೆಗಾಗಿ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ಮರುನಿರ್ದೇಶನ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಸ್ವೀಕರಿಸಲಾಗಿದೆ"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ಎರಡನೇ SOAP ವಿನಿಮಯ"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ಮೂರನೇ SOAP ವಿನಿಮಯ"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಮರುಪಡೆಯಲಾಗುತ್ತಿದೆ"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"ಪೂರೈಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ"</string>
+ <!-- no translation found for osu_opening_provider (5488997661548640424) -->
+ <skip />
+ <!-- no translation found for osu_connect_failed (2187750899158158934) -->
+ <skip />
+ <!-- no translation found for osu_completing_sign_up (9037638564719197082) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_failed (7296159750352873260) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_complete (8207626049093289203) -->
+ <skip />
<string name="speed_label_very_slow" msgid="1867055264243608530">"ತುಂಬಾ ನಿಧಾನವಾಗಿದೆ"</string>
<string name="speed_label_slow" msgid="813109590815810235">"ನಿಧಾನ"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ಸರಿ"</string>
@@ -234,8 +211,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"ಎಚ್ಚರವಾಗಿರು"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ಚಾರ್ಜ್ ಮಾಡುವಾಗ ಪರದೆಯು ಎಂದಿಗೂ ನಿದ್ರಾವಸ್ಥೆಗೆ ಹೋಗುವುದಿಲ್ಲ"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ಬ್ಲೂಟೂತ್‌‌ HCI ಸ್ನೂಪ್‌ ಲಾಗ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ಬ್ಲೂಟೂತ್ ಪ್ಯಾಕೆಟ್‌ಗಳನ್ನು ಕ್ಯಾಪ್ಚರ್‌ ಮಾಡಿ. (ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಿದ ನಂತರ ಬ್ಲೂಟೂತ್ ಟಾಗಲ್ ಮಾಡಿ)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ಅನ್‌ಲಾಕ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ಬೂಟ್‌ಲೋಡರ್‌ ಅನ್‌ಲಾಕ್‌ ಮಾಡಲು ಅನುಮತಿಸಿ"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM ಅನ್‌ಲಾಕ್‌ ಮಾಡುವಿಕೆಯನ್ನು ಅನುಮತಿಸುವುದೇ?"</string>
@@ -246,7 +222,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ನೆಟ್‌ವರ್ಕಿಂಗ್"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"ವೈರ್‌ಲೆಸ್ ಪ್ರದರ್ಶನ ಪ್ರಮಾಣೀಕರಣ"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi ವೆರ್ಬೋಸ್ ಲಾಗಿಂಗ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"MAC ಯಾದೃಚ್ಛಿಕರಣವನ್ನು ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"ಮೊಬೈಲ್ ಡೇಟಾ ಯಾವಾಗಲೂ ಸಕ್ರಿಯ"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ಹಾರ್ಡ್‌ವೇರ್‌ನ ವೇಗವರ್ಧನೆಯನ್ನು ಟೆಥರಿಂಗ್ ಮಾಡಿ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ಹೆಸರುಗಳಿಲ್ಲದ ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ತೋರಿಸಿ"</string>
@@ -273,7 +248,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ವೈರ್‌ಲೆಸ್‌‌‌ ಪ್ರದರ್ಶನ ಪ್ರಮಾಣೀಕರಣಕ್ಕಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸು"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ಲಾಗಿಂಗ್ ಮಟ್ಟನ್ನು ಹೆಚ್ಚಿಸಿ, Wi‑Fi ಆಯ್ಕೆಯಲ್ಲಿ ಪ್ರತಿಯೊಂದು SSID RSSI ತೋರಿಸಿ"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ಸಂಪರ್ಕಿಸುವಾಗ MAC ವಿಳಾಸವನ್ನು ಯಾದೃಚ್ಛಿಕಗೊಳಿಸಿ"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"ಮೀಟರ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"ಮೀಟರ್ ಮಾಡಲಾಗಿಲ್ಲ"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ಲಾಗರ್ ಬಫರ್ ಗಾತ್ರಗಳು"</string>
diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml
index 7330843294bd..e2d8e0245d93 100644
--- a/packages/SettingsLib/res/values-ko/arrays.xml
+++ b/packages/SettingsLib/res/values-ko/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"DRM 콘텐츠에 대해서만 HDCP 확인 사용"</item>
<item msgid="45075631231212732">"항상 HDCP 확인 사용"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"사용 중지됨"</item>
+ <item msgid="1969681323976948639">"필터링 사용 설정됨"</item>
+ <item msgid="8719029132154020716">"사용 설정됨"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4(기본)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml
index f6409d91ddcd..d7e9488cea42 100644
--- a/packages/SettingsLib/res/values-ko/strings.xml
+++ b/packages/SettingsLib/res/values-ko/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s을(를) 통해 자동으로 연결됨"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"네트워크 평가 제공업체를 통해 자동으로 연결됨"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s을(를) 통해 연결됨"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>의 <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g>을(를) 통해 연결됨"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s을(를) 통해 사용 가능"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"설정하려면 탭하세요."</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"탭하여 가입"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"연결됨, 인터넷 사용 불가"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"인터넷 연결 없음"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"로그인 필요"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"액세스 포인트가 일시적으로 가득 참"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s을(를) 통해 연결됨"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s을(를) 통해 사용 가능"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"연결에 실패했습니다."</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"잘못된 OSU 서버 URL입니다."</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU 서버 연결에 실패했습니다."</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU 서버 인증에 실패했습니다."</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"잘못된 OSU 서버 인증서입니다."</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"프로비저닝이 취소되었습니다."</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"프로비저닝을 사용할 수 없습니다."</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"잘못된 OSU 서버 URL입니다."</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"예상치 못한 명령어 유형입니다."</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"예상치 못한 SOAP 메시지 유형입니다."</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP 메시지 교환에 실패했습니다."</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"리스너 리디렉션을 시작하지 못했습니다."</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"리디렉션을 기다리는 중에 타임아웃되었습니다."</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU 활동이 없습니다."</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"예상치 못한 SOAP 메시지 상태입니다."</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO를 찾지 못했습니다."</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA 서버의 공인 루트 노드를 찾지 못했습니다."</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"복구 서버의 공인 루트 노드를 찾지 못했습니다."</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"정책 서버의 공인 루트 노드를 찾지 못했습니다."</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"공인 루트 인증서를 가져오지 못했습니다."</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA 서버의 공인 루트 인증서를 찾지 못했습니다."</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint 설정을 추가하지 못했습니다."</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU 제공업체를 찾지 못했습니다."</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"연결 중입니다."</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"연결되었습니다."</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU 서버에 연결하는 중입니다."</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU 서버가 인증되었습니다."</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU 서버에 연결되었습니다."</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"첫 SOAP 교환"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"리디렉션 응답을 기다리는 중입니다."</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"리디렉션 응답이 수신되었습니다."</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"2번째 SOAP 교환"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"3번째 SOAP 교환"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"공인 루트 인증서를 가져오는 중입니다."</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"프로비저닝이 완료되었습니다."</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> 여는 중"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"연결할 수 없음"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"가입 완료 중…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"가입을 완료할 수 없습니다. 다시 시도하려면 탭하세요."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"가입이 완료되었습니다. 연결 중…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"매우 느림"</string>
<string name="speed_label_slow" msgid="813109590815810235">"느림"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"보통"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"화면 켜짐 상태 유지"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"충전하는 동안 화면이 꺼지지 않음"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"블루투스 HCI 스누프 로그 사용"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"블루투스 패킷을 캡처합니다. (설정 변경 후 블루투스 전환)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 잠금 해제"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"부트로더 잠금 해제 허용"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM 잠금 해제를 허용하시겠습니까?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"네트워크"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"무선 디스플레이 인증서"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi 상세 로깅 사용"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"연결된 MAC 임의 선택"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"항상 모바일 데이터 활성화"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"테더링 하드웨어 가속"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"이름이 없는 블루투스 기기 표시"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"연결할 수 없음"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"무선 디스플레이 인증서 옵션 표시"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi 로깅 수준을 높이고, Wi‑Fi 선택도구에서 SSID RSSI당 값을 표시"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi 네트워크에 연결할 때 MAC 주소 임의 선택"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"종량제"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"무제한"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"로거 버퍼 크기"</string>
diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml
index da0248dc4df1..14eb1103f9f5 100644
--- a/packages/SettingsLib/res/values-ky/arrays.xml
+++ b/packages/SettingsLib/res/values-ky/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"HDCP текшерүү DRM мазмунуна гана колдонулат"</item>
<item msgid="45075631231212732">"Ар дайым HDCP текшерүү колдонулсун"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Өчүк"</item>
+ <item msgid="1969681323976948639">"Чыпкалар иштетилди"</item>
+ <item msgid="8719029132154020716">"Иштетилди"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Демейки)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml
index c30f96c78a40..6898c61e5b85 100644
--- a/packages/SettingsLib/res/values-ky/strings.xml
+++ b/packages/SettingsLib/res/values-ky/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s аркылуу автоматтык түрдө туташты"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Тармактар рейтингинин автору аркылуу автоматтык түрдө туташты"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s аркылуу жеткиликтүү"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> аркылуу туташтырылган"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> аркылуу туташты"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s аркылуу жеткиликтүү"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Жөндөө үчүн таптаңыз"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Катталуу үчүн таптап коюңуз"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Туташып турат, Интернет жок"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Интернет жок"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Аккаунтка кирүү талап кылынат"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Байланыш түйүнүнө өтө көп түзмөк туташып турат"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s аркылуу туташты"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s аркылуу иштейт"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Туташпай койду"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU серверинин URL\'и жараксыз"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU серверине туташкан жок"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU сервери текшерилген жок"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU серверинин тастыктамасы жараксыз"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Камсыздоо жоюлду"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Камсыздоо жеткиликтүү эмес"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU серверинин URL\'и жараксыз"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Күтүлбөгөн буйрук түрү"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Күтүлбөгөн SOAP билдирүү түрү"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP билдирүүсү алмаштырылган жок"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Багыттоо тыңшагычы башталган жок"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Багыттоону күтүү мөөнөтү аяктады"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU аракети табылган жок"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Күтүлбөгөн SOAP билдирүү абалы"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO табылган жок"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA сервери үчүн ишеним негизги түйүнү табылган жок"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Оңдоо сервери үчүн ишеним негизги түйүнү табылган жок"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Саясат сервери үчүн ишеним негизги түйүнү табылган жок"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Ишеним негизги тастыктамалары алынган жок"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA сервери үчүн ишеним негизги тастыктамасы табылган жок"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint конфигурациясы кошулган жок"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU камсыздоочусу табылган жок"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Туташууда"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Туташты"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU серверине туташууда"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU сервери текшерилди"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU серверине туташты"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Баштапкы SOAP алмаштыруу"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Багыттоо жообу күтүлүүдө"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Багыттоо жообу кабыл алынды"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Экинчи SOAP алмаштыруу"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Үчүнчү SOAP алмаштыруу"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ишеним негизги тастыктамалары алынууда"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Камсыздоо аягына чыкты"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ачылууда"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Туташпай койду"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Катталуу аяктоодо…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Катталуу аягына чыккан жок. Кайра аракет кылуу үчүн таптап коюңуз."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Катталуу аягына чыкты. Туташууда…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Өтө жай"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Жай"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Жарайт"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Ойгоо туруу"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Түзмөк кубатталып жатканда экран өчпөйт"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI журналын иштетүү"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth таңгактарын алуу. (Бул жөндөөнү өзгөрткөндөн кийин Bluetooth\'ду өчүрүп / күйгүзүңүз)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM бөгөттөн чыгаруу"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Кайра жүктөгүчтү бөгөттөн чыгарууга уруксат берүү"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM бөгөттөн чыгарууга уруксатпы?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Тармактар"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Зымсыз мониторлорду тастыктамалоо"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi дайын-даректүү журналы"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Wi-Fi аркылуу туташканда башаламан MAC даректерди түзүү"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилдик Интернет иштей берет"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Модем режиминде аппараттын иштешин тездетүү"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Аталышсыз Bluetooth түзмөктөрү көрсөтүлсүн"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Туташпай койду"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Зымсыз мониторлорду тастыктамалоо параметрлери көрүнүп турат"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi тандалганда ар бир SSID үчүн RSSI көрүнүп турат"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi тармактарын туташканда MAC даректери башаламан түзүлүп турат"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Трафик ченелет"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Чектелбеген тармак"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Журнал буферинин өлчөмү"</string>
diff --git a/packages/SettingsLib/res/values-lo/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml
index 7f564949407f..d41aa6d1081f 100644
--- a/packages/SettingsLib/res/values-lo/arrays.xml
+++ b/packages/SettingsLib/res/values-lo/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"ໃຊ້ການກວດສອບ HDCP ສຳລັບເນື້ອຫາ DRM ເທົ່ານັ້ນ"</item>
<item msgid="45075631231212732">"ໃຊ້ການກວດສອບ HDCP ສະເໝີ"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"ປິດການນຳໃຊ້ແລ້ວ"</item>
+ <item msgid="1969681323976948639">"ເປີດການກັ່ນຕອງແລ້ວ"</item>
+ <item msgid="8719029132154020716">"ເປີດໃຊ້ແລ້ວ"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml
index edb6b12b9af1..acbaf701ace2 100644
--- a/packages/SettingsLib/res/values-lo/strings.xml
+++ b/packages/SettingsLib/res/values-lo/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"ເຊື່ອມຕໍ່ຜ່ານທາງ %1$s ໂດຍອັດຕະໂນມັດ"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ເຊື່ອມຕໍ່ກັບອັດຕະໂນມັດແລ້ວຜ່ານຜູ້ໃຫ້ບໍລິການຄະແນນເຄືອຂ່າຍ"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"​ເຊື່ອມຕໍ່​ຜ່ານ %1$s ​ແລ້ວ"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> ໂດຍ <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"ເຊື່ອມ​ຕໍ່​ຜ່ານ <xliff:g id="NAME">%1$s</xliff:g> ແລ້ວ"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"ມີ​ໃຫ້​ຜ່ານ %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"ແຕະເພື່ອຕັ້ງຄ່າ"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"ແຕະເພື່ອສະໝັກ"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"ເຊື່ອມຕໍ່ແລ້ວ, ບໍ່ມີອິນເຕີເນັດ"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ບໍ່ມີອິນເຕີເນັດ"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"ຈຳເປັນຕ້ອງເຂົ້າສູ່ລະບົບ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ຈຸດການເຂົ້າເຖິງເຕັມຊົ່ວຄາວ"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"ເຊື່ອມຕໍ່ຜ່ານ %1$s ແລ້ວ"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"ໃຊ້ໄດ້ຜ່ານ %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"ການເຊື່ອມຕໍ່ບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL ເຊີບເວີ OSU ບໍ່ຖືກຕ້ອງ"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"ການເຊື່ອມຕໍ່ເຊີບເວີ OSU ບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"ການກວດສອບເຊີບເວີ OSU ບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ໃບຮັບຮອງເຊີບເວີ OSU ບໍ່ຖືກຕ້ອງ"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ຍົກເລີກການຈັດຫາແລ້ວ"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ບໍ່ສາມາດໃຊ້ການຈັດຫາໄດ້"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL ເຊີບເວີ OSU ບໍ່ຖືກຕ້ອງ"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ປະເພດຄຳສັ່ງທີ່ບໍ່ຄາດຄິດ"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ປະເພດຂໍ້ຄວາມ SOAP ທີ່ບໍ່ຄາດຄິດ"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"ການແລກປ່ຽນຂໍ້ຄວາມ SOAP ບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ເລີ່ມການປ່ຽນເສັ້ນທາງຕົວຟັງບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ໝົດເວລາລໍຖ້າການປ່ຽນເສັ້ນທາງແລ້ວ"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ບໍ່ພົບການເຄື່ອນໄຫວ OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ສະຖານະຂໍ້ຄວາມ SOAP ທີ່ບໍ່ຄາດຄິດ"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"ຊອກຫາ PPS-MO ບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"ຊອກຫາ root node ທີ່ເຊື່ອຖືໄດ້ສຳລັບເຊີບເວີ AAA ບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ຊອກຫາ root node ທີ່ເຊື່ອຖືໄດ້ສຳລັບເຊີບເວີການແກ້ໄຂບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ຊອກຫາ root node ທີ່ເຊື່ອຖືໄດ້ສຳລັບເຊີບເວີນະໂຍບາຍບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ໂຫຼດໃບຮັບຮອງ root ທີ່ເຊື່ອຖືໄດ້ບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"ຊອກຫາໃບຮັບຮອງ root ທີ່ເຊື່ອຖືໄດ້ສຳລັບເຊີບເວີ AAA ບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"ເພີ່ມການຕັ້ງຄ່າ PassPoint ບໍ່ສຳເລັດ"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ຊອກຫາຜູ້ໃຫ້ບໍລິການ OSU ບໍ່ສຳເລັດ"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ກຳລັງເຊື່ອມຕໍ່"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"ເຊື່ອມຕໍ່ແລ້ວ"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"ກຳລັງເຊື່ອມຕໍ່ຫາເຊີບເວີ OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"ກວດສອບເຊີບເວີ OSU ແລ້ວ"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"ເຊື່ອມຕໍ່ຫາເຊີບເວີ OSU ແລ້ວ"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ການແລກປ່ຽນ SOAP ເບື້ອງຕົ້ນ"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ກຳລັງລໍຖ້າການຕອບກັບປ່ຽນເສັ້ນທາງ"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ໄດັຮັບການຕອບກັບປ່ຽນເສັ້ນທາງແລ້ວ"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ການແລກປ່ຽນ SOAP ທີສອງ"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ການແລກປ່ຽນ SOAP ທີສາມ"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ກຳລັງໂຫຼດໃບຮັບຮອງ root ທີ່ເຊື່ອຖືໄດ້"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"ການຈັດຫາສຳເລັດແລ້ວ"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"ກຳລັງເປີດ <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"ກຳລັງສຳເລັດການສະໝັກ…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"ບໍ່ສາມາດສຳເລັດການສະໝັກໄດ້. ແຕະເພື່ອລອງໃໝ່."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"ສະໝັກສຳເລັດແລ້ວ. ກຳລັງເຊື່ອມຕໍ່…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"ຊ້າຫຼາຍ"</string>
<string name="speed_label_slow" msgid="813109590815810235">"ຊ້າ"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ຕົກລົງ"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"ເປີດໜ້າຈໍຕະຫຼອດ"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ໜ້າຈໍຈະບໍ່ປິດໃນຂະນະທີ່ສາກໄຟຢູ່"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ບັນທຶກການເຮັດວຽກຂອງ Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ບັນທຶກແພັກເກັດ Bluetooth. (ເປີດ/ປິດ Bluetooth ຫຼັງຈາກປ່ຽນການຕັ້ງຄ່ານີ້)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"ການ​ປົດ​ລັອກ OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ອະ​ນຸ​ຍາດ​ໃຫ້​ປົດ​ລັອກ​ບູດ​ໂຫຼດ​ເດີ"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ອະ​ນຸ​ຍາດ​ການ​ປົກ​ລັອກ OEM ບໍ?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ການ​ສ້າງເຄືອຂ່າຍ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"ສະແດງການຮັບຮອງຂອງລະບົບໄຮ້ສາຍ"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"​ເປີດ​ນຳ​ໃຊ້ການ​ເກັບ​ປະ​ຫວັດ​ Verbose Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"ເຊື່ອມຕໍ່ການສຸ່ມ MAC ແລ້ວ"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"ເປີດໃຊ້ອິນເຕີເນັດມືຖືຕະຫຼອດເວລາ"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ເປີດໃຊ້ການເລັ່ງຄວາມໄວດ້ວຍຮາດແວ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ສະແດງອຸປະກອນ Bluetooth ທີ່ບໍ່ມີຊື່"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ສະແດງໂຕເລືອກສຳລັບການສະແດງການຮັບຮອງລະບົບໄຮ້ສາຍ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ເພີ່ມ​ລະ​ດັບ​ການ​ເກັບ​ປະ​ຫວັດ Wi‑Fi, ສະ​ແດງ​ຕໍ່ SSID RSSI ​ໃນ​ Wi‑Fi Picker"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ສຸ່ມທີ່ຢູ່ MAC ເມື່ອເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"ມີການວັດແທກ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"ບໍ່ໄດ້ວັດແທກ"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ຂະໜາດບັບເຟີຕົວບັນທຶກ"</string>
diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml
index b78988a44f75..af9df3e95baa 100644
--- a/packages/SettingsLib/res/values-lt/arrays.xml
+++ b/packages/SettingsLib/res/values-lt/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Taikyti HDCP tikrinimą tik DRM turiniui"</item>
<item msgid="45075631231212732">"Visada naudoti HDCP tikrinimą"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Išjungta"</item>
+ <item msgid="1969681323976948639">"Įgalinta filtruota"</item>
+ <item msgid="8719029132154020716">"Įgalinta"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (numatytoji)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml
index 09384637c3f6..89334517aa7d 100644
--- a/packages/SettingsLib/res/values-lt/strings.xml
+++ b/packages/SettingsLib/res/values-lt/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatiškai prisijungta naudojant „%1$s“"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatiškai prisijungta naudojant tinklo įvertinimo paslaugos teikėjo paslaugomis"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Prisijungta naudojant „%1$s“"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Prisijungta naudojant programą „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Pasiekiama naudojant „%1$s“"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Palieskite, kad nustatytumėte"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Palieskite, kad prisiregistruotumėte"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Prisijungta, nėra interneto"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Nėra interneto ryšio"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Reikia prisijungti"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Prieigos taškas laikinai visiškai užimtas"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Prisijungta naudojant „%1$s“"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Pasiekiama naudojant „%1$s“"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Nepavyko užmegzti ryšio"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Netinkamas OSU serverio URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Nepavyko užmegzti OSU serverio ryšio"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Nepavyko patvirtinti OSU serverio"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Netinkamas OSU serverio sertifikatas"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Aprūpinimas nutrauktas"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Negalima aprūpinti"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Netinkamas OSU serverio URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Nenumatytas komandos tipas"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Nenumatytas SOAP pranešimo tipas"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Nepavyko atlikti SOAP pranešimo mainų operacijos"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Nepavyko paleisti peradresavimo apdorojimo priemonės"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Laukiant peradresavimo baigėsi skirtasis laikas"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nerasta OSU veiklos duomenų"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Nenumatyta SOAP pranešimo būsena"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nepavyko rasti PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nepavyko rasti patikimo AAA serverio šakninio mazgo"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nepavyko rasti patikimo problemų sprendimo serverio šakninio mazgo"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nepavyko rasti patikimo politikos serverio šakninio mazgo"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Nepavyko gauti patikimų šakninių sertifikatų"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nepavyko rasti patikimo AAA serverio šakninio sertifikato"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Nepavyko pridėti „PassPoint“ konfigūracijos"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nepavyko rasti OSU teikėjo"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Sujungiama"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Sujungta"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Prisijungiama prie OSU serverio"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU serveris patvirtintas"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Prisijungta prie OSU serverio"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Pradinė SOAP mainų operacija"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Laukiama tiesioginio atsakymo"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Gautas tiesioginis atsakymas"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Antroji SOAP mainų operacija"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Trečioji SOAP mainų operacija"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Gaunami patikimi šakniniai sertifikatai"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Aprūpinta"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Atidaroma: „<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>“"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Nepavyko prisijungti"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Baigiamas prisiregistravimas…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nepavyko užbaigti prisiregistravimo. Jei norite bandyti dar kartą, palieskite."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Prisiregistravimas baigtas. Prijungiama…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Labai lėtas"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lėtas"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Gerai"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Veikti"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Kraunant ekranas niekada neveiks miego režimu"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Įgalinti „Bluetooth“ HCI šnipinėjimo žurnalą"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Fiksuoti „Bluetooth“ paketus. (Perjungti „Bluetooth“ pakeitus šį nustatymą)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OĮG atrakinimas"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Leisti atrakinti oper. sistemos paleidimo progr."</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Leisti OĮG atrakinimą?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Tinklai"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Belaidžio rodymo sertifikavimas"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Įgal. „Wi‑Fi“ daugiaž. įraš. į žurnalą"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Atsitiktinis MAC adreso parinkimas prisijungiant"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiliojo ryšio duomenys visada suaktyvinti"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Įrenginio kaip modemo naudojimo aparatinės įrangos spartinimas"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Rodyti „Bluetooth“ įrenginius be pavadinimų"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Prisijungti nepavyko"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Rodyti belaidžio rodymo sertifikavimo parinktis"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Padidinti „Wi‑Fi“ įrašymo į žurnalą lygį, rodyti SSID RSSI „Wi-Fi“ rinkiklyje"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Atsitiktinai parinkti MAC adresą prisijungiant prie „Wi‑Fi“ tinklų"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Matuojamas"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Neišmatuotas"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Registruotuvo buferio dydžiai"</string>
diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml
index 3812c2005293..cadb764387d4 100644
--- a/packages/SettingsLib/res/values-lv/arrays.xml
+++ b/packages/SettingsLib/res/values-lv/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Izmantot HDCP pārbaudi tikai DRM saturam"</item>
<item msgid="45075631231212732">"Vienmēr izmantot HDCP pārbaudi"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Atspējots"</item>
+ <item msgid="1969681323976948639">"Iespējot filtrētos"</item>
+ <item msgid="8719029132154020716">"Iespējots"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (noklusējuma)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml
index 84d42c2c394b..ac41ae082c1e 100644
--- a/packages/SettingsLib/res/values-lv/strings.xml
+++ b/packages/SettingsLib/res/values-lv/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automātiski savienots, izmantojot %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automātiski izveidots savienojums, izmantojot tīkla vērtējuma sniedzēju"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Savienots, izmantojot %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> — <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Savienojums ar <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Pieejams, izmantojot %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Pieskarieties, lai iestatītu"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Pieskarieties, lai reģistrētos"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Savienojums izveidots, nav piekļuves internetam"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Nav piekļuves internetam"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Nepieciešama pierakstīšanās"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Piekļuves punkts īslaicīgi ir pilns"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Savienojums izveidots, izmantojot %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Pieejams, izmantojot %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Neizdevās izveidot savienojumu"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nederīgs OSU servera URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Neizdevās izveidot savienojumu ar OSU serveri"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Neizdevās apstiprināt OSU serveri"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nederīgs OSU servera sertifikāts"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Nodrošinājums priekšlaikus pārtraukts"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Nodrošinājums nav pieejams"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nederīgs OSU servera URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neparedzēts komandas veids"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neparedzēts SOAP ziņojuma veids"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP ziņojumu apmaiņa neizdevās"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Neizdevās palaist novirzīšanas uztvērēju"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Gaidot novirzīšanu, iestājās noildze"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Netika konstatēta OSU aktivitāte"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neparedzēts SOAP ziņojuma statuss"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Neizdevās atrast PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Neizdevās atrast uzticamu saknes mezglu AAA serverim"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Neizdevās atrast uzticamu saknes mezglu koriģēšanas serverim"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Neizdevās atrast uzticamu saknes mezglu noteikumu serverim"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Neizdevās izgūt uzticamus saknes sertifikātus"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Neizdevās atrast uzticamu saknes sertifikātu AAA serverim"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Neizdevās pievienot PassPoint konfigurāciju"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Neizdevās atrast OSU nodrošinātāju"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Notiek savienojuma izveide"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Savienojums izveidots"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Notiek savienojuma izveide ar OSU serveri"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU serveris apstiprināts"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Izveidots savienojums ar OSU serveri"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Sākotnējā SOAP apmaiņa"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Tiek gaidīta novirzīšanas atbilde"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Saņemta novirzīšanas atbilde"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Otrā SOAP apmaiņa"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Trešā SOAP apmaiņa"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Notiek uzticamu saknes sertifikātu izgūšana"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Nodrošinājums pabeigts"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Notiek lietotnes <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> atvēršana."</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Nevarēja izveidot savienojumu"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Notiek reģistrācijas pabeigšana…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nevarēja pabeigt reģistrāciju. Pieskarieties, lai mēģinātu vēlreiz."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Reģistrācija ir pabeigta. Notiek savienojuma izveide…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Ļoti lēns"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lēns"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Labi"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Atstāt nomodā"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Uzlādes laikā ekrāns nekad nepārslēgsies miega režīmā"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Iespējot Bluetooth HCI analizētāja žurnālu"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Tvert Bluetooth paketes. (Pārslēgt Bluetooth pēc šī iestatījuma mainīšanas.)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM atbloķēšana"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Atļaut palaišanas ielādētāja atbloķēšanu"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vai atļaut OEM atbloķēšanu?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Tīklošana"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Bezvadu attēlošanas sertifikācija"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Iespējot Wi‑Fi detalizēto reģistrēšanu"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nejaušu MAC adrešu izveide savienojuma laikā"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Vienmēr aktīvs mobilo datu savienojums"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Paātrināta aparatūras darbība piesaistei"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Rādīt Bluetooth ierīces bez nosaukumiem"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nevarēja izveidot savienojumu."</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Rādīt bezvadu attēlošanas sertifikācijas iespējas"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Palieliniet Wi‑Fi reģistrēšanas līmeni; rādīt katram SSID RSSI Wi‑Fi atlasītājā."</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Izveidot nejaušas MAC adreses, izveidojot savienojumu ar Wi‑Fi tīkliem"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Maksas"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Bezmaksas"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Reģistrētāja buferu lielumi"</string>
diff --git a/packages/SettingsLib/res/values-mk/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml
index 797e0174c85f..22ff50661fc9 100644
--- a/packages/SettingsLib/res/values-mk/arrays.xml
+++ b/packages/SettingsLib/res/values-mk/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Користи HDCP проверка само за DRM содржина"</item>
<item msgid="45075631231212732">"Секогаш користи HDCP проверка"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Оневозможено"</item>
+ <item msgid="1969681323976948639">"Овозможено е филтрирано"</item>
+ <item msgid="8719029132154020716">"Овозможено"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Стандардно)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml
index 9fca9c1ce3d9..5b45977a32a6 100644
--- a/packages/SettingsLib/res/values-mk/strings.xml
+++ b/packages/SettingsLib/res/values-mk/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Автоматски поврзано преку %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Автоматски поврзано преку оператор за оценување мрежа"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Поврзано преку %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> од <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Поврзано преку <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Достапно преку %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Допрете за поставување"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Допрете за да се регистрирате"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Поврзана, нема интернет"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Нема интернет"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Потребно е најавување"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Пристапната точка привремено е преоптоварена"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Поврзано преку %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Достапно преку %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Поврзувањето беше неуспешно"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Неважечка URL-адреса на OSU-серверот"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Неуспешно поврзување со OSU-серверот"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Неуспешна проверка на OSU-серверот"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Неважечки сертификат на OSU-серверот"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Доделувањето е прекинато"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Доделувањето не е достапно"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Неважечка URL-адреса на OSU-серверот"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неочекуван тип наредба"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неочекуван тип SOAP-порака"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Неуспешна размена на SOAP-пораката"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Пренасочувањето на слушателот не успеа да се стартува"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Истечено чекање за пренасочување"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Не е најдена OSU-активност"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Неочекуван статус на SOAP-пораката"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Не успеа да се најде PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Не успеа да се најде доверлив јазол со администраторски права за серверот за AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Не успеа да се најде доверлив јазол со администраторски права за серверот за санација"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Не успеа да се најде доверлив јазол со администраторски права за серверот на правилото"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Не успеаја да се преземат доверливи сертификати за администраторски права"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Не успеа да се најде доверлив сертификат со администраторски права за серверот за AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Не успеа да се додаде конфигурација за PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Не успеа да се најде давател на OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Се поврзува"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Поврзано"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Се поврзува со OSU-серверот"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-серверот е потврден"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Поврзано со OSU-сервер"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Првична размена на SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Се чека одговор за пренасочување"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Примен е одговор за пренасочување"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Втора размена на SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Трета размена на SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Се преземаат доверливи сертификати за администраторски права"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Доделувањето е завршено"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Се отвора <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Не можеше да се поврзе"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Се завршува регистрацијата…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Не можеше да се заврши регистрацијата. Допрете за да се обидете повторно."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Регистрацијата е завршена. Се поврзува…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Многу бавна"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Бавна"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Во ред"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Остани во активен режим"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Екранот никогаш нема да биде во режим на штедење додека се полни"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Овозможи Bluetooth HCI за евиденција на пресретнување пакети"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Снимај Bluetooth-пакети. (Вклучи Bluetooth по промената на поставкава)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Отклучување со OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дозволи да се отклучи подигнувачот"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Дозволете отклучување со OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Вмрежување"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Приказ на сертификација на безжична мрежа"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Овозможи преопширно пријавување Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Поврзана MAC-рандомизација"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилниот интернет е секогаш активен"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Хардверско забрзување за врзување"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Прикажувај уреди со Bluetooth без имиња"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Не може да се поврзе"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Покажи ги опциите за безжичен приказ на сертификат"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Зголеми Wi‑Fi ниво на пријавување, прикажи по SSID RSSI во Wi‑Fi бирач"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Користи MAC-адреса по случаен избор при поврзување на Wi‑Fi мрежи"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Со ограничен интернет"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Без ограничен интернет"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Величини на меѓумеморија за дневникот"</string>
diff --git a/packages/SettingsLib/res/values-ml/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml
index f977ad281745..6444b30d2ff7 100644
--- a/packages/SettingsLib/res/values-ml/arrays.xml
+++ b/packages/SettingsLib/res/values-ml/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"DRM ഉള്ളടക്കത്തിനുമാത്രമായി HDCP പരിശോധന ഉപയോഗിക്കുക"</item>
<item msgid="45075631231212732">"എല്ലായ്‌പ്പോഴും HDCP പരിശോധന ഉപയോഗിക്കുക"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"പ്രവർത്തനരഹിതമാക്കി"</item>
+ <item msgid="1969681323976948639">"ഫിൽട്ടറിംഗ് പ്രവർത്തനക്ഷമമാക്കി"</item>
+ <item msgid="8719029132154020716">"പ്രവർത്തനക്ഷമമാക്കി"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (ഡിഫോൾട്ട്)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml
index cda04ccfac25..efe6cd6dfbc5 100644
--- a/packages/SettingsLib/res/values-ml/strings.xml
+++ b/packages/SettingsLib/res/values-ml/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s വഴി സ്വയമേവ ബന്ധിപ്പിച്ചു"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"നെറ്റ്‌വർക്ക് റേറ്റിംഗ് ദാതാവുമായി സ്വയം കണക്‌റ്റുചെയ്‌തു"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> നല്‍കുന്ന <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> മുഖേന കണക്‌റ്റ് ചെയ്‌തു"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s വഴി ലഭ്യം"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"സജ്ജീകരിക്കാന്‍ ടാപ്പ് ചെയ്യുക"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"സൈൻ അപ്പ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"കണക്റ്റ് ചെയ്‌തു, ഇന്റർനെറ്റ് ഇല്ല"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ഇന്റർനെറ്റ് ഇല്ല"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"സൈൻ ഇൻ ചെയ്യേണ്ടത് ആവശ്യമാണ്"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ആക്‌സസ് പോയിന്റ് താൽക്കാലികമായി നിറഞ്ഞിരിക്കുന്നു"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s വഴി ലഭ്യം"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"കണക്ഷന്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"അസാധുവായ OSU സെര്‍‌വര്‍ URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU സെര്‍‌വര്‍ കണക്ഷന്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU സെര്‍‌വര്‍ മൂല്യനിര്‍ണ്ണയം പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"അസാധുവായ OSU സെര്‍‌വര്‍ സര്‍ട്ടിഫിക്കറ്റ്"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"പ്രൊവിഷനിംഗ് റദ്ദാക്കി"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"പ്രൊവിഷനിംഗ് ലഭ്യമല്ല"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"അസാധുവായ OSU സെര്‍‌വര്‍ URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"അപ്രതീക്ഷിത കമാന്‍ഡ് തരം"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"അപ്രതീക്ഷിത SOAP സന്ദേശ തരം"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP സന്ദേശ എക്‌സ്‌ചേഞ്ച് പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"റീഡയറക്‌റ്റ് ചെയ്‌ത ശ്രോതാവ്‌ ആരംഭിക്കുന്നതില്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"കാലഹരണപ്പെടല്‍, റീഡയറക്‌റ്റിനായി കാത്തിരിക്കുന്നു"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU ആക്‌റ്റിവിറ്റിയൊന്നും കണ്ടെത്തിയില്ല"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"അപ്രതീക്ഷിത SOAP സന്ദേശ നില"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO കണ്ടെത്തുന്നതില്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA സെര്‍‌വറിനായുള്ള വിശ്വസനീയ റൂട്ട് നോഡ് കണ്ടെത്തുന്നതില്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"പരിഹാര സെര്‍‌വറിനുള്ള വിശ്വസനീയ റൂട്ട് നോഡ് കണ്ടെത്തുന്നതില്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"നയ സെര്‍‌വറുകള്‍‌ക്കായുള്ള വിശ്വസനീയ റൂട്ട് നോഡ് കണ്ടെത്തുന്നതില്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"വിശ്വസനീയ റൂട്ട് സര്‍ട്ടിഫിക്കറ്റുകള്‍ വീണ്ടെടുക്കുന്നതില്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA സെര്‍‌വറിനുള്ള വിശ്വസനീയ റൂട്ട് സര്‍ട്ടിഫിക്കറ്റ് കണ്ടെത്തുന്നതില്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint കോണ്‍‌ഫിഗറേഷന്‍ ചേര്‍ക്കുന്നതില്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU പ്രൊവൈഡര്‍ കണ്ടെത്തുന്നതില്‍ പരാജയപ്പെട്ടു"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"കണക്‌റ്റ് ചെയ്യുന്നു"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"കണക്‌റ്റ് ചെയ്‌തു"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU സെര്‍‌വറിലേക്ക് കണക്‌റ്റ് ചെയ്യുന്നു"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU സെര്‍‌വര്‍ സാധൂകരിച്ചു"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU സെര്‍‌വറിലേക്ക് കണക്‌റ്റ് ചെയ്‌തു"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"പ്രാരംഭ SOAP എക്‌സ്‌ചേഞ്ച്"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"റീഡയറക്‌റ്റ് ചെയ്യുന്ന പ്രതികരണത്തിനായി കാത്തിരിക്കുന്നു"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"റീഡയറക്‌റ്റ് ചെയ്‌ത പ്രതികരണം ലഭിച്ചു"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"രണ്ടാമത്തെ SOAP എക്‌സ്‌ചേഞ്ച്"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"മൂന്നാമത്തെ SOAP എക്‌സ്‌ചേഞ്ച്"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"വിശ്വസനീയ റൂട്ട് സര്‍ട്ടിഫിക്കറ്റുകള്‍ വീണ്ടെടുക്കുന്നു"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"പ്രൊവിഷനിംഗ് പൂര്‍ത്തിയായി"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> തുറക്കുന്നു"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"കണക്റ്റ് ചെയ്യാനായില്ല"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"സൈൻ അപ്പ് പൂർത്തിയാക്കുന്നു…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"സൈൻ അപ്പ് പൂർത്തിയാക്കാനായില്ല. വീണ്ടും ശ്രമിക്കാൻ ടാപ്പ് ചെയ്യുക."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"സൈൻ അപ്പ് പൂർത്തിയായി. കണക്റ്റ് ചെയ്യുന്നു…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"വളരെ കുറഞ്ഞ വേഗത്തിൽ"</string>
<string name="speed_label_slow" msgid="813109590815810235">"കുറഞ്ഞ വേഗത്തിൽ"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ശരി"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"സജീവമായി തുടരുക"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ചാർജ്ജ് ചെയ്യുമ്പോൾ സ്‌ക്രീൻ ഒരിക്കലും ഉറങ്ങില്ല"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ബ്ലൂടൂത്ത് HCI സ്‌നൂപ്പ് ലോഗ് സജീവമാക്കൂ"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth പായ്ക്കറ്റുകൾ ക്യാപ്‌ചർ ചെയ്യുക. (ഈ ക്രമീകരണം മാറ്റിയ ശേഷം Bluetooth മാറ്റുക)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM അൺലോക്കുചെയ്യൽ"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"അൺലോക്കാകാൻ ബൂട്ട്‌ലോഡറിനെ അനുവദിക്കുക"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM അൺലോക്കുചെയ്യൽ അനുവദിക്കണോ?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"നെറ്റ്‍വര്‍ക്കിംഗ്"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"വയർലെസ് ഡിസ്‌പ്ലേ സർട്ടിഫിക്കേഷൻ"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"വൈഫൈ വെർബോസ് ലോഗിംഗ് പ്രവർത്തനക്ഷമമാക്കുക"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"കണക്‌റ്റ് ചെയ്‌ത MAC ക്രമരഹിതമാക്കൽ"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"മൊബൈൽ ഡാറ്റ എല്ലായ്‌പ്പോഴും സജീവം"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ടെതറിംഗ് ഹാർഡ്‌വെയർ ത്വരിതപ്പെടുത്തൽ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"പേരില്ലാത്ത Bluetooth ഉപകരണങ്ങൾ കാണിക്കുക"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"കണക്റ്റ് ചെയ്യാനായില്ല"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"വയർലെസ് ഡിസ്‌പ്ലേ സർട്ടിഫിക്കേഷനായി ഓപ്‌ഷനുകൾ ദൃശ്യമാക്കുക"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"വൈഫൈ പിക്കറിൽ ഓരോ SSID RSSI പ്രകാരം കാണിക്കാൻ വൈഫൈ ലോഗിംഗ് നില വർദ്ധിപ്പിക്കുക"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"വൈഫൈ നെറ്റ്‌വർക്കുകളിലേക്ക് കണക്‌റ്റ് ചെയ്യുമ്പോൾ MAC വിലാസം ക്രമരഹിതമാക്കുക"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"മീറ്റർചെയ്ത"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"മീറ്റർമാപകമല്ലാത്തത്"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ലോഗർ ബഫർ വലുപ്പം"</string>
diff --git a/packages/SettingsLib/res/values-mn/arrays.xml b/packages/SettingsLib/res/values-mn/arrays.xml
index 4ed99c6b202b..35a54d2df62f 100644
--- a/packages/SettingsLib/res/values-mn/arrays.xml
+++ b/packages/SettingsLib/res/values-mn/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"HDCP шалгахыг зөвхөн DRM контентэд ашиглах"</item>
<item msgid="45075631231212732">"Байнга HDCP шалгахыг ашиглах"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Идэвхгүй болгосон"</item>
+ <item msgid="1969681323976948639">"Идэвхжүүлсэн Шүүсэн"</item>
+ <item msgid="8719029132154020716">"Идэвхжүүлсэн"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Өгөгдмөл)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml
index 46415e23fd6d..9c3db2e99717 100644
--- a/packages/SettingsLib/res/values-mn/strings.xml
+++ b/packages/SettingsLib/res/values-mn/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s-р автоматаар холбогдсон"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Сүлжээний үнэлгээ үзүүлэгчээр автоматаар холбогдох"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-р холбогдсон"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>-н <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g>-р холбогдсон"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s-р боломжтой"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Тохируулахын тулд товшино уу"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Бүртгүүлэхийн тулд товшино уу"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Холбогдсон хэдий ч интернет алга"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Интернэт алга"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Нэвтрэх шаардлагатай"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Хандах цэг түр хугацаанд дүүрсэн байна"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s-р холбогдсон"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s-р боломжтой"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Холбогдож чадсангүй"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU серверийн URL хүчингүй байна"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU серверт холбогдож чадсангүй"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU серверийг бататгаж чадсангүй"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU серверийн гэрчилгээ хүчингүй байна"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Хангамжийг тасаллаа"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Хангамж боломжгүй байна"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU серверийн URL хүчингүй байна"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Тушаалын тооцоолоогүй төрөл байна"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP мессежийн тооцоолоогүй төрөл байна"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP мессежийг солилцож чадсангүй"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Дахин чиглүүлэх сонсогчийг эхлүүлж чадсангүй"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Завсарлагыг дахин чиглүүлэхээр хүлээж байна"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU үйл ажиллагаа олдсонгүй"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP мессежийн тооцоолоогүй төлөв байна"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO-г олж чадсангүй"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA серверийн итгэмжлэлийн үндсэн зангилаа цэгийг олж чадсангүй"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Сайжруулалтын серверийн итгэмжлэлийн үндсэн зангилаа цэгийг олж чадсангүй"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Удирдамжийн серверийн итгэмжлэлийн үндсэн зангилааны цэгийг олж чадсангүй"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Итгэмжлэлийн үндсэн гэрчилгээг сэргээж чадсангүй"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA серверийн итгэмжлэлийн үндсэн гэрчилгээг олж чадсангүй"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint-н тохируулгыг нэмж чадсангүй"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU нийлүүлэгчийг олж чадсангүй"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Холбогдож байна"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Холбогдсон"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU серверт холбогдож байна"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU серверийг баталлаа"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU серверт холбогдлоо"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"SOAP-г анх удаа солилцож байна"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Дахин чиглүүлэх хариу үйлдлийг хүлээж байна"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Дахин чиглүүлэх хариу үйлдлийг хүлээн авлаа"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"SOAP-г хоёр дахь удаагаа солилцож байна"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"SOAP-г гурав дахь удаагаа солилцож байна"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Итгэмжлэлийн үндсэн гэрчилгээг сэргээж байна"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Хангаж дууслаа"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>-г нээж байна"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Холбогдож чадсангүй"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Бүртгүүлэлтийг дуусгаж байна…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Бүртгүүлэлтийг дуусгаж чадсангүй. Дахин оролдохын тулд товшино уу."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Бүртгүүлж дууслаа. Холбогдож байна…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Маш удаан"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Удаан"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ЗА"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Идэвхтэй байлгах"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Цэнэглэж байх үед дэлгэц хэзээ ч амрахгүй"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI снүүп логыг идэвхжүүлэх"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth-н багцыг авна уу. (Энэ тохиргоог өөрчилсний дараа Bluetooth-г унтрааж/асаана уу)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM түгжээ тайлагч"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Bootloader-н түгжээг тайлахыг зөвшөөрөх"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM түгжээ тайлагчийг зөвшөөрөх үү?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Сүлжээ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Утасгүй дэлгэцийн сертификат"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi дэлгэрэнгүй лог-г идэвхжүүлэх"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Холбогдсон дурын MAC хаяг үүсгэлт (Randomization)"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Мобайл дата байнга идэвхтэй"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Модем болгох хардвер хурдасгуур"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Нэргүй Bluetooth төхөөрөмжийг харуулах"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Холбогдож чадсангүй"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Утасгүй дэлгэцийн сертификатын сонголтыг харуулах"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi лог-н түвшинг нэмэгдүүлэх, Wi‑Fi Сонгогч дээрх SSID-д ногдох RSSI-г харуулах"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi сүлжээнд холбогдох үедээ шинэ дурын (random) MAC хаяг үүсгэх"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Хязгаартай"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Хязгааргүй"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Логгерын буферын хэмжээ"</string>
diff --git a/packages/SettingsLib/res/values-mr/arrays.xml b/packages/SettingsLib/res/values-mr/arrays.xml
index 9fc6970f0192..d8652bf07337 100644
--- a/packages/SettingsLib/res/values-mr/arrays.xml
+++ b/packages/SettingsLib/res/values-mr/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"केवळ DRM सामग्रीसाठी HDCP तपासणी वापरा"</item>
<item msgid="45075631231212732">"नेहमी HDCP तपासणी वापरा"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"बंद आहे"</item>
+ <item msgid="1969681323976948639">"फिल्टर केलेले सुरू केले"</item>
+ <item msgid="8719029132154020716">"सुरू केले"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (डीफॉल्ट)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 47757e48e707..a792c4f2de5e 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s द्वारे स्वयंचलितपणे कनेक्ट केले"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"नेटवर्क रेटिंग प्रदात्याद्वारे स्वयंचलितपणे कनेक्ट केले"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s द्वारे कनेक्‍ट केले"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> चे <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे कनेक्ट केले"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s द्वारे उपलब्‍ध"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"सेट करण्यासाठी टॅप करा"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"साइन अप करण्यासाठी टॅप करा"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"कनेक्‍ट केले, इंटरनेट नाही"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"इंटरनेट नाही"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"साइन इन करणे आवश्यक आहे"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"अॅक्सेस पॉइंट तात्पुरते भरलेले"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ने कनेक्‍ट केले"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s ने उपलब्‍ध"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"कनेक्शन झाले नाही"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"चुकीचे OSU सर्व्हर URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU सर्व्हर कनेक्शन करता आले नाही"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU सर्व्हर पडताळणी करता आली नाही"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"चुकीचे OSU सर्व्हर सर्टिफिकेट"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"तरतूद निरस्त केली"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"तरतूद उपलब्ध नाही"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"चुकीचे OSU सर्व्हर URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"अनपेक्षित कमांड प्रकार"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"अनपेक्षित SOAP संदेश प्रकार"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP मेसेज एक्सचेंज करता आले नाही"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"रीडिरेक्ट श्रोता सुरू करता आले नाही"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"रीडिरेक्टसाठी पाहाण्याची वेळ संपली"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"कोणतीही OSU अ‍ॅक्टिव्हिटी आढळली नाही"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"अनपेक्षित SOAP मेसेज स्थिती"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO शोधता आले नाही"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA सर्व्हरसाठी विश्वासू रूट नोड शोधता आले नाही"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"उपाय सर्व्हरसाठी विश्वासू रूट नोड शोधता आले नाही"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"धोरण सर्व्हरसाठी विश्वासू रूट नोड शोधता आले नाही"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"विश्वासू रूट सर्टिफिकेट परत मिळवता आली नाहीत"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA सर्व्हरसाठी विश्वासू रूट सर्टिफिकेट शोधता आले नाही"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint कॉन्फिगरेशन जोडता आले नाही"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU पुरवठादार शोधता आला नाही"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"कनेक्ट करत आहे"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"कनेक्ट केले"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU शी कनेक्‍ट करत आहे"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU सर्व्हर पडताळण्यात आले"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU सर्व्हरशी कनेक्ट केले"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"सुरुवातीचे SOAP एक्सचेंज"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"रीडिरेक्ट प्रतिसादासाठी वाट पाहत आहे"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"रीडिरेक्ट प्रतिसाद मिळाला"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"द्वितीय SOAP एक्‍सचेंज"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"तृतीय SOAP एक्‍सचेंज"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"विश्वासू रूट सर्टिफिकेट परत मिळवत आहे"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"तरतूद पूर्ण झाली"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> उघडत आहे"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"कनेक्ट करता आले नाही"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"साइन अप पूर्ण होत आहे…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"साइन अप पूर्ण करता आले नाही. पुन्हा प्रयत्न करण्यासाठी टॅप करा."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"साइन अप पूर्ण झाले. कनेक्ट करत आहे…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"खूप हळू"</string>
<string name="speed_label_slow" msgid="813109590815810235">"हळू"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ठीक आहे"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"सक्रिय रहा"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज होत असताना स्क्रीन कधीही निष्क्रिय होणार नाही"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटूथ HCI स्नूप लॉग सुरू करा"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ब्लूटूथ पॅकेट कॅप्चर करा (हे सेटिंग बदलल्यानंतर ब्ल्यूटूथ टॉगल करा)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM अनलॉक करणे"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"बूटलोडर अनलॉक करण्यासाठी अनुमती द्या"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलॉक करण्यास अनुमती द्यायची?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस डिस्प्ले प्रमाणीकरण"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"वाय-फाय व्हर्बोझ लॉगिंग सुरू करा"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"कनेक्ट केलेले MAC Randomization"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा नेहमी सक्रिय"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"टेदरिंग हार्डवेअर प्रवेग"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"नावांशिवाय ब्‍लूटूथ डिव्‍हाइस दाखवा"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"कनेक्ट करू शकलो नाही"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस डिस्प्ले प्रमाणिकरणाचे पर्याय दाखवा"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाय-फाय लॉगिंग स्‍तर वाढवा, वाय-फाय सिलेक्टरमध्‍ये प्रति SSID RSSI दर्शवा"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"वाय-फाय नेटवर्कशी कनेक्ट करताना MAC अ‍ॅड्रेस रँडमाइझ करा"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"मीटरने मोजलेले"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"मीटरने न मोजलेले"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"लॉगर बफर आकार"</string>
diff --git a/packages/SettingsLib/res/values-ms/arrays.xml b/packages/SettingsLib/res/values-ms/arrays.xml
index 3ecd79212c57..14729df4e44c 100644
--- a/packages/SettingsLib/res/values-ms/arrays.xml
+++ b/packages/SettingsLib/res/values-ms/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Gunakan penyemakan HDCP untuk kandungan DRM sahaja"</item>
<item msgid="45075631231212732">"Sentiasa gunakan penyemakan HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Dilumpuhkan"</item>
+ <item msgid="1969681323976948639">"Didayakan Ditapis"</item>
+ <item msgid="8719029132154020716">"Didayakan"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Lalai)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml
index 12e463c02da0..419c6ecd069a 100644
--- a/packages/SettingsLib/res/values-ms/strings.xml
+++ b/packages/SettingsLib/res/values-ms/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Disambungkan secara automatik melalui %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Disambungkan secara automatik melalui pembekal penilaian rangkaian"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Disambungkan melalui %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> oleh <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Disambungkan melalui <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Ketik untuk menyediakan"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Ketik untuk daftar"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Disambungkan, tiada Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Tiada Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Log masuk diperlukan"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Titik akses penuh buat sementara waktu"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Disambungkan melalui %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Tersedia melalui %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Sambungan gagal"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL pelayan OSU tidak sah"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Sambungan pelayan OSU gagal"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Pengesahan pelayan OSU gagal"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Sijil pelayan OSU tidak sah"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Peruntukan dihenti paksa"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Peruntukan tidak tersedia"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL pelayan OSU tidak sah"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Jenis perintah tidak dijangka"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Jenis mesej SOAP tidak dijangka"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Pertukaran mesej SOAP gagal"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Ubah hala pendengar gagal dimulakan"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tamat masa menunggu ubah hala"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Tiada aktiviti OSU yang ditemukan"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status mesej SOAP tidak dijangka"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Gagal menemukan PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Gagal menemukan nod akar amanah untuk pelayan AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Gagal menemukan nod akar amanah untuk pelayan pemulihan"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Gagal menemukan nod akar amanah untuk pelayan dasar"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Gagal mengambil sijil akar amanah"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Gagal menemukan sijil akar amanah untuk pelayan AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Gagal menambah konfigurasi PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Gagal menemukan pembekal OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Menyambung"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Disambungkan"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Menyambung ke pelayan OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Pelayan OSU disahkan"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Disambungkan ke pelayan OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Pertukaran SOAP permulaan"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Menunggu respons ubah hala"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Menerima respons ubah hala"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Pertukaran SOAP kedua"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Pertukaran SOAP ketiga"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Mengambil sijil akar amanah"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Peruntukan selesai"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Membuka <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Tidak dapat menyambung"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Menyelesaikan pendaftaran…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Tidak dapat menyelesaikan pendaftaran. Ketik untuk mencuba lagi."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Pendaftaran selesai. Menyambung…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Sangat Perlahan"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Perlahan"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Tetap berjaga"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Skrin tidak sekali-kali akan tidur semasa pengecasan"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Dayakan log intip HCI Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Tangkap paket Bluetooth. (Togol Bluetooth selepas menukar tetapan ini)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Pembukaan kunci OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Benarkan pemuat but untuk dibuka kunci"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Benarkan pembukaan kunci OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Perangkaian"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Pensijilan paparan wayarles"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Dayakan Pengelogan Berjela-jela Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Perawakan MAC Tersambung"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Data mudah alih sentiasa aktif"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Pecutan perkakasan penambatan"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Tunjukkan peranti Bluetooth tanpa nama"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Tidak dapat menyambung"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Tunjukkan pilihan untuk pensijilan paparan wayarles"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tingkatkan tahap pengelogan Wi-Fi, tunjuk setiap SSID RSSI dalam Pemilih Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Rawakkan alamat MAC apabila menyambung ke rangkaian Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Bermeter"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Tidak bermeter"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Saiz penimbal pengelog"</string>
diff --git a/packages/SettingsLib/res/values-my/arrays.xml b/packages/SettingsLib/res/values-my/arrays.xml
index 75ee0cbc2c6c..ba9c904d7cbd 100644
--- a/packages/SettingsLib/res/values-my/arrays.xml
+++ b/packages/SettingsLib/res/values-my/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"DRM အကြောင်းအရာအတွက်သာ HDCP စစ်ဆေးမည်"</item>
<item msgid="45075631231212732">"HDCP checkingအားအမြဲသုံးပါ"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"ပိတ်ထားသည်"</item>
+ <item msgid="1969681323976948639">"စစ်ထုတ်ထားသည်များကို ဖွင့်ထားသည်"</item>
+ <item msgid="8719029132154020716">"ဖွင့်ထားသည်"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (မူလ)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml
index c9896f076344..3e9e181209b4 100644
--- a/packages/SettingsLib/res/values-my/strings.xml
+++ b/packages/SettingsLib/res/values-my/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s မှတစ်ဆင့် အလိုအလျောက် ချိတ်ဆက်ထားပါသည်"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ကွန်ရက်အဆင့်သတ်မှတ်ပေးသူ မှတစ်ဆင့် အလိုအလျောက် ချိတ်ဆက်ထားပါသည်"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ၏ <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s မှတစ်ဆင့်ရနိုင်သည်"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"စနစ်ထည့်သွင်းရန် တို့ပါ"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"အကောင့်ဖွင့်ရန် တို့ပါ"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"ချိတ်ဆက်ထားသည်၊ အင်တာနက်မရှိ"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"အင်တာနက် မရှိပါ"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"လက်မှတ်ထိုးဝင်ရန် လိုအပ်သည်"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ကွန်ရက်ချိတ်ဆက်မှု ယာယီပြည့်နေသည်"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s မှတစ်ဆင့် ရနိုင်သည်"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"ချိတ်ဆက်၍ မရပါ"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"မမှန်ကန်သည့် OSU ဆာဗာ URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ဆာဗာသို့ ချိတ်ဆက်၍ မရပါ"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ဆာဗာကို အတည်ပြု၍မရပါ"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"မမှန်ကန်သည့် OSU ဆာဗာအသိအမှတ်ပြုလက်မှတ်"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ပံ့ပိုးခြင်းကို ဖျက်သိမ်းလိုက်ပါပြီ"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ပံ့ပိုးမှု မရနိုင်ပါ"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"မမှန်ကန်သည့် OSU ဆာဗာ URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"မျှော်လင့်မထားသော ကွန်မန်းအမျိုးအစား"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"မမျှော်လင့်ထားသည့် SOAP မက်ဆေ့ဂျ်အမျိုးအစား"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP မက်ဆေ့ဂျ်ကို ဖလှယ်၍ မရပါ"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"တစ်ဆင့်ပြန်ညွှန်ချက်ကို စောင့်ကြည့်သည့်စနစ်ကို စတင်၍မရပါ"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"တစ်ဆင့်ပြန်ညွှန်ချက်ကို စောင့်ရာတွင် အချိန်ကုန်သွားပါပြီ"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"မည်သည့် OSU လုပ်ဆောင်ချက်ကိုမျှ မတွေ့ပါ"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"မျှော်လင့်မထားသော SOAP မက်ဆေ့ဂျ်အခြေအနေ"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ကို ရှာမတွေ့ပါ"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ‌ဆာဗာအတွက် ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ်စက် နုတ်ကို ရှာမတွေ့ပါ"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ပြောင်း‌ရွှေ့ခြင်းဆာဗာအတွက် ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ် နုတ်ကို ရှာ‌မတွေ့ပါ"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"မူဝါဒဆာဗာအတွက် ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ် နုတ်ကို ရှာ‌မတွေ့ပါ"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ်အသိအမှတ်ပြုလက်မှတ်များကို ယူ၍မရပါ"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ဆာဗာအတွက် ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ် အသိအမှတ်ပြုလက်မှတ်ကို ရှာမတွေ့ပါ"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint စီစဉ်သတ်မှတ်ချက်ကို ထည့်၍မရပါ"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU ‌ဝန်ဆောင်မှုထောက်ပံ့သူကို ရှာမတွေ့ပါ"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ချိတ်ဆက်နေသည်"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"ချိတ်ဆက်ထားသည်"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ဆာဗာသို့ ချိတ်ဆက်နေသည်"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ဆာဗာကို အတည်ပြုထားသည်"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ဆာဗာသို့ ချိတ်ဆက်ထားသည်"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ကနဦး SOAP ဖလှယ်မှု"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"တစ်ဆင့်ပြန်ညွှန်သည့် တုံ့ပြန်ချက်ကို စောင့်နေသည်"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"တစ်ဆင့်ပြန်ညွှန်ထားသည့် တုံ့ပြန်မှုကို ရရှိထားသည်"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ဒုတိယ SOAP ဖလှယ်မှု"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"တတိယ SOAP ဖလှယ်မှု"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ယုံကြည်မှုဆိုင်ရာ အရင်းအမြစ်အသိအမှတ်ပြုလက်မှတ်များ ရယူနေသည်"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"ပံ့ပိုးပြီးပါပြီ"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ကို ဖွင့်နေသည်"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"ချိတ်ဆက်၍ မရပါ"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"အကောင့်ဖွင့်ခြင်း အပြီးသတ်နေသည်…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"အကောင့်ဖွင့်ခြင်း အပြီးသတ်၍ မရပါ။ ပြန်စမ်းကြည့်ရန် တို့ပါ။"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"အကောင့်ဖွင့်ခြင်း ပြီးပါပြီ။ ချိတ်ဆက်နေသည်…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"အလွန်နှေး"</string>
<string name="speed_label_slow" msgid="813109590815810235">"နှေး"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"ဖွင့်လျက်သား"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"အားသွင်းနေစဉ် ဖန်သားပြင်မှာဘယ်သောအခါမှ ပိတ်မည်မဟုတ်ပါ။"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ဘလူးတုသ် HCI snoop မှတ်တမ်းကို ဖွင့်ခြင်း"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ဘလူးတုသ် အတွဲများ သိမ်းယူပါ။ (ဤဆက်တင်ကို ပြောင်းပြီးသည့်အခါ ဘလူးတုသ် ဖွင့်/ပိတ် လုပ်ပါ)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM သော့ဖွင့်ခြင်း"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"အစပြုခြင်းကိရိယာအား သော့ဖွင့်ရန် ခွင့်ပြုမည်"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM သော့ဖွင့်ခြင်း ခွင့်ပြုမလား?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ချိတ်ဆက်ဆောင်ရွက်ခြင်း"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"ကြိုးမဲ့ပြသမှု အသိအမှတ်ပြုလက်မှတ်"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi Verbose မှတ်တမ်းတင်ခြင်းအား ဖွင့်မည်"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"MAC ကျပန်းပြုလုပ်မှုကို ချိတ်ဆက်ထားခြင်း"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"မိုဘိုင်းဒေတာကို အမြဲဖွင့်ထားရန်"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ဖုန်းကို မိုဒမ်အဖြစ်အသုံးပြုမှု စက်ပစ္စည်းဖြင့် အရှိန်မြှင့်တင်ခြင်း"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"အမည်မရှိသော ဘလူးတုသ်စက်ပစ္စည်းများကို ပြသရန်"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"ချိတ်ဆက်၍ မရပါ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ကြိုးမဲ့ အခင်းအကျင်း အသိအမှတ်ပြုလက်မှတ်အတွက် ရွေးချယ်စရာများပြရန်"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi မှတ်တမ်းတင်ခြင်း နှုန်းအားမြင့်ကာ၊ Wi‑Fi ရွေးရာတွင် SSID RSSI ဖြင့်ပြပါ"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi ကွန်ရက်များသို့ ချိတ်ဆက်သည့်အခါ MAC လိပ်စာ ကျပန်းပြုလုပ်ခြင်း"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"အခမဲ့ မဟုတ်ပါ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"အခမဲ့"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"မှတ်တမ်းကြားခံနယ် အရွယ်အစားများ"</string>
diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml
index 214e2d51999e..0c3b0c790df3 100644
--- a/packages/SettingsLib/res/values-nb/arrays.xml
+++ b/packages/SettingsLib/res/values-nb/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Bruk HDCP-kontroll kun for DRM-innhold"</item>
<item msgid="45075631231212732">"Bruk alltid HDCP-kontroll"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Slått av"</item>
+ <item msgid="1969681323976948639">"Filtrering er slått på"</item>
+ <item msgid="8719029132154020716">"Slått på"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (standard)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml
index 86f5347aa44e..65085e8d15d4 100644
--- a/packages/SettingsLib/res/values-nb/strings.xml
+++ b/packages/SettingsLib/res/values-nb/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatisk tilkoblet via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatisk tilkoblet via leverandør av nettverksvurdering"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Tilkoblet via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> fra <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Tilkoblet via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Tilgjengelig via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Trykk for å konfigurere"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Trykk for å registrere deg"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Tilkoblet – ingen Internett-tilgang"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Ingen internettilkobling"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Pålogging kreves"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Tilgangspunktet er midlertidig fullt"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Tilkoblet via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Tilgjengelig via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Kunne ikke koble til"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ugyldig nettadresse for OSU-tjener"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Tilkoblingen til OSU-tjeneren mislyktes"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Godkjenning av OSU-tjeneren mislyktes"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ugyldig sertifikat for OSU-tjener"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Identitetshåndtering ble avbrutt"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Identitetshåndtering er ikke tilgjengelig"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ugyldig nettadresse for OSU-tjener"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Uventet kommandotype"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Uventet SOAP-meldingstype"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Utveksling av SOAP-melding mislyktes"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Lytteren for viderekoblinger kunne ikke starte"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tidsavbrudd ved venting for viderekobling"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Fant ingen OSU-aktivitet"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Uventet status for SOAP-melding"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Kunne ikke finne PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Kunne ikke finne rotnode for klarering for AAA-tjeneren"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Kunne ikke finne rotnode for klarering for tjeneren for utbedringer"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Kunne ikke finne rotnode for klarering for tjeneren for retningslinjer"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Kunne ikke hente rotsertifikatene for klarering"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Kunne ikke finne rotsertifikat for klarering for AAA-tjeneren"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Kunne ikke legge til PassPoint-konfigurering"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Kunne ikke finne en OSU-leverandør"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Kobler til"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Tilkoblet"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Kobler til OSU-tjeneren"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-tjeneren er godkjent"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Koblet til OSU-tjener"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Første SOAP-utveksling"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Venter på viderekoblingssvar"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Har mottatt viderekoblingssvar"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Andre SOAP-utveksling"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tredje SOAP-utveksling"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Henter rotsertifikater for klarering"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Identitetshåndtering er fullført"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Åpner <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Kunne ikke koble til"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Fullfører registreringen …"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Kunne ikke fullføre registreringen. Trykk for å prøve på nytt."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registreringen er fullført. Kobler til …"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Veldig treg"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Treg"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Forbli våken"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Skjermen blir aldri svart under lading"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Slå på Bluetooth HCI snoop-logg"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Samle Bluetooth-pakker. (Slå Bluetooth av/på etter at du har endret denne innstillingen)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-opplåsing"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Tillat at oppstartsinnlasteren låses opp"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vil du tillate OEM-opplåsing?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Nettverk"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Trådløs skjermsertifisering"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktiver detaljert Wi-Fi-loggføring"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Tilfeldig MAC-adresse ved tilkobling"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata er alltid aktiv"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Maskinvareakselerasjon for internettdeling"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Vis Bluetooth-enheter uten navn"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Kunne ikke koble til"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vis alternativer for sertifisering av trådløs skjerm"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Øk Wi-Fi-loggenivå – vis per SSID RSSI i Wi-Fi-velgeren"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Angi tilfeldig MAC-adresse når du kobler til Wi-Fi-nettverk"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Med datamåling"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Uten datamåling"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Bufferstørrelser for logg"</string>
diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml
index a246d606235b..0213e9d9c3e6 100644
--- a/packages/SettingsLib/res/values-ne/arrays.xml
+++ b/packages/SettingsLib/res/values-ne/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"DRM सामग्रीको लागि मात्र HDCP जाँचको प्रयोग गर्नुहोस्"</item>
<item msgid="45075631231212732">"सधैँ HDCP जाँच प्रयोग गर्नुहोस्"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"असक्षम पारिएको छ"</item>
+ <item msgid="1969681323976948639">"फिल्टर सक्षम पारियो"</item>
+ <item msgid="8719029132154020716">"सक्षम पारिएको छ"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP १.४ (पूर्वनिर्धारित)"</item>
<item msgid="2809759619990248160">"AVRCP १.३"</item>
diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml
index eb6d9d3fea0d..16b3b070df7a 100644
--- a/packages/SettingsLib/res/values-ne/strings.xml
+++ b/packages/SettingsLib/res/values-ne/strings.xml
@@ -38,50 +38,27 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s मार्फत् स्वतः जडान गरिएको"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"नेटवर्कको दर्जा प्रदायक मार्फत स्वत: जडान गरिएको"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s मार्फत जडित"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> को <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <!-- no translation found for connected_via_app (5571999941988929520) -->
+ <skip />
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s मार्फत उपलब्ध"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"सेटअप गर्न ट्याप गर्नुहोस्"</string>
+ <!-- no translation found for tap_to_sign_up (6449724763052579434) -->
+ <skip />
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"जडान गरियो तर इन्टरनेट छैन"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"इन्टरनेटमाथिको पहुँच छैन"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"साइन इन गर्न आवश्यक छ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"पहुँचसम्बन्धी स्थान अस्थायी रूपमा भरिएको छ"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s मार्फत जडान गरियो"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s मार्फत उपलब्ध"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"जडान गर्न सकिएन"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU सर्भरको अमान्य URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU सर्भरमा जडान गर्न सकिएन"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU सर्भर प्रमाणीकरण गर्न सकिएन"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"अमान्य OSU सर्भरको प्रमाणपत्र"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"प्रावधानीकरण रद्द गरियो"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"प्रावधानीकरण गर्ने कार्य उपलब्ध छैन"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU सर्भरको अमान्य URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"अनपेक्षित आदेशको प्रकार"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"अनपेक्षित प्रकारको SOAP सन्देश"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP सन्देशको विनिमय असफल भयो"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"रिडिरेक्ट श्रोता सुरु गर्न सकिएन"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"रिडिरेक्ट गर्नका लागि प्रतीक्षा गर्ने समय सकियो"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"कुनै पनि OSU क्रियाकलाप फेला परेन"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"अनपेक्षित SOAP सन्देशको स्थिति"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO फेला पार्न सकिएन"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA सर्भरको विश्वसनीय मूल नोड फेला पार्न सकिएन"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"समाधान गर्ने काम हुने सर्भरका लागि विश्वसनीय मूल नोड फेला पार्न सकिएन"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"नीतिको सर्भरका लागि विश्वसनीय मूल नोड फेला पार्न सकिएन"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"विश्वसनीय मूल प्रमाणपत्रहरू फेला पार्न सकिएन"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA सर्भरका लागि विश्वसनीय मूल प्रमाणपत्र फेला पार्न सकिएन"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint कन्फिगुरेसन थप्न सकिएन"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"कुनै OSU प्रदायक फेला पार्न सकिएन"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"जडान गर्दै"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"जडान गरिएको छ"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU सर्भरमा जडान गर्दै"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU सर्भर प्रमाणीकरण गरियो"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU सर्भरमा जडान गरियो"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"प्रारम्भिक SOAP विनिमय"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"रिडिरेक्ट प्रतिक्रियाको प्रतिक्षा गर्दै"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"रिडिरेक्ट प्रतिक्रिया प्राप्त गरियो"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"दोस्रो SOAP विनिमय"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"तेस्रो SOAP विनिमय"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"विश्वसनीय मूल प्रमाणपत्रहरू प्राप्त गर्दै"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"प्रावधानीकरण गर्ने प्रक्रिया सम्पन्न भयो"</string>
+ <!-- no translation found for osu_opening_provider (5488997661548640424) -->
+ <skip />
+ <!-- no translation found for osu_connect_failed (2187750899158158934) -->
+ <skip />
+ <!-- no translation found for osu_completing_sign_up (9037638564719197082) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_failed (7296159750352873260) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_complete (8207626049093289203) -->
+ <skip />
<string name="speed_label_very_slow" msgid="1867055264243608530">"धेरै ढिलो"</string>
<string name="speed_label_slow" msgid="813109590815810235">"बिस्तारै"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ठिक छ"</string>
@@ -234,8 +211,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"जागा रहनुहोस्"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज गर्ने बेलामा स्क्रिन कहिल्यै सुत्दैन।"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लुटुथ HCI snoop लग सक्षम पार्नुहोस्"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ब्लुटुथका प्याकेटहरू समावेश गर्नुहोस्। (यो सेटिङ परिवर्तन गरेपछि ब्लुटुथ टगल गर्नुहोस्)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM अनलक गर्दै"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"अनलक हुन बूटलोडरलाई अनुमति दिनुहोस्"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलक गर्न अनुमति दिने?"</string>
@@ -246,7 +222,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किङ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"ताररहित प्रदर्शन प्रमाणीकरण"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi वर्बोज लग सक्षम पार्नुहोस्"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"जडान गरिएको MAC को अनियमितता"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा सधैँ सक्रिय राख्नुहोस्"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"टेदरिङको लागि हार्डवेयरको प्रवेग"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"नामकरण नगरिएका ब्लुटुथ यन्त्रहरू देखाउनुहोस्"</string>
@@ -273,7 +248,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"जडान गर्न सकिएन"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ताररहित प्रदर्शन प्रमाणीकरणका लागि विकल्पहरू देखाउनुहोस्"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi लग स्तर बढाउनुहोस्, Wi-Fi चयनकर्तामा प्रति SSID RSSI देखाइन्छ"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi नेटवर्कहरूमा जडान गर्ने बेला MAC को ठेगाना अनियमित गर्नुहोस्"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"मिटर गरिएको जडान भनी चिन्ह लगाइएको"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"मिटर नगरिएको"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"लगर बफर आकारहरू"</string>
diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml
index 4aa4eae64191..f3eeac6f699c 100644
--- a/packages/SettingsLib/res/values-nl/arrays.xml
+++ b/packages/SettingsLib/res/values-nl/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"HDCP-controle alleen voor DRM-content gebruiken"</item>
<item msgid="45075631231212732">"HDCP-controle altijd gebruiken"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Uitgeschakeld"</item>
+ <item msgid="1969681323976948639">"Gefilterd ingeschakeld"</item>
+ <item msgid="8719029132154020716">"Ingeschakeld"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (standaard)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml
index 019f225b6d21..2f8c2c2c249a 100644
--- a/packages/SettingsLib/res/values-nl/strings.xml
+++ b/packages/SettingsLib/res/values-nl/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatisch verbonden via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatisch verbonden via provider van netwerkbeoordelingen"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Verbonden via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> via <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Verbonden via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Beschikbaar via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tik om in te stellen"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tik om aan te melden"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Verbonden, geen internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Geen internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Inloggen vereist"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Toegangspunt tijdelijk vol"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Verbonden via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Beschikbaar via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Verbinding mislukt"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ongeldige URL voor OSU-server"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Verbinding met OSU-server mislukt"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Validatie van OSU-server mislukt"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ongeldig OSU-servercertificaat"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Registratie afgebroken"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Registratie niet beschikbaar"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ongeldige URL voor OSU-server"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Onverwacht opdrachttype"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Onverwacht SOAP-berichttype"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-berichtuitwisseling mislukt"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Kan listener voor omleiding niet starten"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Time-out bij wachten op omleiding"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Geen OSU-activiteit gevonden"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Onverwachte SOAP-berichtstatus"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Kan PPS-MO niet vinden"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Kan geen vertrouwde root-node vinden voor AAA-server"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Kan geen vertrouwde root-node vinden voor herstelserver"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Kan geen vertrouwde root-node vinden voor beleidsserver"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Kan vertrouwde rootcertificaten niet ophalen"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Kan geen vertrouwd rootcertificaat vinden voor AAA-server"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Kan PassPoint-configuratie niet toevoegen"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Kan geen OSU-provider vinden"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Verbinden"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Verbonden"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Verbinden met OSU-server"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-server gevalideerd"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Verbonden met OSU-server"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Eerste SOAP-uitwisseling"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Wachten op omleidingsreactie"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Omleidingsreactie ontvangen"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Tweede SOAP-uitwisseling"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Derde SOAP-uitwisseling"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Vertrouwde rootcertificaten ophalen"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Registratie voltooid"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> wordt geopend"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Kan geen verbinding maken"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Aanmelding voltooien…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Kan aanmelding niet voltooien. Tik om het opnieuw te proberen."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Aanmelding voltooid. Verbinden…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Zeer langzaam"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Langzaam"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Redelijk"</string>
@@ -191,7 +161,7 @@
<string name="tts_play_example_summary" msgid="8029071615047894486">"Een korte demonstratie van spraaksynthese afspelen"</string>
<string name="tts_install_data_title" msgid="4264378440508149986">"Spraakgegevens installeren"</string>
<string name="tts_install_data_summary" msgid="5742135732511822589">"De spraakgegevens voor spraaksynthese installeren"</string>
- <string name="tts_engine_security_warning" msgid="8786238102020223650">"Deze engine voor spraaksynthese kan mogelijk alle tekst verzamelen die wordt gesproken, waaronder persoonlijke gegevens zoals wachtwoorden en creditcardnummers. Deze engine is afkomstig van de <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>-engine. Het gebruik van deze engine voor spraaksynthese inschakelen?"</string>
+ <string name="tts_engine_security_warning" msgid="8786238102020223650">"Deze engine voor spraaksynthese kan mogelijk alle tekst verzamelen die wordt gesproken, waaronder persoonsgegevens zoals wachtwoorden en creditcardnummers. Deze engine is afkomstig van de <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>-engine. Het gebruik van deze engine voor spraaksynthese inschakelen?"</string>
<string name="tts_engine_network_required" msgid="1190837151485314743">"Deze taal heeft een werkende netwerkverbinding nodig voor tekst-naar-spraak-uitvoer."</string>
<string name="tts_default_sample_string" msgid="4040835213373086322">"Dit is een voorbeeld van spraaksynthese"</string>
<string name="tts_status_title" msgid="7268566550242584413">"Status van standaardtaal"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Stand-by"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Scherm gaat nooit uit tijdens het opladen"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Snoop-logbestand voor Bluetooth-HCI inschakelen"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth-pakketten opslaan. (Schakel Bluetooth in nadat je deze instelling hebt gewijzigd)."</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-ontgrendeling"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Toestaan dat de bootloader wordt ontgrendeld"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM-ontgrendeling toestaan?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Netwerken"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificering van draadloze weergave"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Uitgebreide wifi-logregistratie insch."</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Willekeurig MAC-adres bij verbinding"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiele data altijd actief"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwareversnelling voor tethering"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-apparaten zonder namen weergeven"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Kan geen verbinding maken"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Opties weergeven voor certificering van draadloze weergave"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Logniveau voor wifi verhogen, weergeven per SSID RSSI in wifi-kiezer"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Een willekeurig MAC-adres bij het maken van verbinding met wifi-netwerken"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Met datalimiet"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Gratis"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Logger-buffergrootten"</string>
@@ -460,7 +427,7 @@
<string name="active_input_method_subtypes" msgid="3596398805424733238">"Actieve invoermethoden"</string>
<string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Systeemtalen gebruiken"</string>
<string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Instellingen openen voor <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> mislukt"</string>
- <string name="ime_security_warning" msgid="4135828934735934248">"Deze invoermethode verzamelt mogelijk alle tekst die je typt, inclusief persoonlijke gegevens zoals wachtwoorden en creditcardnummers. De methode is afkomstig uit de app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Deze invoermethode inschakelen?"</string>
+ <string name="ime_security_warning" msgid="4135828934735934248">"Deze invoermethode verzamelt mogelijk alle tekst die je typt, inclusief persoonsgegevens zoals wachtwoorden en creditcardnummers. De methode is afkomstig uit de app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Deze invoermethode inschakelen?"</string>
<string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Opmerking: Wanneer je telefoon opnieuw is opgestart, kan deze app pas worden gestart nadat je je telefoon hebt ontgrendeld"</string>
<string name="ims_reg_title" msgid="7609782759207241443">"IMS-registratiestatus"</string>
<string name="ims_reg_status_registered" msgid="933003316932739188">"Geregistreerd"</string>
diff --git a/packages/SettingsLib/res/values-or/arrays.xml b/packages/SettingsLib/res/values-or/arrays.xml
index 15c3ee5cb94e..274136abe8c3 100644
--- a/packages/SettingsLib/res/values-or/arrays.xml
+++ b/packages/SettingsLib/res/values-or/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"କେବଳ DRM କଣ୍ଟେଣ୍ଟ ପାଇଁ HDCP ଯାଞ୍ଚ ବ୍ୟବହାର କରନ୍ତୁ"</item>
<item msgid="45075631231212732">"ସର୍ବଦା HDCP ଯାଞ୍ଚ ବ୍ୟବହାର କରନ୍ତୁ"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"ଅକ୍ଷମ କରାଯାଇଛି"</item>
+ <item msgid="1969681323976948639">"ଫିଲ୍ଟର୍‌କୁ ସକ୍ଷମ କରାଯାଇଛି"</item>
+ <item msgid="8719029132154020716">"ସକ୍ଷମ କରାଯାଇଛି"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (ଡିଫଲ୍ଟ)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml
index b1d117919e6c..95ab7bbab027 100644
--- a/packages/SettingsLib/res/values-or/strings.xml
+++ b/packages/SettingsLib/res/values-or/strings.xml
@@ -38,50 +38,27 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ମାଧ୍ୟମରେ ଅଟୋମେଟିକାଲୀ ସଂଯୁକ୍ତ"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ନେଟୱର୍କ ମୂଲ୍ୟାୟନ ପ୍ରଦାତାଙ୍କ ମାଧ୍ୟମରେ ଅଟୋମେଟିକାଲ୍ୟ ସଂଯୁକ୍ତ"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ମାଧ୍ୟମରେ ସଂଯୁକ୍ତ"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ଦ୍ଵାରା <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <!-- no translation found for connected_via_app (5571999941988929520) -->
+ <skip />
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ମାଧ୍ୟମରେ ଉପଲବ୍ଧ"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"ସେଟ୍‌ଅପ୍‌ କରିବାକୁ ଟାପ୍‌ କରନ୍ତୁ"</string>
+ <!-- no translation found for tap_to_sign_up (6449724763052579434) -->
+ <skip />
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"ସଂଯୁକ୍ତ, ଇଣ୍ଟର୍‌ନେଟ୍‌ ନାହିଁ"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"କୌଣସି ଇଣ୍ଟରନେଟ୍‌ ନାହିଁ"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"ସାଇନ୍-ଇନ୍ ଆବଶ୍ୟକ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ଆକ୍ସେସ୍ ପଏଣ୍ଟ ସାମୟିକ ଭାବେ ପୂର୍ଣ୍ଣ"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ମାଧ୍ୟମରେ ସଂଯୁକ୍ତ"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s ମାଧ୍ୟମରେ ଉପଲବ୍ଧ"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"ସଂଯୋଗ ହେଇପାରିଲା ନାହିଁ"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ଅବୈଧ OSU ସର୍ଭର୍ URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ସର୍ଭର୍ ସଂଯୋଗ ପ୍ରକ୍ରିୟା ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ସର୍ଭର୍ ବୈଧକରଣ ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ଅବୈଧ OSU ସର୍ଭର୍ ସାର୍ଟିଫିକେଟ୍"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ପ୍ରାବଧାନ ବାତିଲ୍ କରାଯାଇଛି"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ପ୍ରାବଧନ ଉପଲବ୍ଧ ନାହିଁ"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ଅବୈଧ OSU ସର୍ଭର୍ URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ଅପ୍ରତ୍ୟାଶିତ ନିର୍ଦ୍ଦେଶ ପ୍ରକାର"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ଅପ୍ରତ୍ୟାଶିତ SOAP ମେସେଜ୍ ପ୍ରକାର"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP ମେସେଜ୍ ଏକ୍ସଚେଞ୍ଜ ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ପୁନଃନିର୍ଦ୍ଦେଶ ଶ୍ରୋତା ଆରମ୍ଭ କରିବାରେ ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ସମୟ ଶେଷ ହୋଇଛି, ପୁନଃନିର୍ଦ୍ଦେଶ ପାଇଁ ଅପେକ୍ଷାରତ"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"କୌଣସି OSU ଗତିବିଧି ମିଳିଲା ନାହିଁ"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ଅପ୍ରତ୍ୟାଶିତ SOAP ମେସେଜ୍ ସ୍ଥିତି"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ସର୍ଭର୍ ପାଇଁ ଟ୍ରଷ୍ଟ ରୁଟ୍ ନୋଡ୍ ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ରିମେଡିଟେସନ୍ ସର୍ଭର୍ ପାଇଁ ଟ୍ରଷ୍ଟ ରୁଟ୍ ନୋଡ୍ ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ପଲିସି ସର୍ଭର୍ ପାଇଁ ଟ୍ରଷ୍ଟ ରୁଟ୍ ନୋଡ୍ ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ଟ୍ରଷ୍ଟ ରୁଟ୍ ସାର୍ଟିଫିକେଟ୍‌କୁ ପୁନରୁଦ୍ଧାର କରିହେଲା ନାହିଁ"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ସର୍ଭର୍ ପାଇଁ ଟ୍ରଷ୍ଟ ରୁଟ୍ ସାର୍ଟିଫିକେଟ୍ ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint କନ୍‌ଫିଗ୍‌ରେସନ୍ ଯୋଗ କରିବାରେ ବିଫଳ ହେଲା"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ଏକ OSU ପ୍ରଦାତା ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ସଂଯୋଗ କରୁଛି"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"ସଂଯୋଗ ହୋଇଛି"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ସର୍ଭର୍‌ରେ ସଂଯୋଗ କରାଯାଉଛି"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ସର୍ଭର୍‍ ବୈଧକରଣ କରାଗଲା"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ସର୍ଭର ସହ ସଂଯୋଗ କରାଯାଇଛି"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ପ୍ରାରମ୍ଭିକ SOAP ଏକ୍ସଚେଞ୍ଜ"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ପୁନଃନିର୍ଦ୍ଦେଶ ପ୍ରତିକ୍ରିୟା ପାଇଁ ଅପେକ୍ଷାରତ"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ପୁନଃନିର୍ଦ୍ଦେଶିତ ପ୍ରତିକ୍ରିୟା ପ୍ରାପ୍ତ ହୋଇଛି"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ଦ୍ଵିତୀୟ SOAP ଏକ୍ସଚେଞ୍ଜ"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ତୃତୀୟ SOAP ଏକ୍ସଚେଞ୍ଜ"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ଟ୍ରଷ୍ଟ ରୁଟ୍ ସାର୍ଟିଫିକେଟ୍‌କୁ ପୁନରୁଦ୍ଧାର କରାଯାଉଛି"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"ପ୍ରାବଧାନ ସମ୍ପୂର୍ଣ୍ଣ ହୋଇଛି"</string>
+ <!-- no translation found for osu_opening_provider (5488997661548640424) -->
+ <skip />
+ <!-- no translation found for osu_connect_failed (2187750899158158934) -->
+ <skip />
+ <!-- no translation found for osu_completing_sign_up (9037638564719197082) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_failed (7296159750352873260) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_complete (8207626049093289203) -->
+ <skip />
<string name="speed_label_very_slow" msgid="1867055264243608530">"ବହୁତ ମନ୍ଥର"</string>
<string name="speed_label_slow" msgid="813109590815810235">"କମ୍‌ ବେଗ"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ଠିକ୍‌ ଅଛି"</string>
@@ -234,8 +211,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"ଜାଗ୍ରତ ରଖନ୍ତୁ"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ଚାର୍ଜ ହେବାବେଳେ ସ୍କ୍ରୀନ୍‌ ଆଦୌ ବନ୍ଦ ହେବନାହିଁ"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ବ୍ଲୁ-ଟୂଥ୍‍‌ HCI ସ୍ନୁପ୍‌ ଲଗ୍‌ ସକ୍ଷମ କରନ୍ତୁ"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ବ୍ଲୁଟୁଥ୍‌ ପ୍ୟାକେଟ୍ କ୍ୟାପଚର୍ କରନ୍ତୁ (ଏହି ସେଟିଂ ବଦଳାଇବା ପରେ ବ୍ଲୁଟୁଥ୍‍‌କୁ ଟୋଗଲ୍ କରନ୍ତୁ)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ଅନଲକ୍‌ କରିବା"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"bootloaderକୁ ଅନ୍‌ଲକ୍‌ ହେବାର ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM ଅନଲକ୍‌ କରିବା ଅନୁମତି ଦେବେ?"</string>
@@ -246,7 +222,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ନେଟ୍‌ୱର୍କିଙ୍ଗ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"ୱାୟରଲେସ୍‌ ଡିସ୍‌ପ୍ଲେ ସର୍ଟିଫିକେଶନ୍‌"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"ୱାଇ-ଫାଇ ଭର୍ବୋସ୍‌ ଲଗିଙ୍ଗ ସକ୍ଷମ କରନ୍ତୁ"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"କନେକ୍ଟ ହୋଇଥିବା MACର ରେଣ୍ଡୋମାଇଜେଶନ୍"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"ମୋବାଇଲ୍‌ ଡାଟା ସର୍ବଦା ସକ୍ରିୟ"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ଟିଥରିଙ୍ଗ ହାର୍ଡୱେର ବେଗ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ବ୍ଲୁ-ଟୂଥ୍‍‌ ଡିଭାଇସ୍‌ଗୁଡ଼ିକୁ ନାମ ବିନା ଦେଖନ୍ତୁ"</string>
@@ -273,7 +248,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"କନେକ୍ଟ କରିହେଲା ନାହିଁ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ୱେୟାରଲେସ୍‌ ଡିସ୍‌ପ୍ଲେ ସର୍ଟିଫିକେଶନ୍‌ ପାଇଁ ବିକଳ୍ପ ଦେଖାନ୍ତୁ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ୱାଇ-ଫାଇ ଲଗିଙ୍ଗ ସ୍ତର ବଢ଼ାନ୍ତୁ, ୱାଇ-ଫାଇ ପିକର୍‌ରେ ପ୍ରତି SSID RSSI ଦେଖାନ୍ତୁ"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କଗୁଡ଼ିକ ସହିତ କନେକ୍ଟ କରିବାବେଳେ MAC ଠିକଣାକୁ ରେଣ୍ଡୋମାଇଜ୍ କରନ୍ତୁ"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"ମପାଯାଉଥିବା"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"ମପାଯାଉନଥିବା"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ଲଗର୍‌ ବଫର୍‌ ସାଇଜ୍"</string>
diff --git a/packages/SettingsLib/res/values-pa/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml
index 45d96b782013..0bc2ce6203b1 100644
--- a/packages/SettingsLib/res/values-pa/arrays.xml
+++ b/packages/SettingsLib/res/values-pa/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"ਸਿਰਫ਼ DRM ਸਮੱਗਰੀ ਲਈ HDCP ਜਾਂਚ ਦੀ ਵਰਤੋਂ ਕਰੋ"</item>
<item msgid="45075631231212732">"ਹਮੇਸਾਂ HDCP ਜਾਂਚ ਵਰਤੋ"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"ਬੰਦ"</item>
+ <item msgid="1969681323976948639">"ਫਿਲਟਰ ਕੀਤਿਆਂ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਗਿਆ"</item>
+ <item msgid="8719029132154020716">"ਚਾਲੂ"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml
index 6ba9de780907..1ddd862828d2 100644
--- a/packages/SettingsLib/res/values-pa/strings.xml
+++ b/packages/SettingsLib/res/values-pa/strings.xml
@@ -38,50 +38,27 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ਰਾਹੀਂ ਆਪਣੇ-ਆਪ ਕਨੈਕਟ ਹੋਇਆ"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ਨੈੱਟਵਰਕ ਰੇਟਿੰਗ ਪ੍ਰਦਾਨਕ ਰਾਹੀਂ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਕਨੈਕਟ ਹੋਇਆ"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ਵੱਲੋਂ <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <!-- no translation found for connected_via_app (5571999941988929520) -->
+ <skip />
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"ਸੈੱਟਅੱਪ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string>
+ <!-- no translation found for tap_to_sign_up (6449724763052579434) -->
+ <skip />
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"ਕਨੈਕਟ ਕੀਤਾ, ਕੋਈ ਇੰਟਰਨੈੱਟ ਨਹੀਂ"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ਇੰਟਰਨੈੱਟ ਨਹੀਂ"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"ਸਾਈਨ-ਇਨ ਲੋੜੀਂਦਾ ਹੈ"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ਐਕਸੈੱਸ ਪੁਆਇੰਟ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਸੰਪੂਰਨ ਰੁਝੇਂਵੇਂ ਵਿੱਚ ਹੈ"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"ਕਨੈਕਸ਼ਨ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ਅਵੈਧ OSU ਸਰਵਰ URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ਸਰਵਰ ਕਨੈਕਸ਼ਨ ਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ਸਰਵਰ ਪ੍ਰਮਾਣਿਕਤਾ ਅਸਫਲ ਰਹੀ"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ਅਵੈਧ OSU ਸਰਵਰ ਸਰਟੀਫੀਕੇਟ"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ਵਿਵਸਥਾਕਰਨ ਰੱਦ ਕੀਤਾ ਗਿਆ"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ਵਿਵਸਥਾਕਰਨ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ਅਵੈਧ OSU ਸਰਵਰ URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ਅਚਾਨਕ ਆਦੇਸ਼ ਦੀ ਕਿਸਮ"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ਅਚਾਨਕ SOAP ਦੀ ਸੁਨੇਹਾ ਕਿਸਮ"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP ਸੁਨੇਹੇ ਦਾ ਵਟਾਂਦਰਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ਰੀਡਾਇਰੈਕਟ ਲਿਸਨਰ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ਰੀਡਾਇਰੈਕਟ ਦੀ ਉਡੀਕ ਕਰਨ ਦਾ ਸਮਾਂ ਸਮਾਪਤ ਹੋਇਆ"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ਕੋਈ OSU ਸਰਗਰਮੀ ਨਹੀਂ ਮਿਲੀ"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ਅਚਾਨਕ SOAP ਦੀ ਸੁਨੇਹੇ ਦੀ ਸਥਿਤੀ"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ਨੂੰ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ਸਰਵਰ ਲਈ ਭਰੋਸੇਯੋਗ ਰੂਟ ਨੋਡ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ਰੇਮੇਡੀਅਸ਼ਨ ਸਰਵਰ ਲਈ ਭਰੋਸੇਯੋਗ ਰੂਟ ਨੋਡ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ਨੀਤੀ ਸਰਵਰ ਲਈ ਭਰੋਸੇਯੋਗ ਰੂਟ ਨੋਡ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ਭਰੋਸੇਯੋਗ ਰੂਟ ਸਰਟੀਫਿਕੇਟਾਂ ਨੂੰ ਮੁੜ-ਪ੍ਰਾਪਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ਸਰਵਰ ਲਈ ਭਰੋਸੇਯੋਗ ਰੂਟ ਸਰਟੀਫਿਕੇਟ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint ਸੰਰੂਪਣ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU ਪ੍ਰਦਾਨਕ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"ਕਨੈਕਟ ਹੈ"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ਸਰਵਰ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਗਿਆ"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ਸ਼ੁਰੂਆਤੀ SOAP ਦਾ ਵਟਾਂਦਰਾ"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ਰੀਡਾਇਰੈਕਟ ਜਵਾਬ ਲਈ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ਰੀਡਾਇਰੈਕਟ ਜਵਾਬ ਪ੍ਰਾਪਤ ਹੋਇਆ"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ਦੂਜੇ SOAP ਦਾ ਵਟਾਂਦਰਾ"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ਤੀਜੇ SOAP ਦਾ ਵਟਾਂਦਰਾ"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ਭਰੋਸੇਯੋਗ ਰੂਟ ਸਰਟੀਫਿਕੇਟਾਂ ਨੂੰ ਮੁੜ-ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"ਵਿਵਸਥਾਕਰਨ ਪੂਰਾ ਹੋਇਆ"</string>
+ <!-- no translation found for osu_opening_provider (5488997661548640424) -->
+ <skip />
+ <!-- no translation found for osu_connect_failed (2187750899158158934) -->
+ <skip />
+ <!-- no translation found for osu_completing_sign_up (9037638564719197082) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_failed (7296159750352873260) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_complete (8207626049093289203) -->
+ <skip />
<string name="speed_label_very_slow" msgid="1867055264243608530">"ਬਹੁਤ ਹੌਲੀ"</string>
<string name="speed_label_slow" msgid="813109590815810235">"ਹੌਲੀ"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ਠੀਕ ਹੈ"</string>
@@ -234,8 +211,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"ਸੁਚੇਤ ਰਹੋ"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ਸਕ੍ਰੀਨ ਚਾਰਜਿੰਗ ਦੇ ਸਮੇਂ ਕਦੇ ਵੀ ਸਲੀਪ ਨਹੀਂ ਹੋਵੇਗੀ"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"ਬਲੂਟੁੱਥ HCI ਸਨੂਪ ਲੌਗ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ਬਲੂਟੁੱਥ ਪੈਕੇਟ ਕੈਪਚਰ ਕਰੋ। (ਇਹ ਸੈਟਿੰਗ ਬਦਲਣ ਤੋਂ ਬਾਅਦ ਬਲੂਟੁੱਥ ਨੂੰ ਟੌਗਲ ਕਰੋ)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ਅਣਲਾਕ ਕਰਨਾ"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ਬੂਟਲੋਡਰ ਨੂੰ ਅਣਲਾਕ ਕੀਤੇ ਜਾਣ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ਕੀ OEM ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
@@ -246,7 +222,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ਨੈੱਟਵਰਕਿੰਗ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"ਵਾਇਰਲੈੱਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"ਵਾਈ-ਫਾਈ ਵਰਬੋਸ ਲੌਗਿੰਗ ਚਾਲੂ ਕਰੋ"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"ਬੇਤਰਤੀਬਵਾਰ ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ MAC ਪਤਾ"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"ਮੋਬਾਈਲ ਡਾਟਾ ਹਮੇਸ਼ਾਂ ਕਿਰਿਆਸ਼ੀਲ"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ਟੈਦਰਿੰਗ ਹਾਰਡਵੇਅਰ ਐਕਸੈੱਲਰੇਸ਼ਨ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ਅਨਾਮ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਦਿਖਾਓ"</string>
@@ -273,7 +248,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"ਵਾਇਰਲੈੱਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਚੋਣਾਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰੋ"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ਵਾਈ‑ਫਾਈ ਲੌਗਿੰਗ ਪੱਧਰ ਵਧਾਓ, ਵਾਈ‑ਫਾਈ Picker ਵਿੱਚ ਪ੍ਰਤੀ SSID RSSI ਦਿਖਾਓ"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਨਾਲ ਕਨੈਕਟ ਹੋਣ \'ਤੇ MAC ਪਤਾ ਬੇਤਰਤੀਬਵਾਰ ਚੁਣੋ"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"ਮੀਟਰਬੱਧ ਕੀਤਾ ਗਿਆ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"ਗੈਰ-ਮੀਟਰਬੱਧ ਕੀਤਾ ਗਿਆ"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ਲੌਗਰ ਬਫ਼ਰ ਆਕਾਰ"</string>
diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml
index 6221793dc72b..4364b38a147c 100644
--- a/packages/SettingsLib/res/values-pl/arrays.xml
+++ b/packages/SettingsLib/res/values-pl/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Użyj sprawdzania HDCP tylko w przypadku treści chronionych DRM"</item>
<item msgid="45075631231212732">"Zawsze używaj sprawdzania HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Wyłączono"</item>
+ <item msgid="1969681323976948639">"Filtrowanie włączone"</item>
+ <item msgid="8719029132154020716">"Włączono"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (domyślna)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml
index 609ed2a4e538..e2109c8c35b0 100644
--- a/packages/SettingsLib/res/values-pl/strings.xml
+++ b/packages/SettingsLib/res/values-pl/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatycznie połączono przez: %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatycznie połączono przez dostawcę ocen jakości sieci"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Połączono przez %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> – <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Połączenie przez: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Dostępne przez %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Kliknij, by skonfigurować"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Kliknij, by się zarejestrować"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Połączono, brak internetu"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Brak internetu"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Musisz się zalogować"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punkt dostępu jest tymczasowo zajęty"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Połączono przez: %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Dostępna przez: %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Nie udało się nawiązać połączenia"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nieprawidłowy adres URL serwera OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Nie udało się połączyć z serwerem OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Niepowodzenie weryfikacji przez serwer OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nieprawidłowy certyfikat serwera OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Udostępnianie zostało przerwane"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Udostępnianie niedostępne"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nieprawidłowy adres URL serwera OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Nieoczekiwany typ polecenia"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Nieoczekiwany typ komunikatu SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Nie udało się wymienić komunikatów SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Nie udało się uruchomić procesu nasłuchującego przekierowań"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Przekroczony limit czasu oczekiwania na przekierowanie"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Brak aktywności OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Nieoczekiwany stan komunikatu SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nie można znaleźć PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nie można znaleźć głównego węzła zaufania dla serwera AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nie udało się znaleźć głównego węzła zaufania dla serwera naprawczego"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nie udało się znaleźć głównego węzła zaufania dla serwera zasad"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Nie udało się pobrać głównych certyfikatów zaufania"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nie udało się znaleźć głównego certyfikatu zaufania dla serwera AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Nie można dodać konfiguracji PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nie udało się znaleźć dostawcy OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Łączę"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Połączono"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Nawiązuję połączenie z serwerem OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Pomyślna weryfikacja przez serwer OSU"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Połączono z serwerem OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Początkowa wymiana SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Czekam na odpowiedź przekierowującą"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Odebrano odpowiedź przekierowującą"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga wymiana SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Trzecia wymiana SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Pobieram główne certyfikaty zaufania"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Zakończono udostępnianie"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Otwieram: <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Nie udało się połączyć"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Kończę rejestrować…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nie udało się dokończyć rejestracji. Kliknij, by spróbować ponownie."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Rejestracja zakończona. Łączę…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Bardzo wolna"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Wolna"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Pozostaw włączony ekran"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekran nie będzie gaszony podczas ładowania telefonu"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Włącz dziennik snoop Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Przechwyć wszystkie pakiety Bluetooth (przełącz Bluetooth po zmianie tego ustawienia)."</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Zdjęcie blokady OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Zezwalaj na odblokowanie programu rozruchowego"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Zezwolić na zdjęcie blokady OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Sieci"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Wyświetlacz bezprzewodowy"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Szczegółowy dziennik Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Losowe generowanie adresu MAC przy łączeniu"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilna transmisja danych zawsze aktywna"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Akceleracja sprzętowa tetheringu"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Pokaż urządzenia Bluetooth bez nazw"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nie udało się połączyć"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaż opcje certyfikacji wyświetlacza bezprzewodowego"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zwiększ poziom rejestrowania Wi‑Fi, pokazuj według RSSI SSID w selektorze Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wygeneruj losowo adres MAC podczas łączenia z siecią Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Użycie danych jest mierzone"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Użycie danych nie jest mierzone"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Rozmiary bufora Rejestratora"</string>
diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
index b8bb5637d741..9e7d040e746b 100644
--- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Usar a verificação HDCP somente para conteúdo DRM"</item>
<item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Desativada"</item>
+ <item msgid="1969681323976948639">"Filtro ativado"</item>
+ <item msgid="8719029132154020716">"Ativada"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (padrão)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml
index ef9e61d47451..19e22e420026 100644
--- a/packages/SettingsLib/res/values-pt-rBR/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectado automaticamente via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectado automaticamente via provedor de avaliação de rede"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Conectado via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Disponível via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Toque para configurar"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Toque para se inscrever"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conectada, sem Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Sem Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"É necessário fazer login"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Conectado via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Disponível via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Falha na conexão"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL do servidor OSU inválido"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Falha na conexão do servidor OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Falha ao validar o servidor OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado do servidor OSU inválido"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisionamento cancelado"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisionamento indisponível"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL do servidor OSU inválido"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensagem SOAP inesperado"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Falha na troca de mensagens SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Falha ao iniciar o listener de redirecionamento"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tempo limite esgotado ao aguardar redirecionamento"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nenhuma atividade OSU encontrada"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status de mensagem SOAP inesperado"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Não foi possível encontrar o PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Não foi possível encontrar um nó raiz confiável para o servidor AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Não foi possível encontrar um nó raiz confiável para o servidor de atualizações"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Não foi possível encontrar um nó raiz confiável para o servidor da política"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Falha ao recuperar certificados raiz confiáveis"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Não foi possível encontrar um certificado raiz confiável para o servidor AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Falha ao adicionar a configuração do PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Falha ao localizar um provedor OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Conectando"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectado"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Conectando-se ao servidor OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Conectado ao servidor OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Troca de SOAP inicial"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Aguardando resposta de redirecionamento"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirecionamento recebida"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segunda troca de SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terceira troca de SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recuperando certificados raiz confiáveis"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisionamento concluído"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Abrindo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Não foi possível conectar"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Concluindo inscrição…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscrição concluída. Conectando…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Permanecer ativo"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"A tela nunca entrará em suspensão enquanto estiver carregando."</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ativar registro de rastreamento Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar pacotes de Bluetooth. Ative o Bluetooth depois de alterar essa configuração."</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueio de OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que o bootloader seja desbloqueado"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permitir desbloqueio de OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de Display sem fio"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro extenso de Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Escolha aleatória de MAC conectado"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware de tethering"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Não foi possível conectar"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Escolher o endereço MAC de forma aleatória quando estiver conectado a redes Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Limitada"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Ilimitada"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos de buffer de logger"</string>
diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
index b5803178fbaa..ac170caba375 100644
--- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Utilizar a verificação HDCP para conteúdo DRM apenas"</item>
<item msgid="45075631231212732">"Utilizar sempre a verificação HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Desativado"</item>
+ <item msgid="1969681323976948639">"Filtrado ativado"</item>
+ <item msgid="8719029132154020716">"Ativado"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (predefinição)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml
index bb1dcc47160f..1f1072c08ffa 100644
--- a/packages/SettingsLib/res/values-pt-rPT/strings.xml
+++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Ligado automaticamente através de %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Ligado automaticamente através do fornecedor de classificação de rede"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Ligado através de %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Ligado via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Disponível através de %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Toque para configurar"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Toque para se inscrever"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Ligado, sem Internet."</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Sem Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"É necessário iniciar sessão"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Ligado através de %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Disponível através de %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Falha na ligação"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL do servidor OSU inválido"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Falha ao ligar ao servidor OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Falha ao validar o servidor OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado do servidor OSU inválido"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Aprovisionamento interrompido"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Aprovisionamento não disponível"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL do servidor OSU inválido"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensagem SOAP inesperado"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Falha ao trocar mensagens SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Falha ao iniciar o redirecionamento do listener"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"O tempo limite foi excedido ao aguardar o redirecionamento"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nenhuma atividade do OSU encontrada"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estado da mensagem SOAP inesperado"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Falha ao localizar o PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Falha ao localizar um nó raiz fidedigno para o servidor AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Falha ao localizar um nó raiz fidedigno para o servidor de soluções"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Falha ao localizar um nó raiz fidedigno para o servidor de políticas"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Falha ao obter certificados de raiz fidedignos"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Falha ao localizar um certificado de raiz fidedigno para o servidor AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Falha ao adicionar a configuração PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Falha ao localizar um fornecedor de OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"A ligar…"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ligado"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"A ligar ao servidor OSU…"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Ligado ao servidor OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Troca SOAP inicial"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"A aguardar a resposta de redirecionamento…"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirecionamento recebida"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segunda troca SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terceira troca SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"A obter certificados de raiz fidedignos…"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Aprovisionamento concluído"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"A abrir <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Não foi possível estabelecer ligação"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"A concluir a inscrição…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscrição concluída. A ligar…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Manter ativo"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"O ecrã nunca entrará em suspensão durante o carregamento"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ativar registo de monit. Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar os pacotes Bluetooth (ative/desative o Bluetooth após alterar esta definição)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueio de OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir o desbloqueio do carregador de arranque"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Pretende permitir o desbloqueio de OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de display sem fios"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar o registo verboso de Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Seleção aleatória do MAC ligado"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware para ligação (à Internet) via telemóvel"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Não foi possível estabelecer ligação"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções da certificação de display sem fios"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de reg. de Wi-Fi, mostrar por RSSI de SSID no Selec. de Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Selecionar aleatoriamente o endereço MAC quando estabelecer ligação a redes Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Acesso limitado"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Acesso ilimitado"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos da memória intermédia do registo"</string>
diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml
index b8bb5637d741..9e7d040e746b 100644
--- a/packages/SettingsLib/res/values-pt/arrays.xml
+++ b/packages/SettingsLib/res/values-pt/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Usar a verificação HDCP somente para conteúdo DRM"</item>
<item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Desativada"</item>
+ <item msgid="1969681323976948639">"Filtro ativado"</item>
+ <item msgid="8719029132154020716">"Ativada"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (padrão)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml
index ef9e61d47451..19e22e420026 100644
--- a/packages/SettingsLib/res/values-pt/strings.xml
+++ b/packages/SettingsLib/res/values-pt/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectado automaticamente via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectado automaticamente via provedor de avaliação de rede"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Conectado via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Disponível via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Toque para configurar"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Toque para se inscrever"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conectada, sem Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Sem Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"É necessário fazer login"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Conectado via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Disponível via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Falha na conexão"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL do servidor OSU inválido"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Falha na conexão do servidor OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Falha ao validar o servidor OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado do servidor OSU inválido"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisionamento cancelado"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisionamento indisponível"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL do servidor OSU inválido"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensagem SOAP inesperado"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Falha na troca de mensagens SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Falha ao iniciar o listener de redirecionamento"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tempo limite esgotado ao aguardar redirecionamento"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nenhuma atividade OSU encontrada"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status de mensagem SOAP inesperado"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Não foi possível encontrar o PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Não foi possível encontrar um nó raiz confiável para o servidor AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Não foi possível encontrar um nó raiz confiável para o servidor de atualizações"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Não foi possível encontrar um nó raiz confiável para o servidor da política"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Falha ao recuperar certificados raiz confiáveis"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Não foi possível encontrar um certificado raiz confiável para o servidor AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Falha ao adicionar a configuração do PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Falha ao localizar um provedor OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Conectando"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectado"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Conectando-se ao servidor OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Conectado ao servidor OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Troca de SOAP inicial"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Aguardando resposta de redirecionamento"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirecionamento recebida"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segunda troca de SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terceira troca de SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recuperando certificados raiz confiáveis"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisionamento concluído"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Abrindo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Não foi possível conectar"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Concluindo inscrição…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscrição concluída. Conectando…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Permanecer ativo"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"A tela nunca entrará em suspensão enquanto estiver carregando."</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ativar registro de rastreamento Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar pacotes de Bluetooth. Ative o Bluetooth depois de alterar essa configuração."</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueio de OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que o bootloader seja desbloqueado"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permitir desbloqueio de OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de Display sem fio"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro extenso de Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Escolha aleatória de MAC conectado"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware de tethering"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Não foi possível conectar"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Escolher o endereço MAC de forma aleatória quando estiver conectado a redes Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Limitada"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Ilimitada"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos de buffer de logger"</string>
diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml
index c7d0e2f36d10..28ae1616c204 100644
--- a/packages/SettingsLib/res/values-ro/arrays.xml
+++ b/packages/SettingsLib/res/values-ro/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Utilizează verificarea HDCP numai pentru conținut DRM"</item>
<item msgid="45075631231212732">"Utilizează întotdeauna verificarea HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Dezactivat"</item>
+ <item msgid="1969681323976948639">"Este activat Filtrat"</item>
+ <item msgid="8719029132154020716">"Activat"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (prestabilit)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml
index a1298c9e1d92..7fa75a8862cf 100644
--- a/packages/SettingsLib/res/values-ro/strings.xml
+++ b/packages/SettingsLib/res/values-ro/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectată automat prin %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectată automat prin furnizor de evaluări ale rețelei"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Conectată prin %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de la <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Conectat prin <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Disponibilă prin %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Atingeți pentru a configura"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Atingeți pentru a vă înscrie"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conectată, fără internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Fără conexiune la internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Trebuie să vă conectați"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punctul de acces este temporar plin"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Conectată prin %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Disponibilă prin %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Conectare eșuată"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL invalid pentru serverul OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Conectarea la serverul OSU a eșuat"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Validarea serverului OSU a eșuat"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificat nevalid pentru serverul OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Asigurarea accesului a fost întreruptă"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Asigurarea accesului nu este disponibilă"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL invalid pentru serverul OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tip de comandă neprevăzut"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tip de mesaj SOAP neprevăzut"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Schimbul de mesaje SOAP a eșuat"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"„Listenerul” redirecționării nu a pornit"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"A expirat așteptând redirecționarea"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nu s-a găsit nicio activitate OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status mesaj SOAP neprevăzut"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nu a fost găsit PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Certificatul rădăcină de certificare pentru serverul AAA nu a fost găsit"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nodul rădăcină de certificare pentru serverul de remediere nu a fost găsit"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nodul rădăcină de certificare pentru serverul de politici nu a fost găsit"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Certificatele rădăcină de certificare nu s-au putut prelua"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Certificatul rădăcină de certificare pentru serverul AAA nu a fost găsit"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Configurarea PassPoint nu a fost adăugată"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nu a fost găsit niciun furnizor OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Se conectează"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectat"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Se conectează la serverul OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU validat"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Conectat la serverul OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Schimb SOAP inițial"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Se așteaptă răspunsul redirecționării"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Răspunsul redirecționat a fost primit"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Al doilea schimb SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Al treilea schimb SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Se preiau certificatele rădăcină de certificare"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Asigurarea accesului finalizată"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Se deschide <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Nu s-a putut conecta"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Se finalizează înscrierea…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nu s-a putut finaliza înscrierea. Atingeți pentru a încerca din nou."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Înscrierea a fost finalizată. Se conectează…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Foarte lentă"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Lentă"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Bine"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Activ permanent"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Ecranul nu va fi inactiv pe durata încărcării"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activați jurnalul de examinare HCI Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Înregistrați pachetele Bluetooth. (Comutați Bluetooth după modificarea setării)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Deblocarea OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permiteți deblocarea bootloaderului"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permiteți deblocarea OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Conectare la rețele"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certificare Ecran wireless"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Înregistrare prin Wi-Fi de volume mari de date"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Afișare aleatorie a dispozitivului MAC conectat"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Date mobile permanent active"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Accelerare hardware pentru tethering"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Afișați dispozitivele Bluetooth fără nume"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nu s-a putut conecta"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afișați opțiunile pentru certificarea Ecran wireless"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Măriți niv. de înr. prin Wi‑Fi, afișați în fcț. de SSID RSSI în Selectorul Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Afișează aleatoriu adresa MAC când te conectezi la rețele Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Contorizată"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Necontorizată"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Dimensiunile tamponului jurnalului"</string>
diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml
index bf27fc975845..cca30fb96422 100644
--- a/packages/SettingsLib/res/values-ru/arrays.xml
+++ b/packages/SettingsLib/res/values-ru/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Использовать проверку HDCP только для DRM-контента"</item>
<item msgid="45075631231212732">"Всегда использовать проверку HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Отключено"</item>
+ <item msgid="1969681323976948639">"Включены фильтры"</item>
+ <item msgid="8719029132154020716">"Включено"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (по умолчанию)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml
index c71d29b90fba..6cdfd3c3f318 100644
--- a/packages/SettingsLib/res/values-ru/strings.xml
+++ b/packages/SettingsLib/res/values-ru/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Автоматически подключено к %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Автоматически подключено через автора рейтинга сетей"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Подключено к %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Подключено через приложение \"<xliff:g id="NAME">%1$s</xliff:g>\"."</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Доступно через %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Нажмите, чтобы настроить"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Нажмите, чтобы зарегистрироваться"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Подключено, без доступа к Интернету"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Нет подключения к Интернету"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Требуется выполнить вход."</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"К точке доступа подключено слишком много устройств"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Подключено к %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Доступно через %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ошибка подключения"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Недействительный URL сервера OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Не удалось подключиться к серверу OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Не удалось выполнить проверку сервера OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Недействительный сертификат сервера OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Синхронизация прервана"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Синхронизация недоступна"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Недействительный URL сервера OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неизвестный тип команды"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неизвестный тип сообщения SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Не удалось провести обмен сообщениями SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Не удалось запустить приемник обратных вызовов"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Превышено время ожидания"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Действий OSU не обнаружено"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Неизвестный статус сообщения SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Не удалось найти PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Не удалось найти доверенный корневой узел сервера AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Не удалось найти доверенный корневой узел сервера исправлений"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Не удалось найти доверенный корневой узел сервера правил"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Не удалось получить доверенные корневые сертификаты"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Не удалось найти доверенный корневой сертификат для сервера AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Не удалось добавить настройки Passpoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Не удалось найти поставщика OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Подключение…"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Подключено"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Подключение к серверу OSU…"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Сервер OSU проверен"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Соединение с сервером OSU установлено"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Первый обмен по SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Ожидание ответа для перенаправления…"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Ответ получен"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Второй обмен по SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Третий обмен по SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Получение доверенных корневых сертификатов…"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Синхронизация завершена"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Открытие <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>…"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Не удалось подключиться."</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Завершение регистрации…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Не удалось завершить регистрацию. Нажмите, чтобы повторить попытку."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Регистрация завершена. Подключение…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Очень медленная"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Медленная"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Не выключать экран"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Во время зарядки экран будет всегда включен"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Включить журнал HCI Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Сохранять все пакеты Bluetooth (перезапустите Bluetooth после изменения этой настройки)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Заводская разблокировка"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Разрешить разблокировку загрузчика ОС"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Разрешить заводскую разблокировку?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Сети"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Серт. беспроводн. мониторов"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Подробный журнал Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Создание случайных MAC-адресов при подключении по Wi-Fi"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Не отключать мобильный Интернет"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Аппаратное ускорение в режиме модема"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Показывать Bluetooth-устройства без названий"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ошибка подключения"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показывать параметры сертификации беспроводных мониторов"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"При выборе Wi‑Fi указывать в журнале RSSI для каждого SSID"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Генерировать случайные MAC-адреса при подключении к сетям Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Сеть с тарификацией трафика"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Сеть без тарификации трафика"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Размер буфера журнала"</string>
diff --git a/packages/SettingsLib/res/values-si/arrays.xml b/packages/SettingsLib/res/values-si/arrays.xml
index 6d8e15b3790c..4cd0b60f436a 100644
--- a/packages/SettingsLib/res/values-si/arrays.xml
+++ b/packages/SettingsLib/res/values-si/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"DRM අන්තර්ගත සඳහා පමණක් HDCP පරික්ෂාව භාවිතා කරන්න"</item>
<item msgid="45075631231212732">"සැමවිටම HDCP පිරික්සුම භාවිතා කරන්න"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"අබලයි"</item>
+ <item msgid="1969681323976948639">"සබල පෙරහන් කළ"</item>
+ <item msgid="8719029132154020716">"සබලයි"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (පෙරනිමි)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml
index 1daffd92f155..f85289c64527 100644
--- a/packages/SettingsLib/res/values-si/strings.xml
+++ b/packages/SettingsLib/res/values-si/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s හරහා ස්වයංක්‍රියව සම්බන්ධ විය"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ජාල ශ්‍රේණිගත සපයන්නා හරහා ස්වයංක්‍රියව සම්බන්ධ විය"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s හරහා සම්බන්ධ විය"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> මඟින් <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> හරහා සම්බන්ධයි"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s හරහා ලබා ගැනීමට හැකිය"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"පිහිටුවීමට තට්ටු කරන්න"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"ලියාපදිංචි වීමට තට්ටු කරන්න"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"සම්බන්ධයි, අන්තර්ජාලය නැත"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"අන්තර්ජාලය නැත"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"පිරීම අවශ්‍යයි"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ප්‍රවේශ ලක්ෂ්‍ය තාවකාලිකව පිරී ඇත"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s හරහා සම්බන්ධ විය"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s හරහා ලබා ගැනීමට හැකිය"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"සබැඳුම අසමත් විය"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"අවලංගු OSU සේවාදායක URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU සේවාදායක සබැඳුම අසමත් විය"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU සේවාදායකය වලංගුකරණය අසමත් විය"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"අවලංගු OSU සේවාදායක සහතිකය"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ප්‍රතිපාදනය රෝධනය කෙරිණි"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ප්‍රතිපාදනය නොමැත"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"අවලංගු OSU සේවාදායක URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"අනපේක්ෂිත විධාන වර්ගය"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"අනපේක්ෂිත SOAP පණිවිඩ වර්ගය"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP පණිවිඩ හුවමාරුව අසමත් විය"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ප්‍රතියොමු සවන් දෙන්නා ඇරඹීමට අසමත් විය"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ප්‍රතියොමුව සඳහා රැඳීම් කාලය ඉක්මවා ඇත"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU ක්‍රියාකාරකමක් හමු නොවිණි"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"අනපේක්ෂිත SOAP පණිවිඩ තත්ත්වය"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO සොයා ගැනීමට අසමත් විය"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA සේවාදායකය සඳහා විශ්වාසී මූල නෝඩුව සොයා ගැනීමට අසමත් විය"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ප්‍රතිව්‍යවධාන සේවාදායකය සඳහා විශ්වාසී මූල නෝඩුව සොයා ගැනීමට අසමත් විය"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ප්‍රතිපත්ති සේවාදායකය සඳහා විශ්වාසී මූල නෝඩුව සොයා ගැනීමට අසමත් විය"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"විශ්වාසී මූල සහතික ලබා ගැනීමට අසමත් විය"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA සේවාදායකය සඳහා විශ්වාසී මූල සහතිකය සොයා ගැනීමට අසමත් විය"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint වින්‍යාසය එක් කිරීමට අසමත් විය"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU සපයන්නෙකු සොයා ගැනීමට අසමත් විය"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"සබැඳෙමින්"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"සම්බන්ධයි"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU සේවාදායකයට සබැඳෙමින්"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU සේවාදායකය වලංගු කෙරිණි"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU සේවාදායකයට සම්බන්ධිතයි"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ආරම්භක SOAP හුවමාරුව"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ප්‍රතියොමු ප්‍රතිචාරය සඳහා රැඳෙමින්"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ප්‍රතියොමු ප්‍රතිචාරය ලැබුණි"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"දෙවන SOAP හුවමාරුව"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"තුන්වන SOAP හුවමාරුව"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"විශ්වාසී මූල සහතික ලබා ගනිමින්"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"ප්‍රතිපාදනය සම්පූර්ණයි"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> විවෘත කරමින්"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"සබැඳීමට නොහැකි විය"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"ලියාපදිංචිය සම්පූර්ණ කරමින්…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"ලියාපදිංචිය සම්පූර්ණ කළ නොහැකි විය. නැවත උත්සාහ කිරීමට තට්ටු කරන්න."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"ලියාපදිංචිය සම්පූර්ණයි. සබැඳෙමින්…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"ඉතා මන්දගාමී"</string>
<string name="speed_label_slow" msgid="813109590815810235">"මන්දගාමී"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"හරි"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"අවදියෙන් සිටින්න"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ආරෝපණය වන අතර තුර තීරය නිද්‍රාවට නොයනු ඇත"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"බ්ලූටූත් HCI ස්නුප් ලොගය සබල කරන්න"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"බ්ලූටූත් පැකට් ග්‍රහණ කරන්න. (මෙම සැකසීම වෙනස් කළ පසු බ්ලූටූත් ටොගල් කරන්න)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM අඟුල ඇරීම"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"බුට්ලොඩරයට අගුළු ඇර තිබීමට ඉඩ දෙන්න"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM අඟුල ඇරීමට ඉඩ දෙන්න?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"ජාලකරණය"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"නොරැහැන් සංදර්ශක සහතිකය"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"විස්තරාත්මක Wi‑Fi ලොග් කිරීම සබල කරන්න"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"සම්බන්ධිත MAC සසම්භාවීකරණය"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"ජංගම දත්ත සැමවිට ක්‍රියාකාරීය"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ටෙදරින් දෘඪාංග ත්වරණය"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"නම් නොමැති බ්ලූටූත් උපාංග පෙන්වන්න"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"සම්බන්ධ වීමට නොහැකි විය"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"නොරැහැන් සංදර්ශක සහතිකය සඳහා විකල්ප පෙන්වන්න"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ලොග් මට්ටම වැඩි කරන්න, Wi‑Fi තෝරනයෙහි SSID RSSI අනුව පෙන්වන්න"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi-Fi ජාලවලට සම්බන්ධ වීමේදී MAC ලිපිනය සසම්භාවීකරණය"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"මනිනු ලැබේ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"මනින්නේ නැත"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ලෝගයේ අන්තරාවක ප්‍රමාණය"</string>
diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml
index dfa6994b5a66..8a81a943b94e 100644
--- a/packages/SettingsLib/res/values-sk/arrays.xml
+++ b/packages/SettingsLib/res/values-sk/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Použiť kontrolu HDCP len pre obsah DRM"</item>
<item msgid="45075631231212732">"Vždy používať kontrolu HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Deaktivované"</item>
+ <item msgid="1969681323976948639">"Aktivované filtrované"</item>
+ <item msgid="8719029132154020716">"Aktivované"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (predvolené)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml
index e6047bbfdc10..eae5be7952c3 100644
--- a/packages/SettingsLib/res/values-sk/strings.xml
+++ b/packages/SettingsLib/res/values-sk/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automaticky pripojené prostredníctvom %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automaticky pripojené prostredníctvom poskytovateľa hodnotenia siete"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Pripojené prostredníctvom %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> – <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Pripojené prostredníctvom siete <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"K dispozícii prostredníctvom %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Klepnutím nastavíte"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Prihláste sa klepnutím"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Pripojené, žiadny internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Žiadny internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Vyžaduje sa prihlásenie"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Prístupový bod je dočasne plný"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Pripojené prostredníctvom operátora %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"K dispozícii prostredníctvom operátora %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Nepodarilo sa pripojiť"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Neplatná webová adresa servera OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Pripojenie servera OSU zlyhalo"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Server OSU sa nepodarilo overiť"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Neplatný certifikát servera OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Údržba bolo prerušená"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Údržba nie je k dispozícii"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Neplatná webová adresa servera OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočakávaný typ príkazu"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočakávaný typ správy SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Výmena správ SOAP sa nepodarila"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Prijímač presmerovania sa nespustil"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Časový limit čakania na presmerovanie vypršal"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nenašla sa žiadna aktivita OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neočakávaný stav správy SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Objekt PPS-MO sa nenašiel"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nepodarilo sa nájsť dôveryhodný koreňový uzol pre server AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nepodarilo sa nájsť dôveryhodný koreňový uzol pre server opráv"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nepodarilo sa nájsť dôveryhodný koreňový uzol pre server pravidiel"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Nepodarilo sa načítať dôveryhodné koreňové certifikáty"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nepodarilo sa nájsť dôveryhodný koreňový certifikát pre server AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Konfiguráciu PassPoint sa nepodarilo pridať"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Poskytovateľ OSU sa nenašiel"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Pripája sa"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Pripojené"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Pripája sa k serveru OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU bol overený"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Pripojené k serveru OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Počiatočná výmena SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čaká sa na odpoveď presmerovania"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Bola prijatá odpoveď presmerovania"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druhá výmena SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tretia výmena SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Načítavajú sa dôveryhodné koreňové certifikáty"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Poskytovanie bolo dokončené"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Otvára sa <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Nepodarilo sa pripojiť"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Dokončuje sa registrácia…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registráciu sa nepodarilo dokončiť. Klepnutím to skúste znova."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registrácia je dokončená. Pripája sa…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Veľmi nízka"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Nízka"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Nevypínať obrazovku"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Obrazovka sa pri nabíjaní neprepne do režimu spánku"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Povoliť denník Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Zachytávať pakety rozhrania Bluetooth (Prepnúť Bluetooth po zmene tohto nastavenia.)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Odblokovať OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Povoliť odblokovanie ponuky bootloader"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Povoliť odblokovanie OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Siete"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certifikácia bezdrôtového zobrazenia"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Podrobné denníky Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Randomizácia pripojených adries MAC"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilné dáta ponechať vždy aktívne"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardvérová akcelerácia tetheringu"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Zobrazovať zariadenia Bluetooth bez názvov"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nepodarilo sa pripojiť"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Zobraziť možnosti certifikácie bezdrôtového zobrazenia"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšiť úroveň denníkov Wi‑Fi, zobrazovať podľa SSID RSSI pri výbere siete Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomizovať adresu MAC pri pripájaní k sieťam Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"S meraním dát"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Bez merania dát"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Vyrovnávacia pamäť nástroja denníkov"</string>
diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml
index fdadbff455d8..62a4ff4eb18f 100644
--- a/packages/SettingsLib/res/values-sl/arrays.xml
+++ b/packages/SettingsLib/res/values-sl/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Preverjanje HDCP uporabi samo za vsebino DRM"</item>
<item msgid="45075631231212732">"Vedno uporabi preverjanje HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Onemogočeno"</item>
+ <item msgid="1969681323976948639">"Omogočeno filtrirano"</item>
+ <item msgid="8719029132154020716">"Omogočeno"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (privzeto)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml
index 3099f12e079b..bef9a3e5aadd 100644
--- a/packages/SettingsLib/res/values-sl/strings.xml
+++ b/packages/SettingsLib/res/values-sl/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Samodejno vzpostavljena povezava prek: %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Samodejno vzpostavljena povezava prek ponudnika ocenjevanja omrežij"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Vzpostavljena povezava prek: %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> zagotavlja <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Povezava vzpostavljena prek omrežja <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Na voljo prek: %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Dotaknite se za nastavitev"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Dotaknite se, če se želite registrirati"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Vzpostavljena povezava, brez interneta"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Brez internetne povezave"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Zahtevana je prijava"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Dostopna točka je trenutno zasedena"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Vzpostavljena povezava prek: %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Na voljo prek: %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Vzpostavitev povezave ni uspela"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Neveljaven URL strežnika OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Vzpostavitev povezave s strežnikom OSU ni uspela"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Preverjanje veljavnosti strežnika OSU ni uspelo"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Neveljavno potrdilo strežnika OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Omogočanje uporabe je preklicano"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Omogočanje uporabe ni na voljo"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Neveljaven URL strežnika OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Nepričakovana vrsta ukaza"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Nepričakovana vrsta sporočila SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Izmenjava sporočila SOAP ni uspela"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Zagon prisluškovalca preusmeritev ni uspel"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Časovna omejitev čakanja na preusmeritev je potekla"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Najdena ni bila nobena aktivnost OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Nepričakovano stanje sporočila SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ni bilo mogoče najti"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Zaupanja vrednega korenskega vozlišča za strežnik AAA ni bilo mogoče najti"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Zaupanja vrednega korenskega vozlišča za strežnik za odpravljanje težav ni bilo mogoče najti"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Zaupanja vrednega korenskega vozlišča za strežnik pravilnikov ni bilo mogoče najti"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Zaupanja vrednih korenskih potrdil ni bilo mogoče pridobiti"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Zaupanja vrednega korenskega potrdila za strežnik AAA ni bilo mogoče najti"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Konfiguracije PassPoint ni bilo mogoče dodati"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Ponudnika OSU ni bilo mogoče najti"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Vzpostavljanje povezave"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Povezava je vzpostavljena"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Vzpostavljanje povezave s strežnikom OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Strežnik OSU je preverjen"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Povezava s strežnikom OSU je vzpostavljena"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Začetna izmenjava SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čakanje na odgovor za preusmeritev"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Prejet je odgovor za preusmeritev"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga izmenjava SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tretja izmenjava SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Pridobivanje zaupanja vrednih korenskih potrdil"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Omogočanje uporabe je končano"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Odpiranje ponudnika <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Povezave ni bilo mogoče vzpostaviti"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Dokončevanje registracije …"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registracije ni bilo mogoče dokončati. Če želite poskusiti znova, se dotaknite."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registracija je končana. Povezovanje …"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Zelo počasna"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Počasna"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"V redu"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Brez zaklepanja"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Med polnjenjem se zaslon ne bo nikoli zaklenil"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Omogoči zajem dnevnika Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Zajemanje paketov Bluetooth. (po spremembi te nastavitve preklopite Bluetooth)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Odklepanje OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Dovoli odklepanje zagonskega nalagalnika"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite omogočiti odklepanje OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Omrežja"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Potrdilo brezžičnega zaslona"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogoči podrob. zapis. dnevnika za Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Dodelitev naključnega naslova MAC ob vzpostavitvi povezave"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Prenos podatkov v mobilnem omrežju je vedno aktiven"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Strojno pospeševanje za internetno povezavo prek mobilnega telefona"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži naprave Bluetooth brez imen"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Povezave ni bilo mogoče vzpostaviti"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaži možnosti za potrdilo brezžičnega zaslona"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povečaj raven zapis. dnev. za Wi-Fi; v izbir. Wi‑Fi-ja pokaži glede na SSID RSSI"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Dodelitev naključnega naslova MAC pri povezovanju z omrežji Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Z omejenim prenosom podatkov"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Z neomejenim prenosom podatkov"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Velikosti medpomn. zapisov. dnevnika"</string>
diff --git a/packages/SettingsLib/res/values-sq/arrays.xml b/packages/SettingsLib/res/values-sq/arrays.xml
index 3128eb7954c7..4dab74c04245 100644
--- a/packages/SettingsLib/res/values-sq/arrays.xml
+++ b/packages/SettingsLib/res/values-sq/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Përdor kontrollin e HDCP-së vetëm për përmbajtjet DRM"</item>
<item msgid="45075631231212732">"Përdor gjithmonë kontrollin e HDCP-së"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Joaktiv"</item>
+ <item msgid="1969681323976948639">"Të aktivizuara të filtruara"</item>
+ <item msgid="8719029132154020716">"Aktiv"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (I parazgjedhur)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml
index 6716cfc3488b..8bb67f9a348f 100644
--- a/packages/SettingsLib/res/values-sq/strings.xml
+++ b/packages/SettingsLib/res/values-sq/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Lidhur automatikisht përmes %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Lidhur automatikisht nëpërmjet ofruesit të vlerësimit të rrjetit"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"E lidhur përmes %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> nga <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Lidhur përmes <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"E mundshme përmes %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Trokit për ta konfiguruar"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Trokit për t\'u regjistruar"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"U lidh, por nuk ka internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Nuk ka internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Kërkohet identifikimi"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pika e qasjes është përkohësisht plot"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"E lidhur përmes %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"E disponueshme përmes %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Lidhja dështoi"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL e pavlefshme e serverit të OSU-së"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Lidhja e serverit të OSU-së dështoi"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Verifikimi i serverit të OSU-së dështoi"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certifikatë e pavlefshme e serverit të OSU-së"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Përgatitja u ndërpre"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Përgatitja nuk ofrohet"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL e pavlefshme e serverit të OSU-së"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Lloj i papritur komande"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Lloji i papritur i mesazhit SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Mesazhi i shkëmbimit të SOAP-it dështoi"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Dështoi nisja e dëgjuesit të ridrejtimit"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Pritja për ridrejtim skadoi"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nuk u gjet aktivitet i OSU-së"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status i papritur i mesazhit të SOAP-it"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Dështoi gjetja e PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Dështoi gjetja e nyjës rrënjë të besuar për serverin e AAA-së"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Dështoi gjetja e nyjës rrënjë të besuar për serverin e zgjidhjes"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Dështoi gjetja e nyjës rrënjë të besuar për serverin e politikës"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Dështoi marrja e certifikatave rrënjë të besuara"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Dështoi gjetja e certifikatës rrënjë të besuar për serverin e AAA-së"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Dështoi shtimi i konfigurimit të PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Dështoi gjetja e një ofruesi të OSU-së"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Po lidhet"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Lidhur"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Po lidhe me serverin e OSU-së"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Serveri i OSU-së u verifikua"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Lidhur me serverin e OSU-së"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Shkëmbimi fillestar i SOAP-it"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Në pritje të përgjigjes së ridrejtimit"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"U mor përgjigje ridrejtimi"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Shkëmbimi i dytë i SOAP-it"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Shkëmbimi i tretë i SOAP-it"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Po merr certifikatat rrënjë të besuara"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Përgatitja përfundoi"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Po hapet <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Nuk mund të lidhej"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Po përfundon regjistrimin…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Regjistrimi nuk mund të përfundonte. Trokit për të provuar përsëri."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Regjistrimi përfundoi. Po lidhet…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Shumë e ulët"</string>
<string name="speed_label_slow" msgid="813109590815810235">"E ngadaltë"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Në rregull"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Qëndro zgjuar"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekrani nuk do të kalojë asnjëherë në gjendje gjumi gjatë ngarkimit"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktivizo regjistrin testues të paketave HCI të Bluetooth-it"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Regjistro paketat e Bluetooth-it. (Ndrysho Bluetooth-in pas ndryshimit të këtij cilësimi)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Shkyçja e OEM-së"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Lejo shkyçjen e ngarkimit të sistemit"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Të lejohet shkyçja e OEM-së?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Rrjetet"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certifikimi i ekranit valor"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktivizo hyrjen Wi-Fi Verbose"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Zgjedhja e rastësishme e adresave MAC të lidhura"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Të dhënat celulare gjithmonë aktive"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Përshpejtimi i harduerit për ndarjen e lidhjes (internet)"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Shfaq pajisjet me Bluetooth pa emra"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nuk mund të lidhej"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Shfaq opsionet për certifikimin e ekranit valor"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Rrit nivelin regjistrues të Wi‑Fi duke shfaqur SSID RSSI-në te Zgjedhësi i Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Zgjidh rastësisht adresën MAC kur lidhesh me rrjete Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Me matje"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Pa matje"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Madhësitë e regjistruesit"</string>
diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml
index b735b478474e..3ed9cd933c51 100644
--- a/packages/SettingsLib/res/values-sr/arrays.xml
+++ b/packages/SettingsLib/res/values-sr/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Користи HDCP проверу само за DRM садржај"</item>
<item msgid="45075631231212732">"Увек користи HDCP проверу"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Онемогућено"</item>
+ <item msgid="1969681323976948639">"Омогућено филтрирано"</item>
+ <item msgid="8719029132154020716">"Омогућено"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (подразумевано)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml
index 028560514836..4378a463c839 100644
--- a/packages/SettingsLib/res/values-sr/strings.xml
+++ b/packages/SettingsLib/res/values-sr/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Аутоматски повезано преко %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Аутоматски повезано преко добављача оцене мреже"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Веза је успостављена преко приступне тачке %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> – <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Повезано преко: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Доступна је преко приступне тачке %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Додирните да бисте подесили"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Додирните да бисте се регистровали"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Веза је успостављена, нема интернета"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Нема интернета"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Треба да се пријавите"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Приступна тачка је привремено заузета"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Повезано преко %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Доступно преко %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Повезивање није успело"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Неважећи URL OSU сервера"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Повезивање са OSU сервером није успело"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Потврда OSU сервера није успела"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Неважећи сертификат OSU сервера"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Додела је отказана"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Додела није доступна"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Неважећи URL OSU сервера"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неочекивани тип команде"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неочекивани тип SOAP поруке"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Размена SOAP порука није успела"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Покретање обрађивача преусмеравања није успело"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Време чекања преусмеравања је истекло"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Није пронађена ниједна OSU активност"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Неочекивани статус SOAP поруке"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO није пронађен"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Поуздани чвор основног нивоа за AAA сервер није пронађен"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Поуздани чвор основног нивоа за сервер за отклањање пропуста није пронађен"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Поуздани чвор основног нивоа за сервер за смернице није пронађен"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Преузимање поузданих сертификата основног нивоа није успело"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Поуздани сертификат основног нивоа за сервер AAA није пронађен"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Додавање PassPoint конфигурације није успело"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU добављач није пронађен"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Повезује се"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Повезан"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Повезујете се са OSU сервером"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Потврђен је OSU сервер"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Веза са OSU сервером је успостављена"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Прва размена SOAP-а"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Чека се одговор о преусмеравању"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Примљен је одговор о преусмеравању"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Друга размена SOAP-а"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Трећа размена SOAP-а"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Преузимају се поуздани сертификати основног нивоа"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Додела приступа је завршена"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Отвара се <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Повезивање није успело"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Регистрација се довршава…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Довршавање регистрације није успело. Додирните да бисте пробали поново."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Регистрација је довршена. Повезује се…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Веома спора"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Спора"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Потврди"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Не закључавај"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Екран неће бити у режиму спавања током пуњења"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Омогући snoop евиденцију за Bluetooth HCI"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Сними Bluetooth пакете. (Укључите/искључите Bluetooth када промените ово подешавање)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Откључавање OEM-a"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дозволи откључавање функције за покретање"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Желите ли да дозволите откључавање произвођача оригиналне опреме (OEM)?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Умрежавање"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Сертификација бежичног екрана"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Омогући детаљнију евиденцију за Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Насумичан избор MAC адресе током повезивања"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилни подаци су увек активни"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Хардверско убрзање привезивања"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Прикажи Bluetooth уређаје без назива"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Повезивање није успело"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Приказ опција за сертификацију бежичног екрана"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Повећава ниво евидентирања за Wi‑Fi. Приказ по SSID RSSI-у у бирачу Wi‑Fi мреже"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Изабери насумичну MAC адресу током повезивања на Wi‑Fi мреже"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Са ограничењем"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Без ограничења"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Величине бафера података у програму за евидентирање"</string>
diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml
index fc4d17f871e3..1a4ee00c58a6 100644
--- a/packages/SettingsLib/res/values-sv/arrays.xml
+++ b/packages/SettingsLib/res/values-sv/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Använd bara HDCP-kontroll för DRM-innehåll"</item>
<item msgid="45075631231212732">"Använd alltid HDCP-kontroll"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Inaktiverat"</item>
+ <item msgid="1969681323976948639">"Filtrering har aktiverats"</item>
+ <item msgid="8719029132154020716">"Aktiverad"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (standard)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml
index fd7bb0b97f7d..3fcb6dc80713 100644
--- a/packages/SettingsLib/res/values-sv/strings.xml
+++ b/packages/SettingsLib/res/values-sv/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatiskt ansluten via %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatiskt ansluten via leverantör av nätverksbetyg"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Anslutet via %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> av <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Anslutet via <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Tillgängligt via %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Tryck för att konfigurera"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Tryck för att logga in"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Ansluten, inget internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Inget internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Inloggning krävs"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Åtkomstpunkten har inga platser över för tillfället"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Anslutet via %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Tillgängligt via %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Anslutningen misslyckades"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ogiltig webbadress för OSU-server"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Det gick inte att ansluta till OSU-servern"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU-servervalideringen misslyckades"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ogiltigt certifikat för OSU-server"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Utfärdandet avbröts"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Utfärdande ej tillgängligt"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ogiltig webbadress för OSU-server"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Oväntad kommandotyp"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Oväntad meddelandetyp för SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Utväxlingen av SOAP-meddelanden misslyckades"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Det gick inte att starta omdirigeringslyssnaren"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Väntetiden för omdirigering överskreds"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Ingen OSU-aktivitet hittades"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Oväntad status för SOAP-meddelande"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Inget PPS-MO hittades"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Det gick inte att hitta någon betrodd rotnod för AAA-servern"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Det gick inte att hitta någon betrodd rotnod för åtgärdsservern"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Det gick inte att hitta någon betrodd rotnod för policyservern"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Det gick inte att hämta betrodda rotcertifikat"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Det gick inte att hitta någon betrodd rotnod för AAA-servern"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Det gick inte att lägga till PassPoint-konfigurationen"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Ingen OSU-leverantör hittades"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Ansluter"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ansluten"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Ansluter till OSU-server"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-servern har validerats"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Ansluten till OSU-server"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Första SOAP-utväxlingen"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Väntar på omdirigeringssvar"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Omdirigeringssvar mottaget"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Andra SOAP-utväxlingen"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tredje SOAP-utväxlingen"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Hämtar betrodda rotcertifikat"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Utfärdandet har slutförts"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Öppnar <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Det gick inte att ansluta"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Registreringen slutförs …"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Det gick inte att slutföra registreringen. Tryck för att försöka igen."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registrering slutförd. Ansluter …"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Mycket långsam"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Långsam"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Okej"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Håll aktiverad"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Skärmen vilar aldrig när laddning pågår"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktivera HCI snoop-logg för Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Registrera paket för Bluetooth. (Aktivera och inaktivera Bluetooth när inställningen har ändrats)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-upplåsning"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Tillåt att bootloadern låses upp"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vill du tillåta OEM-upplåsning?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Nätverk"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certifiering för Wi-Fi-skärmdelning"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktivera utförlig loggning för Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Ansluten MAC-slumpgenerering"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata alltid aktiverad"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Maskinvaruacceleration för internetdelning"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Visa namnlösa Bluetooth-enheter"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Kan inte ansluta"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Visa certifieringsalternativ för Wi-Fi-skärmdelning"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Öka loggningsnivån för Wi-Fi, visa per SSID RSSI i Wi‑Fi Picker"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Generera en slumpmässig MAC-adress när du ansluter till Wi‑Fi-nätverk"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Med datapriser"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Utan datapriser"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Buffertstorlekar för logg"</string>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index e7f6dd66a80c..a05797e52382 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Tumia ukaguaji wa HDCP kwa maudhui ya DRM pekee"</item>
<item msgid="45075631231212732">"Kila wakati tumia ukakuaji wa HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Imezimwa"</item>
+ <item msgid="1969681323976948639">"Vichujio Vilivyowekwa"</item>
+ <item msgid="8719029132154020716">"Imewashwa"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Chaguomsingi)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 6d6b5715dac0..47c7bb2187ef 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Imeunganishwa kiotomatiki kupitia %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Imeunganishwa kiotomatiki kupitia mtoa huduma wa ukadiriaji wa mtandao"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Imeunganishwa kupitia %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> kutoka <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Imeunganishwa kupitia <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Inapatikana kupitia %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Gusa ili uweke mipangilio"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Gusa ili ujisajili"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Imeunganishwa, hakuna intaneti"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Hakuna intaneti"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Unahitaji kuingia katika akaunti"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Lango la mtandao lina shughuli nyingi kwa sasa"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Imeunganishwa kupitia %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Inapatikana kupitia %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Imeshindwa kuunganisha"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL ya seva ya OSU si sahihi"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Imeshindwa kuunganisha seva ya OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Imeshindwa kuthibitisha seva ya OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Cheti cha seva ya OSU si sahihi"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Imeghairi mchakato wa kupanga"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Kipengele cha kupanga hakipatikani"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL ya seva ya OSU si sahihi"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Aina ya amri isiyotarajiwa"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Aina ya ujumbe wa SOAP usiotarajiwa"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Imeshindwa kubadilisha ujumbe wa SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Imeshindwa kuanzisha kisikilizaji cha kuelekeza kwingine"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Muda umeisha ikisubiri kuelekeza kwingine"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Hakuna shughuli ya OSU iliyopatikana"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Hali isiyotarajiwa ya ujumbe wa SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Imeshindwa kupata PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Imeshindwa kupata cheti msingi cha seva ya AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Imeshindwa kupata njia ya chanzo kinachoaminika cha seva ya utatuzi"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Imeshindwa kupata njia ya chanzo kinachoaminika cha seva ya sera"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Imeshindwa kuleta vyeti vya msingi vinavyoaminika"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Imeshindwa kupata cheti cha msingi kinachoaminika cha seva ya AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Imeshindwa kuongeza mipangilio ya PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Imeshindwa kupata mtoa huduma wa OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Inaunganisha"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Imeunganisha"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Inaunganisha kwenye seva ya OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Imethibitisha seva ya OSU"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Imeunganishwa kwenye seva ya OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Mabadiliko ya kwanza ya SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Inasubiri jibu la kuelekeza kwingine"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Imepokea jibu la kuelekeza kwingine"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Kubadilisha SOAP mara ya pili"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Kubadilisha SOAP mara ya tatu"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Inaleta vyeti vya msingi vinavyoaminika"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Imekamilisha kupanga"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Inafungua <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Imeshindwa kuunganisha"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Inakamilisha usajili…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Imeshindwa kukamilisha usajili. Gusa ili ujaribu tena."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Imekamilisha kusajili. Inaunganisha…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Polepole Sana"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Polepole"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Sawa"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Weka skrini ikiwa imewashwa"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Skrini haitawahi kuzima wakati unachaji"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Washa kumbukumbu ya Bluetooth HCI Snoop"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Aina za paketi za Bluetooth. (Washa Bluetooth baada ya kubadilisha mipangilio hii)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Ufunguaji wa OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Ruhusu bootloader ifunguliwe"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Je, ungependa kuruhusu ufunguaji wa OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Mtandao"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Chaguo za cheti cha kuonyesha pasiwaya"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Washa Uwekaji kumbukumbu za WiFi kutumia Sauti"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Anwani za MAC Zinazowekwa kwa Nasibu"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Iendelee kutumia data ya simu"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Kuongeza kasi kwa kutumia maunzi ili kusambaza mtandao"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Onyesha vifaa vya Bluetooth visivyo na majina"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Imeshindwa kuunganisha"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Onyesha chaguo za cheti cha kuonyesha pasiwaya"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Ongeza hatua ya uwekaji kumbukumbu ya Wi-Fi, onyesha kwa kila SSID RSSI kwenye Kichukuzi cha Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Weka anwani ya MAC kwa nasibu wakati unaunganisha kwenye mitandao ya Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Mtandao unapima data"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Mtandao usiopima data"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Ukubwa wa kiweka bafa ya kumbukumbu"</string>
diff --git a/packages/SettingsLib/res/values-ta/arrays.xml b/packages/SettingsLib/res/values-ta/arrays.xml
index 02c16236e153..a7839f67db64 100644
--- a/packages/SettingsLib/res/values-ta/arrays.xml
+++ b/packages/SettingsLib/res/values-ta/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"DRM உள்ளடக்கத்திற்கு மட்டும் HDCP சோதனையைப் பயன்படுத்து"</item>
<item msgid="45075631231212732">"HDCP சரிபார்ப்பை எப்போதும் பயன்படுத்து"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"முடக்கப்பட்டது"</item>
+ <item msgid="1969681323976948639">"இயக்கப்பட்டு வடிகட்டப்பட்டது"</item>
+ <item msgid="8719029132154020716">"இயக்கப்பட்டது"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (இயல்பு)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml
index f83b1a7ff39f..63c6cd9b11f2 100644
--- a/packages/SettingsLib/res/values-ta/strings.xml
+++ b/packages/SettingsLib/res/values-ta/strings.xml
@@ -38,50 +38,27 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s மூலம் தானாக இணைக்கப்பட்டது"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"நெட்வொர்க் மதிப்பீடு வழங்குநரால் தானாக இணைக்கப்பட்டது"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s வழியாக இணைக்கப்பட்டது"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> இன் <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <!-- no translation found for connected_via_app (5571999941988929520) -->
+ <skip />
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s வழியாகக் கிடைக்கிறது"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"அமைப்பதற்குத் தட்ட வேண்டும்"</string>
+ <!-- no translation found for tap_to_sign_up (6449724763052579434) -->
+ <skip />
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"இணைக்கப்பட்டுள்ளது, ஆனால் இண்டர்நெட் இல்லை"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"இணைய இணைப்பு இல்லை"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"உள்நுழைய வேண்டும்"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"தற்காலிகமாக அணுகல் புள்ளி நிரம்பியுள்ளது"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s வழியாக இணைக்கப்பட்டது"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s வழியாகக் கிடைக்கிறது"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"இணைக்க இயலவில்லை"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU சேவையகத்தின் URL தவறானது"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU சேவையகத்துடன் இணைக்க இயலவில்லை"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU சேவையகத்தைச் சரிபார்க்க இயலவில்லை"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU சேவையகத்தின் சான்றிதழ் தவறானது"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"புரொவிஷனிங் ரத்துசெய்யப்பட்டது"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"புரொவிஷனிங் இல்லை"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU சேவையகத்தின் URL தவறானது"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"எதிர்பாராத கட்டளை வகை"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"எதிர்பாராத SOAP மெசேஜ் வகை"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP மெசேஜ் பரிமாற்றம் தோல்வியடைந்தது"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"திசைதிருப்புதலைக் கேட்கும் அம்சம் தொடங்கவில்லை"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"திசைதிருப்புதலுக்கான காத்திருப்பு நேரம் முடிந்துவிட்டது"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU செயல்பாடு காணப்படவில்லை"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"எதிர்பாராத SOAP மெசேஜ் நிலை"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MOவைக் கண்டறிய இயலவில்லை"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA சேவையகத்தின் நம்பகமான முதன்மை நோடைக் கண்டறிய இயலவில்லை"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"சிக்கல் தீர்க்கும் சேவையகத்தின் நம்பகமான முதன்மை நோடைக் கண்டறிய இயலவில்லை"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"கொள்கைச் சேவையகத்தின் நம்பகமான முதன்மை நோடைக் கண்டறிய இயலவில்லை"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"நம்பகமான முதன்மைச் சான்றிதழ்களை மீட்டெடுக்க இயலவில்லை"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA சேவையகத்தின் நம்பகமான முதன்மைச் சான்றிதழைக் கண்டறிய இயலவில்லை"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint உள்ளமைவைச் சேர்க்க இயலவில்லை"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU வழங்குநரைக் கண்டறிய இயலவில்லை"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"இணைக்கிறது"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"இணைக்கப்பட்டது"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU சேவையகத்துடன் இணைக்கிறது"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU சேவையகம் சரிபார்க்கப்பட்டது"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU சேவையகத்துடன் இணைக்கப்பட்டது"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"முதல் SOAP பரிமாற்றம்"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"திசைதிருப்புதலுக்கான பதிலுக்குக் காத்திருக்கிறது"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"திசைதிருப்புதலுக்கான பதில் பெறப்பட்டது"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"இரண்டாம் SOAP பரிமாற்றம்"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"மூன்றாம் SOAP பரிமாற்றம்"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"நம்பகமான முதன்மைச் சான்றிதழ்களை மீட்டெடுக்கிறது"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"புரொவிஷனிங் நிறைவடைந்தது"</string>
+ <!-- no translation found for osu_opening_provider (5488997661548640424) -->
+ <skip />
+ <!-- no translation found for osu_connect_failed (2187750899158158934) -->
+ <skip />
+ <!-- no translation found for osu_completing_sign_up (9037638564719197082) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_failed (7296159750352873260) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_complete (8207626049093289203) -->
+ <skip />
<string name="speed_label_very_slow" msgid="1867055264243608530">"மிகவும் வேகம் குறைவானது"</string>
<string name="speed_label_slow" msgid="813109590815810235">"வேகம் குறைவு"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"சரி"</string>
@@ -234,8 +211,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"செயலில் வைத்திரு"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"சார்ஜ் ஏறும்போது திரை எப்போதும் உறக்கநிலைக்குச் செல்லாது"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"புளூடூத் HCI ஸ்னுப் பதிவை இயக்கு"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"புளூடூத் பேக்கெட்டுகளைக் கண்டறி. (இந்த அமைப்பை மாற்றிய பின்பு, புளூடூத்தை மாற்று)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM திறத்தல்"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"பூட்லோடரைத் திறக்க அனுமதி"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM திறத்தலை அனுமதிக்கவா?"</string>
@@ -246,7 +222,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"நெட்வொர்க்கிங்"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"வயர்லெஸ் காட்சிக்கான சான்றிதழ்"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"வைஃபை அதிவிவர நுழைவை இயக்கு"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"இணைக்கப்பட்ட MAC ரேண்டம் ஆக்குதல்"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"மொபைல் டேட்டாவை எப்போதும் இயக்கத்திலேயே வை"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"வன்பொருள் விரைவுப்படுத்துதல் இணைப்பு முறை"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"பெயர்கள் இல்லாத புளூடூத் சாதனங்களைக் காட்டு"</string>
@@ -273,7 +248,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"இணைக்க முடியவில்லை"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"வயர்லெஸ் காட்சி சான்றுக்கான விருப்பங்களைக் காட்டு"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"வைஃபை நுழைவு அளவை அதிகரித்து, வைஃபை தேர்வியில் ஒவ்வொன்றிற்கும் SSID RSSI ஐ காட்டுக"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"வைஃபை நெட்வொர்க்குகளில் இணைக்கும்போது MAC முகவரிகளை ரேண்டம் ஆக்கு"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"கட்டண நெட்வொர்க்"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"கட்டணமில்லா நெட்வொர்க்"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"லாகர் பஃபர் அளவுகள்"</string>
diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml
index 6d5a16b31d27..22d57efe7af5 100644
--- a/packages/SettingsLib/res/values-te/arrays.xml
+++ b/packages/SettingsLib/res/values-te/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"DRM కంటెంట్‌కు మాత్రమే HDCP తనిఖీని ఉపయోగించండి"</item>
<item msgid="45075631231212732">"ఎప్పటికీ HDCP తనిఖీని ఉపయోగించు"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"నిలిపివేయబడింది"</item>
+ <item msgid="1969681323976948639">"ప్రారంభించబడింది ఫిల్టర్ చేయబడింది"</item>
+ <item msgid="8719029132154020716">"ప్రారంభించబడింది"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (డిఫాల్ట్)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml
index e4e0e417ba07..d8ec167c8e50 100644
--- a/packages/SettingsLib/res/values-te/strings.xml
+++ b/packages/SettingsLib/res/values-te/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ద్వారా స్వయంచాలకంగా కనెక్ట్ చేయబడింది"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"నెట్‌వర్క్ రేటింగ్ ప్రదాత ద్వారా స్వయంచాలకంగా కనెక్ట్ చేయబడింది"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ద్వారా <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> ద్వారా కనెక్ట్ చేయబడింది"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ద్వారా అందుబాటులో ఉంది"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"సెటప్ చేయడానికి నొక్కండి"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"సైన్ అప్ చేయడానికి నొక్కండి"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"కనెక్ట్ చేయబడింది, ఇంటర్నెట్ లేదు"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ఇంటర్నెట్ లేదు"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"సైన్ ఇన్ చేయాలి"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"యాక్సెస్ పాయింట్ తాత్కాలికంగా నిండుకుంది"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s ద్వారా అందుబాటులో ఉంది"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"కనెక్షన్ విఫలమైంది"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"చెల్లని OSU సర్వర్ URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU సర్వర్ కనెక్షన్ విఫలమైంది"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU సర్వర్ ప్రామాణీకరణ విఫలమైంది"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"చెల్లని OSU సర్వర్ సర్టిఫికెట్"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"కేటాయింపు రద్దు చేయబడింది"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"కేటాయింపు అందుబాటులో లేదు"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"చెల్లని OSU సర్వర్ URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ఊహించని ఆదేశ రకం"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ఊహించని SOAP సందేశ రకం"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP సందేశ మార్పిడి విఫలమైంది"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"మళ్లింపు పరిశీలన ప్రారంభమవడం విఫలమైంది"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"మళ్లింపు కోసం వేచి ఉండటంలో సమయం ముగిసింది"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ఏ OSU కార్యకలాపం కనుగొనబడలేదు"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ఊహించని SOAP సందేశ స్థితి"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO కనుగొనడం విఫలమైంది."</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA సర్వర్ కోసం మూల విశ్వసనీయత కనుగొనడంలో విఫలమైంది."</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"నివారణోపాయం సర్వర్ విశ్వసనీయత మూల నోడ్‌ను కనుగొనడం విఫలమైంది"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"విధాన సర్వర్ కోసం మూల విశ్వసనీయత కనుగొనడంలో విఫలమైంది."</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"విశ్వసనీయ రూట్ సర్టిఫికెట్‌లు తిరిగి పొందడం విఫలమైంది."</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA సర్వర్ కోసం రూట్ సర్టిఫికెట్ విశ్వసనీయత కనుగొనడం విఫలమైంది."</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"కాన్ఫిగరేషన్ పాయింట్ జోడించడం విఫలమైంది."</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ఒక OSU ప్రొవైడర్‌ని కనుగొనడం విఫలమైంది"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"కనెక్ట్ చేయబడుతోంది"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"కనెక్ట్ చేయబడింది"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU సర్వర్‌కి కనెక్ట్ చేయబడుతోంది…"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU సర్వర్ ప్రామాణీకరించబడింది"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU సర్వర్‌కి కనెక్ట్ చేయబడింది"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ప్రారంభ SOAP మార్పిడి"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"మళ్లింపు ప్రతిస్పందన కోసం వేచి ఉంది"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"మళ్లింపు ప్రతిస్పందన స్వీకరించబడింది"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"రెండవ SOAP మార్పిడి"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"మూడో SOAP మార్పిడి"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"విశ్వసనీయ రూట్ సర్టిఫికెట్‌లను తిరిగి పొందుతోంది"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"కేటాయింపు పూర్తయింది"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> తెరవబడుతోంది"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"కనెక్ట్ చేయడం సాధ్యపడలేదు"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"సైన్ అప్ పూర్తివుతోంది…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"సైన్ అప్‌ను పూర్తి చేయడం సాధ్య పడలేదు. మళ్లీ ప్రయత్నించడానికి నొక్కండి."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"సైన్ అప్ పూర్తయింది. కనెక్ట్ చేయబడుతోంది…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"చాలా నెమ్మది"</string>
<string name="speed_label_slow" msgid="813109590815810235">"నెమ్మది"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"సరే"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"యాక్టివ్‌గా ఉంచు"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"ఛార్జ్ చేస్తున్నప్పుడు స్క్రీన్ ఎప్పటికీ నిద్రావస్థలోకి వెళ్లదు"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"బ్లూటూత్ HCI రహస్య లాగ్‌ను ప్రారంభించు"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"బ్లూటూత్‌ ప్యాకెట్‌లను క్యాప్చర్ చేయి. (ఈ సెట్టింగ్‌ని మార్చిన తర్వాత బ్లూటూత్‌ని టోగుల్ చేయండి)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM అన్‌లాకింగ్"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"బూట్‌లోడర్ అన్‌లాక్ కావడానికి అనుమతించు"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM అన్‌లాకింగ్‌ను అనుమతించాలా?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"నెట్‌వర్కింగ్"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"వైర్‌లెస్ ప్రదర్శన ప్రమాణీకరణ"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi విశదీకృత లాగింగ్‌ను ప్రారంభించండి"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"కనెక్ట్ చేయబడిన MAC చిరునామాలను యాదృచ్ఛికం చేయడం"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"మొబైల్ డేటాని ఎల్లప్పుడూ యాక్టివ్‌గా ఉంచు"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"టెథెరింగ్ హార్డ్‌వేర్ వేగవృద్ధి"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"పేర్లు లేని బ్లూటూత్ పరికరాలు చూపించు"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"కనెక్ట్ చేయడం సాధ్యపడలేదు"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"వైర్‌లెస్ ప్రదర్శన సర్టిఫికెట్ కోసం ఎంపికలను చూపు"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ఎంపికలో SSID RSSI ప్రకారం చూపబడే Wi‑Fi లాగింగ్ స్థాయిని పెంచండి"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi-Fi నెట్‌వర్క్‌కు కనెక్ట్ చేస్తున్నప్పుడు MAC చిరునామాను యాదృచ్ఛికం చేయండి"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"గణించబడుతోంది"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"గణించబడటం లేదు"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"లాగర్ బఫర్ పరిమాణాలు"</string>
diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml
index 2b65080c33d9..62cd9875b54b 100644
--- a/packages/SettingsLib/res/values-th/arrays.xml
+++ b/packages/SettingsLib/res/values-th/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"ใช้การตรวจสอบ HDCP สำหรับเนื้อหา DRM เท่านั้น"</item>
<item msgid="45075631231212732">"ใช้การตรวจสอบ HDCP เสมอ"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"ปิดใช้"</item>
+ <item msgid="1969681323976948639">"เปิดใช้รายการที่กรอง"</item>
+ <item msgid="8719029132154020716">"เปิดใช้"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (ค่าเริ่มต้น)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml
index b7a70196a00f..1f4c727dd227 100644
--- a/packages/SettingsLib/res/values-th/strings.xml
+++ b/packages/SettingsLib/res/values-th/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"เชื่อมต่ออัตโนมัติผ่าน %1$s แล้ว"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"เชื่อมต่ออัตโนมัติผ่านผู้ให้บริการการจัดอันดับเครือข่าย"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"เชื่อมต่อผ่าน %1$s แล้ว"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> โดย <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"เชื่อมต่อแล้วผ่าน <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"พร้อมใช้งานผ่านทาง %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"แตะเพื่อตั้งค่า"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"แตะเพื่อลงชื่อสมัครใช้"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"เชื่อมต่อแล้ว ไม่พบอินเทอร์เน็ต"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"ไม่มีอินเทอร์เน็ต"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"ต้องลงชื่อเข้าใช้"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"จุดเข้าใช้งานเต็มชั่วคราว"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"เชื่อมต่อผ่าน %1$s แล้ว"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"พร้อมใช้งานผ่านทาง %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"การเชื่อมต่อล้มเหลว"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL ของเซิร์ฟเวอร์ OSU ไม่ถูกต้อง"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"การเชื่อมต่อเซิร์ฟเวอร์ OSU ล้มเหลว"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"การตรวจสอบเซิร์ฟเวอร์ OSU ล้มเหลว"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ใบรับรองเซิร์ฟเวอร์ OSU ไม่ถูกต้อง"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ล้มเลิกการจัดสรรแล้ว"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"การจัดสรรไม่พร้อมใช้งาน"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL ของเซิร์ฟเวอร์ OSU ไม่ถูกต้อง"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ประเภทคำสั่งที่ไม่คาดคิด"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ประเภทข้อความ SOAP ที่ไม่คาดคิด"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"การแลกเปลี่ยนข้อความ SOAP ล้มเหลว"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"เริ่มการเปลี่ยนเส้นทางผู้ฟังไม่สำเร็จ"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"หมดเวลาการอการเปลี่ยนเส้นทางแล้ว"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ไม่พบกิจกรรม OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"สถานะข้อความ SOAP ที่ไม่คาดคิด"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"ค้นหา PPS-MO ไม่สำเร็จ"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"ค้นหาโหนดรากที่เชื่อถือได้สำหรับเซิร์ฟเวอร์ AAA ไม่สำเร็จ"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ค้นหาโหนดระดับรากที่เชื่อถือได้สำหรับเซิร์ฟเวอร์การแก้ไขไม่สำเร็จ"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ค้นหาโหนดระดับรากที่เชื่อถือได้สำหรับเซิร์ฟเวอร์นโยบายไม่สำเร็จ"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"เรียกดูใบรับรองรูทที่เชื่อถือได้ไม่สำเร็จ"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"ค้นหาใบรับรองรูทที่เชื่อถือได้สำหรับเซิร์ฟเวอร์ AAA ไม่สำเร็จ"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"เพิ่มการกำหนดค่า PassPoint ไม่สำเร็จ"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ค้นหาผู้ให้บริการ OSU ไม่สำเร็จ"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"กำลังเชื่อมต่อ"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"เชื่อมต่อแล้ว"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"กำลังเชื่อมต่อกับเซิร์ฟเวอร์ OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"ตรวจสอบเซิร์ฟเวอร์ OSU แล้ว"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"เชื่อมต่อกับเซิร์ฟเวอร์ OSU แล้ว"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"การแลกเปลี่ยน SOAP เริ่มต้น"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"กำลังรอการตอบสนองการเปลี่ยนเส้นทาง"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ได้รับการตอบสนองการเปลี่ยนเส้นทางแล้ว"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"การแลกเปลี่ยน SOAP ที่สอง"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"การแลกเปลี่ยน SOAP ที่สาม"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"กำลังเรียกดูใบรับรองรูทที่เชื่อถือได้"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"การจัดสรรเสร็จสมบูรณ์"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"กำลังเปิด <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"เชื่อมต่อไม่ได้"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"กำลังลงชื่อสมัครใช้ให้เสร็จสิ้น…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"ลงชื่อสมัครใช้ให้เสร็จสิ้นไม่ได้ แตะเพื่อลองอีกครั้ง"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"การลงชื่อสมัครใช้เสร็จสมบูรณ์ กำลังเชื่อมต่อ…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"ช้ามาก"</string>
<string name="speed_label_slow" msgid="813109590815810235">"ช้า"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ตกลง"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"เปิดหน้าจอค้าง"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"หน้าจอจะไม่เข้าสู่โหมดสลีปขณะชาร์จ"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"เปิดใช้งานบันทึก HCI Snoop ของบลูทูธ"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"บันทึกแพ็กเก็ตบลูทูธ (ปิด-เปิดบลูทูธหลังจากเปลี่ยนการตั้งค่านี้)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"การปลดล็อก OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"อนุญาตให้ปลดล็อกตัวโหลดการเปิดเครื่อง"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"อนุญาตการปลดล็อก OEM ไหม"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"เครือข่าย"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"การรับรองการแสดงผลแบบไร้สาย"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"เปิดใช้การบันทึกรายละเอียด Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"การสุ่ม MAC ที่เชื่อมต่อ"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"เปิดใช้เน็ตมือถือเสมอ"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"การเร่งฮาร์ดแวร์การเชื่อมต่ออินเทอร์เน็ตผ่านมือถือ"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"แสดงอุปกรณ์บลูทูธที่ไม่มีชื่อ"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"เชื่อมต่อไม่ได้"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"แสดงตัวเลือกสำหรับการรับรองการแสดงผล แบบไร้สาย"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"เพิ่มระดับการบันทึก Wi‑Fi แสดงต่อ SSID RSSI ในตัวเลือก Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"สุ่มที่อยู่ MAC เมื่อเชื่อมต่อกับเครือข่าย Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"มีการวัดปริมาณอินเทอร์เน็ต"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"ไม่มีการวัดปริมาณอินเทอร์เน็ต"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"ขนาดบัฟเฟอร์ของตัวบันทึก"</string>
diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml
index 8e3aaf7c1e45..cfab9c1581ad 100644
--- a/packages/SettingsLib/res/values-tl/arrays.xml
+++ b/packages/SettingsLib/res/values-tl/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Gamitin lang ang pagsusuring HDCP para sa nilalamang DRM"</item>
<item msgid="45075631231212732">"Palaging gumamit ng pagsusuring HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Naka-disable"</item>
+ <item msgid="1969681323976948639">"Na-enable Na-filter"</item>
+ <item msgid="8719029132154020716">"Naka-enable"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml
index 4f92302a23c2..7a31cc9ee3b1 100644
--- a/packages/SettingsLib/res/values-tl/strings.xml
+++ b/packages/SettingsLib/res/values-tl/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Awtomatikong nakakonekta sa pamamagitan ng %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Awtomatikong nakakonekta sa pamamagitan ng provider ng rating ng network"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Nakakonekta sa pamamagitan ng %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> ni <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Nakakonekta sa pamamagitan ng <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Available sa pamamagitan ng %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Mag-tap para i-set up"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"I-tap para mag-sign up"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Nakakonekta, walang internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Walang internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Kinakailangang mag-sign in"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pansamantalang puno ang access point"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Nakakonekta sa pamamagitan ng %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Available sa pamamagitan ng %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Hindi nakakonekta"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid na URL ng OSU server"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Hindi nakakonekta sa OSU server"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Hindi na-validate ang OSU server"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid na certificate ng OSU server"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Na-abort ang provisioning"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Hindi available ang provisioning"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid na URL ng OSU server"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Hindi inaasahang uri ng command"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Hindi inaasahang uri ng mensahe ng SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Hindi nakapagpalitan ng mensahe ng SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Hindi nakapagsimula ang listener ng pag-redirect"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Nag-time out sa paghihintay ng pag-redirect"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Walang nakitang aktibidad ng OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Hindi inaasahang status ng mensahe ng SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Hindi nakakita ng PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Hindi nakakita ng trust root node para sa AAA server"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Hindi nakita ang trust root node para sa server ng pagremedyo"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Hindi nakita ang trust root node para sa server ng patakaran"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Hindi nakuha ang mga trust root certificate"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Hindi nakita ang trust root certificate para sa AAA server"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Hindi naidagdag ang configuration ng PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Hindi nakakita ng OSU provider"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Kumokonekta"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Nakakonekta"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Kumokonekta sa OSU server"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Na-validate na ang OSU server"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Nakakonekta sa OSU server"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Paunang pakikipagpalitan ng SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Naghihintay ng tugon sa pag-redirect"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Nakatanggap ng tugon sa pag-redirect"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Pangalawang pakikipagpalitan ng SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Pangatlong pakikipagpalitan ng SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Kinukuha ang mga trust root certificate"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Tapos na ang provisioning"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Binubuksan ang <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Hindi makakonekta"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Kinukumpleto ang pag-sign up…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Hindi makumpleto ang pag-sign up. I-tap para subukang muli."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Kumpleto na ang pag-sign up. Kumokonekta…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Napakabagal"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Mabagal"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Manatiling gumagana"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Hindi kailanman hihinto ang screen kapag kinakargahan"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"I-enable ang Bluetooth HCI snoop log"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"I-capture ang mga Bluetooth packet. (I-toggle ang Bluetooth pagkatapos baguhin ang setting na ito)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Pag-a-unlock ng OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Payagan na ma-unlock ang bootloader"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Payagan ang pag-a-unlock ng OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Certification ng wireless display"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"I-enable ang Pagla-log sa Wi‑Fi Verbose"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nakakonektang MAC Randomization"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Palaging aktibo ang mobile data"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardware acceleration para sa pag-tether"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Ipakita ang mga Bluetooth device na walang pangalan"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Hindi makakonekta"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Ipakita ang mga opsyon para sa certification ng wireless display"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Pataasin ang antas ng Wi‑Fi logging, ipakita sa bawat SSID RSSI sa Wi‑Fi Picker"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"I-randomize ang MAC address kapag kumokonekta sa mga Wi‑Fi network"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Nakametro"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Hindi Nakametro"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Mga laki ng buffer ng Logger"</string>
diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml
index 1a0ab57d9815..b9bbda3c284f 100644
--- a/packages/SettingsLib/res/values-tr/arrays.xml
+++ b/packages/SettingsLib/res/values-tr/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"HDCP denetimini yalnızca DRM içeriği için kullan"</item>
<item msgid="45075631231212732">"HDCP denetimini her zaman kullan"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Devre dışı"</item>
+ <item msgid="1969681323976948639">"Etkin Filtrelenmiş"</item>
+ <item msgid="8719029132154020716">"Etkin"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Varsayılan)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml
index 67aee026bfac..28fc38fcd8a5 100644
--- a/packages/SettingsLib/res/values-tr/strings.xml
+++ b/packages/SettingsLib/res/values-tr/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s üzerinden otomatik olarak bağlı"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Ağ derecelendirme sağlayıcı aracılığıyla otomatik olarak bağlandı"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s üzerinden bağlı"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> ile bağlandı"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s üzerinden kullanılabilir"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Ayarlamak için dokunun"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Kaydolmak için dokunun"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Bağlı, internet yok"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"İnternet yok"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Oturum açılması gerekiyor"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Erişim noktası geçici olarak dolu"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s üzerinden bağlı"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s üzerinden kullanılabilir"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Bağlantı başarısız oldu"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU sunucu URL\'si geçersiz"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU sunucusu ile bağlantı kurulamadı"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU sunucusu doğrulanamadı"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU sunucu sertifikası geçersiz"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Temel hazırlık iptal edildi"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Temel hazırlık kullanılamıyor"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU sunucu URL\'si geçersiz"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Beklenmeyen komut türü"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Beklenmeyen SOAP mesaj türü"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP mesajlaşması başarısız"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Yönlendirme işleyici başlatılamadı"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Yönlendirme beklenirken süre doldu"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU etkinliği bulunamadı"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Beklenmeyen SOAP mesaj durumu"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO bulunamadı"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA sunucusu için güvenilir kök düğüm bulunamadı"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Düzeltme sunucusu için güvenilir kök düğüm bulunamadı"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Politika sunucusu için güvenilir kök düğüm bulunamadı"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Güvenilir kök sertifikalar alınamadı"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA sunucusu için güvenilir kök sertifika bulunamadı"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint yapılandırması eklenemedi"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU sağlayıcı bulunamadı"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Bağlanıyor"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Bağlandı"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU sunucusu ile bağlantı kuruluyor"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU sunucusu doğrulandı"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU sunucusuna bağlandı"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"İlk SOAP değişimi"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Yönlendirme yanıtı bekleniyor"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Yönlendirme yanıtı alındı"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"İkinci SOAP değişimi"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Üçüncü SOAP değişimi"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Güvenilir kök sertifikalar alınıyor"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Temel hazırlık tamamlandı"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> açılıyor"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Bağlanılamadı"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Kayıt işlemi tamamlanıyor…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Kayıt işlemi tamamlanamadı. Tekrar denemek için dokunun."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Kayıt tamamlandı. Bağlanıyor…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Çok Yavaş"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Yavaş"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Tamam"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Uyanık kal"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Şarj edilirken ekran hiçbir zaman uykuya geçmez"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI araştırmayı etkinleştir"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth paketlerini yakalayın. (Bu ayarı değiştirdikten sonra Bluetooth seçimini değiştirin)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM kilit açma"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Önyükleyicinin kilidinin açılmasına izin ver"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM kilit açmaya izin verilsin mi?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Ağ işlemleri"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Kablosuz ekran sertifikası"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Kablosuz Ayrıntılı Günlük Kaydını etkinleştir"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Bağlı MAC Rastgele Seçimi"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil veri her zaman etkin"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering donanım hızlandırıcısı"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Adsız Bluetooth cihazlarını göster"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Bağlanılamadı"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Kablosuz ekran sertifikası seçeneklerini göster"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Kablosuz günlük kaydı seviyesini artır. Kablosuz Seçici\'de her bir SSID RSSI için göster."</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Kablosuz ağlara bağlanırken MAC adresini rastgele seç"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Sayaçlı"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Sayaçsız"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Günlük Kaydedici arabellek boyutları"</string>
diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml
index 5e142862db16..63538e13d773 100644
--- a/packages/SettingsLib/res/values-uk/arrays.xml
+++ b/packages/SettingsLib/res/values-uk/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Використовувати перевірку HDCP лише для вмісту, захищеного DRM"</item>
<item msgid="45075631231212732">"Завжди використовувати перевірку HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Вимкнено"</item>
+ <item msgid="1969681323976948639">"Увімкнено з фільтром"</item>
+ <item msgid="8719029132154020716">"Увімкнено"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (за умовчанням)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml
index 1cfa0ebe46de..c63f7e0e0761 100644
--- a/packages/SettingsLib/res/values-uk/strings.xml
+++ b/packages/SettingsLib/res/values-uk/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Автоматично під’єднано через %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Автоматично під’єднано через постачальника оцінки якості мережі"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Під’єднано через %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> надає <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Підключено через додаток <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Доступ через %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Торкніться, щоб налаштувати"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Торкніться, щоб увійти"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Під’єднано, але немає доступу до Інтернету"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Немає Інтернету"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Потрібно ввійти в обліковий запис"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Точка доступу тимчасово переповнена"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Під’єднано через мережу %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Доступ через мережу %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Помилка підключення"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Недійсна URL-адреса сервера OSU"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Не вдалося підключитися до сервера OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Не вдалося перевірити сервер OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Недійсний сертифікат сервера OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Надання скасовано"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Надання недоступне"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Недійсна URL-адреса сервера OSU"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неочікуваний тип команди"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неочікуваний тип повідомлення SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Не вдалося провести обмін повідомленнями SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Не вдалося запустити обробник переспрямування"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Час очікування переспрямування минув"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Не виявлено активності OSU"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Неочікуваний статус повідомлення SOAP"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Не вдалося знайти PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Не вдалося знайти надійний кореневий вузол для AAA-сервера"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Не вдалося знайти надійний кореневий вузол для сервера виправлень"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Не вдалося знайти надійний кореневий вузол для сервера політики"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Не вдалось отримати надійні кореневі сертифікати"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Не вдалося знайти надійний кореневий сертифікат для AAA-сервера"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Не вдалося додати налаштування PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Не вдалося знайти постачальника OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Підключення"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Підключено"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Підключення до сервера OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Сервер OSU перевірено"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Підключено до сервера OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Початковий обмін SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Очікування відповіді переспрямування"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Відповідь переспрямування отримано"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Другий обмін SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Третій обмін SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Отримання надійних кореневих сертифікатів"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Надання завершено"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> відкривається"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Не вдалося підключитись"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Завершення реєстрації…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Не вдалося завершити реєстрацію. Торкніться, щоб повторити спробу."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Реєстрацію завершено. Підключення…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Дуже повільна"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Повільна"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Залишати активним"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Екран не засинатиме під час заряджання"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Увімкнути журнал відстеження інтерфейсу Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Отримання пакетів Bluetooth. (Змінивши це налаштування, увімкніть Bluetooth.)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Розблокування виробником"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дозволити розблокування завантажувача"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Дозволити виробникові розблоковувати пристрій?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Мережі"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Сертифікація бездрот. екрана"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Докладний запис у журнал Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Довільний вибір MAC-адрес під час з’єднання"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Не вимикати мобільне передавання даних"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Апаратне прискорення під час використання телефона в режимі модема"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Показувати пристрої Bluetooth без назв"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Не вдалося під’єднатися"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показати параметри сертифікації бездротового екрана"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Показувати в журналі RSSI для кожного SSID під час вибору Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Довільно вибирати MAC-адресу під час з’єднання з мережами Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"З тарифікацією трафіку"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Без тарифікації трафіку"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Розміри буфера журналу"</string>
diff --git a/packages/SettingsLib/res/values-ur/arrays.xml b/packages/SettingsLib/res/values-ur/arrays.xml
index 27b26b759bee..bb1765fa0e04 100644
--- a/packages/SettingsLib/res/values-ur/arrays.xml
+++ b/packages/SettingsLib/res/values-ur/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"‏HDCP چیکنگ صرف DRM مواد کیلئے استعمال کریں"</item>
<item msgid="45075631231212732">"‏ہمیشہ HDCP چیکنگ استعمال کریں"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"غیر فعال"</item>
+ <item msgid="1969681323976948639">"فعال کردہ فلٹر کردہ"</item>
+ <item msgid="8719029132154020716">"فعال"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"‏AVRCP 1.4 (ڈیفالٹ)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml
index 5e8ab54f2813..27aa730b6a8b 100644
--- a/packages/SettingsLib/res/values-ur/strings.xml
+++ b/packages/SettingsLib/res/values-ur/strings.xml
@@ -38,50 +38,27 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"‏‎%1$s کے ذریعے از خود منسلک کردہ"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"نیٹ ورک درجہ بندی کے فراہم کنندہ کے ذریعے از خود منسلک"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"‏منسلک بذریعہ ‎%1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> بذریعہ <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <!-- no translation found for connected_via_app (5571999941988929520) -->
+ <skip />
<string name="available_via_passpoint" msgid="1617440946846329613">"‏دستیاب بذریعہ ‎%1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"سیٹ اپ کرنے کے لیے تھپتھپائیں"</string>
+ <!-- no translation found for tap_to_sign_up (6449724763052579434) -->
+ <skip />
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"منسلک، انٹرنیٹ نہیں ہے"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"انٹرنیٹ نہیں ہے"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"سائن ان درکار ہے"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"رسائی پوائنٹ عارضی طور پر فُل ہے"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"‏منسلک بذریعہ ‎%1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"‏دستیاب بذریعہ ‎%1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"کنکشن ناکام ہو گیا"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"‏غلط OSU سرور کا URL"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"‏OSU سرور کنکشن ناکام ہو گيا"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"‏OSU سرور کی توثیق ناکام ہو گئی"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"‏غلط OSU سرور کا سرٹیفیکیٹ"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"فراہمی کو منسوخ کر دیا گیا"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"فراہمی دستیاب نہیں ہے"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"‏غلط OSU سرور کا URL"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"غیر متوقع کمانڈ کی قسم"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"‏غیر متوقع SOAP پیغام کی قسم"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"‏SOAP پیغام کا تبادلہ ناکام ہو گیا"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ری ڈائریکٹ سامع شروع ہونے میں ناکام ہو گیا"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ری ڈائریکٹ کے انتظار میں ٹائم آؤٹ ہو گیا"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"‏OSU کی کوئی سرگرمی نہیں ملی"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"‏غیرمتوقع SOAP پیغام کی صورتحال"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"‏PPS-MO تلاش کرنے میں ناکام"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"‏AAA سرور کے لیے معتبر روٹ نوڈ تلاش کرنے میں ناکام"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"تلافی سرور کے لیے معتبر روٹ نوڈ تلاش کرنے میں ناکام"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"پالیسی سرور کے لیے معتبر روٹ نوڈ تلاش کرنے میں ناکام"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"معتبر روٹ سرٹیفکیٹس کو دوبارہ حاصل کرنے میں ناکام"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"‏AAA سرور کے لیے معتبر روٹ سرٹیفکیٹ تلاش کرنے میں ناکام"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"‏PassPoint کی کنفیگریشن شامل کرنے میں ناکام"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"‏OSU فراہم کنندہ کو تلاش کرنے میں ناکام"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"منسلک ہو رہا ہے"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"منسلک ہے"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"‏OSU سرور سے منسلک ہو رہا ہے"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"‏OSU سرور کی توثیق ہو گئی"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"‏OSU سرور سے منسلک ہے"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"‏SOAP کا ابتدائی تبادلہ"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ری ڈائریکٹ کے جواب کا منتظر"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ری ڈائریکٹ کا جواب موصول ہو گیا"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"‏دوسرے SOAP کا تبادلہ"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"‏تیسرے SOAP کا تبادلہ"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"معتبر روٹ سرٹیفکیٹس کو دوبارہ حاصل کیا جا رہا ہے"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"فراہمی مکمل ہو گئی"</string>
+ <!-- no translation found for osu_opening_provider (5488997661548640424) -->
+ <skip />
+ <!-- no translation found for osu_connect_failed (2187750899158158934) -->
+ <skip />
+ <!-- no translation found for osu_completing_sign_up (9037638564719197082) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_failed (7296159750352873260) -->
+ <skip />
+ <!-- no translation found for osu_sign_up_complete (8207626049093289203) -->
+ <skip />
<string name="speed_label_very_slow" msgid="1867055264243608530">"بہت سست"</string>
<string name="speed_label_slow" msgid="813109590815810235">"سست"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"ٹھیک ہے"</string>
@@ -234,8 +211,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"بیدار رکھیں"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"چارج ہوتے وقت اسکرین کبھی بھی سلیپ وضع میں نہيں جائے گی"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"‏بلوٹوتھ HCI کا جاسوسی لاگ فعال کریں"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"بلوٹوتھ پیکیٹس کیپچر کریں۔ (اس ترتیب کو تبدیل کرنے کے بعد بلوٹوتھ ٹوگل کریں)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"‏OEM اَن لاکنگ"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"بوٹ لوڈر کو غیر مقفل ہونے کی اجازت دیں"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"‏OEM اَن لاکنگ کی اجازت دیں؟"</string>
@@ -246,7 +222,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"نیٹ ورکنگ"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"وائرلیس ڈسپلے سرٹیفیکیشن"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"‏Wi‑Fi وربوس لاگنگ فعال کریں"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"‏منسلک کردہ MAC رینڈمائزیشن"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"موبائل ڈیٹا ہمیشہ فعال رکھیں"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"ٹیدرنگ ہارڈویئر سرعت کاری"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"بغیر نام والے بلوٹوتھ آلات دکھائیں"</string>
@@ -273,7 +248,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"منسلک نہیں ہو سکا"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"وائرلیس ڈسپلے سرٹیفیکیشن کیلئے اختیارات دکھائیں"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"‏Wi‑Fi لاگنگ لیول میں اضافہ کریں، Wi‑Fi منتخب کنندہ میں فی SSID RSSI دکھائیں"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"‏Wi-Fi نیٹ ورکس سے منسلک کرتے وقت MAC پتے کو غیر مرتب کریں"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"میٹرڈ"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"غیر میٹر شدہ"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"لاگر بفر کے سائز"</string>
diff --git a/packages/SettingsLib/res/values-uz/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml
index d1276894701a..e64ccfa1fa54 100644
--- a/packages/SettingsLib/res/values-uz/arrays.xml
+++ b/packages/SettingsLib/res/values-uz/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"HDCP tekshiruvi faqat DRM kontent uchun ishlatilsin"</item>
<item msgid="45075631231212732">"Har doim HDCP tekshiruvidan foydalanilsin"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Oʻchiq"</item>
+ <item msgid="1969681323976948639">"Filtrlar yoniq"</item>
+ <item msgid="8719029132154020716">"Yoniq"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (asosiy)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml
index 133e25e7a223..bcb4d27d94d4 100644
--- a/packages/SettingsLib/res/values-uz/strings.xml
+++ b/packages/SettingsLib/res/values-uz/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s orqali avtomatik ulandi"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Tarmoqlar reytingi muallifi orqali avtomatik ulandi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s orqali ulangan"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> orqali ulandi"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"%1$s orqali ishlaydi"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Sozlash uchun bosing"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Yozilish uchun bosing"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Ulangan, lekin internet aloqasi yo‘q"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Internet yo‘q"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Hisob bilan kirish zarur"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Internet kirish nuqtasi vaqtinchalik to‘lgan"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"%1$s orqali ulangan"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"%1$s orqali ishlaydi"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ulanishda xatolik yuz berdi"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Yaroqsiz OSU serveri URL manzili"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU serveriga ulanmadi"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU serveri tasdiqlanmadi"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Yaroqsiz OSU serveri sertifikati"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Sinxronizatsiya uzildi"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Sinxronizatsiya mavjud emas"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Yaroqsiz OSU serveri URL manzili"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Notanish buyruq turi"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Notanish SOAP xabari turi"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP xabarlari almashinuvi amalga oshmadi"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Teskari chaqiruv qabul qilgichi ishga tushmadi"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Kutish vaqtidan oshib ketdi"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Hech qanday OSU harakatlari topilmadi"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP xabari holati noaniq"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO topilmadi"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA serveri uchun ishonchli root tuguni topilmadi"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Tuzatish serveri uchun ishonchli root tuguni topilmadi"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Qoidalar serveri uchun ishonchli root tuguni topilmadi"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Ishonchli root sertifikatlari olinmadi"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA serveri uchun ishonchli root sertifikati topilmadi"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint sozlamalari kiritilmadi"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU taʼminotchisi topilmadi"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Ulanmoqda"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ulandi"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU serveriga ulanmoqda"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU serveri tasdiqlandi"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU serveriga ulangan"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Birinchi SOAP almashinuvi"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Uzatish uchun javob kutilmoqda"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Javob olindi"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Ikkinchi SOAP almashinuvi"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Uchinchi SOAP almashinuvi"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ishonchli root sertifikatlari olinmoqda"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Sinxronizatsiya yakunlandi"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ochilmoqda"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Ulanmadi"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Registratsiya tamomlanmoqda…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registratsiya tamomlanmadi. Qayta urinish uchun tegining."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registratsiya qilindi. Ulanmoqda…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Juda sekin"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Sekin"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"OK"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Ekranning yoniq turishi"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Qurilma quvvat olayotganda ekran doim yoniq turadi"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI amallari translatsiyasi jurnali"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Barcha Bluetooth paketlarini saqlash. (Sozlashdan keyin Bluetooth qurilmasini qayta ishga tushiring)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Zavod qulfini yechish"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Operatsion tizimni yuklash dasturining qulfini yechishga ruxsat berish"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Zavod qulfini yechishga ruxsat berilsinmi?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Tarmoqlar"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Simsiz monitor sertifikatlari"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Batafsil Wi-Fi jurnali"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Wi-Fi orqali ulanganda tasodifiy MAC manzillar yaratish"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil internet doim yoniq tursin"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Modem rejimida apparatli tezlashtirish"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth qurilmalarini nomlarisiz ko‘rsatish"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ulanmadi"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Simsiz monitorlarni sertifikatlash parametrini ko‘rsatish"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi ulanishini tanlashda har bir SSID uchun jurnalda ko‘rsatilsin"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi-Fi tarmoqlarga ulanishda MAC manzilini tasodifiy tanlash"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Trafik hisoblanadigan tarmoq"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Trafik hisobi yuritilmaydigan tarmoq"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Jurnal buferi hajmi"</string>
diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml
index bfc4d758231f..433df8eaa272 100644
--- a/packages/SettingsLib/res/values-vi/arrays.xml
+++ b/packages/SettingsLib/res/values-vi/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Chỉ sử dụng kiểm tra HDCP cho nội dung DRM"</item>
<item msgid="45075631231212732">"Luôn sử dụng kiểm tra HDCP"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Đã tắt"</item>
+ <item msgid="1969681323976948639">"Đã bật và lọc"</item>
+ <item msgid="8719029132154020716">"Đã bật"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (Mặc định)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml
index 1cd1b298eed1..d03b2f175f60 100644
--- a/packages/SettingsLib/res/values-vi/strings.xml
+++ b/packages/SettingsLib/res/values-vi/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Tự động được kết nối qua %1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Tự động được kết nối qua nhà cung cấp dịch vụ xếp hạng mạng"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Được kết nối qua %1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> của <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Đã kết nối qua <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Có sẵn qua %1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Nhấn để thiết lập"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Nhấn để đăng ký"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Đã kết nối, không có Internet"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Không có Internet"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Yêu cầu đăng nhập"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Điểm truy cập tạm thời đã đạt đến giới hạn số lượng thiết bị truy cập."</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Được kết nối qua %1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Có sẵn qua %1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Không kết nối được"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL máy chủ OSU không hợp lệ"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Không kết nối được với máy chủ OSU"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Không xác thực được máy chủ OSU"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Chứng chỉ máy chủ OSU không hợp lệ"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Đã hủy cấp phép"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Hiện không cấp phép được"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL máy chủ OSU không hợp lệ"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Loại lệnh không mong muốn"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Loại thông báo SOAP không mong muốn"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Không trao đổi được thông báo SOAP"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Không thể bắt đầu chuyển hướng người nghe"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Đã hết thời gian chờ chuyển hướng"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Không tìm thấy hoạt động OSU nào"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Trạng thái thông báo SOAP không mong muốn"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Không tìm thấy PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Không tìm thấy nút gốc tin cậy cho máy chủ AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Không tìm thấy nút gốc tin cậy cho máy chủ khắc phục"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Không tìm thấy nút gốc tin cậy cho máy chủ chính sách"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Không truy xuất được chứng chỉ gốc tin cậy"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Không tìm thấy chứng chỉ gốc tin cậy cho máy chủ AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Không thêm được cấu hình PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Không tìm thấy nhà cung cấp OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Đang kết nối"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Đã kết nối"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Đang kết nối với máy chủ OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Đã xác thực máy chủ OSU"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Đã kết nối với máy chủ OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Lần trao đổi SOAP ban đầu"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Đang đợi thông tin phản hồi chuyển hướng"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Đã nhận được thông tin phản hồi chuyển hướng"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Lần trao đổi SOAP thứ hai"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Lần trao đổi SOAP thứ ba"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Đang truy xuất chứng chỉ gốc tin cậy"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Quá trình cấp phép đã hoàn tất"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Đang mở <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Không thể kết nối"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Đang hoàn tất đăng ký…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Không thể hoàn tất đăng ký. Nhấn để thử lại."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Đã hoàn tất đăng ký. Đang kết nối…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Rất chậm"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Chậm"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"Khá tốt"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Không khóa màn hình"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Màn hình sẽ không bao giờ chuyển sang chế độ nghỉ khi sạc"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bật nhật ký theo dõi HCI Bluetooth"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Chụp các gói Bluetooth. (Chuyển đổi Bluetooth sau khi thay đổi tùy chọn cài đặt này)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Mở khóa OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Cho phép mở khóa trình khởi động"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Cho phép mở khóa OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Mạng"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Chứng nhận hiển thị không dây"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Bật ghi nhật ký chi tiết Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Lựa chọn ngẫu nhiên địa chỉ MAC khi kết nối"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Dữ liệu di động luôn hoạt động"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"Tăng tốc phần cứng cho chia sẻ kết nối"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Hiển thị các thiết bị Bluetooth không có tên"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Không thể kết nối"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Hiển thị tùy chọn chứng nhận hiển thị không dây"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tăng mức ghi nhật ký Wi‑Fi, hiển thị mỗi SSID RSSI trong bộ chọn Wi‑Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Lựa chọn ngẫu nhiên địa chỉ MAC khi kết nối với mạng Wi‑Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Đo lượng dữ liệu"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Không đo lượng dữ liệu"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Kích thước bộ đệm của trình ghi nhật ký"</string>
diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
index 82d8fae8ff8a..270682376ede 100644
--- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"仅使用 HDCP 检查 DRM 内容"</item>
<item msgid="45075631231212732">"始终使用 HDCP 检查"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"已停用"</item>
+ <item msgid="1969681323976948639">"已启用“已过滤”"</item>
+ <item msgid="8719029132154020716">"已启用"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4(默认)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml
index f656e1efa12b..69674472028c 100644
--- a/packages/SettingsLib/res/values-zh-rCN/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"已通过%1$s自动连接"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"已自动连接(通过网络评分服务提供方)"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"已通过%1$s连接"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>(通过<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>连接)"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"已通过<xliff:g id="NAME">%1$s</xliff:g>连接到网络"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"可通过%1$s连接"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"点按即可进行设置"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"点按即可注册"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"已连接,但无法访问互联网"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"无法访问互联网"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"必须登录"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"接入点暂时满载"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"已通过%1$s连接"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"可通过%1$s连接"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"连接失败"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU 服务器网址无效"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"无法连接到 OSU 服务器"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU 服务器验证失败"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU 服务器证书无效"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"已取消配置"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"配置不可用"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU 服务器网址无效"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"非预期的命令类型"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"非预期的 SOAP 消息类型"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"无法交换 SOAP 消息"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"无法启动重定向侦听器"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"等待重定向时出现超时问题"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"未找到任何 OSU 活动"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"非预期的 SOAP 消息状态"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"找不到 PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"找不到 AAA 服务器的信任根节点"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"找不到修复服务器的信任根节点"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"找不到政策服务器的信任根节点"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"未能检索到信任的根证书"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"找不到 AAA 服务器的信任根证书"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"无法添加 PassPoint 配置"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"找不到 OSU 提供程序"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"正在连接"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"已连接"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"正在连接到 OSU 服务器"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU 服务器已经过验证"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"已连接到 OSU 服务器"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"初始 SOAP 交换"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"正在等待重定向响应"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"已收到重定向响应"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"第二次 SOAP 交换"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"第三次 SOAP 交换"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"正在检索信任的根证书"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"配置完成"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"正在打开<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"无法连接"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"正在完成注册…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"无法完成注册。点按即可重试。"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"注册完毕。正在连接…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"很慢"</string>
<string name="speed_label_slow" msgid="813109590815810235">"慢"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"良好"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"不锁定屏幕"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"充电时屏幕不会休眠"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"启用蓝牙 HCI 信息收集日志"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"捕获蓝牙数据包(更改此设置之后请切换蓝牙开关)。"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 解锁"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允许解锁引导加载程序"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"要允许 OEM 解锁吗?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"网络"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"无线显示认证"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"启用 WLAN 详细日志记录功能"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"连接时随机选择 MAC 网址"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"始终开启移动数据网络"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"网络共享硬件加速"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"显示没有名称的蓝牙设备"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"无法连接"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"显示无线显示认证选项"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"提升 WLAN 日志记录级别(在 WLAN 选择器中显示每个 SSID 的 RSSI)"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"连接到 WLAN 网络时随机选择 MAC 地址"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"按流量计费"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"不按流量计费"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"日志记录器缓冲区大小"</string>
diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
index 0a956fc68267..8872cc96fd16 100644
--- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item>
<item msgid="45075631231212732">"永遠使用 HDCP 檢查"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"已停用"</item>
+ <item msgid="1969681323976948639">"已啟用篩選"</item>
+ <item msgid="8719029132154020716">"已啟用"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (預設)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml
index 325a56ab8865..5394afc32334 100644
--- a/packages/SettingsLib/res/values-zh-rHK/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"已透過 %1$s 自動連線"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"已透過網絡評分供應商自動連線"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>的「<xliff:g id="SSID">%1$s</xliff:g>」"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"透過「<xliff:g id="NAME">%1$s</xliff:g>」連線"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 連線"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"輕按即可設定"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"輕觸即可註冊"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"已連線,但沒有互聯網"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"沒有互聯網連線"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"必須登入"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"存取點暫時已滿"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"已透過 %1$s 連線"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"可透過 %1$s 連線"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"連接失敗"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"無效的 OSU 伺服器網址"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"無法連接 OSU 伺服器"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"無法驗證 OSU 伺服器"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"無效的 OSU 伺服器憑證"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"已取消佈建"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"無法佈建"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"無效的 OSU 伺服器網址"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"非預期的指令類型"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"非預期的 SOAP 訊息類型"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"無法交換 SOAP 訊息"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"無法啟用重新導向非同步回呼"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"等待重新導向逾時"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"找不到 OSU 活動"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"非預期的 SOAP 訊息狀態"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"找不到 PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"找不到可信賴的 AAA 伺服器根節點"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"找不到可信賴的修復伺服器根節點"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"找不到可信賴的政策伺服器根節點"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"無法擷取可信賴的根憑證"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"找不到可信賴的 AAA 伺服器根憑證"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"無法新增 PassPoint 設定"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"找不到 OSU 供應商"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"正在連接"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"已連接"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"正在連接至 OSU 伺服器"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"已驗證 OSU 伺服器"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"已連接至 OSU 伺服器"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"初始 SOAP 交換"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"正在等待重新導向回應"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"已收到重新導向回應"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"第二次 SOAP 交換"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"第三次 SOAP 交換"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"正在擷取可信賴的根憑證"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"佈建已完成"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"正在開啟 <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"無法連線"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"正在完成註冊程序…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"無法完成註冊程序。輕觸即可重試。"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"註冊完成。連線中…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"非常慢"</string>
<string name="speed_label_slow" msgid="813109590815810235">"慢"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"良好"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"保持啟用"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"充電時螢幕永不休眠"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"啟用藍牙 HCI 窺探記錄"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"擷取藍牙套裝。(變更此設定後必須切換藍牙)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"原始設備製造商 (OEM) 解鎖"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允許 Bootloader 被解鎖"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"允許原始設備製造商 (OEM) 解鎖嗎?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"網絡"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"無線螢幕分享認證"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"啟用 Wi‑Fi 詳細記錄"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"已連線的 MAC 隨機化處理"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"一律保持啟用流動數據"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"網絡共享硬件加速"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"顯示沒有名稱的藍牙裝置"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"無法連線"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"顯示無線螢幕分享認證的選項"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細紀錄"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"連線至 Wi‑Fi 網絡時隨機產生 MAC 位址"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"按用量收費"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"不限數據用量收費"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"記錄器緩衝區空間"</string>
diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
index 20d0242465d8..207be3f6756c 100644
--- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item>
<item msgid="45075631231212732">"一律使用 HDCP 檢查"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"已停用"</item>
+ <item msgid="1969681323976948639">"已啟用篩選結果"</item>
+ <item msgid="8719029132154020716">"已啟用"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"AVRCP 1.4 (預設)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml
index dff2faba76ca..107eb6de564f 100644
--- a/packages/SettingsLib/res/values-zh-rTW/strings.xml
+++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"已透過 %1$s 自動連線"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"已透過網路評分供應商自動連線"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> (透過「<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>」連線)"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"透過「<xliff:g id="NAME">%1$s</xliff:g>」連線"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 使用"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"輕觸即可進行設定"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"輕觸即可註冊"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"已連線,沒有網際網路"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"沒有網際網路連線"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"必須登入"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"存取點暫時滿載"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"已透過 %1$s 連線"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"可透過 %1$s 使用"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"連線失敗"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"無效的 OSU 伺服器網址"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"無法連線至 OSU 伺服器"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"無法驗證 OSU 伺服器"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"無效的 OSU 伺服器憑證"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"已取消佈建作業"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"無法進行佈建"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"無效的 OSU 伺服器網址"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"非預期的指令類型"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"非預期的 SOAP 訊息類型"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"無法交換 SOAP 訊息"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"無法啟動重新導向接聽器"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"等待重新導向的過程中發生逾時情形"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"找不到 OSU 活動"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"非預期的 SOAP 訊息狀態"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"找不到 PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"找不到 AAA 伺服器的可信任根節點"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"找不到修正伺服器的可信任根節點"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"找不到政策伺服器的可信任根節點"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"無法擷取信任的根憑證"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"找不到 AAA 伺服器的可信任根憑證"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"無法新增 PassPoint 設定"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"找不到 OSU 提供者"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"連線中"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"已連線"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"正在連線至 OSU 伺服器"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU 伺服器已通過驗證"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"已連線至 OSU 伺服器"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"初始 SOAP 交換"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"正在等待重新導向回覆"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"已接收重新導向回覆"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"第二次 SOAP 交換"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"第三次 SOAP 交換"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"正在擷取信任的根憑證"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"已完成佈建作業"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"正在開啟 <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"無法連線"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"正在完成註冊程序…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"無法完成註冊程序。輕觸即可重試。"</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"註冊完成。連線中…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"非常慢"</string>
<string name="speed_label_slow" msgid="813109590815810235">"慢"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"確定"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"螢幕不休眠"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"充電時螢幕不會進入休眠"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"啟用藍牙 HCI 窺探記錄"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"擷取藍牙數據包 (變更這項設定後請切換藍牙)。"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 解鎖"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允許解除鎖定開機載入器"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"要允許 OEM 解鎖嗎?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"網路連線"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"無線螢幕分享認證"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"啟用 Wi‑Fi 詳細記錄設定"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"已連線的 MAC 隨機化處理"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"行動數據連線一律保持啟用狀態"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"數據連線硬體加速"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"顯示沒有名稱的藍牙裝置"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"無法連線"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"顯示無線螢幕分享認證的選項"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細記錄"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"連線至 Wi‑Fi 網路時隨機化 MAC 位址"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"計量付費"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"非計量付費"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"記錄器緩衝區空間"</string>
diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml
index caa7da3029b1..20983e34745c 100644
--- a/packages/SettingsLib/res/values-zu/arrays.xml
+++ b/packages/SettingsLib/res/values-zu/arrays.xml
@@ -58,9 +58,11 @@
<item msgid="3878793616631049349">"Sebenzisa ukuhlola kwe-HDCP kokuqukethwe i-DRM kuphela"</item>
<item msgid="45075631231212732">"Sebenzisa njalo ukuhlola kwe-HDPC"</item>
</string-array>
- <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) -->
- <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) -->
- <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) -->
+ <string-array name="bt_hci_snoop_log_entries">
+ <item msgid="3966341281672645384">"Kukhutshaziwe"</item>
+ <item msgid="1969681323976948639">"Okuhlungiwe okunikwe amandla"</item>
+ <item msgid="8719029132154020716">"Kunikwe amandla"</item>
+ </string-array>
<string-array name="bluetooth_avrcp_versions">
<item msgid="5347678900838034763">"I-AVRCP 1.4 (Okuzenzakalelayo)"</item>
<item msgid="2809759619990248160">"I-AVRCP 1.3"</item>
diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml
index b8c1637096c8..920df4b81475 100644
--- a/packages/SettingsLib/res/values-zu/strings.xml
+++ b/packages/SettingsLib/res/values-zu/strings.xml
@@ -38,50 +38,20 @@
<string name="connected_via_network_scorer" msgid="5713793306870815341">"Ixhumeke ngokuzenzakalela nge-%1$s"</string>
<string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Kuxhunywe ngokuzenzakalelayo ngomhlinzeki wesilinganiso wenethiwekhi"</string>
<string name="connected_via_passpoint" msgid="2826205693803088747">"Kuxhumeke nge-%1$s"</string>
- <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> ngo-<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string>
+ <string name="connected_via_app" msgid="5571999941988929520">"Ixhumeke nge-<xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="available_via_passpoint" msgid="1617440946846329613">"Iyatholakala nge-%1$s"</string>
- <string name="tap_to_set_up" msgid="2468970825530423314">"Thepha ukuze usethe"</string>
+ <string name="tap_to_sign_up" msgid="6449724763052579434">"Thepha ukuze ubhalisele"</string>
<string name="wifi_connected_no_internet" msgid="8202906332837777829">"Kuxhunyiwe, ayikho i-inthanethi"</string>
<string name="wifi_status_no_internet" msgid="5784710974669608361">"Ayikho i-inthanethi"</string>
<string name="wifi_status_sign_in_required" msgid="123517180404752756">"Ukungena ngemvume kuyadingeka"</string>
<string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Iphoyinti lokufinyelela ligcwele okwesikhashana"</string>
<string name="connected_via_carrier" msgid="7583780074526041912">"Kuxhumeke nge-%1$s"</string>
<string name="available_via_carrier" msgid="1469036129740799053">"Iyatholakala nge-%1$s"</string>
- <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ukuxhumeka kuhlulekile"</string>
- <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"I-URL yeseva ye-OSU engavumelekile"</string>
- <string name="osu_failure_server_connection" msgid="8192988165059982174">"Ukuxhumeka kweseva ye-OSU kuhlulekile"</string>
- <string name="osu_failure_server_validation" msgid="4631649978129606823">"Ukuqinisekiswa kweseva ye-OSU kuhlulekile"</string>
- <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Isitifiketi esingavumelekile seseva ye-OSU"</string>
- <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Ukunikezelwa kuyekeliwe"</string>
- <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Ukunikezelwa akutholakali"</string>
- <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"I-URL yeseva ye-OSU engavumelekile"</string>
- <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Uhlobo lomyalo ongalindelwe"</string>
- <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Uhlobo lomlayezo ongalindelwe we-SOAP"</string>
- <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Ukushintshaniswa komlayezo we-SOAP kuhlulekile"</string>
- <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Ukuqondisa kabusha umlaleli kuhlulekile ukuqala"</string>
- <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Iphelelwe isikhathi ilindele ukuqondiswa kabusha"</string>
- <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Awukho umsebenzi we-OSU otholiwe"</string>
- <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Isimo somlayezo we-SOAP ongalindelwe"</string>
- <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Yehlulekile ukuthola i-PPS-MO"</string>
- <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Yehlulekile ukuthola inodi yempande yokuthemba yeseva ye-AAA"</string>
- <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Yehlulekile ukuthola inodi yempande yokuthemba yeseva yokuxazulula"</string>
- <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Yehlulekile ukuthola inodi yempande yokuthemba yeseva yenqubomgomo"</string>
- <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Yehlulekile ukuthola izitofiketi zempande yokuthenga"</string>
- <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Yehlulekile ukuthola isitifiketi sempande yokuthemba yamaseva e-AAA"</string>
- <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Yehlulekile ukungeza ukulungiselelwa kwe-PassPoint"</string>
- <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Yehlulekile ukuthola umhlinzeki we-OSU"</string>
- <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Iyaxhuma"</string>
- <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ixhunyiwe"</string>
- <string name="osu_status_server_connecting" msgid="8499785407540355867">"Ixhumeka kuseva ye-OSU"</string>
- <string name="osu_status_server_validated" msgid="3158727184762596355">"Iseva ye-OSU iqinisekisiwe"</string>
- <string name="osu_status_server_connected" msgid="8382024481520158168">"Ixhumeke kuseva ye-OSU"</string>
- <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Ukushintshisana kwasekuqaleni kwe-SOAP"</string>
- <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Ilindele impendulo yokuqondisa kabusha"</string>
- <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Ithole impendulo eqondiswe kabusha"</string>
- <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Ukushintshisana kwesibili kwe-SOAP"</string>
- <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Ukushintshaniswa kwesithathu kwe-SOAP"</string>
- <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ithola izitifiketi zempande yokuthemba"</string>
- <string name="osu_provisioning_complete" msgid="5120178802493970149">"Ukunikezelwa kuqediwe"</string>
+ <string name="osu_opening_provider" msgid="5488997661548640424">"Ivula i-<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string>
+ <string name="osu_connect_failed" msgid="2187750899158158934">"Ayikwazanga ukuxhumeka"</string>
+ <string name="osu_completing_sign_up" msgid="9037638564719197082">"Iqedela ukubhalisa…"</string>
+ <string name="osu_sign_up_failed" msgid="7296159750352873260">"Ayikwazanga ukuqedelela ukubhalisa. Thepha ukuze uzame futhi."</string>
+ <string name="osu_sign_up_complete" msgid="8207626049093289203">"Ukubhalisa kuqediwe. Iyaxhuma…"</string>
<string name="speed_label_very_slow" msgid="1867055264243608530">"Phansi kakhulu"</string>
<string name="speed_label_slow" msgid="813109590815810235">"Phansi"</string>
<string name="speed_label_okay" msgid="2331665440671174858">"KULUNGILE"</string>
@@ -234,8 +204,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Hlala uphapheme"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Isikrini asisoze salala ngenkathi sishaja"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Nika amandla i-Bluetooth HCI yelogu lokuhlola"</string>
- <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) -->
- <skip />
+ <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Thwebula amaphakethi e-Bluetooth. (Guqula i-Bluetooth ngemuva kokushintsha lesi silungiselelo)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"Ukuvula i-OEM"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Vumela ukuthi i-bootloader ivulwe"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vumela ukuvula i-OEM?"</string>
@@ -246,7 +215,6 @@
<string name="debug_networking_category" msgid="7044075693643009662">"Ukunethiwekha"</string>
<string name="wifi_display_certification" msgid="8611569543791307533">"Ukunikezwa isitifiketi sokubukeka okungenantambo"</string>
<string name="wifi_verbose_logging" msgid="4203729756047242344">"Nika amandlaukungena kwe-Wi-Fi Verbose"</string>
- <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Okungahleliwe kwe-MAC exhunyiwe"</string>
<string name="mobile_data_always_on" msgid="8774857027458200434">"Idatha yeselula ihlala isebenza"</string>
<string name="tethering_hardware_offload" msgid="7470077827090325814">"I-Tethering hardware acceleration"</string>
<string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bonisa amadivayisi e-Bluetooth ngaphandle kwamagama"</string>
@@ -273,7 +241,6 @@
<string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ayikwazanga ukuxhuma"</string>
<string name="wifi_display_certification_summary" msgid="1155182309166746973">"Bonisa izinketho zokunikeza isitifiketi ukubukeka okungenantambo"</string>
<string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"khuphula izinga lokungena le-Wi-Fi, bonisa nge-SSID RSSI engayodwana kusikhethi se-Wi-Fi"</string>
- <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Ungahleli ikheli le-MAC uma kuxhumeke kumanethiwekhi e-Wi-Fi"</string>
<string name="wifi_metered_label" msgid="4514924227256839725">"Kulinganisiwe"</string>
<string name="wifi_unmetered_label" msgid="6124098729457992931">"Akulinganiselwa"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"Amasayizi weloga ngebhafa"</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java b/packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java
index cc970b93f601..bd9a636883c2 100644
--- a/packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java
+++ b/packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java
@@ -26,21 +26,23 @@ import android.util.Log;
import java.util.ArrayList;
import java.util.List;
+import androidx.annotation.VisibleForTesting;
+
/**
- * Loader for network data usage history. It returns a list of usage data per billing cycle for a
- * specific Uid.
+ * Loader for network data usage history. It returns a list of usage data per billing cycle for the
+ * specific Uid(s).
*/
public class NetworkCycleDataForUidLoader extends
NetworkCycleDataLoader<List<NetworkCycleDataForUid>> {
private static final String TAG = "NetworkDataForUidLoader";
private final List<NetworkCycleDataForUid> mData;
- private final int mUid;
+ private final List<Integer> mUids;
private final boolean mRetrieveDetail;
private NetworkCycleDataForUidLoader(Builder builder) {
super(builder);
- mUid = builder.mUid;
+ mUids = builder.mUids;
mRetrieveDetail = builder.mRetrieveDetail;
mData = new ArrayList<NetworkCycleDataForUid>();
}
@@ -48,18 +50,27 @@ public class NetworkCycleDataForUidLoader extends
@Override
void recordUsage(long start, long end) {
try {
- final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid(
- mNetworkType, mSubId, start, end, mUid);
- final long total = getTotalUsage(stats);
- if (total > 0L) {
+ long totalUsage = 0L;
+ long totalForeground = 0L;
+ for (int uid : mUids) {
+ final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid(
+ mNetworkType, mSubId, start, end, uid);
+ final long usage = getTotalUsage(stats);
+ if (usage > 0L) {
+ totalUsage += usage;
+ if (mRetrieveDetail) {
+ totalForeground += getForegroundUsage(start, end, uid);
+ }
+ }
+ }
+ if (totalUsage > 0L) {
final NetworkCycleDataForUid.Builder builder = new NetworkCycleDataForUid.Builder();
builder.setStartTime(start)
.setEndTime(end)
- .setTotalUsage(total);
+ .setTotalUsage(totalUsage);
if (mRetrieveDetail) {
- final long foreground = getForegroundUsage(start, end);
- builder.setBackgroundUsage(total - foreground)
- .setForegroundUsage(foreground);
+ builder.setBackgroundUsage(totalUsage - totalForeground)
+ .setForegroundUsage(totalForeground);
}
mData.add(builder.build());
}
@@ -82,24 +93,29 @@ public class NetworkCycleDataForUidLoader extends
};
}
- private long getForegroundUsage(long start, long end) {
+ @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+ public List<Integer> getUids() {
+ return mUids;
+ }
+
+ private long getForegroundUsage(long start, long end, int uid) {
final NetworkStats stats = mNetworkStatsManager.queryDetailsForUidTagState(
- mNetworkType, mSubId, start, end, mUid, TAG_NONE, STATE_FOREGROUND);
+ mNetworkType, mSubId, start, end, uid, TAG_NONE, STATE_FOREGROUND);
return getTotalUsage(stats);
}
public static abstract class Builder<T extends NetworkCycleDataForUidLoader>
extends NetworkCycleDataLoader.Builder<T> {
- private int mUid;
+ private final List<Integer> mUids = new ArrayList<>();
private boolean mRetrieveDetail = true;
public Builder(Context context) {
super(context);
}
- public Builder<T> setUid(int uid) {
- mUid = uid;
+ public Builder<T> addUid(int uid) {
+ mUids.add(uid);
return this;
}
diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java
index d9159631e8a9..aafb46a1dbf1 100644
--- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java
+++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java
@@ -70,7 +70,7 @@ public class NetworkCycleDataForUidLoaderTest {
final String subId = "TestSubscriber";
final int uid = 1;
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
- .setUid(uid).setSubscriberId(subId).build());
+ .addUid(uid).setSubscriberId(subId).build());
doReturn(1024L).when(mLoader).getTotalUsage(any());
mLoader.recordUsage(start, end);
@@ -88,11 +88,32 @@ public class NetworkCycleDataForUidLoaderTest {
final String subId = "TestSubscriber";
final int uid = 1;
mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
- .setRetrieveDetail(false).setUid(uid).setSubscriberId(subId).build());
+ .setRetrieveDetail(false).addUid(uid).setSubscriberId(subId).build());
doReturn(1024L).when(mLoader).getTotalUsage(any());
mLoader.recordUsage(start, end);
verify(mNetworkStatsManager, never()).queryDetailsForUidTagState(
networkType, subId, start, end, uid, TAG_NONE, STATE_FOREGROUND);
}
+
+ @Test
+ public void recordUsage_multipleUids_shouldQueryNetworkDetailsForEachUid() {
+ final long end = System.currentTimeMillis();
+ final long start = end - (DateUtils.WEEK_IN_MILLIS * 4);
+ final int networkType = ConnectivityManager.TYPE_MOBILE;
+ final String subId = "TestSubscriber";
+ mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext)
+ .addUid(1)
+ .addUid(2)
+ .addUid(3)
+ .setSubscriberId(subId).build());
+ doReturn(1024L).when(mLoader).getTotalUsage(any());
+
+ mLoader.recordUsage(start, end);
+
+ verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 1);
+ verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 2);
+ verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 3);
+ }
+
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index 479c964343c3..fad93cbf83da 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -2079,6 +2079,9 @@ class SettingsProtoDumpUtil {
Settings.Secure.NOTIFICATION_BADGING,
SecureSettingsProto.Notification.BADGING);
dumpSetting(s, p,
+ Settings.Secure.NOTIFICATION_BUBBLES,
+ SecureSettingsProto.Notification.BUBBLES);
+ dumpSetting(s, p,
Settings.Secure.SHOW_NOTE_ABOUT_NOTIFICATION_HIDING,
SecureSettingsProto.Notification.SHOW_NOTE_ABOUT_NOTIFICATION_HIDING);
dumpSetting(s, p,
diff --git a/packages/SystemUI/res/drawable/bubble_expanded_header_bg.xml b/packages/SystemUI/res/drawable/bubble_expanded_header_bg.xml
index 26bf981f9625..a76b7b1c8f7b 100644
--- a/packages/SystemUI/res/drawable/bubble_expanded_header_bg.xml
+++ b/packages/SystemUI/res/drawable/bubble_expanded_header_bg.xml
@@ -23,10 +23,4 @@
android:topRightRadius="@dimen/corner_size"/>
</shape>
</item>
- <item android:gravity="bottom">
- <shape>
- <size android:height="1dp"/>
- <solid android:color="?android:attr/textColorSecondary" />
- </shape>
- </item>
</layer-list> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/bubble_expanded_view.xml b/packages/SystemUI/res/layout/bubble_expanded_view.xml
index f0d2b2eff130..f664c0581d7e 100644
--- a/packages/SystemUI/res/layout/bubble_expanded_view.xml
+++ b/packages/SystemUI/res/layout/bubble_expanded_view.xml
@@ -14,7 +14,7 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
-<com.android.systemui.bubbles.BubbleExpandedViewContainer
+<com.android.systemui.bubbles.BubbleExpandedView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="match_parent"
@@ -27,48 +27,70 @@
android:layout_height="@dimen/bubble_pointer_height"
/>
- <LinearLayout
- android:id="@+id/header_layout"
- android:layout_height="@dimen/bubble_expanded_header_height"
- android:layout_width="match_parent"
- android:orientation="horizontal"
+ <FrameLayout
+ android:id="@+id/header_permission_wrapper"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:animateLayoutChanges="true"
android:background="@drawable/bubble_expanded_header_bg">
- <TextView
- android:id="@+id/header_text"
- android:textAppearance="@*android:style/TextAppearance.Material.Title"
- android:textSize="18sp"
- android:layout_weight="1"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:gravity="start|center_vertical"
- android:singleLine="true"
- android:paddingLeft="@dimen/bubble_expanded_header_horizontal_padding"
- android:paddingRight="@dimen/bubble_expanded_header_horizontal_padding"
- />
+ <LinearLayout
+ android:id="@+id/header_layout"
+ android:layout_height="@dimen/bubble_expanded_header_height"
+ android:layout_width="match_parent"
+ android:animateLayoutChanges="true"
+ android:orientation="horizontal">
- <ImageButton
- android:id="@+id/deep_link_button"
- android:layout_width="@dimen/bubble_header_icon_size"
- android:layout_height="@dimen/bubble_header_icon_size"
- android:gravity="end|center_vertical"
- android:src="@drawable/ic_open_in_new"
- android:scaleType="center"
- android:tint="?android:attr/colorForeground"
- android:background="?android:attr/selectableItemBackground"
- />
+ <TextView
+ android:id="@+id/header_text"
+ android:textAppearance="@*android:style/TextAppearance.Material.Title"
+ android:textSize="18sp"
+ android:layout_weight="1"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:gravity="start|center_vertical"
+ android:singleLine="true"
+ android:paddingLeft="@dimen/bubble_expanded_header_horizontal_padding"
+ android:paddingRight="@dimen/bubble_expanded_header_horizontal_padding"
+ />
+
+ <ImageButton
+ android:id="@+id/deep_link_button"
+ android:layout_width="@dimen/bubble_header_icon_size"
+ android:layout_height="@dimen/bubble_header_icon_size"
+ android:gravity="end|center_vertical"
+ android:src="@drawable/ic_open_in_new"
+ android:scaleType="center"
+ android:tint="?android:attr/colorForeground"
+ android:background="?android:attr/selectableItemBackground"
+ />
- <ImageButton
- android:id="@id/settings_button"
- android:layout_width="@dimen/bubble_header_icon_size"
- android:layout_height="@dimen/bubble_header_icon_size"
- android:src="@drawable/ic_settings"
- android:gravity="end|center_vertical"
- android:scaleType="center"
- android:tint="?android:attr/colorForeground"
- android:background="?android:attr/selectableItemBackground"
+ <ImageButton
+ android:id="@id/settings_button"
+ android:layout_width="@dimen/bubble_header_icon_size"
+ android:layout_height="@dimen/bubble_header_icon_size"
+ android:src="@drawable/ic_settings"
+ android:gravity="end|center_vertical"
+ android:scaleType="center"
+ android:tint="?android:attr/colorForeground"
+ android:background="?android:attr/selectableItemBackground"
+ />
+
+ </LinearLayout>
+
+ <include layout="@layout/bubble_permission_view"
+ android:id="@+id/permission_layout"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
/>
- </LinearLayout>
+ <View
+ android:id="@+id/divider"
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_gravity="bottom"
+ android:background="?android:attr/dividerHorizontal"/>
+
+ </FrameLayout>
-</com.android.systemui.bubbles.BubbleExpandedViewContainer>
+</com.android.systemui.bubbles.BubbleExpandedView>
diff --git a/packages/SystemUI/res/layout/bubble_permission_view.xml b/packages/SystemUI/res/layout/bubble_permission_view.xml
new file mode 100644
index 000000000000..7fbb78a6feee
--- /dev/null
+++ b/packages/SystemUI/res/layout/bubble_permission_view.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 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.
+-->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:animateLayoutChanges="true"
+ android:orientation="vertical"
+ android:paddingStart="@dimen/bubble_expanded_header_horizontal_padding"
+ android:paddingEnd="@dimen/bubble_expanded_header_horizontal_padding">
+
+ <!-- App info -->
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:layout_marginTop="@dimen/bubble_expanded_header_horizontal_padding" >
+
+ <ImageView
+ android:id="@+id/pkgicon"
+ android:layout_width="@dimen/bubble_permission_icon_size"
+ android:layout_height="@dimen/bubble_permission_icon_size"
+ android:layout_centerVertical="true"
+ android:layout_marginEnd="3dp"
+ />
+
+ <TextView
+ android:id="@+id/pkgname"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:textAppearance="@*android:style/TextAppearance.Material.Body2"
+ android:layout_marginStart="3dp"
+ android:layout_marginEnd="2dp"
+ android:singleLine="true"
+ android:gravity="center_vertical"
+ android:layout_centerVertical="true"
+ />
+ </LinearLayout>
+
+ <!-- Actual permission -->
+ <TextView
+ android:id="@+id/prompt"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:text="@string/bubbles_prompt"
+ style="@*android:style/TextAppearance.Material.Body1" />
+
+ <!-- Buttons -->
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="end"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/no_bubbles_button"
+ android:text="@string/no_bubbles"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:background="@drawable/ripple_drawable"
+ style="@style/TextAppearance.NotificationInfo.Button"/>
+ <TextView
+ android:id="@+id/yes_bubbles_button"
+ android:text="@string/yes_bubbles"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:background="@drawable/ripple_drawable"
+ style="@style/TextAppearance.NotificationInfo.Button"/>
+ </LinearLayout>
+</LinearLayout> \ No newline at end of file
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index a5c8eafb8e8f..03445352e330 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1041,4 +1041,6 @@
<dimen name="bubble_stack_starting_offset_y">100dp</dimen>
<!-- Size of image buttons in the bubble header -->
<dimen name="bubble_header_icon_size">48dp</dimen>
+ <!-- Size of the app icon shown in the bubble permission view -->
+ <dimen name="bubble_permission_icon_size">24dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 5365dcf72f11..db4a6cc1d704 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -2356,5 +2356,12 @@
<!-- Text used for content description of settings button in the header of expanded bubble
view. [CHAR_LIMIT=NONE] -->
<string name="bubbles_settings_button_description">Open notification settings for <xliff:g id="app_name" example="YouTube">%1$s</xliff:g></string>
+ <!-- Text for asking the user whether bubbles (floating app content) should be enabled for an
+ app. [CHAR LIMIT=NONE] -->
+ <string name="bubbles_prompt">Allow bubbles from this app?</string>
+ <!-- Text used for button allowing user to opt out of bubbles [CHAR LIMIT=20] -->
+ <string name="no_bubbles">Block</string>
+ <!-- Text used for button allowing user to approve / enable bubbles [CHAR LIMIT=20] -->
+ <string name="yes_bubbles">Allow</string>
</resources>
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 0970c2136822..f277c4303ac1 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -205,6 +205,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
private boolean mKeyguardGoingAway;
private boolean mGoingToSleep;
private boolean mBouncer;
+ private boolean mAuthInterruptActive;
private boolean mBootCompleted;
private boolean mNeedsSlowUnlockTransition;
private boolean mHasLockscreenWallpaper;
@@ -1565,10 +1566,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
}
/**
- * Request passive authentication, when sensors detect that a user might be present.
+ * Called whenever passive authentication is requested or aborted by a sensor.
+ * @param active If the interrupt started or ended.
*/
- public void onAuthInterruptDetected() {
- if (DEBUG) Log.d(TAG, "onAuthInterruptDetected()");
+ public void onAuthInterruptDetected(boolean active) {
+ if (DEBUG) Log.d(TAG, "onAuthInterruptDetected(" + active + ")");
+ if (mAuthInterruptActive == active) {
+ return;
+ }
+ mAuthInterruptActive = active;
updateFaceListeningState();
}
@@ -1612,7 +1618,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
final boolean awakeKeyguard = mKeyguardIsVisible && mDeviceInteractive && !mGoingToSleep;
final int user = getCurrentUser();
- return (mBouncer || awakeKeyguard || shouldListenForFaceAssistant())
+ return (mBouncer || mAuthInterruptActive || awakeKeyguard || shouldListenForFaceAssistant())
&& !mSwitchingUser && !getUserCanSkipBouncer(user) && !isFaceDisabled(user)
&& !mKeyguardGoingAway && !mFaceLockedOut && mFaceSettingEnabledForUser
&& mUserManager.isUserUnlocked(user);
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
index 9a9a52f40227..d6a46a9e3458 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java
@@ -70,7 +70,7 @@ import javax.inject.Singleton;
* The controller manages addition, removal, and visible state of bubbles on screen.
*/
@Singleton
-public class BubbleController {
+public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListener {
private static final int MAX_BUBBLES = 5; // TODO: actually enforce this
private static final String TAG = "BubbleController";
@@ -266,6 +266,7 @@ public class BubbleController {
if (mExpandListener != null) {
mStackView.setExpandListener(mExpandListener);
}
+ mStackView.setOnBlockedListener(this);
}
// It's new
BubbleView bubble = (BubbleView) mInflater.inflate(
@@ -302,6 +303,19 @@ public class BubbleController {
updateVisibility();
}
+ @Override
+ public void onBubbleBlocked(NotificationEntry entry) {
+ Object[] bubbles = mBubbles.values().toArray();
+ for (int i = 0; i < bubbles.length; i++) {
+ NotificationEntry e = ((BubbleView) bubbles[i]).getEntry();
+ boolean samePackage = entry.notification.getPackageName().equals(
+ e.notification.getPackageName());
+ if (samePackage) {
+ removeBubble(entry.key);
+ }
+ }
+ }
+
@SuppressWarnings("FieldCanBeLocal")
private final NotificationEntryListener mEntryListener = new NotificationEntryListener() {
@Override
@@ -446,20 +460,9 @@ public class BubbleController {
@VisibleForTesting
protected boolean shouldBubble(NotificationEntry entry) {
StatusBarNotification n = entry.notification;
- boolean canAppOverlay = false;
- try {
- canAppOverlay = mNotificationManagerService.areBubblesAllowedForPackage(
- n.getPackageName(), n.getUid());
- } catch (RemoteException e) {
- Log.w(TAG, "Error calling NoMan to determine if app can overlay", e);
- }
-
- NotificationChannel channel = mNotificationEntryManager.getNotificationData().getChannel(
- entry.key);
- boolean canChannelOverlay = channel != null && channel.canBubble();
boolean hasOverlayIntent = n.getNotification().getBubbleMetadata() != null
&& n.getNotification().getBubbleMetadata().getIntent() != null;
- return hasOverlayIntent && canChannelOverlay && canAppOverlay;
+ return hasOverlayIntent && entry.canBubble;
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedViewContainer.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
index 67b18fdfc858..bf9d7ba61189 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedViewContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java
@@ -16,7 +16,10 @@
package com.android.systemui.bubbles;
+import android.animation.LayoutTransition;
+import android.animation.ObjectAnimator;
import android.annotation.Nullable;
+import android.app.INotificationManager;
import android.app.Notification;
import android.app.PendingIntent;
import android.content.Context;
@@ -26,16 +29,21 @@ import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
+import android.graphics.drawable.Drawable;
import android.graphics.drawable.ShapeDrawable;
+import android.os.RemoteException;
+import android.os.ServiceManager;
import android.provider.Settings;
-import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
+import android.widget.FrameLayout;
import android.widget.ImageButton;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.recents.TriangleShape;
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
@@ -43,43 +51,58 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry;
/**
* Container for the expanded bubble view, handles rendering the caret and header of the view.
*/
-public class BubbleExpandedViewContainer extends LinearLayout implements View.OnClickListener {
+public class BubbleExpandedView extends LinearLayout implements View.OnClickListener {
private static final String TAG = "BubbleExpandedView";
// The triangle pointing to the expanded view
private View mPointerView;
- // The view displayed between the pointer and the expanded view
- private TextView mHeaderView;
- // Tappable header icon deeplinking into the app
+
+ // Header
+ private View mHeaderView;
+ private TextView mHeaderTextView;
private ImageButton mDeepLinkIcon;
- // Tappable header icon deeplinking into notification settings
private ImageButton mSettingsIcon;
+
+ // Permission view
+ private View mPermissionView;
+
// The view that is being displayed for the expanded state
private View mExpandedView;
private NotificationEntry mEntry;
private PackageManager mPm;
private String mAppName;
+ private Drawable mAppIcon;
+
+ private INotificationManager mNotificationManagerService;
// Need reference to let it know to collapse when new task is launched
private BubbleStackView mStackView;
- public BubbleExpandedViewContainer(Context context) {
+ private OnBubbleBlockedListener mOnBubbleBlockedListener;
+
+ public BubbleExpandedView(Context context) {
this(context, null);
}
- public BubbleExpandedViewContainer(Context context, AttributeSet attrs) {
+ public BubbleExpandedView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
- public BubbleExpandedViewContainer(Context context, AttributeSet attrs, int defStyleAttr) {
+ public BubbleExpandedView(Context context, AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
- public BubbleExpandedViewContainer(Context context, AttributeSet attrs, int defStyleAttr,
+ public BubbleExpandedView(Context context, AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mPm = context.getPackageManager();
+ try {
+ mNotificationManagerService = INotificationManager.Stub.asInterface(
+ ServiceManager.getServiceOrThrow(Context.NOTIFICATION_SERVICE));
+ } catch (ServiceManager.ServiceNotFoundException e) {
+ Log.w(TAG, e);
+ }
}
@Override
@@ -101,11 +124,39 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On
triangleDrawable.setTint(bgColor);
mPointerView.setBackground(triangleDrawable);
- mHeaderView = findViewById(R.id.header_text);
+ FrameLayout viewWrapper = findViewById(R.id.header_permission_wrapper);
+ LayoutTransition transition = new LayoutTransition();
+ transition.setDuration(200);
+
+ ObjectAnimator appearAnimator = ObjectAnimator.ofFloat(null, View.ALPHA, 0f, 1f);
+ transition.setAnimator(LayoutTransition.APPEARING, appearAnimator);
+ transition.setInterpolator(LayoutTransition.APPEARING, Interpolators.ALPHA_IN);
+
+ ObjectAnimator disappearAnimator = ObjectAnimator.ofFloat(null, View.ALPHA, 1f, 0f);
+ transition.setAnimator(LayoutTransition.DISAPPEARING, disappearAnimator);
+ transition.setInterpolator(LayoutTransition.DISAPPEARING, Interpolators.ALPHA_OUT);
+
+ transition.setAnimateParentHierarchy(false);
+ viewWrapper.setLayoutTransition(transition);
+ viewWrapper.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
+
+ mHeaderView = findViewById(R.id.header_layout);
+ mHeaderTextView = findViewById(R.id.header_text);
mDeepLinkIcon = findViewById(R.id.deep_link_button);
mSettingsIcon = findViewById(R.id.settings_button);
mDeepLinkIcon.setOnClickListener(this);
mSettingsIcon.setOnClickListener(this);
+
+ mPermissionView = findViewById(R.id.permission_layout);
+ findViewById(R.id.no_bubbles_button).setOnClickListener(this);
+ findViewById(R.id.yes_bubbles_button).setOnClickListener(this);
+ }
+
+ /**
+ * Sets the listener to notify when a bubble has been blocked.
+ */
+ public void setOnBlockedListener(OnBubbleBlockedListener listener) {
+ mOnBubbleBlockedListener = listener;
}
/**
@@ -125,13 +176,17 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On
| PackageManager.MATCH_DIRECT_BOOT_AWARE);
if (info != null) {
mAppName = String.valueOf(mPm.getApplicationLabel(info));
+ mAppIcon = mPm.getApplicationIcon(info);
}
} catch (PackageManager.NameNotFoundException e) {
// Ahh... just use package name
mAppName = entry.notification.getPackageName();
}
-
+ if (mAppIcon == null) {
+ mAppIcon = mPm.getDefaultActivityIcon();
+ }
updateHeaderView();
+ updatePermissionView();
}
private void updateHeaderView() {
@@ -140,11 +195,31 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On
mDeepLinkIcon.setContentDescription(getResources().getString(
R.string.bubbles_deep_link_button_description, mAppName));
if (mEntry != null && mEntry.getBubbleMetadata() != null) {
- setHeaderText(mEntry.getBubbleMetadata().getTitle());
+ mHeaderTextView.setText(mEntry.getBubbleMetadata().getTitle());
} else {
// This should only happen if we're auto-bubbling notification content that isn't
// explicitly a bubble
- setHeaderText(mAppName);
+ mHeaderTextView.setText(mAppName);
+ }
+ }
+
+ private void updatePermissionView() {
+ boolean hasUserApprovedBubblesForPackage = false;
+ try {
+ hasUserApprovedBubblesForPackage =
+ mNotificationManagerService.hasUserApprovedBubblesForPackage(
+ mEntry.notification.getPackageName(), mEntry.notification.getUid());
+ } catch (RemoteException e) {
+ Log.w(TAG, e);
+ }
+ if (hasUserApprovedBubblesForPackage) {
+ mHeaderView.setVisibility(VISIBLE);
+ mPermissionView.setVisibility(GONE);
+ } else {
+ mHeaderView.setVisibility(GONE);
+ mPermissionView.setVisibility(VISIBLE);
+ ((ImageView) mPermissionView.findViewById(R.id.pkgicon)).setImageDrawable(mAppIcon);
+ ((TextView) mPermissionView.findViewById(R.id.pkgname)).setText(mAppName);
}
}
@@ -168,6 +243,27 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On
Intent intent = getSettingsIntent(mEntry.notification.getPackageName(),
mEntry.notification.getUid());
mStackView.collapseStack(() -> mContext.startActivity(intent));
+ } else if (id == R.id.no_bubbles_button) {
+ setBubblesAllowed(false);
+ } else if (id == R.id.yes_bubbles_button) {
+ setBubblesAllowed(true);
+ }
+ }
+
+ private void setBubblesAllowed(boolean allowed) {
+ try {
+ mNotificationManagerService.setBubblesAllowed(
+ mEntry.notification.getPackageName(),
+ mEntry.notification.getUid(),
+ allowed);
+ if (allowed) {
+ mPermissionView.setVisibility(GONE);
+ mHeaderView.setVisibility(VISIBLE);
+ } else if (mOnBubbleBlockedListener != null) {
+ mOnBubbleBlockedListener.onBubbleBlocked(mEntry);
+ }
+ } catch (RemoteException e) {
+ Log.w(TAG, e);
}
}
@@ -181,14 +277,6 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On
}
/**
- * Set the text displayed within the header.
- */
- private void setHeaderText(CharSequence text) {
- mHeaderView.setText(text);
- mHeaderView.setVisibility(TextUtils.isEmpty(text) ? GONE : VISIBLE);
- }
-
- /**
* Set the view to display for the expanded state. Passing null will clear the view.
*/
public void setExpandedView(View view) {
@@ -220,4 +308,14 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return intent;
}
+
+ /**
+ * Listener that is notified when a bubble is blocked.
+ */
+ public interface OnBubbleBlockedListener {
+ /**
+ * Called when a bubble is blocked for the provided entry.
+ */
+ void onBubbleBlocked(NotificationEntry entry);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
index b6acd6385c34..305f86655fcd 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
@@ -94,7 +94,7 @@ public class BubbleStackView extends FrameLayout implements BubbleTouchHandler.F
private StackAnimationController mStackAnimationController;
private ExpandedAnimationController mExpandedAnimationController;
- private BubbleExpandedViewContainer mExpandedViewContainer;
+ private BubbleExpandedView mExpandedViewContainer;
private int mBubbleSize;
private int mBubblePadding;
@@ -173,7 +173,7 @@ public class BubbleStackView extends FrameLayout implements BubbleTouchHandler.F
mBubbleContainer.setClipChildren(false);
addView(mBubbleContainer, new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));
- mExpandedViewContainer = (BubbleExpandedViewContainer)
+ mExpandedViewContainer = (BubbleExpandedView)
LayoutInflater.from(context).inflate(R.layout.bubble_expanded_view,
this /* parent */, false /* attachToRoot */);
mExpandedViewContainer.setElevation(elevation);
@@ -224,6 +224,13 @@ public class BubbleStackView extends FrameLayout implements BubbleTouchHandler.F
}
/**
+ * Sets the listener to notify when a bubble is blocked.
+ */
+ public void setOnBlockedListener(BubbleExpandedView.OnBubbleBlockedListener listener) {
+ mExpandedViewContainer.setOnBlockedListener(listener);
+ }
+
+ /**
* Whether the stack of bubbles is expanded or not.
*/
public boolean isExpanded() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
index 9f1693c71459..f74de5beb585 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java
@@ -151,6 +151,12 @@ public final class NotificationEntry {
private boolean mIsBubble;
/**
+ * Whether this notification has been approved globally, at the app level, and at the channel
+ * level for bubbling.
+ */
+ public boolean canBubble;
+
+ /**
* Whether this notification should be shown in the shade when it is also displayed as a bubble.
*
* <p>When a notification is a bubble we don't show it in the shade once the bubble has been
@@ -197,6 +203,7 @@ public final class NotificationEntry {
: ranking.getSmartReplies().toArray(new CharSequence[0]);
suppressedVisualEffects = ranking.getSuppressedVisualEffects();
suspended = ranking.isSuspended();
+ canBubble = ranking.canBubble();
}
public void setInterruption() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
index 63b34d185c8d..855cfd9ef7cf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
@@ -599,6 +599,16 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd
updateFooter();
}
+ @Override
+ public void onOverlayChanged() {
+ int newRadius = mContext.getResources().getDimensionPixelSize(
+ Utils.getThemeAttr(mContext, android.R.attr.dialogCornerRadius));
+ if (mCornerRadius != newRadius) {
+ mCornerRadius = newRadius;
+ invalidate();
+ }
+ }
+
@VisibleForTesting
@ShadeViewRefactor(RefactorComponent.SHADE_VIEW)
public void updateFooter() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index c129143ee34b..3532af560557 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -3895,11 +3895,7 @@ public class StatusBar extends SystemUI implements DemoMode,
return;
}
- if (mKeyguardUpdateMonitor != null
- && reason == DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN) {
- mKeyguardUpdateMonitor.onAuthInterruptDetected();
- }
-
+ boolean passiveAuthInterrupt = reason == DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN;
// Set the state to pulsing, so ScrimController will know what to do once we ask it to
// execute the transition. The pulse callback will then be invoked when the scrims
// are black, indicating that StatusBar is ready to present the rest of the UI.
@@ -3925,6 +3921,9 @@ public class StatusBar extends SystemUI implements DemoMode,
mNotificationPanel.setPulsing(pulsing);
mVisualStabilityManager.setPulsing(pulsing);
mIgnoreTouchWhilePulsing = false;
+ if (mKeyguardUpdateMonitor != null && passiveAuthInterrupt) {
+ mKeyguardUpdateMonitor.onAuthInterruptDetected(pulsing /* active */);
+ }
updateScrimController();
}
}, reason);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
index 49b4641399f1..2742577db860 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java
@@ -294,11 +294,6 @@ public class BubbleControllerTest extends SysuiTestCase {
assertTrue(mRow.getEntry().showInShadeWhenBubble());
}
- @Test
- public void testNotificationWithoutChannel() {
- assertFalse(mBubbleController.shouldBubble(mNoChannelRow.getEntry()));
- }
-
static class TestableBubbleController extends BubbleController {
TestableBubbleController(Context context,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
index a0b342071b07..cad1a96b8075 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java
@@ -170,7 +170,7 @@ public class NotificationEntryManagerTest extends SysuiTestCase {
0,
NotificationManager.IMPORTANCE_DEFAULT,
null, null,
- null, null, null, true, sentiment, false, -1, false, null, null);
+ null, null, null, true, sentiment, false, -1, false, null, null, false);
return true;
}).when(mRankingMap).getRanking(eq(key), any(NotificationListenerService.Ranking.class));
}
@@ -189,7 +189,7 @@ public class NotificationEntryManagerTest extends SysuiTestCase {
null, null,
null, null, null, true,
NotificationListenerService.Ranking.USER_SENTIMENT_NEUTRAL, false, -1,
- false, smartActions, null);
+ false, smartActions, null, false);
return true;
}).when(mRankingMap).getRanking(eq(key), any(NotificationListenerService.Ranking.class));
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java
index b507692b3eee..ba2aec0dd3e1 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java
@@ -377,7 +377,7 @@ public class NotificationDataTest extends SysuiTestCase {
outRanking.getImportance(), outRanking.getImportanceExplanation(),
outRanking.getOverrideGroupKey(), outRanking.getChannel(), null, null,
outRanking.canShowBadge(), outRanking.getUserSentiment(), true,
- -1, false, null, null);
+ -1, false, null, null, outRanking.canBubble());
} else if (key.equals(TEST_EXEMPT_DND_VISUAL_SUPPRESSION_KEY)) {
outRanking.populate(key, outRanking.getRank(),
outRanking.matchesInterruptionFilter(),
@@ -385,7 +385,7 @@ public class NotificationDataTest extends SysuiTestCase {
outRanking.getImportance(), outRanking.getImportanceExplanation(),
outRanking.getOverrideGroupKey(), outRanking.getChannel(), null, null,
outRanking.canShowBadge(), outRanking.getUserSentiment(), true, -1,
- false, null, null);
+ false, null, null, outRanking.canBubble());
} else {
outRanking.populate(key, outRanking.getRank(),
outRanking.matchesInterruptionFilter(),
@@ -393,7 +393,7 @@ public class NotificationDataTest extends SysuiTestCase {
outRanking.getImportance(), outRanking.getImportanceExplanation(),
outRanking.getOverrideGroupKey(), NOTIFICATION_CHANNEL, null, null,
outRanking.canShowBadge(), outRanking.getUserSentiment(), false, -1,
- false, null, null);
+ false, null, null, outRanking.canBubble());
}
return true;
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
index 49fcafd69984..036e57acb7e4 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java
@@ -655,13 +655,19 @@ public class StatusBarTest extends SysuiTestCase {
DozeLog.REASON_SENSOR_DOUBLE_TAP,
DozeLog.REASON_SENSOR_TAP));
+ doAnswer(invocation -> {
+ DozeHost.PulseCallback callback = invocation.getArgument(0);
+ callback.onPulseStarted();
+ return null;
+ }).when(mDozeScrimController).pulse(any(), anyInt());
+
for (int i = 0; i < DozeLog.REASONS; i++) {
reset(mKeyguardUpdateMonitor);
mStatusBar.mDozeServiceHost.pulseWhileDozing(mock(DozeHost.PulseCallback.class), i);
if (reasonsWantingAuth.contains(i)) {
- verify(mKeyguardUpdateMonitor).onAuthInterruptDetected();
+ verify(mKeyguardUpdateMonitor).onAuthInterruptDetected(eq(true));
} else if (reasonsSkippingAuth.contains(i) || reasonsThatDontPulse.contains(i)) {
- verify(mKeyguardUpdateMonitor, never()).onAuthInterruptDetected();
+ verify(mKeyguardUpdateMonitor, never()).onAuthInterruptDetected(eq(true));
} else {
throw new AssertionError("Reason " + i + " isn't specified as wanting or skipping"
+ " passive auth. Please consider how this pulse reason should behave.");
diff --git a/packages/overlays/Android.mk b/packages/overlays/Android.mk
index 9fb330647d75..b8a57ae7b98f 100644
--- a/packages/overlays/Android.mk
+++ b/packages/overlays/Android.mk
@@ -24,7 +24,24 @@ LOCAL_REQUIRED_MODULES := \
ExperimentNavigationBarSlimOverlay40 \
ExperimentNavigationBarLargeOverlay56 \
ExperimentNavigationBarLargeOverlay64 \
+ AccentColorBlackOverlay \
+ AccentColorGreenOverlay \
+ AccentColorPurpleOverlay \
+ FontNotoSerifSourceOverlay \
+ IconPackCircularAndroidOverlay \
+ IconPackCircularSettingsOverlay \
+ IconPackCircularSystemUIOverlay \
+ IconPackFilledAndroidOverlay \
+ IconPackFilledSettingsOverlay \
+ IconPackFilledSystemUIOverlay \
+ IconPackRoundedAndroidOverlay \
+ IconPackRoundedSettingsOverlay \
+ IconPackRoundedSystemUIOverlay \
+ IconShapeRoundedRectOverlay \
IconShapeSquareOverlay \
+ IconShapeSquircleOverlay \
+ IconShapeTeardropOverlay
+
include $(BUILD_PHONY_PACKAGE)
diff --git a/packages/overlays/IconShapeRoundedRectOverlay/res/values/config.xml b/packages/overlays/IconShapeRoundedRectOverlay/res/values/config.xml
index 138c283b9a24..c5bb5e9bb885 100644
--- a/packages/overlays/IconShapeRoundedRectOverlay/res/values/config.xml
+++ b/packages/overlays/IconShapeRoundedRectOverlay/res/values/config.xml
@@ -21,6 +21,10 @@
<string name="config_icon_mask" translatable="false">"M50,0L88,0 C94.4,0 100,5.4 100 12 L100,88 C100,94.6 94.6 100 88 100 L12,100 C5.4,100 0,94.6 0,88 L0 12 C0 5.4 5.4 0 12 0 L50,0 Z"</string>
<!-- Flag indicating whether round icons should be parsed from the application manifest. -->
<bool name="config_useRoundIcon">false</bool>
+ <!-- Corner radius of system dialogs -->
+ <dimen name="config_dialogCornerRadius">2dp</dimen>
+ <!-- Corner radius for bottom sheet system dialogs -->
+ <dimen name="config_bottomDialogCornerRadius">4dp</dimen>
</resources>
diff --git a/packages/overlays/IconShapeSquircleOverlay/res/values/config.xml b/packages/overlays/IconShapeSquircleOverlay/res/values/config.xml
index eaf7de3b153d..7692aa6b5164 100644
--- a/packages/overlays/IconShapeSquircleOverlay/res/values/config.xml
+++ b/packages/overlays/IconShapeSquircleOverlay/res/values/config.xml
@@ -21,6 +21,10 @@
<string name="config_icon_mask" translatable="false">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</string>
<!-- Flag indicating whether round icons should be parsed from the application manifest. -->
<bool name="config_useRoundIcon">false</bool>
+ <!-- Corner radius of system dialogs -->
+ <dimen name="config_dialogCornerRadius">4dp</dimen>
+ <!-- Corner radius for bottom sheet system dialogs -->
+ <dimen name="config_bottomDialogCornerRadius">8dp</dimen>
</resources>
diff --git a/packages/overlays/IconShapeTeardropOverlay/res/values/config.xml b/packages/overlays/IconShapeTeardropOverlay/res/values/config.xml
index 818e696577e9..b6ee412e5916 100644
--- a/packages/overlays/IconShapeTeardropOverlay/res/values/config.xml
+++ b/packages/overlays/IconShapeTeardropOverlay/res/values/config.xml
@@ -21,6 +21,10 @@
<string name="config_icon_mask" translatable="false">"M50,0 C77.6,0 100,22.4 100,50 L100,88 C100,94.6 94.6,100 88,100 L50,100 C22.4 100 0 77.6 0 50C0 22.4 22.4 0 50 0 Z"</string>
<!-- Flag indicating whether round icons should be parsed from the application manifest. -->
<bool name="config_useRoundIcon">false</bool>
+ <!-- Corner radius of system dialogs -->
+ <dimen name="config_dialogCornerRadius">8dp</dimen>
+ <!-- Corner radius for bottom sheet system dialogs -->
+ <dimen name="config_bottomDialogCornerRadius">16dp</dimen>
</resources>
diff --git a/proto/src/metrics_constants/metrics_constants.proto b/proto/src/metrics_constants/metrics_constants.proto
index eb8710d6759d..3c910696ba60 100644
--- a/proto/src/metrics_constants/metrics_constants.proto
+++ b/proto/src/metrics_constants/metrics_constants.proto
@@ -6949,6 +6949,32 @@ message MetricsEvent {
// OS: Q
NOTIFICATION_SMART_REPLY_MODIFIED_BEFORE_SENDING = 1648;
+ // CATEGORY: ACTION_ACTIVITY_CHOOSER_SHOWN
+ // Field to add the mimetype for a ChooserActivity
+ // OS:Q
+ FIELD_SHARESHEET_MIMETYPE = 1649;
+
+ // CATEGORY: ACTION_ACTIVITY_CHOOSER_SHOWN
+ // Sharesheet direct targets are ready to show.
+ // OS:Q
+ ACTION_ACTIVITY_CHOOSER_SHOWN_DIRECT_TARGET = 1650;
+
+ // CATEGORY: ACTION_SHARESHEET_SCROLL
+ // Sharesheet are either expanded, scrolling through them or compacted again.
+ // OS:Q
+ // Subtype 1 means collapsed, 0 expanded
+ ACTION_SHARESHEET_COLLAPSED_CHANGED = 1651;
+
+ // ACTION: Share with screenshot extra
+ // OS: Q
+ ACTION_SHARE_WITH_PREVIEW = 1652;
+
+ // CATEGORY: ACTION_ACTIVITY_CHOOSER_SHOWN
+ // OS:Q
+ // The time elapsed from triggering the share to displaying the app targets
+ // formerly: histogram system_cost_for_smart_sharing
+ FIELD_TIME_TO_APP_TARGETS = 1653;
+
// ---- End Q Constants, all Q constants go above this line ----
// Add new aosp constants above this line.
// END OF AOSP CONSTANTS
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 14322ecd76b9..0dd1ded40ead 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -41,6 +41,7 @@ import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.Trace;
import android.os.UserHandle;
+import android.os.UserManager;
import android.util.Slog;
import android.util.SparseArray;
@@ -433,8 +434,46 @@ public class BackupManagerService {
getServiceForUserIfCallerHasPermission(userId, "getConfigurationIntent()");
return userBackupManagerService == null
- ? null
- : userBackupManagerService.getConfigurationIntent(transportName);
+ ? null
+ : userBackupManagerService.getConfigurationIntent(transportName);
+ }
+
+ /**
+ * Sets the ancestral work profile for the calling user.
+ *
+ * <p> The ancestral work profile corresponds to the profile that was used to restore to the
+ * callers profile.
+ */
+ public void setAncestralSerialNumber(long ancestralSerialNumber) {
+ UserBackupManagerService userBackupManagerService =
+ getServiceForUserIfCallerHasPermission(
+ Binder.getCallingUserHandle().getIdentifier(),
+ "setAncestralSerialNumber()");
+
+ if (userBackupManagerService != null) {
+ userBackupManagerService.setAncestralSerialNumber(ancestralSerialNumber);
+ }
+ }
+
+ /**
+ * Returns a {@link UserHandle} for the user that has {@code ancestralSerialNumber} as the
+ * serial number of the its ancestral work profile.
+ *
+ * <p> The ancestral work profile is set by {@link #setAncestralSerialNumber(long)}
+ * and it corresponds to the profile that was used to restore to the callers profile.
+ */
+ @Nullable
+ public UserHandle getUserForAncestralSerialNumber(long ancestralSerialNumber) {
+ for (UserHandle handle : mContext.getSystemService(UserManager.class).getUserProfiles()) {
+ UserBackupManagerService userBackupManagerService = getServiceUsers().get(
+ handle.getIdentifier());
+ if (userBackupManagerService != null) {
+ if (userBackupManagerService.getAncestralSerialNumber() == ancestralSerialNumber) {
+ return handle;
+ }
+ }
+ }
+ return null;
}
/**
diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java
index 87872e8bcbc2..17e9b350d368 100644
--- a/services/backup/java/com/android/server/backup/Trampoline.java
+++ b/services/backup/java/com/android/server/backup/Trampoline.java
@@ -760,6 +760,21 @@ public class Trampoline extends IBackupManager.Stub {
}
@Override
+ @Nullable public UserHandle getUserForAncestralSerialNumber(long ancestralSerialNumber) {
+ if (mService != null) {
+ return mService.getUserForAncestralSerialNumber(ancestralSerialNumber);
+ }
+ return null;
+ }
+
+ @Override
+ public void setAncestralSerialNumber(long ancestralSerialNumber) {
+ if (mService != null) {
+ mService.setAncestralSerialNumber(ancestralSerialNumber);
+ }
+ }
+
+ @Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
int userId = binderGetCallingUserId();
diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
index 8b2c1b95ecfd..b2afbc3ec5f9 100644
--- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java
@@ -244,6 +244,8 @@ public class UserBackupManagerService {
private static final long BUSY_BACKOFF_MIN_MILLIS = 1000 * 60 * 60; // one hour
private static final int BUSY_BACKOFF_FUZZ = 1000 * 60 * 60 * 2; // two hours
+ private static final String SERIAL_ID_FILE = "serial_id";
+
private final @UserIdInt int mUserId;
private final BackupAgentTimeoutParameters mAgentTimeoutParameters;
private final TransportManager mTransportManager;
@@ -360,6 +362,8 @@ public class UserBackupManagerService {
private Set<String> mAncestralPackages = null;
private long mAncestralToken = 0;
private long mCurrentToken = 0;
+ @Nullable private File mAncestralSerialNumberFile;
+
/**
* Creates an instance of {@link UserBackupManagerService} and initializes state for it. This
@@ -2308,6 +2312,55 @@ public class UserBackupManagerService {
}
}
+ /**
+ * Sets the work profile serial number of the ancestral work profile.
+ */
+ public void setAncestralSerialNumber(long ancestralSerialNumber) {
+ mContext.enforceCallingPermission(android.Manifest.permission.BACKUP,
+ "setAncestralSerialNumber");
+ Slog.v(TAG, "Setting ancestral work profile id to " + ancestralSerialNumber);
+ try (RandomAccessFile af = getAncestralSerialNumberFile()) {
+ af.writeLong(ancestralSerialNumber);
+ } catch (IOException e) {
+ Slog.w(TAG, "Unable to write to work profile serial mapping file:", e);
+ }
+ }
+
+ /**
+ * Returns the work profile serial number of the ancestral device. This will be set by
+ * {@link #setAncestralSerialNumber(long)}. Will return {@code -1} if not set.
+ */
+ public long getAncestralSerialNumber() {
+ try (RandomAccessFile af = getAncestralSerialNumberFile()) {
+ return af.readLong();
+ } catch (IOException e) {
+ Slog.w(TAG, "Unable to write to work profile serial number file:", e);
+ return -1;
+ }
+ }
+
+ private RandomAccessFile getAncestralSerialNumberFile() throws FileNotFoundException {
+ if (mAncestralSerialNumberFile == null) {
+ mAncestralSerialNumberFile = new File(
+ UserBackupManagerFiles.getBaseStateDir(getUserId()),
+ SERIAL_ID_FILE);
+ if (!mAncestralSerialNumberFile.exists()) {
+ try {
+ mAncestralSerialNumberFile.createNewFile();
+ } catch (IOException e) {
+ Slog.w(TAG, "serial number mapping file creation failed", e);
+ }
+ }
+ }
+ return new RandomAccessFile(mAncestralSerialNumberFile, "rwd");
+ }
+
+ @VisibleForTesting
+ void setAncestralSerialNumberFile(File ancestralSerialNumberFile) {
+ mAncestralSerialNumberFile = ancestralSerialNumberFile;
+ }
+
+
/** Clear the given package's backup data from the current transport. */
public void clearBackupData(String transportName, String packageName) {
if (DEBUG) Slog.v(TAG, "clearBackupData() of " + packageName + " on " + transportName);
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 1cb2c4a2f5ee..80b3d67217fd 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -6377,6 +6377,14 @@ public class ConnectivityService extends IConnectivityManager.Stub
}
@Override
+ public void startTcpKeepalive(Network network, FileDescriptor fd, int intervalSeconds,
+ Messenger messenger, IBinder binder) {
+ enforceKeepalivePermission();
+ mKeepaliveTracker.startTcpKeepalive(
+ getNetworkAgentInfoForNetwork(network), fd, intervalSeconds, messenger, binder);
+ }
+
+ @Override
public void stopKeepalive(Network network, int slot) {
mHandler.sendMessage(mHandler.obtainMessage(
NetworkAgent.CMD_STOP_SOCKET_KEEPALIVE, slot, SocketKeepalive.SUCCESS, network));
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 1b1e6ad6e096..6b57fcd31450 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -37,6 +37,8 @@ import android.os.BatteryManager;
import android.os.Binder;
import android.os.Handler;
import android.os.PowerManager;
+import android.os.PowerManager.ServiceType;
+import android.os.PowerManagerInternal;
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
@@ -161,9 +163,6 @@ final class UiModeManagerService extends SystemService {
case Intent.ACTION_BATTERY_CHANGED:
mCharging = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
break;
- case PowerManager.ACTION_POWER_SAVE_MODE_CHANGING:
- mPowerSave = intent.getBooleanExtra(PowerManager.EXTRA_POWER_SAVE_MODE, false);
- break;
}
synchronized (mLock) {
if (mSystemReady) {
@@ -208,9 +207,24 @@ final class UiModeManagerService extends SystemService {
context.registerReceiver(mDockModeReceiver,
new IntentFilter(Intent.ACTION_DOCK_EVENT));
IntentFilter batteryFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
- batteryFilter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING);
context.registerReceiver(mBatteryReceiver, batteryFilter);
+ PowerManagerInternal localPowerManager =
+ LocalServices.getService(PowerManagerInternal.class);
+ mPowerSave = localPowerManager.getLowPowerState(ServiceType.NIGHT_MODE).batterySaverEnabled;
+ localPowerManager.registerLowPowerModeObserver(ServiceType.NIGHT_MODE,
+ state -> {
+ synchronized (mLock) {
+ if (mPowerSave == state.batterySaverEnabled) {
+ return;
+ }
+ mPowerSave = state.batterySaverEnabled;
+ if (mSystemReady) {
+ updateLocked(0, 0);
+ }
+ }
+ });
+
mConfiguration.setToDefaults();
final Resources res = context.getResources();
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 94fc552fa1c2..d1994249cdc1 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -3495,7 +3495,7 @@ public class ActivityManagerService extends IActivityManager.Stub
if (!app.killedByAm) {
reportUidInfoMessageLocked(TAG,
"Process " + app.processName + " (pid " + pid + ") has died: "
- + ProcessList.makeOomAdjString(app.setAdj)
+ + ProcessList.makeOomAdjString(app.setAdj, true) + " "
+ ProcessList.makeProcStateString(app.setProcState), app.info.uid);
mAllowLowerMemLevel = true;
} else {
@@ -10029,7 +10029,7 @@ public class ActivityManagerService extends IActivityManager.Stub
pw.print(" #");
pw.print(index);
pw.print(": ");
- pw.print(ProcessList.makeOomAdjString(proc.setAdj));
+ pw.print(ProcessList.makeOomAdjString(proc.setAdj, false));
pw.print(" ");
pw.print(ProcessList.makeProcStateString(proc.getCurProcState()));
pw.print(" ");
@@ -11334,7 +11334,7 @@ public class ActivityManagerService extends IActivityManager.Stub
for (int i = list.size() - 1; i >= 0; i--) {
ProcessRecord r = list.get(i).first;
long token = proto.start(fieldId);
- String oomAdj = ProcessList.makeOomAdjString(r.setAdj);
+ String oomAdj = ProcessList.makeOomAdjString(r.setAdj, true);
proto.write(ProcessOomProto.PERSISTENT, r.isPersistent());
proto.write(ProcessOomProto.NUM, (origList.size()-1)-list.get(i).second);
proto.write(ProcessOomProto.OOM_ADJ, oomAdj);
@@ -11434,7 +11434,7 @@ public class ActivityManagerService extends IActivityManager.Stub
for (int i=list.size()-1; i>=0; i--) {
ProcessRecord r = list.get(i).first;
- String oomAdj = ProcessList.makeOomAdjString(r.setAdj);
+ String oomAdj = ProcessList.makeOomAdjString(r.setAdj, false);
char schedGroup;
switch (r.setSchedGroup) {
case ProcessList.SCHED_GROUP_BACKGROUND:
@@ -12871,7 +12871,7 @@ public class ActivityManagerService extends IActivityManager.Stub
private void appendBasicMemEntry(StringBuilder sb, int oomAdj, int procState, long pss,
long memtrack, String name) {
sb.append(" ");
- sb.append(ProcessList.makeOomAdjString(oomAdj));
+ sb.append(ProcessList.makeOomAdjString(oomAdj, false));
sb.append(' ');
sb.append(ProcessList.makeProcStateString(procState));
sb.append(' ');
diff --git a/services/core/java/com/android/server/am/AppCompactor.java b/services/core/java/com/android/server/am/AppCompactor.java
index 1118014dab96..502f078b532e 100644
--- a/services/core/java/com/android/server/am/AppCompactor.java
+++ b/services/core/java/com/android/server/am/AppCompactor.java
@@ -170,6 +170,9 @@ public final class AppCompactor {
updateCompactionThrottles();
updateStatsdSampleRate();
}
+ Process.setThreadGroupAndCpuset(mCompactionThread.getThreadId(),
+ Process.THREAD_GROUP_SYSTEM);
+
}
/**
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java
index 4985c52ea118..7035698d5ee0 100644
--- a/services/core/java/com/android/server/am/OomAdjuster.java
+++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -412,14 +412,14 @@ public final class OomAdjuster {
mNumCachedHiddenProcs++;
numCached++;
if (app.connectionGroup != 0) {
- if (lastCachedGroupUid == app.uid
+ if (lastCachedGroupUid == app.info.uid
&& lastCachedGroup == app.connectionGroup) {
// If this process is the next in the same group, we don't
// want it to count against our limit of the number of cached
// processes, so bump up the group count to account for it.
numCachedExtraGroup++;
} else {
- lastCachedGroupUid = app.uid;
+ lastCachedGroupUid = app.info.uid;
lastCachedGroup = app.connectionGroup;
}
} else {
@@ -1709,8 +1709,9 @@ public final class OomAdjuster {
(app.curAdj == ProcessList.PREVIOUS_APP_ADJ ||
app.curAdj == ProcessList.HOME_APP_ADJ)) {
mAppCompact.compactAppSome(app);
- } else if (app.setAdj < ProcessList.CACHED_APP_MIN_ADJ &&
- app.curAdj >= ProcessList.CACHED_APP_MIN_ADJ) {
+ } else if (app.setAdj < ProcessList.CACHED_APP_MIN_ADJ
+ && app.curAdj >= ProcessList.CACHED_APP_MIN_ADJ
+ && app.curAdj <= ProcessList.CACHED_APP_MAX_ADJ) {
mAppCompact.compactAppFull(app);
}
}
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index f90c0cab984a..69cf54b5528a 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -679,47 +679,65 @@ public final class ProcessList {
return totalProcessLimit/2;
}
- private static String buildOomTag(String prefix, String space, int val, int base) {
+ private static String buildOomTag(String prefix, String compactPrefix, String space, int val,
+ int base, boolean compact) {
final int diff = val - base;
if (diff == 0) {
+ if (compact) {
+ return compactPrefix;
+ }
if (space == null) return prefix;
return prefix + space;
}
if (diff < 10) {
- return prefix + "+ " + Integer.toString(diff);
+ return prefix + (compact ? "+" : "+ ") + Integer.toString(diff);
}
return prefix + "+" + Integer.toString(diff);
}
- public static String makeOomAdjString(int setAdj) {
+ public static String makeOomAdjString(int setAdj, boolean compact) {
if (setAdj >= ProcessList.CACHED_APP_MIN_ADJ) {
- return buildOomTag("cch", " ", setAdj, ProcessList.CACHED_APP_MIN_ADJ);
+ return buildOomTag("cch", "cch", " ", setAdj,
+ ProcessList.CACHED_APP_MIN_ADJ, compact);
} else if (setAdj >= ProcessList.SERVICE_B_ADJ) {
- return buildOomTag("svcb ", null, setAdj, ProcessList.SERVICE_B_ADJ);
+ return buildOomTag("svcb ", "svcb", null, setAdj,
+ ProcessList.SERVICE_B_ADJ, compact);
} else if (setAdj >= ProcessList.PREVIOUS_APP_ADJ) {
- return buildOomTag("prev ", null, setAdj, ProcessList.PREVIOUS_APP_ADJ);
+ return buildOomTag("prev ", "prev", null, setAdj,
+ ProcessList.PREVIOUS_APP_ADJ, compact);
} else if (setAdj >= ProcessList.HOME_APP_ADJ) {
- return buildOomTag("home ", null, setAdj, ProcessList.HOME_APP_ADJ);
+ return buildOomTag("home ", "home", null, setAdj,
+ ProcessList.HOME_APP_ADJ, compact);
} else if (setAdj >= ProcessList.SERVICE_ADJ) {
- return buildOomTag("svc ", null, setAdj, ProcessList.SERVICE_ADJ);
+ return buildOomTag("svc ", "svc", null, setAdj,
+ ProcessList.SERVICE_ADJ, compact);
} else if (setAdj >= ProcessList.HEAVY_WEIGHT_APP_ADJ) {
- return buildOomTag("hvy ", null, setAdj, ProcessList.HEAVY_WEIGHT_APP_ADJ);
+ return buildOomTag("hvy ", "hvy", null, setAdj,
+ ProcessList.HEAVY_WEIGHT_APP_ADJ, compact);
} else if (setAdj >= ProcessList.BACKUP_APP_ADJ) {
- return buildOomTag("bkup ", null, setAdj, ProcessList.BACKUP_APP_ADJ);
+ return buildOomTag("bkup ", "bkup", null, setAdj,
+ ProcessList.BACKUP_APP_ADJ, compact);
} else if (setAdj >= ProcessList.PERCEPTIBLE_APP_ADJ) {
- return buildOomTag("prcp ", null, setAdj, ProcessList.PERCEPTIBLE_APP_ADJ);
+ return buildOomTag("prcp ", "prcp", null, setAdj,
+ ProcessList.PERCEPTIBLE_APP_ADJ, compact);
} else if (setAdj >= ProcessList.VISIBLE_APP_ADJ) {
- return buildOomTag("vis", " ", setAdj, ProcessList.VISIBLE_APP_ADJ);
+ return buildOomTag("vis", "vis", " ", setAdj,
+ ProcessList.VISIBLE_APP_ADJ, compact);
} else if (setAdj >= ProcessList.FOREGROUND_APP_ADJ) {
- return buildOomTag("fore ", null, setAdj, ProcessList.FOREGROUND_APP_ADJ);
+ return buildOomTag("fore ", "fore", null, setAdj,
+ ProcessList.FOREGROUND_APP_ADJ, compact);
} else if (setAdj >= ProcessList.PERSISTENT_SERVICE_ADJ) {
- return buildOomTag("psvc ", null, setAdj, ProcessList.PERSISTENT_SERVICE_ADJ);
+ return buildOomTag("psvc ", "psvc", null, setAdj,
+ ProcessList.PERSISTENT_SERVICE_ADJ, compact);
} else if (setAdj >= ProcessList.PERSISTENT_PROC_ADJ) {
- return buildOomTag("pers ", null, setAdj, ProcessList.PERSISTENT_PROC_ADJ);
+ return buildOomTag("pers ", "pers", null, setAdj,
+ ProcessList.PERSISTENT_PROC_ADJ, compact);
} else if (setAdj >= ProcessList.SYSTEM_ADJ) {
- return buildOomTag("sys ", null, setAdj, ProcessList.SYSTEM_ADJ);
+ return buildOomTag("sys ", "sys", null, setAdj,
+ ProcessList.SYSTEM_ADJ, compact);
} else if (setAdj >= ProcessList.NATIVE_ADJ) {
- return buildOomTag("ntv ", null, setAdj, ProcessList.NATIVE_ADJ);
+ return buildOomTag("ntv ", "ntv", null, setAdj,
+ ProcessList.NATIVE_ADJ, compact);
} else {
return Integer.toString(setAdj);
}
diff --git a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
index ddbb421c7f0a..cbbbe4743108 100644
--- a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
+++ b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java
@@ -78,6 +78,7 @@ class SettingsToPropertiesMapper {
@VisibleForTesting
static final String[] sDeviceConfigScopes = new String[] {
DeviceConfig.ActivityManagerNativeBoot.NAMESPACE,
+ DeviceConfig.MediaNative.NAMESPACE,
DeviceConfig.NAMESPACE_INPUT_NATIVE_BOOT,
DeviceConfig.NAMESPACE_NETD_NATIVE,
DeviceConfig.RuntimeNativeBoot.NAMESPACE,
diff --git a/services/core/java/com/android/server/appbinding/AppBindingService.java b/services/core/java/com/android/server/appbinding/AppBindingService.java
index 3131255a61cd..0b6a4329d15b 100644
--- a/services/core/java/com/android/server/appbinding/AppBindingService.java
+++ b/services/core/java/com/android/server/appbinding/AppBindingService.java
@@ -47,7 +47,7 @@ import com.android.internal.util.DumpUtils;
import com.android.server.SystemService;
import com.android.server.am.PersistentConnection;
import com.android.server.appbinding.finders.AppServiceFinder;
-import com.android.server.appbinding.finders.SmsAppServiceFinder;
+import com.android.server.appbinding.finders.CarrierMessagingClientServiceFinder;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -147,7 +147,7 @@ public class AppBindingService extends Binder {
mIPackageManager = injector.getIPackageManager();
mHandler = BackgroundThread.getHandler();
- mApps.add(new SmsAppServiceFinder(context, this::onAppChanged, mHandler));
+ mApps.add(new CarrierMessagingClientServiceFinder(context, this::onAppChanged, mHandler));
// Initialize with the default value to make it non-null.
mConstants = AppBindingConstants.initializeFromString("");
diff --git a/services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java b/services/core/java/com/android/server/appbinding/finders/CarrierMessagingClientServiceFinder.java
index fcc28f8e2886..4c5f1a1c7b49 100644
--- a/services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java
+++ b/services/core/java/com/android/server/appbinding/finders/CarrierMessagingClientServiceFinder.java
@@ -19,8 +19,6 @@ package com.android.server.appbinding.finders;
import static android.provider.Telephony.Sms.Intents.ACTION_DEFAULT_SMS_PACKAGE_CHANGED_INTERNAL;
import android.Manifest.permission;
-import android.app.ISmsAppService;
-import android.app.SmsAppService;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -30,6 +28,8 @@ import android.content.pm.ServiceInfo;
import android.os.Handler;
import android.os.IBinder;
import android.os.UserHandle;
+import android.service.carrier.CarrierMessagingClientService;
+import android.service.carrier.ICarrierMessagingClientService;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Slog;
@@ -41,10 +41,11 @@ import com.android.server.appbinding.AppBindingConstants;
import java.util.function.BiConsumer;
/**
- * Find the SmsAppService service within the default SMS app.
+ * Find the CarrierMessagingClientService service within the default SMS app.
*/
-public class SmsAppServiceFinder extends AppServiceFinder<SmsAppService, ISmsAppService> {
- public SmsAppServiceFinder(Context context,
+public class CarrierMessagingClientServiceFinder
+ extends AppServiceFinder<CarrierMessagingClientService, ICarrierMessagingClientService> {
+ public CarrierMessagingClientServiceFinder(Context context,
BiConsumer<AppServiceFinder, Integer> listener,
Handler callbackHandler) {
super(context, listener, callbackHandler);
@@ -62,23 +63,23 @@ public class SmsAppServiceFinder extends AppServiceFinder<SmsAppService, ISmsApp
}
@Override
- protected Class<SmsAppService> getServiceClass() {
- return SmsAppService.class;
+ protected Class<CarrierMessagingClientService> getServiceClass() {
+ return CarrierMessagingClientService.class;
}
@Override
- public ISmsAppService asInterface(IBinder obj) {
- return ISmsAppService.Stub.asInterface(obj);
+ public ICarrierMessagingClientService asInterface(IBinder obj) {
+ return ICarrierMessagingClientService.Stub.asInterface(obj);
}
@Override
protected String getServiceAction() {
- return TelephonyManager.ACTION_SMS_APP_SERVICE;
+ return TelephonyManager.ACTION_CARRIER_MESSAGING_CLIENT_SERVICE;
}
@Override
protected String getServicePermission() {
- return permission.BIND_SMS_APP_SERVICE;
+ return permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE;
}
@Override
@@ -121,7 +122,7 @@ public class SmsAppServiceFinder extends AppServiceFinder<SmsAppService, ISmsApp
@Override
public void onReceive(Context context, Intent intent) {
if (ACTION_DEFAULT_SMS_PACKAGE_CHANGED_INTERNAL.equals(intent.getAction())) {
- mListener.accept(SmsAppServiceFinder.this, getSendingUserId());
+ mListener.accept(CarrierMessagingClientServiceFinder.this, getSendingUserId());
}
}
};
diff --git a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java
index 07e28f9fb543..6cff57d4bbb1 100644
--- a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java
+++ b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java
@@ -17,6 +17,8 @@
package com.android.server.connectivity;
import static android.net.NattSocketKeepalive.NATT_PORT;
+import static android.net.NetworkAgent.CMD_ADD_KEEPALIVE_PACKET_FILTER;
+import static android.net.NetworkAgent.CMD_REMOVE_KEEPALIVE_PACKET_FILTER;
import static android.net.NetworkAgent.CMD_START_SOCKET_KEEPALIVE;
import static android.net.NetworkAgent.CMD_STOP_SOCKET_KEEPALIVE;
import static android.net.NetworkAgent.EVENT_SOCKET_KEEPALIVE;
@@ -37,6 +39,9 @@ import android.net.NattKeepalivePacketData;
import android.net.NetworkAgent;
import android.net.NetworkUtils;
import android.net.SocketKeepalive.InvalidPacketException;
+import android.net.SocketKeepalive.InvalidSocketException;
+import android.net.TcpKeepalivePacketData;
+import android.net.TcpKeepalivePacketData.TcpSocketInfo;
import android.net.util.IpUtils;
import android.os.Binder;
import android.os.Handler;
@@ -65,7 +70,7 @@ import java.util.HashMap;
*
* Provides methods to stop and start keepalive requests, and keeps track of keepalives across all
* networks. This class is tightly coupled to ConnectivityService. It is not thread-safe and its
- * methods must be called only from the ConnectivityService handler thread.
+ * handle* methods must be called only from the ConnectivityService handler thread.
*/
public class KeepaliveTracker {
@@ -78,9 +83,12 @@ public class KeepaliveTracker {
private final HashMap <NetworkAgentInfo, HashMap<Integer, KeepaliveInfo>> mKeepalives =
new HashMap<> ();
private final Handler mConnectivityServiceHandler;
+ @NonNull
+ private final TcpKeepaliveController mTcpController;
public KeepaliveTracker(Handler handler) {
mConnectivityServiceHandler = handler;
+ mTcpController = new TcpKeepaliveController(handler);
}
/**
@@ -96,20 +104,33 @@ public class KeepaliveTracker {
private final int mUid;
private final int mPid;
private final NetworkAgentInfo mNai;
+ private final int mType;
+ private final FileDescriptor mFd;
- /** Keepalive slot. A small integer that identifies this keepalive among the ones handled
- * by this network. */
+ public static final int TYPE_NATT = 1;
+ public static final int TYPE_TCP = 2;
+
+ // Keepalive slot. A small integer that identifies this keepalive among the ones handled
+ // by this network.
private int mSlot = NO_KEEPALIVE;
// Packet data.
private final KeepalivePacketData mPacket;
private final int mInterval;
- // Whether the keepalive is started or not.
- public boolean isStarted;
-
- public KeepaliveInfo(Messenger messenger, IBinder binder, NetworkAgentInfo nai,
- KeepalivePacketData packet, int interval) {
+ // Whether the keepalive is started or not. The initial state is NOT_STARTED.
+ private static final int NOT_STARTED = 1;
+ private static final int STARTING = 2;
+ private static final int STARTED = 3;
+ private int mStartedState = NOT_STARTED;
+
+ KeepaliveInfo(@NonNull Messenger messenger,
+ @NonNull IBinder binder,
+ @NonNull NetworkAgentInfo nai,
+ @NonNull KeepalivePacketData packet,
+ int interval,
+ int type,
+ @NonNull FileDescriptor fd) {
mMessenger = messenger;
mBinder = binder;
mPid = Binder.getCallingPid();
@@ -118,6 +139,8 @@ public class KeepaliveTracker {
mNai = nai;
mPacket = packet;
mInterval = interval;
+ mType = type;
+ mFd = fd;
try {
mBinder.linkToDeath(this, 0);
@@ -130,32 +153,40 @@ public class KeepaliveTracker {
return mNai;
}
+ private String startedStateString(final int state) {
+ switch (state) {
+ case NOT_STARTED : return "NOT_STARTED";
+ case STARTING : return "STARTING";
+ case STARTED : return "STARTED";
+ }
+ throw new IllegalArgumentException("Unknown state");
+ }
+
public String toString() {
- return new StringBuffer("KeepaliveInfo [")
- .append(" network=").append(mNai.network)
- .append(" isStarted=").append(isStarted)
- .append(" ")
- .append(IpUtils.addressAndPortToString(mPacket.srcAddress, mPacket.srcPort))
- .append("->")
- .append(IpUtils.addressAndPortToString(mPacket.dstAddress, mPacket.dstPort))
- .append(" interval=" + mInterval)
- .append(" packetData=" + HexDump.toHexString(mPacket.getPacket()))
- .append(" uid=").append(mUid).append(" pid=").append(mPid)
- .append(" ]")
- .toString();
+ return "KeepaliveInfo ["
+ + " network=" + mNai.network
+ + " startedState=" + startedStateString(mStartedState)
+ + " "
+ + IpUtils.addressAndPortToString(mPacket.srcAddress, mPacket.srcPort)
+ + "->"
+ + IpUtils.addressAndPortToString(mPacket.dstAddress, mPacket.dstPort)
+ + " interval=" + mInterval
+ + " uid=" + mUid + " pid=" + mPid
+ + " packetData=" + HexDump.toHexString(mPacket.getPacket())
+ + " ]";
}
/** Sends a message back to the application via its SocketKeepalive.Callback. */
void notifyMessenger(int slot, int err) {
+ if (DBG) {
+ Log.d(TAG, "notify keepalive " + mSlot + " on " + mNai.network + " for " + err);
+ }
KeepaliveTracker.this.notifyMessenger(mMessenger, slot, err);
}
/** Called when the application process is killed. */
public void binderDied() {
- // Not called from ConnectivityService handler thread, so send it a message.
- mConnectivityServiceHandler.obtainMessage(
- NetworkAgent.CMD_STOP_SOCKET_KEEPALIVE,
- mSlot, BINDER_DIED, mNai.network).sendToTarget();
+ stop(BINDER_DIED);
}
void unlinkDeathRecipient() {
@@ -202,7 +233,26 @@ public class KeepaliveTracker {
int error = isValid();
if (error == SUCCESS) {
Log.d(TAG, "Starting keepalive " + mSlot + " on " + mNai.name());
- mNai.asyncChannel.sendMessage(CMD_START_SOCKET_KEEPALIVE, slot, mInterval, mPacket);
+ switch (mType) {
+ case TYPE_NATT:
+ mNai.asyncChannel
+ .sendMessage(CMD_START_SOCKET_KEEPALIVE, slot, mInterval, mPacket);
+ break;
+ case TYPE_TCP:
+ mTcpController.startSocketMonitor(mFd, this, mSlot);
+ mNai.asyncChannel
+ .sendMessage(CMD_ADD_KEEPALIVE_PACKET_FILTER, slot, 0 /* Unused */,
+ mPacket);
+ // TODO: check result from apf and notify of failure as needed.
+ mNai.asyncChannel
+ .sendMessage(CMD_START_SOCKET_KEEPALIVE, slot, mInterval, mPacket);
+ break;
+ default:
+ Log.wtf(TAG, "Starting keepalive with unknown type: " + mType);
+ handleStopKeepalive(mNai, mSlot, error);
+ return;
+ }
+ mStartedState = STARTING;
} else {
handleStopKeepalive(mNai, mSlot, error);
return;
@@ -216,15 +266,27 @@ public class KeepaliveTracker {
Log.e(TAG, "Cannot stop unowned keepalive " + mSlot + " on " + mNai.network);
}
}
- if (isStarted) {
+ if (NOT_STARTED != mStartedState) {
Log.d(TAG, "Stopping keepalive " + mSlot + " on " + mNai.name());
- mNai.asyncChannel.sendMessage(CMD_STOP_SOCKET_KEEPALIVE, mSlot);
+ if (mType == TYPE_NATT) {
+ mNai.asyncChannel.sendMessage(CMD_STOP_SOCKET_KEEPALIVE, mSlot);
+ } else if (mType == TYPE_TCP) {
+ mNai.asyncChannel.sendMessage(CMD_STOP_SOCKET_KEEPALIVE, mSlot);
+ mNai.asyncChannel.sendMessage(CMD_REMOVE_KEEPALIVE_PACKET_FILTER, mSlot);
+ mTcpController.stopSocketMonitor(mSlot);
+ } else {
+ Log.wtf(TAG, "Stopping keepalive with unknown type: " + mType);
+ }
}
// TODO: at the moment we unconditionally return failure here. In cases where the
// NetworkAgent is alive, should we ask it to reply, so it can return failure?
notifyMessenger(mSlot, reason);
unlinkDeathRecipient();
}
+
+ void onFileDescriptorInitiatedStop(final int socketKeepaliveReason) {
+ handleStopKeepalive(mNai, mSlot, socketKeepaliveReason);
+ }
}
void notifyMessenger(Messenger messenger, int slot, int err) {
@@ -328,20 +390,38 @@ public class KeepaliveTracker {
return;
}
- if (reason == SUCCESS && !ki.isStarted) {
+ // This can be called in a number of situations :
+ // - startedState is STARTING.
+ // - reason is SUCCESS => go to STARTED.
+ // - reason isn't SUCCESS => it's an error starting. Go to NOT_STARTED and stop keepalive.
+ // - startedState is STARTED.
+ // - reason is SUCCESS => it's a success stopping. Go to NOT_STARTED and stop keepalive.
+ // - reason isn't SUCCESS => it's an error in exec. Go to NOT_STARTED and stop keepalive.
+ // The control is not supposed to ever come here if the state is NOT_STARTED. This is
+ // because in NOT_STARTED state, the code will switch to STARTING before sending messages
+ // to start, and the only way to NOT_STARTED is this function, through the edges outlined
+ // above : in all cases, keepalive gets stopped and can't restart without going into
+ // STARTING as messages are ordered. This also depends on the hardware processing the
+ // messages in order.
+ // TODO : clarify this code and get rid of mStartedState. Using a StateMachine is an
+ // option.
+ if (reason == SUCCESS && KeepaliveInfo.STARTING == ki.mStartedState) {
// Keepalive successfully started.
if (DBG) Log.d(TAG, "Started keepalive " + slot + " on " + nai.name());
- ki.isStarted = true;
+ ki.mStartedState = KeepaliveInfo.STARTED;
ki.notifyMessenger(slot, reason);
} else {
// Keepalive successfully stopped, or error.
- ki.isStarted = false;
+ ki.mStartedState = KeepaliveInfo.NOT_STARTED;
if (reason == SUCCESS) {
+ // The message indicated success stopping : don't call handleStopKeepalive.
if (DBG) Log.d(TAG, "Successfully stopped keepalive " + slot + " on " + nai.name());
} else {
+ // The message indicated some error trying to start or during the course of
+ // keepalive : do call handleStopKeepalive.
+ handleStopKeepalive(nai, slot, reason);
if (DBG) Log.d(TAG, "Keepalive " + slot + " on " + nai.name() + " error " + reason);
}
- handleStopKeepalive(nai, slot, reason);
}
}
@@ -379,10 +459,49 @@ public class KeepaliveTracker {
notifyMessenger(messenger, NO_KEEPALIVE, e.error);
return;
}
- KeepaliveInfo ki = new KeepaliveInfo(messenger, binder, nai, packet, intervalSeconds);
- Log.d(TAG, "Created keepalive: " + ki.toString());
+ KeepaliveInfo ki = new KeepaliveInfo(messenger, binder, nai, packet, intervalSeconds,
+ KeepaliveInfo.TYPE_NATT, null);
mConnectivityServiceHandler.obtainMessage(
- CMD_START_SOCKET_KEEPALIVE, ki).sendToTarget();
+ NetworkAgent.CMD_START_SOCKET_KEEPALIVE, ki).sendToTarget();
+ }
+
+ /**
+ * Called by ConnectivityService to start TCP keepalive on a file descriptor.
+ *
+ * In order to offload keepalive for application correctly, sequence number, ack number and
+ * other fields are needed to form the keepalive packet. Thus, this function synchronously
+ * puts the socket into repair mode to get the necessary information. After the socket has been
+ * put into repair mode, the application cannot access the socket until reverted to normal.
+ *
+ * See {@link android.net.SocketKeepalive}.
+ **/
+ public void startTcpKeepalive(@Nullable NetworkAgentInfo nai,
+ @NonNull FileDescriptor fd,
+ int intervalSeconds,
+ @NonNull Messenger messenger,
+ @NonNull IBinder binder) {
+ if (nai == null) {
+ notifyMessenger(messenger, NO_KEEPALIVE, ERROR_INVALID_NETWORK);
+ return;
+ }
+
+ TcpKeepalivePacketData packet = null;
+ try {
+ TcpSocketInfo tsi = TcpKeepaliveController.switchToRepairMode(fd);
+ packet = TcpKeepalivePacketData.tcpKeepalivePacket(tsi);
+ } catch (InvalidPacketException | InvalidSocketException e) {
+ try {
+ TcpKeepaliveController.switchOutOfRepairMode(fd);
+ } catch (ErrnoException e1) {
+ Log.e(TAG, "Couldn't move fd out of repair mode after failure to start keepalive");
+ }
+ notifyMessenger(messenger, NO_KEEPALIVE, e.error);
+ return;
+ }
+ KeepaliveInfo ki = new KeepaliveInfo(messenger, binder, nai, packet, intervalSeconds,
+ KeepaliveInfo.TYPE_TCP, fd);
+ Log.d(TAG, "Created keepalive: " + ki.toString());
+ mConnectivityServiceHandler.obtainMessage(CMD_START_SOCKET_KEEPALIVE, ki).sendToTarget();
}
/**
diff --git a/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java b/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java
new file mode 100644
index 000000000000..8a9ac23cf06a
--- /dev/null
+++ b/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java
@@ -0,0 +1,316 @@
+/*
+ * 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.server.connectivity;
+
+import static android.net.SocketKeepalive.DATA_RECEIVED;
+import static android.net.SocketKeepalive.ERROR_INVALID_SOCKET;
+import static android.net.SocketKeepalive.ERROR_SOCKET_NOT_IDLE;
+import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_ERROR;
+import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_INPUT;
+import static android.system.OsConstants.FIONREAD;
+import static android.system.OsConstants.IPPROTO_TCP;
+import static android.system.OsConstants.TIOCOUTQ;
+
+import android.annotation.NonNull;
+import android.net.NetworkUtils;
+import android.net.SocketKeepalive.InvalidSocketException;
+import android.net.TcpKeepalivePacketData.TcpSocketInfo;
+import android.net.TcpRepairWindow;
+import android.os.Handler;
+import android.os.MessageQueue;
+import android.os.Messenger;
+import android.system.ErrnoException;
+import android.system.Int32Ref;
+import android.system.Os;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.internal.annotations.GuardedBy;
+import com.android.server.connectivity.KeepaliveTracker.KeepaliveInfo;
+
+import java.io.FileDescriptor;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+import java.net.SocketException;
+
+/**
+ * Manage tcp socket which offloads tcp keepalive.
+ *
+ * The input socket will be changed to repair mode and the application
+ * will not have permission to read/write data. If the application wants
+ * to write data, it must stop tcp keepalive offload to leave repair mode
+ * first. If a remote packet arrives, repair mode will be turned off and
+ * offload will be stopped. The application will receive a callback to know
+ * it can start reading data.
+ *
+ * {start,stop}SocketMonitor are thread-safe, but care must be taken in the
+ * order in which they are called. Please note that while calling
+ * {@link #startSocketMonitor(FileDescriptor, Messenger, int)} multiple times
+ * with either the same slot or the same FileDescriptor without stopping it in
+ * between will result in an exception, calling {@link #stopSocketMonitor(int)}
+ * multiple times with the same int is explicitly a no-op.
+ * Please also note that switching the socket to repair mode is not synchronized
+ * with either of these operations and has to be done in an orderly fashion
+ * with stopSocketMonitor. Take care in calling these in the right order.
+ * @hide
+ */
+public class TcpKeepaliveController {
+ private static final String TAG = "TcpKeepaliveController";
+ private static final boolean DBG = false;
+
+ private final MessageQueue mFdHandlerQueue;
+
+ private static final int FD_EVENTS = EVENT_INPUT | EVENT_ERROR;
+
+ // Reference include/uapi/linux/tcp.h
+ private static final int TCP_REPAIR = 19;
+ private static final int TCP_REPAIR_QUEUE = 20;
+ private static final int TCP_QUEUE_SEQ = 21;
+ private static final int TCP_NO_QUEUE = 0;
+ private static final int TCP_RECV_QUEUE = 1;
+ private static final int TCP_SEND_QUEUE = 2;
+ private static final int TCP_REPAIR_OFF = 0;
+ private static final int TCP_REPAIR_ON = 1;
+ // Reference include/uapi/linux/sockios.h
+ private static final int SIOCINQ = FIONREAD;
+ private static final int SIOCOUTQ = TIOCOUTQ;
+
+ /**
+ * Keeps track of packet listeners.
+ * Key: slot number of keepalive offload.
+ * Value: {@link FileDescriptor} being listened to.
+ */
+ @GuardedBy("mListeners")
+ private final SparseArray<FileDescriptor> mListeners = new SparseArray<>();
+
+ public TcpKeepaliveController(final Handler connectivityServiceHandler) {
+ mFdHandlerQueue = connectivityServiceHandler.getLooper().getQueue();
+ }
+
+ /**
+ * Switch the tcp socket to repair mode and query tcp socket information.
+ *
+ * @param fd the fd of socket on which to use keepalive offload
+ * @return a {@link TcpKeepalivePacketData#TcpSocketInfo} object for current
+ * tcp/ip information.
+ */
+ // TODO : make this private. It's far too confusing that this gets called from outside
+ // at a time that nobody can understand.
+ public static TcpSocketInfo switchToRepairMode(FileDescriptor fd)
+ throws InvalidSocketException {
+ if (DBG) Log.i(TAG, "switchToRepairMode to start tcp keepalive : " + fd);
+ final SocketAddress srcSockAddr;
+ final SocketAddress dstSockAddr;
+ final InetAddress srcAddress;
+ final InetAddress dstAddress;
+ final int srcPort;
+ final int dstPort;
+ int seq;
+ final int ack;
+ final TcpRepairWindow trw;
+
+ // Query source address and port.
+ try {
+ srcSockAddr = Os.getsockname(fd);
+ } catch (ErrnoException e) {
+ Log.e(TAG, "Get sockname fail: ", e);
+ throw new InvalidSocketException(ERROR_INVALID_SOCKET, e);
+ }
+ if (srcSockAddr instanceof InetSocketAddress) {
+ srcAddress = getAddress((InetSocketAddress) srcSockAddr);
+ srcPort = getPort((InetSocketAddress) srcSockAddr);
+ } else {
+ Log.e(TAG, "Invalid or mismatched SocketAddress");
+ throw new InvalidSocketException(ERROR_INVALID_SOCKET);
+ }
+ // Query destination address and port.
+ try {
+ dstSockAddr = Os.getpeername(fd);
+ } catch (ErrnoException e) {
+ Log.e(TAG, "Get peername fail: ", e);
+ throw new InvalidSocketException(ERROR_INVALID_SOCKET, e);
+ }
+ if (dstSockAddr instanceof InetSocketAddress) {
+ dstAddress = getAddress((InetSocketAddress) dstSockAddr);
+ dstPort = getPort((InetSocketAddress) dstSockAddr);
+ } else {
+ Log.e(TAG, "Invalid or mismatched peer SocketAddress");
+ throw new InvalidSocketException(ERROR_INVALID_SOCKET);
+ }
+
+ // Query sequence and ack number
+ dropAllIncomingPackets(fd, true);
+ try {
+ // Enter tcp repair mode.
+ Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR, TCP_REPAIR_ON);
+ // Check if socket is idle.
+ if (!isSocketIdle(fd)) {
+ throw new InvalidSocketException(ERROR_SOCKET_NOT_IDLE);
+ }
+ // Query write sequence number from SEND_QUEUE.
+ Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR_QUEUE, TCP_SEND_QUEUE);
+ seq = Os.getsockoptInt(fd, IPPROTO_TCP, TCP_QUEUE_SEQ);
+ // Query read sequence number from RECV_QUEUE.
+ Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR_QUEUE, TCP_RECV_QUEUE);
+ ack = Os.getsockoptInt(fd, IPPROTO_TCP, TCP_QUEUE_SEQ);
+ // Switch to NO_QUEUE to prevent illegal socket read/write in repair mode.
+ Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR_QUEUE, TCP_NO_QUEUE);
+ // Finally, check if socket is still idle. TODO : this check needs to move to
+ // after starting polling to prevent a race.
+ if (!isSocketIdle(fd)) {
+ throw new InvalidSocketException(ERROR_INVALID_SOCKET);
+ }
+
+ // Query tcp window size.
+ trw = NetworkUtils.getTcpRepairWindow(fd);
+ } catch (ErrnoException e) {
+ Log.e(TAG, "Exception reading TCP state from socket", e);
+ try {
+ Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR, TCP_REPAIR_OFF);
+ } catch (ErrnoException ex) {
+ Log.e(TAG, "Exception while turning off repair mode due to exception", ex);
+ }
+ throw new InvalidSocketException(ERROR_INVALID_SOCKET, e);
+ } finally {
+ dropAllIncomingPackets(fd, false);
+ }
+
+ // Keepalive sequence number is last sequence number - 1. If it couldn't be retrieved,
+ // then it must be set to -1, so decrement in all cases.
+ seq = seq - 1;
+
+ return new TcpSocketInfo(srcAddress, srcPort, dstAddress, dstPort, seq, ack, trw.rcvWnd,
+ trw.rcvWndScale);
+ }
+
+ /**
+ * Switch the tcp socket out of repair mode.
+ *
+ * @param fd the fd of socket to switch back to normal.
+ */
+ // TODO : make this private.
+ public static void switchOutOfRepairMode(@NonNull final FileDescriptor fd)
+ throws ErrnoException {
+ Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR, TCP_REPAIR_OFF);
+ }
+
+ /**
+ * Start monitoring incoming packets.
+ *
+ * @param fd socket fd to monitor.
+ * @param messenger a callback to notify socket status.
+ * @param slot keepalive slot.
+ */
+ public void startSocketMonitor(@NonNull final FileDescriptor fd,
+ @NonNull final KeepaliveInfo ki, final int slot) {
+ synchronized (mListeners) {
+ if (null != mListeners.get(slot)) {
+ throw new IllegalArgumentException("This slot is already taken");
+ }
+ for (int i = 0; i < mListeners.size(); ++i) {
+ if (fd.equals(mListeners.valueAt(i))) {
+ throw new IllegalArgumentException("This fd is already registered");
+ }
+ }
+ mFdHandlerQueue.addOnFileDescriptorEventListener(fd, FD_EVENTS, (readyFd, events) -> {
+ // This can't be called twice because the queue guarantees that once the listener
+ // is unregistered it can't be called again, even for a message that arrived
+ // before it was unregistered.
+ final int reason;
+ if (0 != (events & EVENT_ERROR)) {
+ reason = ERROR_INVALID_SOCKET;
+ } else {
+ reason = DATA_RECEIVED;
+ }
+ ki.onFileDescriptorInitiatedStop(reason);
+ // The listener returns the new set of events to listen to. Because 0 means no
+ // event, the listener gets unregistered.
+ return 0;
+ });
+ mListeners.put(slot, fd);
+ }
+ }
+
+ /** Stop socket monitor */
+ // This slot may have been stopped automatically already because the socket received data,
+ // was closed on the other end or otherwise suffered some error. In this case, this function
+ // is a no-op.
+ public void stopSocketMonitor(final int slot) {
+ final FileDescriptor fd;
+ synchronized (mListeners) {
+ fd = mListeners.get(slot);
+ if (null == fd) return;
+ mListeners.remove(slot);
+ }
+ mFdHandlerQueue.removeOnFileDescriptorEventListener(fd);
+ try {
+ if (DBG) Log.d(TAG, "Moving socket out of repair mode for stop : " + fd);
+ switchOutOfRepairMode(fd);
+ } catch (ErrnoException e) {
+ Log.e(TAG, "Cannot switch socket out of repair mode", e);
+ // Well, there is not much to do here to recover
+ }
+ }
+
+ private static InetAddress getAddress(InetSocketAddress inetAddr) {
+ return inetAddr.getAddress();
+ }
+
+ private static int getPort(InetSocketAddress inetAddr) {
+ return inetAddr.getPort();
+ }
+
+ private static boolean isSocketIdle(FileDescriptor fd) throws ErrnoException {
+ return isReceiveQueueEmpty(fd) && isSendQueueEmpty(fd);
+ }
+
+ private static boolean isReceiveQueueEmpty(FileDescriptor fd)
+ throws ErrnoException {
+ Int32Ref result = new Int32Ref(-1);
+ Os.ioctlInt(fd, SIOCINQ, result);
+ if (result.value != 0) {
+ Log.e(TAG, "Read queue has data");
+ return false;
+ }
+ return true;
+ }
+
+ private static boolean isSendQueueEmpty(FileDescriptor fd)
+ throws ErrnoException {
+ Int32Ref result = new Int32Ref(-1);
+ Os.ioctlInt(fd, SIOCOUTQ, result);
+ if (result.value != 0) {
+ Log.e(TAG, "Write queue has data");
+ return false;
+ }
+ return true;
+ }
+
+ private static void dropAllIncomingPackets(FileDescriptor fd, boolean enable)
+ throws InvalidSocketException {
+ try {
+ if (enable) {
+ NetworkUtils.attachDropAllBPFFilter(fd);
+ } else {
+ NetworkUtils.detachBPFFilter(fd);
+ }
+ } catch (SocketException e) {
+ Log.e(TAG, "Socket Exception: ", e);
+ throw new InvalidSocketException(ERROR_INVALID_SOCKET, e);
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java
index e268e4458986..bfa7f9d439e3 100644
--- a/services/core/java/com/android/server/content/ContentService.java
+++ b/services/core/java/com/android/server/content/ContentService.java
@@ -899,9 +899,20 @@ public final class ContentService extends IContentService.Stub {
@Override
public void setIsSyncable(Account account, String providerName, int syncable) {
+ setIsSyncableAsUser(account, providerName, syncable, UserHandle.getCallingUserId());
+ }
+
+ /**
+ * @hide
+ */
+ @Override
+ public void setIsSyncableAsUser(Account account, String providerName, int syncable,
+ int userId) {
if (TextUtils.isEmpty(providerName)) {
throw new IllegalArgumentException("Authority must not be empty");
}
+ enforceCrossUserPermission(userId,
+ "no permission to set the sync settings for user " + userId);
mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS,
"no permission to write the sync settings");
@@ -909,7 +920,6 @@ public final class ContentService extends IContentService.Stub {
final int callingUid = Binder.getCallingUid();
final int callingPid = Binder.getCallingPid();
- int userId = UserHandle.getCallingUserId();
long identityToken = clearCallingIdentity();
try {
SyncManager syncManager = getSyncManager();
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 7096477ce5f4..99e07071f361 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -3261,7 +3261,7 @@ public class SyncManager {
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "Account " + aau.account + " added, checking sync restore data");
}
- AccountSyncSettingsBackupHelper.accountAdded(mContext);
+ AccountSyncSettingsBackupHelper.accountAdded(mContext, syncTargets.userId);
break;
}
}
diff --git a/services/core/java/com/android/server/notification/BubbleExtractor.java b/services/core/java/com/android/server/notification/BubbleExtractor.java
new file mode 100644
index 000000000000..358bdb90f6d3
--- /dev/null
+++ b/services/core/java/com/android/server/notification/BubbleExtractor.java
@@ -0,0 +1,68 @@
+/**
+* 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.server.notification;
+
+import android.content.Context;
+import android.util.Slog;
+
+/**
+ * Determines whether a bubble can be shown for this notification
+ */
+public class BubbleExtractor implements NotificationSignalExtractor {
+ private static final String TAG = "BubbleExtractor";
+ private static final boolean DBG = false;
+
+ private RankingConfig mConfig;
+
+ public void initialize(Context ctx, NotificationUsageStats usageStats) {
+ if (DBG) Slog.d(TAG, "Initializing " + getClass().getSimpleName() + ".");
+ }
+
+ public RankingReconsideration process(NotificationRecord record) {
+ if (record == null || record.getNotification() == null) {
+ if (DBG) Slog.d(TAG, "skipping empty notification");
+ return null;
+ }
+
+ if (mConfig == null) {
+ if (DBG) Slog.d(TAG, "missing config");
+ return null;
+ }
+ boolean userWantsBubbles = mConfig.bubblesEnabled(record.sbn.getUser());
+ boolean appCanShowBubble =
+ mConfig.areBubblesAllowed(record.sbn.getPackageName(), record.sbn.getUid());
+ if (!userWantsBubbles || !appCanShowBubble) {
+ record.setAllowBubble(false);
+ } else {
+ if (record.getChannel() != null) {
+ record.setAllowBubble(record.getChannel().canBubble() && appCanShowBubble);
+ } else {
+ record.setAllowBubble(appCanShowBubble);
+ }
+ }
+
+ return null;
+ }
+
+ @Override
+ public void setConfig(RankingConfig config) {
+ mConfig = config;
+ }
+
+ @Override
+ public void setZenHelper(ZenModeHelper helper) {
+ }
+}
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
index c222e6948a3d..cf09b8fc4c84 100644
--- a/services/core/java/com/android/server/notification/ManagedServices.java
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -306,18 +306,21 @@ abstract public class ManagedServices {
}
}
- public void writeXml(XmlSerializer out, boolean forBackup) throws IOException {
+ public void writeXml(XmlSerializer out, boolean forBackup, int userId) throws IOException {
out.startTag(null, getConfig().xmlTag);
out.attribute(null, ATT_VERSION, String.valueOf(DB_VERSION));
if (forBackup) {
- trimApprovedListsAccordingToInstalledServices();
+ trimApprovedListsAccordingToInstalledServices(userId);
}
final int N = mApproved.size();
for (int i = 0 ; i < N; i++) {
- final int userId = mApproved.keyAt(i);
+ final int approvedUserId = mApproved.keyAt(i);
+ if (forBackup && approvedUserId != userId) {
+ continue;
+ }
final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.valueAt(i);
if (approvedByType != null) {
final int M = approvedByType.size();
@@ -328,14 +331,14 @@ abstract public class ManagedServices {
String allowedItems = String.join(ENABLED_SERVICES_SEPARATOR, approved);
out.startTag(null, TAG_MANAGED_SERVICES);
out.attribute(null, ATT_APPROVED_LIST, allowedItems);
- out.attribute(null, ATT_USER_ID, Integer.toString(userId));
+ out.attribute(null, ATT_USER_ID, Integer.toString(approvedUserId));
out.attribute(null, ATT_IS_PRIMARY, Boolean.toString(isPrimary));
out.endTag(null, TAG_MANAGED_SERVICES);
if (!forBackup && isPrimary) {
// Also write values to settings, for observers who haven't migrated yet
Settings.Secure.putStringForUser(mContext.getContentResolver(),
- getConfig().secureSettingName, allowedItems, userId);
+ getConfig().secureSettingName, allowedItems, approvedUserId);
}
}
@@ -350,15 +353,12 @@ abstract public class ManagedServices {
loadAllowedComponentsFromSettings();
}
- public void readXml(XmlPullParser parser, Predicate<String> allowedManagedServicePackages)
+ public void readXml(
+ XmlPullParser parser,
+ Predicate<String> allowedManagedServicePackages,
+ boolean forRestore,
+ int userId)
throws XmlPullParserException, IOException {
- // upgrade xml
- int xmlVersion = XmlUtils.readIntAttribute(parser, ATT_VERSION, 0);
- final List<UserInfo> activeUsers = mUm.getUsers(true);
- for (UserInfo userInfo : activeUsers) {
- upgradeXml(xmlVersion, userInfo.getUserHandle().getIdentifier());
- }
-
// read grants
int type;
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
@@ -372,14 +372,16 @@ abstract public class ManagedServices {
Slog.i(TAG, "Read " + mConfig.caption + " permissions from xml");
final String approved = XmlUtils.readStringAttribute(parser, ATT_APPROVED_LIST);
- final int userId = XmlUtils.readIntAttribute(parser, ATT_USER_ID, 0);
+ // Ignore parser's user id for restore.
+ final int resolvedUserId = forRestore
+ ? userId : XmlUtils.readIntAttribute(parser, ATT_USER_ID, 0);
final boolean isPrimary =
XmlUtils.readBooleanAttribute(parser, ATT_IS_PRIMARY, true);
if (allowedManagedServicePackages == null ||
allowedManagedServicePackages.test(getPackageName(approved))) {
- if (mUm.getUserInfo(userId) != null) {
- addApprovedList(approved, userId, isPrimary);
+ if (mUm.getUserInfo(resolvedUserId) != null) {
+ addApprovedList(approved, resolvedUserId, isPrimary);
}
mUseXml = true;
}
@@ -389,8 +391,6 @@ abstract public class ManagedServices {
rebindServices(false, USER_ALL);
}
- protected void upgradeXml(final int xmlVersion, final int userId) {}
-
private void loadAllowedComponentsFromSettings() {
for (UserInfo user : mUm.getUsers()) {
final ContentResolver cr = mContext.getContentResolver();
@@ -784,26 +784,23 @@ abstract public class ManagedServices {
return allowedPackages;
}
- private void trimApprovedListsAccordingToInstalledServices() {
- int N = mApproved.size();
- for (int i = 0 ; i < N; i++) {
- final int userId = mApproved.keyAt(i);
- final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.valueAt(i);
- int M = approvedByType.size();
- for (int j = 0; j < M; j++) {
- final ArraySet<String> approved = approvedByType.valueAt(j);
- int P = approved.size();
- for (int k = P - 1; k >= 0; k--) {
- final String approvedPackageOrComponent = approved.valueAt(k);
- if (!isValidEntry(approvedPackageOrComponent, userId)){
- approved.removeAt(k);
- Slog.v(TAG, "Removing " + approvedPackageOrComponent
- + " from approved list; no matching services found");
- } else {
- if (DEBUG) {
- Slog.v(TAG, "Keeping " + approvedPackageOrComponent
- + " on approved list; matching services found");
- }
+ private void trimApprovedListsAccordingToInstalledServices(int userId) {
+ final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId);
+ if (approvedByType == null) {
+ return;
+ }
+ for (int i = 0; i < approvedByType.size(); i++) {
+ final ArraySet<String> approved = approvedByType.valueAt(i);
+ for (int j = approved.size() - 1; j >= 0; j--) {
+ final String approvedPackageOrComponent = approved.valueAt(j);
+ if (!isValidEntry(approvedPackageOrComponent, userId)){
+ approved.removeAt(j);
+ Slog.v(TAG, "Removing " + approvedPackageOrComponent
+ + " from approved list; no matching services found");
+ } else {
+ if (DEBUG) {
+ Slog.v(TAG, "Keeping " + approvedPackageOrComponent
+ + " on approved list; matching services found");
}
}
}
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 34a6663c4352..3557fcf35dbc 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -213,6 +213,7 @@ import com.android.server.lights.LightsManager;
import com.android.server.notification.ManagedServices.ManagedServiceInfo;
import com.android.server.notification.ManagedServices.UserProfiles;
import com.android.server.pm.PackageManagerService;
+import com.android.server.pm.UserManagerService;
import com.android.server.policy.PhoneWindowManager;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.uri.UriGrantsManagerInternal;
@@ -538,30 +539,49 @@ public class NotificationManagerService extends SystemService {
}
}
- void readPolicyXml(InputStream stream, boolean forRestore)
+ UserManagerService getUserManagerService() {
+ return UserManagerService.getInstance();
+ }
+
+ void readPolicyXml(InputStream stream, boolean forRestore, int userId)
throws XmlPullParserException, NumberFormatException, IOException {
final XmlPullParser parser = Xml.newPullParser();
parser.setInput(stream, StandardCharsets.UTF_8.name());
XmlUtils.beginDocument(parser, TAG_NOTIFICATION_POLICY);
boolean migratedManagedServices = false;
+ boolean ineligibleForManagedServices = forRestore
+ && getUserManagerService().isManagedProfile(userId);
int outerDepth = parser.getDepth();
while (XmlUtils.nextElementWithin(parser, outerDepth)) {
if (ZenModeConfig.ZEN_TAG.equals(parser.getName())) {
- mZenModeHelper.readXml(parser, forRestore);
+ mZenModeHelper.readXml(parser, forRestore, userId);
} else if (PreferencesHelper.TAG_RANKING.equals(parser.getName())){
- mPreferencesHelper.readXml(parser, forRestore);
+ mPreferencesHelper.readXml(parser, forRestore, userId);
}
if (mListeners.getConfig().xmlTag.equals(parser.getName())) {
- mListeners.readXml(parser, mAllowedManagedServicePackages);
+ if (ineligibleForManagedServices) {
+ continue;
+ }
+ mListeners.readXml(parser, mAllowedManagedServicePackages, forRestore, userId);
migratedManagedServices = true;
} else if (mAssistants.getConfig().xmlTag.equals(parser.getName())) {
- mAssistants.readXml(parser, mAllowedManagedServicePackages);
+ if (ineligibleForManagedServices) {
+ continue;
+ }
+ mAssistants.readXml(parser, mAllowedManagedServicePackages, forRestore, userId);
migratedManagedServices = true;
} else if (mConditionProviders.getConfig().xmlTag.equals(parser.getName())) {
- mConditionProviders.readXml(parser, mAllowedManagedServicePackages);
+ if (ineligibleForManagedServices) {
+ continue;
+ }
+ mConditionProviders.readXml(
+ parser, mAllowedManagedServicePackages, forRestore, userId);
migratedManagedServices = true;
}
if (LOCKSCREEN_ALLOW_SECURE_NOTIFICATIONS_TAG.equals(parser.getName())) {
+ if (forRestore && userId != UserHandle.USER_SYSTEM) {
+ continue;
+ }
mLockScreenAllowSecureNotifications =
safeBoolean(parser.getAttributeValue(null,
LOCKSCREEN_ALLOW_SECURE_NOTIFICATIONS_VALUE), true);
@@ -584,7 +604,7 @@ public class NotificationManagerService extends SystemService {
InputStream infile = null;
try {
infile = mPolicyFile.openRead();
- readPolicyXml(infile, false /*forRestore*/);
+ readPolicyXml(infile, false /*forRestore*/, UserHandle.USER_ALL);
} catch (FileNotFoundException e) {
// No data yet
// Load default managed services approvals
@@ -615,7 +635,7 @@ public class NotificationManagerService extends SystemService {
}
try {
- writePolicyXml(stream, false /*forBackup*/);
+ writePolicyXml(stream, false /*forBackup*/, UserHandle.USER_ALL);
mPolicyFile.finishWrite(stream);
} catch (IOException e) {
Slog.w(TAG, "Failed to save policy file, restoring backup", e);
@@ -626,18 +646,21 @@ public class NotificationManagerService extends SystemService {
});
}
- private void writePolicyXml(OutputStream stream, boolean forBackup) throws IOException {
+ private void writePolicyXml(OutputStream stream, boolean forBackup, int userId)
+ throws IOException {
final XmlSerializer out = new FastXmlSerializer();
out.setOutput(stream, StandardCharsets.UTF_8.name());
out.startDocument(null, true);
out.startTag(null, TAG_NOTIFICATION_POLICY);
out.attribute(null, ATTR_VERSION, Integer.toString(DB_VERSION));
- mZenModeHelper.writeXml(out, forBackup, null);
- mPreferencesHelper.writeXml(out, forBackup);
- mListeners.writeXml(out, forBackup);
- mAssistants.writeXml(out, forBackup);
- mConditionProviders.writeXml(out, forBackup);
- writeSecureNotificationsPolicy(out);
+ mZenModeHelper.writeXml(out, forBackup, null, userId);
+ mPreferencesHelper.writeXml(out, forBackup, userId);
+ mListeners.writeXml(out, forBackup, userId);
+ mAssistants.writeXml(out, forBackup, userId);
+ mConditionProviders.writeXml(out, forBackup, userId);
+ if (!forBackup || userId == UserHandle.USER_SYSTEM) {
+ writeSecureNotificationsPolicy(out);
+ }
out.endTag(null, TAG_NOTIFICATION_POLICY);
out.endDocument();
}
@@ -1282,6 +1305,8 @@ public class NotificationManagerService extends SystemService {
private final class SettingsObserver extends ContentObserver {
private final Uri NOTIFICATION_BADGING_URI
= Settings.Secure.getUriFor(Settings.Secure.NOTIFICATION_BADGING);
+ private final Uri NOTIFICATION_BUBBLES_URI
+ = Settings.Secure.getUriFor(Settings.Secure.NOTIFICATION_BUBBLES);
private final Uri NOTIFICATION_LIGHT_PULSE_URI
= Settings.System.getUriFor(Settings.System.NOTIFICATION_LIGHT_PULSE);
private final Uri NOTIFICATION_RATE_LIMIT_URI
@@ -1299,6 +1324,8 @@ public class NotificationManagerService extends SystemService {
false, this, UserHandle.USER_ALL);
resolver.registerContentObserver(NOTIFICATION_RATE_LIMIT_URI,
false, this, UserHandle.USER_ALL);
+ resolver.registerContentObserver(NOTIFICATION_BUBBLES_URI,
+ false, this, UserHandle.USER_ALL);
update(null);
}
@@ -1324,6 +1351,9 @@ public class NotificationManagerService extends SystemService {
if (uri == null || NOTIFICATION_BADGING_URI.equals(uri)) {
mPreferencesHelper.updateBadgingEnabled();
}
+ if (uri == null || NOTIFICATION_BUBBLES_URI.equals(uri)) {
+ mPreferencesHelper.updateBubblesEnabled();
+ }
}
}
@@ -3507,14 +3537,9 @@ public class NotificationManagerService extends SystemService {
public byte[] getBackupPayload(int user) {
checkCallerIsSystem();
if (DBG) Slog.d(TAG, "getBackupPayload u=" + user);
- //TODO: http://b/22388012
- if (user != USER_SYSTEM) {
- Slog.w(TAG, "getBackupPayload: cannot backup policy for user " + user);
- return null;
- }
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
- writePolicyXml(baos, true /*forBackup*/);
+ writePolicyXml(baos, true /*forBackup*/, user);
return baos.toByteArray();
} catch (IOException e) {
Slog.w(TAG, "getBackupPayload: error writing payload for user " + user, e);
@@ -3531,14 +3556,9 @@ public class NotificationManagerService extends SystemService {
Slog.w(TAG, "applyRestore: no payload to restore for user " + user);
return;
}
- //TODO: http://b/22388012
- if (user != USER_SYSTEM) {
- Slog.w(TAG, "applyRestore: cannot restore policy for user " + user);
- return;
- }
final ByteArrayInputStream bais = new ByteArrayInputStream(payload);
try {
- readPolicyXml(bais, true /*forRestore*/);
+ readPolicyXml(bais, true /*forRestore*/, user);
handleSavePolicyFile();
} catch (NumberFormatException | XmlPullParserException | IOException e) {
Slog.w(TAG, "applyRestore: error reading payload", e);
@@ -5849,6 +5869,7 @@ public class NotificationManagerService extends SystemService {
ArrayList<String> orderBefore = new ArrayList<>(N);
int[] visibilities = new int[N];
boolean[] showBadges = new boolean[N];
+ boolean[] allowBubbles = new boolean[N];
ArrayList<NotificationChannel> channelBefore = new ArrayList<>(N);
ArrayList<String> groupKeyBefore = new ArrayList<>(N);
ArrayList<ArrayList<String>> overridePeopleBefore = new ArrayList<>(N);
@@ -5863,6 +5884,7 @@ public class NotificationManagerService extends SystemService {
orderBefore.add(r.getKey());
visibilities[i] = r.getPackageVisibilityOverride();
showBadges[i] = r.canShowBadge();
+ allowBubbles[i] = r.canBubble();
channelBefore.add(r.getChannel());
groupKeyBefore.add(r.getGroupKey());
overridePeopleBefore.add(r.getPeopleOverride());
@@ -5880,6 +5902,7 @@ public class NotificationManagerService extends SystemService {
if (!orderBefore.get(i).equals(r.getKey())
|| visibilities[i] != r.getPackageVisibilityOverride()
|| showBadges[i] != r.canShowBadge()
+ || allowBubbles[i] != r.canBubble()
|| !Objects.equals(channelBefore.get(i), r.getChannel())
|| !Objects.equals(groupKeyBefore.get(i), r.getGroupKey())
|| !Objects.equals(overridePeopleBefore.get(i), r.getPeopleOverride())
@@ -6922,6 +6945,7 @@ public class NotificationManagerService extends SystemService {
Bundle smartReplies = new Bundle();
Bundle lastAudiblyAlerted = new Bundle();
Bundle noisy = new Bundle();
+ ArrayList<Boolean> canBubble = new ArrayList<>(N);
for (int i = 0; i < N; i++) {
NotificationRecord record = mNotificationList.get(i);
if (!isVisibleToListener(record.sbn, info)) {
@@ -6954,18 +6978,22 @@ public class NotificationManagerService extends SystemService {
smartReplies.putCharSequenceArrayList(key, record.getSmartReplies());
lastAudiblyAlerted.putLong(key, record.getLastAudiblyAlertedMs());
noisy.putBoolean(key, record.getSound() != null || record.getVibration() != null);
+ canBubble.add(record.canBubble());
}
final int M = keys.size();
String[] keysAr = keys.toArray(new String[M]);
String[] interceptedKeysAr = interceptedKeys.toArray(new String[interceptedKeys.size()]);
int[] importanceAr = new int[M];
+ boolean[] canBubbleAr = new boolean[M];
for (int i = 0; i < M; i++) {
importanceAr[i] = importance.get(i);
+ canBubbleAr[i] = canBubble.get(i);
}
return new NotificationRankingUpdate(keysAr, interceptedKeysAr, visibilityOverrides,
suppressedVisualEffects, importanceAr, explanation, overrideGroupKeys,
channels, overridePeople, snoozeCriteria, showBadge, userSentiment, hidden,
- systemGeneratedSmartActions, smartReplies, lastAudiblyAlerted, noisy);
+ systemGeneratedSmartActions, smartReplies, lastAudiblyAlerted, noisy,
+ canBubbleAr);
}
boolean hasCompanionDevice(ManagedServiceInfo info) {
diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java
index b3394b4c599f..48818f5649af 100644
--- a/services/core/java/com/android/server/notification/NotificationRecord.java
+++ b/services/core/java/com/android/server/notification/NotificationRecord.java
@@ -161,6 +161,7 @@ public final class NotificationRecord {
private ArrayList<String> mPeopleOverride;
private ArrayList<SnoozeCriterion> mSnoozeCriteria;
private boolean mShowBadge;
+ private boolean mAllowBubble;
private Light mLight;
/**
* This list contains system generated smart actions from NAS, app-generated smart actions are
@@ -994,6 +995,14 @@ public final class NotificationRecord {
mShowBadge = showBadge;
}
+ public boolean canBubble() {
+ return mAllowBubble;
+ }
+
+ public void setAllowBubble(boolean allow) {
+ mAllowBubble = allow;
+ }
+
public boolean canShowBadge() {
return mShowBadge;
}
diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java
index 6ed4f5c03171..2c47ec03f9fa 100644
--- a/services/core/java/com/android/server/notification/PreferencesHelper.java
+++ b/services/core/java/com/android/server/notification/PreferencesHelper.java
@@ -127,6 +127,7 @@ public class PreferencesHelper implements RankingConfig {
private final ZenModeHelper mZenModeHelper;
private SparseBooleanArray mBadgingEnabled;
+ private SparseBooleanArray mBubblesEnabled;
private boolean mAreChannelsBypassingDnd;
private boolean mHideSilentStatusBarIcons;
@@ -138,10 +139,11 @@ public class PreferencesHelper implements RankingConfig {
mPm = pm;
updateBadgingEnabled();
+ updateBubblesEnabled();
syncChannelsBypassingDnd(mContext.getUserId());
}
- public void readXml(XmlPullParser parser, boolean forRestore)
+ public void readXml(XmlPullParser parser, boolean forRestore, int userId)
throws XmlPullParserException, IOException {
int type = parser.getEventType();
if (type != XmlPullParser.START_TAG) return;
@@ -158,6 +160,9 @@ public class PreferencesHelper implements RankingConfig {
}
if (type == XmlPullParser.START_TAG) {
if (TAG_STATUS_ICONS.equals(tag)) {
+ if (forRestore && userId != UserHandle.USER_SYSTEM) {
+ continue;
+ }
mHideSilentStatusBarIcons = XmlUtils.readBooleanAttribute(
parser, ATT_HIDE_SILENT, DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS);
} else if (TAG_PACKAGE.equals(tag)) {
@@ -166,9 +171,7 @@ public class PreferencesHelper implements RankingConfig {
if (!TextUtils.isEmpty(name)) {
if (forRestore) {
try {
- //TODO: http://b/22388012
- uid = mPm.getPackageUidAsUser(name,
- UserHandle.USER_SYSTEM);
+ uid = mPm.getPackageUidAsUser(name, userId);
} catch (PackageManager.NameNotFoundException e) {
// noop
}
@@ -379,10 +382,11 @@ public class PreferencesHelper implements RankingConfig {
r.channels.put(channel.getId(), channel);
}
- public void writeXml(XmlSerializer out, boolean forBackup) throws IOException {
+ public void writeXml(XmlSerializer out, boolean forBackup, int userId) throws IOException {
out.startTag(null, TAG_RANKING);
out.attribute(null, ATT_VERSION, Integer.toString(XML_VERSION));
- if (mHideSilentStatusBarIcons != DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS) {
+ if (mHideSilentStatusBarIcons != DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS
+ && (!forBackup || userId == UserHandle.USER_SYSTEM)) {
out.startTag(null, TAG_STATUS_ICONS);
out.attribute(null, ATT_HIDE_SILENT, String.valueOf(mHideSilentStatusBarIcons));
out.endTag(null, TAG_STATUS_ICONS);
@@ -392,8 +396,7 @@ public class PreferencesHelper implements RankingConfig {
final int N = mPackagePreferences.size();
for (int i = 0; i < N; i++) {
final PackagePreferences r = mPackagePreferences.valueAt(i);
- //TODO: http://b/22388012
- if (forBackup && UserHandle.getUserId(r.uid) != UserHandle.USER_SYSTEM) {
+ if (forBackup && UserHandle.getUserId(r.uid) != userId) {
continue;
}
final boolean hasNonDefaultSettings =
@@ -485,6 +488,7 @@ public class PreferencesHelper implements RankingConfig {
* @param uid the uid to check if bubbles are allowed for.
* @return whether bubbles are allowed.
*/
+ @Override
public boolean areBubblesAllowed(String pkg, int uid) {
return getOrCreatePackagePreferences(pkg, uid).allowBubble;
}
@@ -1266,7 +1270,7 @@ public class PreferencesHelper implements RankingConfig {
if (original.canShowBadge() != update.canShowBadge()) {
update.lockFields(NotificationChannel.USER_LOCKED_SHOW_BADGE);
}
- if (original.isBubbleAllowed() != update.isBubbleAllowed()) {
+ if (original.canBubble() != update.canBubble()) {
update.lockFields(NotificationChannel.USER_LOCKED_ALLOW_BUBBLE);
}
}
@@ -1638,6 +1642,40 @@ public class PreferencesHelper implements RankingConfig {
.setPackageName(pkg);
}
+ public void updateBubblesEnabled() {
+ if (mBubblesEnabled == null) {
+ mBubblesEnabled = new SparseBooleanArray();
+ }
+ boolean changed = false;
+ // update the cached values
+ for (int index = 0; index < mBubblesEnabled.size(); index++) {
+ int userId = mBubblesEnabled.keyAt(index);
+ final boolean oldValue = mBubblesEnabled.get(userId);
+ final boolean newValue = Settings.Secure.getIntForUser(mContext.getContentResolver(),
+ Settings.Secure.NOTIFICATION_BUBBLES,
+ DEFAULT_ALLOW_BUBBLE ? 1 : 0, userId) != 0;
+ mBubblesEnabled.put(userId, newValue);
+ changed |= oldValue != newValue;
+ }
+ if (changed) {
+ updateConfig();
+ }
+ }
+
+ public boolean bubblesEnabled(UserHandle userHandle) {
+ int userId = userHandle.getIdentifier();
+ if (userId == UserHandle.USER_ALL) {
+ return false;
+ }
+ if (mBubblesEnabled.indexOfKey(userId) < 0) {
+ mBubblesEnabled.put(userId,
+ Settings.Secure.getIntForUser(mContext.getContentResolver(),
+ Settings.Secure.NOTIFICATION_BUBBLES,
+ DEFAULT_ALLOW_BUBBLE ? 1 : 0, userId) != 0);
+ }
+ return mBubblesEnabled.get(userId, DEFAULT_ALLOW_BUBBLE);
+ }
+
public void updateBadgingEnabled() {
if (mBadgingEnabled == null) {
diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java
index 605348b4d52d..72502acd6560 100644
--- a/services/core/java/com/android/server/notification/RankingConfig.java
+++ b/services/core/java/com/android/server/notification/RankingConfig.java
@@ -29,6 +29,8 @@ public interface RankingConfig {
void setShowBadge(String packageName, int uid, boolean showBadge);
boolean canShowBadge(String packageName, int uid);
boolean badgingEnabled(UserHandle userHandle);
+ boolean areBubblesAllowed(String packageName, int uid);
+ boolean bubblesEnabled(UserHandle userHandle);
boolean isGroupBlocked(String packageName, int uid, String groupId);
Collection<NotificationChannelGroup> getNotificationChannelGroups(String pkg,
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index afc0b7230e27..ea7bf2d23495 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -104,7 +104,7 @@ public class ZenModeHelper {
protected final RingerModeDelegate mRingerModeDelegate = new
RingerModeDelegate();
@VisibleForTesting protected final ZenModeConditions mConditions;
- private final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>();
+ @VisibleForTesting final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>();
private final Metrics mMetrics = new Metrics();
private final ConditionProviders.Config mServiceConfig;
@@ -662,17 +662,14 @@ public class ZenModeHelper {
}
}
- public void readXml(XmlPullParser parser, boolean forRestore)
+ public void readXml(XmlPullParser parser, boolean forRestore, int userId)
throws XmlPullParserException, IOException {
ZenModeConfig config = ZenModeConfig.readXml(parser);
String reason = "readXml";
if (config != null) {
if (forRestore) {
- //TODO: http://b/22388012
- if (config.user != UserHandle.USER_SYSTEM) {
- return;
- }
+ config.user = userId;
config.manualRule = null; // don't restore the manual rule
}
@@ -707,13 +704,15 @@ public class ZenModeHelper {
reason += ", reset to default rules";
}
+ // Resolve user id for settings.
+ userId = userId == UserHandle.USER_ALL ? UserHandle.USER_SYSTEM : userId;
if (config.version < ZenModeConfig.XML_VERSION) {
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 1);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 1, userId);
} else {
// devices not restoring/upgrading already have updated zen settings
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Secure.ZEN_SETTINGS_UPDATED, 1);
+ Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.ZEN_SETTINGS_UPDATED, 1, userId);
}
if (DEBUG) Log.d(TAG, reason);
synchronized (mConfig) {
@@ -722,11 +721,11 @@ public class ZenModeHelper {
}
}
- public void writeXml(XmlSerializer out, boolean forBackup, Integer version) throws IOException {
+ public void writeXml(XmlSerializer out, boolean forBackup, Integer version, int userId)
+ throws IOException {
final int N = mConfigs.size();
for (int i = 0; i < N; i++) {
- //TODO: http://b/22388012
- if (forBackup && mConfigs.keyAt(i) != UserHandle.USER_SYSTEM) {
+ if (forBackup && mConfigs.keyAt(i) != userId) {
continue;
}
mConfigs.valueAt(i).writeXml(out, version);
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index efafdfaf2b54..c2a75aba28b9 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -611,18 +611,43 @@ public class Installer extends SystemService {
}
}
- public boolean snapshotAppData(String pkg, @UserIdInt int userId, int storageFlags)
+ /**
+ * Snapshots user data of the given package.
+ *
+ * @param pkg name of the package to snapshot user data for.
+ * @param userId id of the user whose data to snapshot.
+ * @param storageFlags flags controlling which data (CE or DE) to snapshot.
+ *
+ * @return inode of the snapshot of users CE package data, or {@code 0} if a remote calls
+ * shouldn't be continued. See {@link #checkBeforeRemote}.
+ *
+ * @throws InstallerException if failed to snapshot user data.
+ */
+ public long snapshotAppData(String pkg, @UserIdInt int userId, int storageFlags)
throws InstallerException {
- if (!checkBeforeRemote()) return false;
+ if (!checkBeforeRemote()) return 0;
try {
- mInstalld.snapshotAppData(null, pkg, userId, storageFlags);
- return true;
+ return mInstalld.snapshotAppData(null, pkg, userId, storageFlags);
} catch (Exception e) {
throw InstallerException.from(e);
}
}
+ /**
+ * Restores user data snapshot of the given package.
+ *
+ * @param pkg name of the package to restore user data for.
+ * @param appId id of the package to restore user data for.
+ * @param ceDataInode inode of CE user data folder of this app.
+ * @param userId id of the user whose data to restore.
+ * @param storageFlags flags controlling which data (CE or DE) to restore.
+ *
+ * @return {@code true} if user data restore was successful, or {@code false} if a remote call
+ * shouldn't be continued. See {@link #checkBeforeRemote}.
+ *
+ * @throws InstallerException if failed to restore user data.
+ */
public boolean restoreAppDataSnapshot(String pkg, @AppIdInt int appId, long ceDataInode,
String seInfo, @UserIdInt int userId, int storageFlags) throws InstallerException {
if (!checkBeforeRemote()) return false;
@@ -636,6 +661,31 @@ public class Installer extends SystemService {
}
}
+ /**
+ * Deletes user data snapshot of the given package.
+ *
+ * @param pkg name of the package to delete user data snapshot for.
+ * @param userId id of the user whose user data snapshot to delete.
+ * @param ceSnapshotInode inode of CE user data snapshot.
+ * @param storageFlags flags controlling which user data snapshot (CE or DE) to delete.
+ *
+ * @return {@code true} if user data snapshot was successfully deleted, or {@code false} if a
+ * remote call shouldn't be continued. See {@link #checkBeforeRemote}.
+ *
+ * @throws InstallerException if failed to delete user data snapshot.
+ */
+ public boolean destroyAppDataSnapshot(String pkg, @UserIdInt int userId, long ceSnapshotInode,
+ int storageFlags) throws InstallerException {
+ if (!checkBeforeRemote()) return false;
+
+ try {
+ mInstalld.destroyAppDataSnapshot(null, pkg, userId, ceSnapshotInode, storageFlags);
+ return true;
+ } catch (Exception e) {
+ throw InstallerException.from(e);
+ }
+ }
+
private static void assertValidInstructionSet(String instructionSet)
throws InstallerException {
for (String abi : Build.SUPPORTED_ABIS) {
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index e18da7f7b319..32dc98837854 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -14613,6 +14613,13 @@ public class PackageManagerService extends IPackageManager.Stub
PACKAGE_MIME_TYPE);
enableRollbackIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ // Allow the broadcast to be sent before boot complete.
+ // This is needed when committing the apk part of a staged
+ // session in early boot. The rollback manager registers
+ // its receiver early enough during the boot process that
+ // it will not miss the broadcast.
+ enableRollbackIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+
mContext.sendOrderedBroadcastAsUser(enableRollbackIntent, getUser(),
android.Manifest.permission.PACKAGE_ROLLBACK_AGENT,
new BroadcastReceiver() {
diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java
index 55eb7ea7da4d..89aea36429d2 100644
--- a/services/core/java/com/android/server/pm/StagingManager.java
+++ b/services/core/java/com/android/server/pm/StagingManager.java
@@ -380,6 +380,19 @@ public class StagingManager {
private boolean commitApkSession(@NonNull PackageInstallerSession apkSession,
int originalSessionId) {
+
+ if ((apkSession.params.installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) != 0) {
+ // If rollback is available for this session, notify the rollback
+ // manager of the apk session so it can properly enable rollback.
+ final IRollbackManager rm = IRollbackManager.Stub.asInterface(
+ ServiceManager.getService(Context.ROLLBACK_SERVICE));
+ try {
+ rm.notifyStagedApkSession(originalSessionId, apkSession.sessionId);
+ } catch (RemoteException re) {
+ // Cannot happen, the rollback manager is in the same process.
+ }
+ }
+
final LocalIntentReceiver receiver = new LocalIntentReceiver();
apkSession.commit(receiver.getIntentSender(), false);
final Intent result = receiver.getResult();
diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
index a122ed854a93..bd46a50f97de 100644
--- a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
+++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java
@@ -104,6 +104,7 @@ public class BatterySaverPolicy extends ContentObserver {
private static final String KEY_AOD_DISABLED = "aod_disabled";
// Go into deep Doze as soon as the screen turns off.
private static final String KEY_QUICK_DOZE_ENABLED = "quick_doze_enabled";
+ private static final String KEY_ENABLE_NIGHT_MODE = "enable_night_mode";
private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i";
private static final String KEY_CPU_FREQ_NONINTERACTIVE = "cpufreq-n";
@@ -123,6 +124,7 @@ public class BatterySaverPolicy extends ContentObserver {
false, /* enableAdjustBrightness */
false, /* enableDataSaver */
false, /* enableFireWall */
+ false, /* enableNightMode */
false, /* enableQuickDoze */
new ArrayMap<>(), /* filesForInteractive */
new ArrayMap<>(), /* filesForNoninteractive */
@@ -147,6 +149,7 @@ public class BatterySaverPolicy extends ContentObserver {
false, /* enableAdjustBrightness */
false, /* enableDataSaver */
true, /* enableFirewall */
+ true, /* enableNightMode */
true, /* enableQuickDoze */
new ArrayMap<>(), /* filesForInteractive */
new ArrayMap<>(), /* filesForNoninteractive */
@@ -523,6 +526,11 @@ public class BatterySaverPolicy extends ContentObserver {
public final boolean enableFirewall;
/**
+ * Whether to enable night mode or not.
+ */
+ public final boolean enableNightMode;
+
+ /**
* Whether Quick Doze is enabled or not.
*/
public final boolean enableQuickDoze;
@@ -578,6 +586,7 @@ public class BatterySaverPolicy extends ContentObserver {
boolean enableAdjustBrightness,
boolean enableDataSaver,
boolean enableFirewall,
+ boolean enableNightMode,
boolean enableQuickDoze,
ArrayMap<String, String> filesForInteractive,
ArrayMap<String, String> filesForNoninteractive,
@@ -598,6 +607,7 @@ public class BatterySaverPolicy extends ContentObserver {
this.enableAdjustBrightness = enableAdjustBrightness;
this.enableDataSaver = enableDataSaver;
this.enableFirewall = enableFirewall;
+ this.enableNightMode = enableNightMode;
this.enableQuickDoze = enableQuickDoze;
this.filesForInteractive = filesForInteractive;
this.filesForNoninteractive = filesForNoninteractive;
@@ -619,6 +629,7 @@ public class BatterySaverPolicy extends ContentObserver {
enableAdjustBrightness,
enableDataSaver,
enableFirewall,
+ enableNightMode,
enableQuickDoze,
filesForInteractive,
filesForNoninteractive,
@@ -654,6 +665,8 @@ public class BatterySaverPolicy extends ContentObserver {
config.getEnableAdjustBrightness(),
config.getEnableDataSaver(),
config.getEnableFirewall(),
+ // TODO: add option to config
+ config.getAdvertiseIsEnabled(),
config.getEnableQuickDoze(),
/* filesForInteractive */
(new CpuFrequencies()).parseString(cpuFreqInteractive).toSysFileMap(),
@@ -716,6 +729,8 @@ public class BatterySaverPolicy extends ContentObserver {
!defaultPolicy.enableDataSaver);
boolean enableFirewall = !parser.getBoolean(KEY_ACTIVATE_FIREWALL_DISABLED,
!defaultPolicy.enableFirewall);
+ boolean enableNightMode = !parser.getBoolean(KEY_ENABLE_NIGHT_MODE,
+ !defaultPolicy.enableNightMode);
boolean enableQuickDoze = parser.getBoolean(KEY_QUICK_DOZE_ENABLED,
defaultPolicy.enableQuickDoze);
boolean forceAllAppsStandby = parser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY,
@@ -739,6 +754,7 @@ public class BatterySaverPolicy extends ContentObserver {
enableAdjustBrightness,
enableDataSaver,
enableFirewall,
+ enableNightMode,
enableQuickDoze,
/* filesForInteractive */
(new CpuFrequencies()).parseString(cpuFreqInteractive).toSysFileMap(),
@@ -768,6 +784,7 @@ public class BatterySaverPolicy extends ContentObserver {
&& enableAdjustBrightness == other.enableAdjustBrightness
&& enableDataSaver == other.enableDataSaver
&& enableFirewall == other.enableFirewall
+ && enableNightMode == other.enableNightMode
&& enableQuickDoze == other.enableQuickDoze
&& forceAllAppsStandby == other.forceAllAppsStandby
&& forceBackgroundCheck == other.forceBackgroundCheck
@@ -833,6 +850,9 @@ public class BatterySaverPolicy extends ContentObserver {
case ServiceType.FORCE_BACKGROUND_CHECK:
return builder.setBatterySaverEnabled(currPolicy.forceBackgroundCheck)
.build();
+ case ServiceType.NIGHT_MODE:
+ return builder.setBatterySaverEnabled(currPolicy.enableNightMode)
+ .build();
case ServiceType.OPTIONAL_SENSORS:
return builder.setBatterySaverEnabled(currPolicy.disableOptionalSensors)
.build();
@@ -1009,6 +1029,8 @@ public class BatterySaverPolicy extends ContentObserver {
pw.println(" " + KEY_SOUNDTRIGGER_DISABLED + "=" + p.disableSoundTrigger);
pw.print(indent);
pw.println(" " + KEY_QUICK_DOZE_ENABLED + "=" + p.enableQuickDoze);
+ pw.print(indent);
+ pw.println(" " + KEY_ENABLE_NIGHT_MODE + "=" + p.enableNightMode);
pw.print(" Interactive File values:\n");
dumpMap(pw, " ", p.filesForInteractive);
diff --git a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java
index 8dd076028b43..f3b838560ebd 100644
--- a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java
+++ b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java
@@ -22,6 +22,7 @@ import android.content.rollback.RollbackInfo;
import android.os.storage.StorageManager;
import android.util.IntArray;
import android.util.Log;
+import android.util.SparseLongArray;
import com.android.internal.annotations.VisibleForTesting;
import com.android.server.pm.Installer;
@@ -51,11 +52,13 @@ public class AppDataRollbackHelper {
* Creates an app data snapshot for a specified {@code packageName} for {@code installedUsers},
* a specified set of users for whom the package is installed.
*
- * @return a list of users for which the snapshot is pending, usually because data for one or
- * more users is still credential locked.
+ * @return a {@link SnapshotAppDataResult}/
+ * @see SnapshotAppDataResult
*/
- public IntArray snapshotAppData(String packageName, int[] installedUsers) {
+ public SnapshotAppDataResult snapshotAppData(String packageName, int[] installedUsers) {
final IntArray pendingBackups = new IntArray();
+ final SparseLongArray ceSnapshotInodes = new SparseLongArray();
+
for (int user : installedUsers) {
final int storageFlags;
if (isUserCredentialLocked(user)) {
@@ -69,14 +72,17 @@ public class AppDataRollbackHelper {
}
try {
- mInstaller.snapshotAppData(packageName, user, storageFlags);
+ long ceSnapshotInode = mInstaller.snapshotAppData(packageName, user, storageFlags);
+ if ((storageFlags & Installer.FLAG_STORAGE_CE) != 0) {
+ ceSnapshotInodes.put(user, ceSnapshotInode);
+ }
} catch (InstallerException ie) {
Log.e(TAG, "Unable to create app data snapshot for: " + packageName
+ ", userId: " + user, ie);
}
}
- return pendingBackups;
+ return new SnapshotAppDataResult(pendingBackups, ceSnapshotInodes);
}
/**
@@ -138,6 +144,22 @@ public class AppDataRollbackHelper {
}
/**
+ * Deletes an app data data snapshot for a specified package {@code packageName} for a
+ * given {@code user}.
+ */
+ public void destroyAppDataSnapshot(String packageName, int user, long ceSnapshotInode) {
+ int storageFlags = Installer.FLAG_STORAGE_DE;
+ if (ceSnapshotInode > 0) {
+ storageFlags |= Installer.FLAG_STORAGE_CE;
+ }
+ try {
+ mInstaller.destroyAppDataSnapshot(packageName, user, ceSnapshotInode, storageFlags);
+ } catch (InstallerException ie) {
+ Log.e(TAG, "Unable to delete app data snapshot for " + packageName, ie);
+ }
+ }
+
+ /**
* Computes the list of pending backups and restores for {@code userId} given lists of
* available and recent rollbacks. Packages pending backup for the given user are added
* to {@code pendingBackups} and packages pending restore are added to {@code pendingRestores}
@@ -191,16 +213,28 @@ public class AppDataRollbackHelper {
}
/**
- * Commits the list of pending backups and restores for a given {@code userId}.
+ * Commits the list of pending backups and restores for a given {@code userId}. For the pending
+ * backups updates corresponding {@code changedRollbackData} with a mapping from {@code userId}
+ * to a inode of theirs CE user data snapshot.
*/
public void commitPendingBackupAndRestoreForUser(int userId,
- ArrayList<String> pendingBackups, Map<String, RestoreInfo> pendingRestores) {
+ ArrayList<String> pendingBackups, Map<String, RestoreInfo> pendingRestores,
+ List<RollbackData> changedRollbackData) {
if (!pendingBackups.isEmpty()) {
for (String packageName : pendingBackups) {
try {
- mInstaller.snapshotAppData(packageName, userId, Installer.FLAG_STORAGE_CE);
+ long ceSnapshotInode = mInstaller.snapshotAppData(packageName, userId,
+ Installer.FLAG_STORAGE_CE);
+ for (RollbackData data : changedRollbackData) {
+ for (PackageRollbackInfo info : data.packages) {
+ if (info.getPackageName().equals(packageName)) {
+ info.putCeSnapshotInode(userId, ceSnapshotInode);
+ }
+ }
+ }
} catch (InstallerException ie) {
- Log.e(TAG, "Unable to create app data snapshot for: " + packageName, ie);
+ Log.e(TAG, "Unable to create app data snapshot for: " + packageName
+ + ", userId: " + userId, ie);
}
}
}
@@ -233,4 +267,26 @@ public class AppDataRollbackHelper {
return StorageManager.isFileEncryptedNativeOrEmulated()
&& !StorageManager.isUserKeyUnlocked(userId);
}
+
+ /**
+ * Encapsulates a result of {@link #snapshotAppData} method.
+ */
+ public static final class SnapshotAppDataResult {
+
+ /**
+ * A list of users for which the snapshot is pending, usually because data for one or more
+ * users is still credential locked.
+ */
+ public final IntArray pendingBackups;
+
+ /**
+ * A mapping between user and an inode of theirs CE data snapshot.
+ */
+ public final SparseLongArray ceSnapshotInodes;
+
+ public SnapshotAppDataResult(IntArray pendingBackups, SparseLongArray ceSnapshotInodes) {
+ this.pendingBackups = pendingBackups;
+ this.ceSnapshotInodes = ceSnapshotInodes;
+ }
+ }
}
diff --git a/services/core/java/com/android/server/rollback/RollbackData.java b/services/core/java/com/android/server/rollback/RollbackData.java
index 467bb28f5744..fcd5297f1363 100644
--- a/services/core/java/com/android/server/rollback/RollbackData.java
+++ b/services/core/java/com/android/server/rollback/RollbackData.java
@@ -56,6 +56,19 @@ class RollbackData {
public int stagedSessionId;
/**
+ * A flag to indicate whether the rollback should be considered available
+ * for use. This will always be true for rollbacks of non-staged sessions.
+ * For rollbacks of staged sessions, this is not set to true until after
+ * the staged session has been applied.
+ */
+ public boolean isAvailable;
+
+ /**
+ * The id of the post-reboot apk session for a staged install, if any.
+ */
+ public int apkSessionId = -1;
+
+ /**
* Whether this Rollback is currently in progress. This field is true from the point
* we commit a {@code PackageInstaller} session containing these packages to the point the
* {@code PackageInstaller} calls into the {@code onFinished} callback.
@@ -63,9 +76,17 @@ class RollbackData {
// NOTE: All accesses to this field are from the RollbackManager handler thread.
public boolean inProgress = false;
- RollbackData(int rollbackId, File backupDir, int stagedSessionId) {
+ RollbackData(int rollbackId, File backupDir, int stagedSessionId, boolean isAvailable) {
this.rollbackId = rollbackId;
this.backupDir = backupDir;
this.stagedSessionId = stagedSessionId;
+ this.isAvailable = isAvailable;
+ }
+
+ /**
+ * Whether the rollback is for rollback of a staged install.
+ */
+ public boolean isStaged() {
+ return stagedSessionId != -1;
}
}
diff --git a/services/core/java/com/android/server/rollback/RollbackManagerService.java b/services/core/java/com/android/server/rollback/RollbackManagerService.java
index ba6cdddb4cc8..f7ba9bbc695f 100644
--- a/services/core/java/com/android/server/rollback/RollbackManagerService.java
+++ b/services/core/java/com/android/server/rollback/RollbackManagerService.java
@@ -44,4 +44,11 @@ public final class RollbackManagerService extends SystemService {
public void onUnlockUser(int user) {
mService.onUnlockUser(user);
}
+
+ @Override
+ public void onBootPhase(int phase) {
+ if (phase == SystemService.PHASE_BOOT_COMPLETED) {
+ mService.onBootCompleted();
+ }
+ }
}
diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
index 7885abe17c5b..24d5bd14bc44 100644
--- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
+++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java
@@ -43,6 +43,7 @@ import android.os.Process;
import android.util.IntArray;
import android.util.Log;
import android.util.SparseBooleanArray;
+import android.util.SparseLongArray;
import com.android.internal.annotations.GuardedBy;
import com.android.server.LocalServices;
@@ -110,7 +111,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
private final HandlerThread mHandlerThread;
private final Installer mInstaller;
private final RollbackPackageHealthObserver mPackageHealthObserver;
- private final AppDataRollbackHelper mUserdataHelper;
+ private final AppDataRollbackHelper mAppDataRollbackHelper;
RollbackManagerServiceImpl(Context context) {
mContext = context;
@@ -124,7 +125,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
mRollbackStore = new RollbackStore(new File(Environment.getDataDirectory(), "rollback"));
mPackageHealthObserver = new RollbackPackageHealthObserver(mContext);
- mUserdataHelper = new AppDataRollbackHelper(mInstaller);
+ mAppDataRollbackHelper = new AppDataRollbackHelper(mInstaller);
// Kick off loading of the rollback data from strorage in a background
// thread.
@@ -221,9 +222,10 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
List<RollbackInfo> rollbacks = new ArrayList<>();
for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
RollbackData data = mAvailableRollbacks.get(i);
- // TODO: Pass the correct value for isStaged instead of
- // assuming always false.
- rollbacks.add(new RollbackInfo(data.rollbackId, data.packages, false));
+ if (data.isAvailable) {
+ rollbacks.add(new RollbackInfo(data.rollbackId,
+ data.packages, data.isStaged()));
+ }
}
return new ParceledListSlice<>(rollbacks);
}
@@ -323,20 +325,35 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
parentParams.setAllowDowngrade(true);
parentParams.setMultiPackage();
+ if (data.isStaged()) {
+ parentParams.setStaged();
+ }
+
int parentSessionId = packageInstaller.createSession(parentParams);
PackageInstaller.Session parentSession = packageInstaller.openSession(parentSessionId);
for (PackageRollbackInfo info : data.packages) {
PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL);
- String installerPackageName = pm.getInstallerPackageName(info.getPackageName());
- if (installerPackageName == null) {
- sendFailure(statusReceiver, RollbackManager.STATUS_FAILURE,
- "Cannot find installer package");
- return;
+ // TODO: We can't get the installerPackageName for apex
+ // (b/123920130). Is it okay to ignore the installer package
+ // for apex?
+ if (!info.isApex()) {
+ String installerPackageName = pm.getInstallerPackageName(info.getPackageName());
+ if (installerPackageName == null) {
+ sendFailure(statusReceiver, RollbackManager.STATUS_FAILURE,
+ "Cannot find installer package");
+ return;
+ }
+ params.setInstallerPackageName(installerPackageName);
}
- params.setInstallerPackageName(installerPackageName);
params.setAllowDowngrade(true);
+ if (data.isStaged()) {
+ params.setStaged();
+ }
+ if (info.isApex()) {
+ params.setInstallAsApex();
+ }
int sessionId = packageInstaller.createSession(params);
PackageInstaller.Session session = packageInstaller.openSession(sessionId);
@@ -376,11 +393,9 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
return;
}
- // TODO: Set the correct values for isStaged and
- // committedSessionId.
addRecentlyExecutedRollback(new RollbackInfo(
- data.rollbackId, data.packages, false, causePackages,
- PackageInstaller.SessionInfo.INVALID_ID));
+ data.rollbackId, data.packages, data.isStaged(),
+ causePackages, parentSessionId));
sendSuccess(statusReceiver);
Intent broadcast = new Intent(Intent.ACTION_ROLLBACK_COMMITTED);
@@ -435,7 +450,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
for (PackageRollbackInfo info : data.packages) {
if (info.getPackageName().equals(packageName)) {
iter.remove();
- mRollbackStore.deleteAvailableRollback(data);
+ deleteRollback(data);
break;
}
}
@@ -450,13 +465,13 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
final List<RollbackData> changed;
synchronized (mLock) {
ensureRollbackDataLoadedLocked();
- changed = mUserdataHelper.computePendingBackupsAndRestores(userId,
+ changed = mAppDataRollbackHelper.computePendingBackupsAndRestores(userId,
pendingBackupPackages, pendingRestorePackages, mAvailableRollbacks,
mRecentlyExecutedRollbacks);
}
- mUserdataHelper.commitPendingBackupAndRestoreForUser(userId,
- pendingBackupPackages, pendingRestorePackages);
+ mAppDataRollbackHelper.commitPendingBackupAndRestoreForUser(userId,
+ pendingBackupPackages, pendingRestorePackages, changed);
for (RollbackData rd : changed) {
try {
@@ -472,6 +487,47 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
});
}
+ void onBootCompleted() {
+ getHandler().post(() -> {
+ // Check to see if any staged sessions with rollback enabled have
+ // been applied.
+ List<RollbackData> staged = new ArrayList<>();
+ synchronized (mLock) {
+ ensureRollbackDataLoadedLocked();
+ for (RollbackData data : mAvailableRollbacks) {
+ if (data.stagedSessionId != -1) {
+ staged.add(data);
+ }
+ }
+ }
+
+ for (RollbackData data : staged) {
+ PackageInstaller installer = mContext.getPackageManager().getPackageInstaller();
+ PackageInstaller.SessionInfo session = installer.getSessionInfo(
+ data.stagedSessionId);
+ if (session != null) {
+ if (session.isSessionApplied()) {
+ synchronized (mLock) {
+ data.isAvailable = true;
+ }
+ try {
+ mRollbackStore.saveAvailableRollback(data);
+ } catch (IOException ioe) {
+ Log.e(TAG, "Unable to save rollback info for : "
+ + data.rollbackId, ioe);
+ }
+ } else if (session.isSessionFailed()) {
+ // TODO: Do we need to remove this from
+ // mAvailableRollbacks, or is it okay to leave as
+ // unavailable until the next reboot when it will go
+ // away on its own?
+ deleteRollback(data);
+ }
+ }
+ }
+ });
+ }
+
/**
* Load rollback data from storage if it has not already been loaded.
* After calling this funciton, mAvailableRollbacks and
@@ -537,7 +593,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
info.getVersionRolledBackFrom(),
installedVersion)) {
iter.remove();
- mRollbackStore.deleteAvailableRollback(data);
+ deleteRollback(data);
break;
}
}
@@ -644,9 +700,13 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
Iterator<RollbackData> iter = mAvailableRollbacks.iterator();
while (iter.hasNext()) {
RollbackData data = iter.next();
+ if (!data.isAvailable) {
+ continue;
+ }
+
if (!now.isBefore(data.timestamp.plusMillis(ROLLBACK_LIFETIME_DURATION_MILLIS))) {
iter.remove();
- mRollbackStore.deleteAvailableRollback(data);
+ deleteRollback(data);
} else if (oldest == null || oldest.isAfter(data.timestamp)) {
oldest = data.timestamp;
}
@@ -707,6 +767,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
// ourselves.
PackageInstaller.SessionInfo session = null;
+ int parentSessionId = -1;
PackageInstaller installer = mContext.getPackageManager().getPackageInstaller();
for (PackageInstaller.SessionInfo info : installer.getAllSessions()) {
if (info.isMultiPackage()) {
@@ -714,12 +775,14 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
PackageInstaller.SessionInfo child = installer.getSessionInfo(childId);
if (sessionMatchesForEnableRollback(child, installFlags, newPackageCodePath)) {
// TODO: Check we only have one matching session?
+ parentSessionId = info.getSessionId();
session = child;
break;
}
}
} else if (sessionMatchesForEnableRollback(info, installFlags, newPackageCodePath)) {
// TODO: Check we only have one matching session?
+ parentSessionId = info.getSessionId();
session = info;
break;
}
@@ -730,6 +793,58 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
return false;
}
+ // Check to see if this is the apk session for a staged session with
+ // rollback enabled.
+ // TODO: This check could be made more efficient.
+ RollbackData rd = null;
+ synchronized (mLock) {
+ ensureRollbackDataLoadedLocked();
+ for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
+ RollbackData data = mAvailableRollbacks.get(i);
+ if (data.apkSessionId == parentSessionId) {
+ rd = data;
+ break;
+ }
+ }
+ }
+
+ if (rd != null) {
+ // This is the apk session for a staged session. We have already
+ // backed up the apks, we just need to do user data backup.
+ PackageParser.PackageLite newPackage = null;
+ try {
+ newPackage = PackageParser.parsePackageLite(
+ new File(session.resolvedBaseCodePath), 0);
+ } catch (PackageParser.PackageParserException e) {
+ Log.e(TAG, "Unable to parse new package", e);
+ return false;
+ }
+ String packageName = newPackage.packageName;
+ for (PackageRollbackInfo info : rd.packages) {
+ if (info.getPackageName().equals(packageName)) {
+ AppDataRollbackHelper.SnapshotAppDataResult rs =
+ mAppDataRollbackHelper.snapshotAppData(packageName, installedUsers);
+ info.getPendingBackups().addAll(rs.pendingBackups);
+ for (int i = 0; i < rs.ceSnapshotInodes.size(); i++) {
+ info.putCeSnapshotInode(rs.ceSnapshotInodes.keyAt(i),
+ rs.ceSnapshotInodes.valueAt(i));
+ }
+ try {
+ mRollbackStore.saveAvailableRollback(rd);
+ } catch (IOException ioe) {
+ // TODO: Hopefully this is okay because we will try
+ // again to save the rollback when the staged session
+ // is applied. Just so long as the device doesn't
+ // reboot before then.
+ Log.e(TAG, "Unable to save rollback info for : " + rd.rollbackId, ioe);
+ }
+ return true;
+ }
+ }
+ Log.e(TAG, "Unable to find package in apk session");
+ return false;
+ }
+
return enableRollbackForSession(session, installedUsers, true);
}
@@ -782,13 +897,18 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
VersionedPackage installedVersion = new VersionedPackage(packageName,
pkgInfo.getLongVersionCode());
- IntArray pendingBackups = IntArray.wrap(new int[0]);
+ final AppDataRollbackHelper.SnapshotAppDataResult result;
if (snapshotUserData && !isApex) {
- pendingBackups = mUserdataHelper.snapshotAppData(packageName, installedUsers);
+ result = mAppDataRollbackHelper.snapshotAppData(packageName, installedUsers);
+ } else {
+ result = new AppDataRollbackHelper.SnapshotAppDataResult(IntArray.wrap(new int[0]),
+ new SparseLongArray());
}
PackageRollbackInfo info = new PackageRollbackInfo(newVersion, installedVersion,
- pendingBackups, new ArrayList<>(), isApex);
+ result.pendingBackups, new ArrayList<>(), isApex, IntArray.wrap(installedUsers),
+ result.ceSnapshotInodes);
+
RollbackData data;
try {
int childSessionId = session.getSessionId();
@@ -838,9 +958,8 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
getHandler().post(() -> {
final RollbackData rollbackData = getRollbackForPackage(packageName);
for (int userId : userIds) {
- final boolean changedRollbackData = mUserdataHelper.restoreAppData(packageName,
- rollbackData, userId, appId, ceDataInode, seInfo);
-
+ final boolean changedRollbackData = mAppDataRollbackHelper.restoreAppData(
+ packageName, rollbackData, userId, appId, ceDataInode, seInfo);
// We've updated metadata about this rollback, so save it to flash.
if (changedRollbackData) {
try {
@@ -910,6 +1029,32 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
}
}
+ @Override
+ public void notifyStagedApkSession(int originalSessionId, int apkSessionId) {
+ getHandler().post(() -> {
+ RollbackData rd = null;
+ synchronized (mLock) {
+ ensureRollbackDataLoadedLocked();
+ for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
+ RollbackData data = mAvailableRollbacks.get(i);
+ if (data.stagedSessionId == originalSessionId) {
+ data.apkSessionId = apkSessionId;
+ rd = data;
+ break;
+ }
+ }
+ }
+
+ if (rd != null) {
+ try {
+ mRollbackStore.saveAvailableRollback(rd);
+ } catch (IOException ioe) {
+ Log.e(TAG, "Unable to save rollback info for : " + rd.rollbackId, ioe);
+ }
+ }
+ });
+ }
+
/**
* Gets the version of the package currently installed.
* Returns null if the package is not currently installed.
@@ -918,7 +1063,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
PackageManager pm = mContext.getPackageManager();
PackageInfo pkgInfo = null;
try {
- pkgInfo = pm.getPackageInfo(packageName, 0);
+ pkgInfo = pm.getPackageInfo(packageName, PackageManager.MATCH_APEX);
} catch (PackageManager.NameNotFoundException e) {
return null;
}
@@ -1006,12 +1151,12 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
scheduleExpiration(ROLLBACK_LIFETIME_DURATION_MILLIS);
} catch (IOException e) {
Log.e(TAG, "Unable to enable rollback", e);
- mRollbackStore.deleteAvailableRollback(data);
+ deleteRollback(data);
}
} else {
// The install session was aborted, clean up the pending
// install.
- mRollbackStore.deleteAvailableRollback(data);
+ deleteRollback(data);
}
}
}
@@ -1053,7 +1198,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
ensureRollbackDataLoadedLocked();
for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
RollbackData data = mAvailableRollbacks.get(i);
- if (getPackageRollbackInfo(data, packageName) != null) {
+ if (data.isAvailable && getPackageRollbackInfo(data, packageName) != null) {
return data;
}
}
@@ -1072,7 +1217,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
ensureRollbackDataLoadedLocked();
for (int i = 0; i < mAvailableRollbacks.size(); ++i) {
RollbackData data = mAvailableRollbacks.get(i);
- if (data.rollbackId == rollbackId) {
+ if (data.isAvailable && data.rollbackId == rollbackId) {
return data;
}
}
@@ -1110,4 +1255,17 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub {
throw new IOException("Failed to allocate rollback ID");
}
+
+ private void deleteRollback(RollbackData rollbackData) {
+ for (PackageRollbackInfo info : rollbackData.packages) {
+ IntArray installedUsers = info.getInstalledUsers();
+ SparseLongArray ceSnapshotInodes = info.getCeSnapshotInodes();
+ for (int i = 0; i < installedUsers.size(); i++) {
+ int userId = installedUsers.get(i);
+ mAppDataRollbackHelper.destroyAppDataSnapshot(info.getPackageName(), userId,
+ ceSnapshotInodes.get(userId, 0));
+ }
+ }
+ mRollbackStore.deleteAvailableRollback(rollbackData);
+ }
}
diff --git a/services/core/java/com/android/server/rollback/RollbackStore.java b/services/core/java/com/android/server/rollback/RollbackStore.java
index ff516902a5b3..be904eacebff 100644
--- a/services/core/java/com/android/server/rollback/RollbackStore.java
+++ b/services/core/java/com/android/server/rollback/RollbackStore.java
@@ -23,6 +23,7 @@ import android.content.rollback.PackageRollbackInfo.RestoreInfo;
import android.content.rollback.RollbackInfo;
import android.util.IntArray;
import android.util.Log;
+import android.util.SparseLongArray;
import libcore.io.IoUtils;
@@ -160,6 +161,28 @@ class RollbackStore {
return restoreInfos;
}
+ private static @NonNull JSONArray ceSnapshotInodesToJson(
+ @NonNull SparseLongArray ceSnapshotInodes) throws JSONException {
+ JSONArray array = new JSONArray();
+ for (int i = 0; i < ceSnapshotInodes.size(); i++) {
+ JSONObject entryJson = new JSONObject();
+ entryJson.put("userId", ceSnapshotInodes.keyAt(i));
+ entryJson.put("ceSnapshotInode", ceSnapshotInodes.valueAt(i));
+ array.put(entryJson);
+ }
+ return array;
+ }
+
+ private static @NonNull SparseLongArray ceSnapshotInodesFromJson(JSONArray json)
+ throws JSONException {
+ SparseLongArray ceSnapshotInodes = new SparseLongArray(json.length());
+ for (int i = 0; i < json.length(); i++) {
+ JSONObject entry = json.getJSONObject(i);
+ ceSnapshotInodes.append(entry.getInt("userId"), entry.getLong("ceSnapshotInode"));
+ }
+ return ceSnapshotInodes;
+ }
+
/**
* Reads the list of recently executed rollbacks from persistent storage.
*/
@@ -201,13 +224,13 @@ class RollbackStore {
*/
RollbackData createAvailableRollback(int rollbackId) throws IOException {
File backupDir = new File(mAvailableRollbacksDir, Integer.toString(rollbackId));
- return new RollbackData(rollbackId, backupDir, -1);
+ return new RollbackData(rollbackId, backupDir, -1, true);
}
RollbackData createPendingStagedRollback(int rollbackId, int stagedSessionId)
throws IOException {
File backupDir = new File(mAvailableRollbacksDir, Integer.toString(rollbackId));
- return new RollbackData(rollbackId, backupDir, stagedSessionId);
+ return new RollbackData(rollbackId, backupDir, stagedSessionId, false);
}
/**
@@ -247,6 +270,8 @@ class RollbackStore {
dataJson.put("packages", toJson(data.packages));
dataJson.put("timestamp", data.timestamp.toString());
dataJson.put("stagedSessionId", data.stagedSessionId);
+ dataJson.put("isAvailable", data.isAvailable);
+ dataJson.put("apkSessionId", data.apkSessionId);
PrintWriter pw = new PrintWriter(new File(data.backupDir, "rollback.json"));
pw.println(dataJson.toString());
@@ -261,8 +286,6 @@ class RollbackStore {
* rollback.
*/
void deleteAvailableRollback(RollbackData data) {
- // TODO(narayan): Make sure we delete the userdata snapshot along with the backup of the
- // actual app.
removeFile(data.backupDir);
}
@@ -307,10 +330,12 @@ class RollbackStore {
int rollbackId = dataJson.getInt("rollbackId");
int stagedSessionId = dataJson.getInt("stagedSessionId");
+ boolean isAvailable = dataJson.getBoolean("isAvailable");
RollbackData data = new RollbackData(rollbackId, backupDir,
- stagedSessionId);
+ stagedSessionId, isAvailable);
data.packages.addAll(packageRollbackInfosFromJson(dataJson.getJSONArray("packages")));
data.timestamp = Instant.parse(dataJson.getString("timestamp"));
+ data.apkSessionId = dataJson.getInt("apkSessionId");
return data;
} catch (JSONException | DateTimeParseException e) {
throw new IOException(e);
@@ -337,11 +362,15 @@ class RollbackStore {
IntArray pendingBackups = info.getPendingBackups();
List<RestoreInfo> pendingRestores = info.getPendingRestores();
+ IntArray installedUsers = info.getInstalledUsers();
json.put("pendingBackups", convertToJsonArray(pendingBackups));
json.put("pendingRestores", convertToJsonArray(pendingRestores));
json.put("isApex", info.isApex());
+ json.put("installedUsers", convertToJsonArray(installedUsers));
+ json.put("ceSnapshotInodes", ceSnapshotInodesToJson(info.getCeSnapshotInodes()));
+
return json;
}
@@ -358,8 +387,12 @@ class RollbackStore {
final boolean isApex = json.getBoolean("isApex");
+ final IntArray installedUsers = convertToIntArray(json.getJSONArray("installedUsers"));
+ final SparseLongArray ceSnapshotInodes = ceSnapshotInodesFromJson(
+ json.getJSONArray("ceSnapshotInodes"));
+
return new PackageRollbackInfo(versionRolledBackFrom, versionRolledBackTo,
- pendingBackups, pendingRestores, isApex);
+ pendingBackups, pendingRestores, isApex, installedUsers, ceSnapshotInodes);
}
private JSONArray versionedPackagesToJson(List<VersionedPackage> packages)
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 1163d3916cb1..057b53e6232f 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -128,6 +128,8 @@ public final class TvInputManagerService extends SystemService {
private final WatchLogHandler mWatchLogHandler;
+ private IBinder.DeathRecipient mDeathRecipient;
+
public TvInputManagerService(Context context) {
super(context);
@@ -674,6 +676,7 @@ public final class TvInputManagerService extends SystemService {
if (sessionToken == userState.mainSessionToken) {
setMainLocked(sessionToken, false, callingUid, userId);
}
+ sessionState.session.asBinder().unlinkToDeath(sessionState, 0);
sessionState.session.release();
}
} catch (RemoteException | SessionNotFoundException e) {
@@ -709,6 +712,7 @@ public final class TvInputManagerService extends SystemService {
clientState.sessionTokens.remove(sessionToken);
if (clientState.isEmpty()) {
userState.clientStateMap.remove(sessionState.client.asBinder());
+ sessionState.client.asBinder().unlinkToDeath(clientState, 0);
}
}
@@ -1002,17 +1006,19 @@ public final class TvInputManagerService extends SystemService {
synchronized (mLock) {
final UserState userState = getOrCreateUserStateLocked(resolvedUserId);
userState.callbackSet.add(callback);
- try {
- callback.asBinder().linkToDeath(new IBinder.DeathRecipient() {
- @Override
- public void binderDied() {
- synchronized (mLock) {
- if (userState.callbackSet != null) {
- userState.callbackSet.remove(callback);
- }
+ mDeathRecipient = new IBinder.DeathRecipient() {
+ @Override
+ public void binderDied() {
+ synchronized (mLock) {
+ if (userState.callbackSet != null) {
+ userState.callbackSet.remove(callback);
}
}
- }, 0);
+ }
+ };
+
+ try {
+ callback.asBinder().linkToDeath(mDeathRecipient, 0);
} catch (RemoteException e) {
Slog.e(TAG, "client process has already died", e);
}
@@ -1031,6 +1037,7 @@ public final class TvInputManagerService extends SystemService {
synchronized (mLock) {
UserState userState = getOrCreateUserStateLocked(resolvedUserId);
userState.callbackSet.remove(callback);
+ callback.asBinder().unlinkToDeath(mDeathRecipient, 0);
}
} finally {
Binder.restoreCallingIdentity(identity);
diff --git a/services/core/java/com/android/server/uri/UriGrantsManagerService.java b/services/core/java/com/android/server/uri/UriGrantsManagerService.java
index 744efab7d78d..332df956d0fb 100644
--- a/services/core/java/com/android/server/uri/UriGrantsManagerService.java
+++ b/services/core/java/com/android/server/uri/UriGrantsManagerService.java
@@ -1067,8 +1067,9 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub {
// Figure out the value returned when access is allowed
final int allowedResult;
- if ((modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0) {
- // If we're extending a persistable grant, then we need to return
+ if ((modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0
+ || pi.forceUriPermissions) {
+ // If we're extending a persistable grant or need to force, then we need to return
// "targetUid" so that we always create a grant data structure to
// support take/release APIs
allowedResult = targetUid;
diff --git a/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java b/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java
index b8db3f39eb62..37909c3022d4 100644
--- a/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java
+++ b/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java
@@ -62,6 +62,7 @@ import org.robolectric.shadows.ShadowContextWrapper;
import java.io.File;
import java.io.FileDescriptor;
+import java.io.IOException;
import java.io.PrintWriter;
/** Tests for the user-aware backup/restore system service {@link BackupManagerService}. */
@@ -1516,8 +1517,7 @@ public class BackupManagerServiceTest {
public void testDump_onRegisteredUser_callsMethodForUser() throws Exception {
BackupManagerService backupManagerService =
createServiceAndRegisterUser(UserHandle.USER_SYSTEM, mUserOneService);
- File testFile = new File(mContext.getFilesDir(), "test");
- testFile.createNewFile();
+ File testFile = createTestFile();
FileDescriptor fileDescriptor = new FileDescriptor();
PrintWriter printWriter = new PrintWriter(testFile);
String[] args = {"1", "2"};
@@ -1531,8 +1531,7 @@ public class BackupManagerServiceTest {
@Test
public void testDump_onUnknownUser_doesNotPropagateCall() throws Exception {
BackupManagerService backupManagerService = createService();
- File testFile = new File(mContext.getFilesDir(), "test");
- testFile.createNewFile();
+ File testFile = createTestFile();
FileDescriptor fileDescriptor = new FileDescriptor();
PrintWriter printWriter = new PrintWriter(testFile);
String[] args = {"1", "2"};
@@ -1542,6 +1541,12 @@ public class BackupManagerServiceTest {
verify(mUserOneService, never()).dump(fileDescriptor, printWriter, args);
}
+ private File createTestFile() throws IOException {
+ File testFile = new File(mContext.getFilesDir(), "test");
+ testFile.createNewFile();
+ return testFile;
+ }
+
private BackupManagerService createService() {
mShadowContext.grantPermissions(BACKUP);
return new BackupManagerService(
diff --git a/services/robotests/backup/src/com/android/server/backup/UserBackupManagerServiceTest.java b/services/robotests/backup/src/com/android/server/backup/UserBackupManagerServiceTest.java
index 427aed7364d2..c8d1eb413ecf 100644
--- a/services/robotests/backup/src/com/android/server/backup/UserBackupManagerServiceTest.java
+++ b/services/robotests/backup/src/com/android/server/backup/UserBackupManagerServiceTest.java
@@ -76,6 +76,7 @@ import org.robolectric.shadows.ShadowLooper;
import org.robolectric.shadows.ShadowPackageManager;
import java.io.File;
+import java.io.IOException;
import java.util.List;
/**
@@ -1158,6 +1159,58 @@ public class UserBackupManagerServiceTest {
}
/**
+ * Test that {@link UserBackupManagerService#getAncestralSerialNumber()} returns {@code -1}
+ * when value not set.
+ */
+ @Test
+ public void testGetAncestralSerialNumber_notSet_returnsMinusOne() {
+ UserBackupManagerService service = createUserBackupManagerServiceAndRunTasks();
+
+ assertThat(service.getAncestralSerialNumber()).isEqualTo(-1L);
+ }
+
+ /**
+ * Test that {@link UserBackupManagerService#getAncestralSerialNumber()} returns correct value
+ * when value set.
+ */
+ @Test
+ public void testGetAncestralSerialNumber_set_returnsCorrectValue() throws Exception {
+ mShadowContext.grantPermissions(android.Manifest.permission.BACKUP);
+ UserBackupManagerService service = createUserBackupManagerServiceAndRunTasks();
+ service.setAncestralSerialNumberFile(createTestFile());
+
+ long testSerialNumber = 20L;
+ service.setAncestralSerialNumber(testSerialNumber);
+
+ assertThat(service.getAncestralSerialNumber()).isEqualTo(testSerialNumber);
+ }
+
+ /**
+ * Test that {@link UserBackupManagerService#getAncestralSerialNumber()} returns correct value
+ * when value set.
+ */
+ @Test
+ public void testGetAncestralSerialNumber_setTwice_returnsCorrectValue() throws Exception {
+ mShadowContext.grantPermissions(android.Manifest.permission.BACKUP);
+ UserBackupManagerService service = createUserBackupManagerServiceAndRunTasks();
+ service.setAncestralSerialNumberFile(createTestFile());
+
+ long testSerialNumber = 20L;
+ long testSerialNumber2 = 21L;
+ service.setAncestralSerialNumber(testSerialNumber);
+ service.setAncestralSerialNumber(testSerialNumber2);
+
+ assertThat(service.getAncestralSerialNumber()).isEqualTo(testSerialNumber2);
+ }
+
+ private File createTestFile() throws IOException {
+ File testFile = new File(mContext.getFilesDir(), "test");
+ testFile.createNewFile();
+ return testFile;
+ }
+
+
+ /**
* We can't mock the void method {@link #schedule(Context, long, BackupManagerConstants)} so we
* extend {@link ShadowKeyValueBackupJob} and throw an exception at the end of the method.
*/
diff --git a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java
index 9dcacf3021b8..5c0a1c83b1b0 100644
--- a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java
+++ b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java
@@ -40,7 +40,7 @@ import org.mockito.MockitoAnnotations;
* Tests for {@link com.android.server.power.batterysaver.BatterySaverPolicy}
*/
public class BatterySaverPolicyTest extends AndroidTestCase {
- private static final int MAX_SERVICE_TYPE = 15;
+ private static final int MAX_SERVICE_TYPE = 16;
private static final float BRIGHTNESS_FACTOR = 0.7f;
private static final float DEFAULT_BRIGHTNESS_FACTOR = 0.5f;
private static final float PRECISION = 0.001f;
@@ -146,6 +146,11 @@ public class BatterySaverPolicyTest extends AndroidTestCase {
}
@SmallTest
+ public void testGetBatterySaverPolicy_PolicyNightMode_DefaultValueCorrect() {
+ testServiceDefaultValue_On(ServiceType.NIGHT_MODE);
+ }
+
+ @SmallTest
public void testGetBatterySaverPolicy_PolicyDataSaver_DefaultValueCorrect() {
mBatterySaverPolicy.updateConstantsLocked("", "");
mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_FULL);
diff --git a/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java b/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java
index f1e6bc25dabf..50dbaf570e9e 100644
--- a/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java
+++ b/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java
@@ -18,15 +18,19 @@ package com.android.server.rollback;
import static org.junit.Assert.*;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
import android.content.pm.VersionedPackage;
import android.content.rollback.PackageRollbackInfo;
import android.content.rollback.PackageRollbackInfo.RestoreInfo;
import android.util.IntArray;
+import android.util.SparseLongArray;
import com.android.server.pm.Installer;
@@ -38,6 +42,7 @@ import org.mockito.Mockito;
import java.io.File;
import java.util.ArrayList;
+import java.util.HashMap;
@RunWith(JUnit4.class)
public class AppDataRollbackHelperTest {
@@ -50,10 +55,14 @@ public class AppDataRollbackHelperTest {
// All users are unlocked so we should snapshot data for them.
doReturn(true).when(helper).isUserCredentialLocked(eq(10));
doReturn(true).when(helper).isUserCredentialLocked(eq(11));
- IntArray pending = helper.snapshotAppData("com.foo.bar", new int[]{10, 11});
- assertEquals(2, pending.size());
- assertEquals(10, pending.get(0));
- assertEquals(11, pending.get(1));
+ AppDataRollbackHelper.SnapshotAppDataResult result = helper.snapshotAppData("com.foo.bar",
+ new int[]{10, 11});
+
+ assertEquals(2, result.pendingBackups.size());
+ assertEquals(10, result.pendingBackups.get(0));
+ assertEquals(11, result.pendingBackups.get(1));
+
+ assertEquals(0, result.ceSnapshotInodes.size());
InOrder inOrder = Mockito.inOrder(installer);
inOrder.verify(installer).snapshotAppData(
@@ -65,10 +74,14 @@ public class AppDataRollbackHelperTest {
// One of the users is unlocked but the other isn't
doReturn(false).when(helper).isUserCredentialLocked(eq(10));
doReturn(true).when(helper).isUserCredentialLocked(eq(11));
+ when(installer.snapshotAppData(anyString(), anyInt(), anyInt())).thenReturn(239L);
- pending = helper.snapshotAppData("com.foo.bar", new int[]{10, 11});
- assertEquals(1, pending.size());
- assertEquals(11, pending.get(0));
+ result = helper.snapshotAppData("com.foo.bar", new int[]{10, 11});
+ assertEquals(1, result.pendingBackups.size());
+ assertEquals(11, result.pendingBackups.get(0));
+
+ assertEquals(1, result.ceSnapshotInodes.size());
+ assertEquals(239L, result.ceSnapshotInodes.get(10));
inOrder = Mockito.inOrder(installer);
inOrder.verify(installer).snapshotAppData(
@@ -80,10 +93,10 @@ public class AppDataRollbackHelperTest {
}
private static RollbackData createInProgressRollbackData(String packageName) {
- RollbackData data = new RollbackData(1, new File("/does/not/exist"), -1);
+ RollbackData data = new RollbackData(1, new File("/does/not/exist"), -1, true);
data.packages.add(new PackageRollbackInfo(
new VersionedPackage(packageName, 1), new VersionedPackage(packageName, 1),
- new IntArray(), new ArrayList<>(), false));
+ new IntArray(), new ArrayList<>(), false, new IntArray(), new SparseLongArray()));
data.inProgress = true;
return data;
@@ -173,4 +186,53 @@ public class AppDataRollbackHelperTest {
ArrayList<RestoreInfo> pendingRestores = rd.packages.get(0).getPendingRestores();
assertEquals(0, pendingRestores.size());
}
+
+ @Test
+ public void destroyAppData() throws Exception {
+ Installer installer = mock(Installer.class);
+ AppDataRollbackHelper helper = new AppDataRollbackHelper(installer);
+ SparseLongArray ceSnapshotInodes = new SparseLongArray();
+ ceSnapshotInodes.put(11, 239L);
+
+ helper.destroyAppDataSnapshot("com.foo.bar", 10, 0L);
+ helper.destroyAppDataSnapshot("com.foo.bar", 11, 239L);
+
+ InOrder inOrder = Mockito.inOrder(installer);
+ inOrder.verify(installer).destroyAppDataSnapshot(
+ eq("com.foo.bar"), eq(10), eq(0L),
+ eq(Installer.FLAG_STORAGE_DE));
+ inOrder.verify(installer).destroyAppDataSnapshot(
+ eq("com.foo.bar"), eq(11), eq(239L),
+ eq(Installer.FLAG_STORAGE_DE | Installer.FLAG_STORAGE_CE));
+ inOrder.verifyNoMoreInteractions();
+ }
+
+ @Test
+ public void commitPendingBackupAndRestoreForUser_updatesRollbackData() throws Exception {
+ Installer installer = mock(Installer.class);
+ AppDataRollbackHelper helper = new AppDataRollbackHelper(installer);
+
+ ArrayList<RollbackData> changedRollbackData = new ArrayList<>();
+ changedRollbackData.add(createInProgressRollbackData("com.foo.bar"));
+
+ when(installer.snapshotAppData(anyString(), anyInt(), anyInt())).thenReturn(239L);
+
+ ArrayList<String> pendingBackups = new ArrayList<>();
+ pendingBackups.add("com.foo.bar");
+
+ helper.commitPendingBackupAndRestoreForUser(11, pendingBackups,
+ new HashMap<>() /* pendingRestores */, changedRollbackData);
+
+ assertEquals(1, changedRollbackData.size());
+ assertEquals(1, changedRollbackData.get(0).packages.size());
+ PackageRollbackInfo info = changedRollbackData.get(0).packages.get(0);
+
+ assertEquals(1, info.getCeSnapshotInodes().size());
+ assertEquals(239L, info.getCeSnapshotInodes().get(11));
+
+ InOrder inOrder = Mockito.inOrder(installer);
+ inOrder.verify(installer).snapshotAppData("com.foo.bar", 11 /* userId */,
+ Installer.FLAG_STORAGE_CE);
+ inOrder.verifyNoMoreInteractions();
+ }
}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java
new file mode 100644
index 000000000000..3e01fb58c754
--- /dev/null
+++ b/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java
@@ -0,0 +1,154 @@
+/*
+ * 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.server.notification;
+
+import static android.app.NotificationManager.IMPORTANCE_HIGH;
+import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED;
+import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE;
+import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+
+import static org.mockito.Mockito.when;
+
+import android.app.ActivityManager;
+import android.app.Notification;
+import android.app.Notification.Builder;
+import android.app.NotificationChannel;
+import android.os.UserHandle;
+import android.service.notification.StatusBarNotification;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.server.UiServiceTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class BubbleExtractorTest extends UiServiceTestCase {
+
+ @Mock RankingConfig mConfig;
+
+ private String mPkg = "com.android.server.notification";
+ private int mId = 1001;
+ private String mTag = null;
+ private int mUid = 1000;
+ private int mPid = 2000;
+ private UserHandle mUser = UserHandle.of(ActivityManager.getCurrentUser());
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ }
+
+ private NotificationRecord getNotificationRecord(boolean allow, int importanceHigh) {
+ NotificationChannel channel = new NotificationChannel("a", "a", importanceHigh);
+ channel.setAllowBubbles(allow);
+ when(mConfig.getNotificationChannel(mPkg, mUid, "a", false)).thenReturn(channel);
+
+ final Builder builder = new Builder(getContext())
+ .setContentTitle("foo")
+ .setSmallIcon(android.R.drawable.sym_def_app_icon)
+ .setPriority(Notification.PRIORITY_HIGH)
+ .setDefaults(Notification.DEFAULT_SOUND);
+
+ Notification n = builder.build();
+ StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, mId, mTag, mUid,
+ mPid, n, mUser, null, System.currentTimeMillis());
+ NotificationRecord r = new NotificationRecord(getContext(), sbn, channel);
+ return r;
+ }
+
+ //
+ // Tests
+ //
+
+ @Test
+ public void testAppYesChannelNo() {
+ BubbleExtractor extractor = new BubbleExtractor();
+ extractor.setConfig(mConfig);
+
+ when(mConfig.bubblesEnabled(mUser)).thenReturn(true);
+ when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true);
+ NotificationRecord r = getNotificationRecord(false, IMPORTANCE_UNSPECIFIED);
+
+ extractor.process(r);
+
+ assertFalse(r.canBubble());
+ }
+
+ @Test
+ public void testAppNoChannelYes() throws Exception {
+ BubbleExtractor extractor = new BubbleExtractor();
+ extractor.setConfig(mConfig);
+
+ when(mConfig.bubblesEnabled(mUser)).thenReturn(true);
+ when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(false);
+ NotificationRecord r = getNotificationRecord(true, IMPORTANCE_HIGH);
+
+ extractor.process(r);
+
+ assertFalse(r.canBubble());
+ }
+
+ @Test
+ public void testAppYesChannelYes() {
+ BubbleExtractor extractor = new BubbleExtractor();
+ extractor.setConfig(mConfig);
+
+ when(mConfig.bubblesEnabled(mUser)).thenReturn(true);
+ when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true);
+ NotificationRecord r = getNotificationRecord(true, IMPORTANCE_UNSPECIFIED);
+
+ extractor.process(r);
+
+ assertTrue(r.canBubble());
+ }
+
+ @Test
+ public void testAppNoChannelNo() {
+ BubbleExtractor extractor = new BubbleExtractor();
+ extractor.setConfig(mConfig);
+
+ when(mConfig.bubblesEnabled(mUser)).thenReturn(true);
+ when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(false);
+ NotificationRecord r = getNotificationRecord(false, IMPORTANCE_UNSPECIFIED);
+
+ extractor.process(r);
+
+ assertFalse(r.canBubble());
+ }
+
+ @Test
+ public void testAppYesChannelYesUserNo() {
+ BubbleExtractor extractor = new BubbleExtractor();
+ extractor.setConfig(mConfig);
+
+ when(mConfig.bubblesEnabled(mUser)).thenReturn(false);
+ when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true);
+ NotificationRecord r = getNotificationRecord(true, IMPORTANCE_HIGH);
+
+ extractor.process(r);
+
+ assertFalse(r.canBubble());
+ }
+}
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java
index 20f72bfe9938..7a530dfe306f 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java
@@ -74,6 +74,7 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import java.util.Set;
@@ -305,6 +306,82 @@ public class ManagedServicesTest extends UiServiceTestCase {
}
}
+ /** Test that restore ignores the user id attribute and applies the data to the target user. */
+ @Test
+ public void testReadXml_onlyRestoresForTargetUser() throws Exception {
+ for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+ ManagedServices service =
+ new TestManagedServices(
+ getContext(), mLock, mUserProfiles, mIpm, approvalLevel);
+ String testPackage = "user.test.package";
+ String testComponent = "user.test.component/C1";
+ String resolvedValue =
+ (approvalLevel == APPROVAL_BY_COMPONENT) ? testComponent : testPackage;
+ XmlPullParser parser =
+ getParserWithEntries(service, getXmlEntry(resolvedValue, 0, true));
+
+ service.readXml(parser, null, true, 10);
+
+ assertFalse(service.isPackageOrComponentAllowed(resolvedValue, 0));
+ assertTrue(service.isPackageOrComponentAllowed(resolvedValue, 10));
+ }
+ }
+
+ /** Test that backup only writes packages/components that belong to the target user. */
+ @Test
+ public void testWriteXml_onlyBackupsForTargetUser() throws Exception {
+ for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
+ ManagedServices service =
+ new TestManagedServices(
+ getContext(), mLock, mUserProfiles, mIpm, approvalLevel);
+ // Set up components.
+ String testPackage0 = "user0.test.package";
+ String testComponent0 = "user0.test.component/C1";
+ String testPackage10 = "user10.test.package";
+ String testComponent10 = "user10.test.component/C1";
+ String resolvedValue0 =
+ (approvalLevel == APPROVAL_BY_COMPONENT) ? testComponent0 : testPackage0;
+ String resolvedValue10 =
+ (approvalLevel == APPROVAL_BY_COMPONENT) ? testComponent10 : testPackage10;
+ addExpectedServices(
+ service, Collections.singletonList(service.getPackageName(resolvedValue0)), 0);
+ addExpectedServices(
+ service,
+ Collections.singletonList(service.getPackageName(resolvedValue10)),
+ 10);
+ XmlPullParser parser =
+ getParserWithEntries(
+ service,
+ getXmlEntry(resolvedValue0, 0, true),
+ getXmlEntry(resolvedValue10, 10, true));
+ service.readXml(parser, null, false, UserHandle.USER_ALL);
+
+ // Write backup.
+ XmlSerializer serializer = new FastXmlSerializer();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
+ serializer.startDocument(null, true);
+ service.writeXml(serializer, true, 10);
+ serializer.endDocument();
+ serializer.flush();
+
+ // Reset values.
+ service.setPackageOrComponentEnabled(resolvedValue0, 0, true, false);
+ service.setPackageOrComponentEnabled(resolvedValue10, 10, true, false);
+
+ // Parse backup via restore.
+ XmlPullParser restoreParser = Xml.newPullParser();
+ restoreParser.setInput(
+ new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())), null);
+ restoreParser.nextTag();
+ service.readXml(restoreParser, null, true, 10);
+
+ assertFalse(service.isPackageOrComponentAllowed(resolvedValue0, 0));
+ assertFalse(service.isPackageOrComponentAllowed(resolvedValue0, 10));
+ assertTrue(service.isPackageOrComponentAllowed(resolvedValue10, 10));
+ }
+ }
+
@Test
public void testWriteXml_trimsMissingServices() throws Exception {
for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
@@ -348,7 +425,9 @@ public class ManagedServicesTest extends UiServiceTestCase {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
serializer.startDocument(null, true);
- service.writeXml(serializer, true);
+ for (UserInfo userInfo : mUm.getUsers()) {
+ service.writeXml(serializer, true, userInfo.id);
+ }
serializer.endDocument();
serializer.flush();
@@ -356,7 +435,9 @@ public class ManagedServicesTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(baos.toByteArray())), null);
parser.nextTag();
- service.readXml(parser, null);
+ for (UserInfo userInfo : mUm.getUsers()) {
+ service.readXml(parser, null, true, userInfo.id);
+ }
verifyExpectedApprovedEntries(service);
assertFalse(service.isPackageOrComponentAllowed("this.is.a.package.name", 0));
@@ -376,7 +457,7 @@ public class ManagedServicesTest extends UiServiceTestCase {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
serializer.startDocument(null, true);
- service.writeXml(serializer, false);
+ service.writeXml(serializer, false, UserHandle.USER_ALL);
serializer.endDocument();
serializer.flush();
@@ -921,7 +1002,23 @@ public class ManagedServicesTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(xml.toString().getBytes())), null);
parser.nextTag();
- service.readXml(parser, null);
+ service.readXml(parser, null, false, UserHandle.USER_ALL);
+ }
+
+ private XmlPullParser getParserWithEntries(ManagedServices service, String... xmlEntries)
+ throws Exception {
+ final StringBuffer xml = new StringBuffer();
+ xml.append("<" + service.getConfig().xmlTag + ">\n");
+ for (String xmlEntry : xmlEntries) {
+ xml.append(xmlEntry);
+ }
+ xml.append("</" + service.getConfig().xmlTag + ">");
+
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(new BufferedInputStream(
+ new ByteArrayInputStream(xml.toString().getBytes())), null);
+ parser.nextTag();
+ return parser;
}
private void addExpectedServices(final ManagedServices service, final List<String> packages,
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationAssistantsTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationAssistantsTest.java
index 0b488c09b45a..19b567f6951b 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationAssistantsTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationAssistantsTest.java
@@ -33,6 +33,7 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.UserInfo;
+import android.os.UserHandle;
import android.os.UserManager;
import android.util.IntArray;
import android.util.Xml;
@@ -129,7 +130,7 @@ public class NotificationAssistantsTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(xml.toString().getBytes())), null);
parser.nextTag();
- mAssistants.readXml(parser, null);
+ mAssistants.readXml(parser, null, false, UserHandle.USER_ALL);
verify(mNm, never()).readDefaultAssistant(anyInt());
verify(mAssistants, times(1)).addApprovedList(
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java
index daca9cb28051..2162f282e134 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java
@@ -54,7 +54,7 @@ import java.util.List;
@RunWith(AndroidJUnit4.class)
public class NotificationListenerServiceTest extends UiServiceTestCase {
- private String[] mKeys = new String[] { "key", "key1", "key2", "key3"};
+ private String[] mKeys = new String[] { "key", "key1", "key2", "key3", "key4"};
@Test
public void testGetActiveNotifications_notNull() throws Exception {
@@ -70,7 +70,7 @@ public class NotificationListenerServiceTest extends UiServiceTestCase {
}
@Test
- public void testRanking() throws Exception {
+ public void testRanking() {
TestListenerService service = new TestListenerService();
service.applyUpdateLocked(generateUpdate());
for (int i = 0; i < mKeys.length; i++) {
@@ -92,6 +92,7 @@ public class NotificationListenerServiceTest extends UiServiceTestCase {
assertEquals(lastAudiblyAlerted(i), ranking.getLastAudiblyAlertedMillis());
assertActionsEqual(getSmartActions(key, i), ranking.getSmartActions());
assertEquals(getSmartReplies(key, i), ranking.getSmartReplies());
+ assertEquals(canBubble(i), ranking.canBubble());
}
}
@@ -112,6 +113,7 @@ public class NotificationListenerServiceTest extends UiServiceTestCase {
Bundle smartReplies = new Bundle();
Bundle lastAudiblyAlerted = new Bundle();
Bundle noisy = new Bundle();
+ boolean[] canBubble = new boolean[mKeys.length];
for (int i = 0; i < mKeys.length; i++) {
String key = mKeys[i];
@@ -133,12 +135,13 @@ public class NotificationListenerServiceTest extends UiServiceTestCase {
smartReplies.putCharSequenceArrayList(key, getSmartReplies(key, i));
lastAudiblyAlerted.putLong(key, lastAudiblyAlerted(i));
noisy.putBoolean(key, getNoisy(i));
+ canBubble[i] = canBubble(i);
}
NotificationRankingUpdate update = new NotificationRankingUpdate(mKeys,
interceptedKeys.toArray(new String[0]), visibilityOverrides,
suppressedVisualEffects, importance, explanation, overrideGroupKeys,
channels, overridePeople, snoozeCriteria, showBadge, userSentiment, mHidden,
- smartActions, smartReplies, lastAudiblyAlerted, noisy);
+ smartActions, smartReplies, lastAudiblyAlerted, noisy, canBubble);
return update;
}
@@ -235,6 +238,10 @@ public class NotificationListenerServiceTest extends UiServiceTestCase {
return choices;
}
+ private boolean canBubble(int index) {
+ return index % 4 == 0;
+ }
+
private void assertActionsEqual(
List<Notification.Action> expecteds, List<Notification.Action> actuals) {
assertEquals(expecteds.size(), actuals.size());
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
index 72aa0f2ba09e..cc621387691a 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -123,6 +123,7 @@ import com.android.server.lights.Light;
import com.android.server.lights.LightsManager;
import com.android.server.notification.NotificationManagerService.NotificationAssistants;
import com.android.server.notification.NotificationManagerService.NotificationListeners;
+import com.android.server.pm.UserManagerService;
import com.android.server.uri.UriGrantsManagerInternal;
import com.android.server.wm.WindowManagerInternal;
@@ -206,15 +207,19 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
UriGrantsManagerInternal mUgmInternal;
@Mock
AppOpsManager mAppOpsManager;
+ @Mock
+ private UserManagerService mUserMangerService;
// Use a Testable subclass so we can simulate calls from the system without failing.
private static class TestableNotificationManagerService extends NotificationManagerService {
int countSystemChecks = 0;
boolean isSystemUid = true;
int countLogSmartSuggestionsVisible = 0;
+ UserManagerService mUserManagerService;
- public TestableNotificationManagerService(Context context) {
+ TestableNotificationManagerService(Context context, UserManagerService userManagerService) {
super(context);
+ mUserManagerService = userManagerService;
}
@Override
@@ -250,7 +255,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
countLogSmartSuggestionsVisible++;
}
-
+ @Override
+ UserManagerService getUserManagerService() {
+ return mUserManagerService;
+ }
}
private class TestableToastCallback extends ITransientNotification.Stub {
@@ -267,17 +275,12 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
- // most tests assume badging is enabled
- Secure.putIntForUser(getContext().getContentResolver(),
- Secure.NOTIFICATION_BADGING, 1,
- UserHandle.getUserHandleForUid(mUid).getIdentifier());
-
LocalServices.removeServiceForTest(UriGrantsManagerInternal.class);
LocalServices.addService(UriGrantsManagerInternal.class, mUgmInternal);
LocalServices.removeServiceForTest(WindowManagerInternal.class);
LocalServices.addService(WindowManagerInternal.class, mWindowManagerInternal);
- mService = new TestableNotificationManagerService(mContext);
+ mService = new TestableNotificationManagerService(mContext, mUserMangerService);
// Use this testable looper.
mTestableLooper = TestableLooper.get(this);
@@ -426,6 +429,11 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
r.setShowBadge(!r.canShowBadge());
return null;
});
+ answers.put("bubbles", invocationOnMock -> {
+ NotificationRecord r = (NotificationRecord) invocationOnMock.getArguments()[0];
+ r.setAllowBubble(!r.canBubble());
+ return null;
+ });
answers.put("package visibility", invocationOnMock -> {
((NotificationRecord) invocationOnMock.getArguments()[0]).setPackageVisibilityOverride(
Notification.VISIBILITY_SECRET);
@@ -1847,7 +1855,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
@Test
public void testHasCompanionDevice_noService() throws Exception {
- mService = new TestableNotificationManagerService(mContext);
+ mService = new TestableNotificationManagerService(mContext, mUserMangerService);
assertFalse(mService.hasCompanionDevice(mListener));
}
@@ -2500,10 +2508,12 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
+ "</dnd_apps>"
+ "</notification-policy>";
mService.readPolicyXml(
- new BufferedInputStream(new ByteArrayInputStream(upgradeXml.getBytes())), false);
- verify(mListeners, times(1)).readXml(any(), any());
- verify(mConditionProviders, times(1)).readXml(any(), any());
- verify(mAssistants, times(1)).readXml(any(), any());
+ new BufferedInputStream(new ByteArrayInputStream(upgradeXml.getBytes())),
+ false,
+ UserHandle.USER_ALL);
+ verify(mListeners, times(1)).readXml(any(), any(), anyBoolean(), anyInt());
+ verify(mConditionProviders, times(1)).readXml(any(), any(), anyBoolean(), anyInt());
+ verify(mAssistants, times(1)).readXml(any(), any(), anyBoolean(), anyInt());
// numbers are inflated for setup
verify(mListeners, times(1)).migrateToXml();
@@ -2518,10 +2528,12 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
+ "<ranking></ranking>"
+ "</notification-policy>";
mService.readPolicyXml(
- new BufferedInputStream(new ByteArrayInputStream(preupgradeXml.getBytes())), false);
- verify(mListeners, never()).readXml(any(), any());
- verify(mConditionProviders, never()).readXml(any(), any());
- verify(mAssistants, never()).readXml(any(), any());
+ new BufferedInputStream(new ByteArrayInputStream(preupgradeXml.getBytes())),
+ false,
+ UserHandle.USER_ALL);
+ verify(mListeners, never()).readXml(any(), any(), anyBoolean(), anyInt());
+ verify(mConditionProviders, never()).readXml(any(), any(), anyBoolean(), anyInt());
+ verify(mAssistants, never()).readXml(any(), any(), anyBoolean(), anyInt());
// numbers are inflated for setup
verify(mListeners, times(2)).migrateToXml();
@@ -2530,6 +2542,53 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
verify(mAssistants, times(2)).ensureAssistant();
}
+ @Test
+ public void testReadPolicyXml_doesNotRestoreManagedServicesForManagedUser() throws Exception {
+ final String policyXml = "<notification-policy version=\"1\">"
+ + "<ranking></ranking>"
+ + "<enabled_listeners>"
+ + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />"
+ + "</enabled_listeners>"
+ + "<enabled_assistants>"
+ + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />"
+ + "</enabled_assistants>"
+ + "<dnd_apps>"
+ + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />"
+ + "</dnd_apps>"
+ + "</notification-policy>";
+ when(mUserMangerService.isManagedProfile(10)).thenReturn(true);
+ mService.readPolicyXml(
+ new BufferedInputStream(new ByteArrayInputStream(policyXml.getBytes())),
+ true,
+ 10);
+ verify(mListeners, never()).readXml(any(), any(), eq(true), eq(10));
+ verify(mConditionProviders, never()).readXml(any(), any(), eq(true), eq(10));
+ verify(mAssistants, never()).readXml(any(), any(), eq(true), eq(10));
+ }
+
+ @Test
+ public void testReadPolicyXml_restoresManagedServicesForNonManagedUser() throws Exception {
+ final String policyXml = "<notification-policy version=\"1\">"
+ + "<ranking></ranking>"
+ + "<enabled_listeners>"
+ + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />"
+ + "</enabled_listeners>"
+ + "<enabled_assistants>"
+ + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />"
+ + "</enabled_assistants>"
+ + "<dnd_apps>"
+ + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />"
+ + "</dnd_apps>"
+ + "</notification-policy>";
+ when(mUserMangerService.isManagedProfile(10)).thenReturn(false);
+ mService.readPolicyXml(
+ new BufferedInputStream(new ByteArrayInputStream(policyXml.getBytes())),
+ true,
+ 10);
+ verify(mListeners, times(1)).readXml(any(), any(), eq(true), eq(10));
+ verify(mConditionProviders, times(1)).readXml(any(), any(), eq(true), eq(10));
+ verify(mAssistants, times(1)).readXml(any(), any(), eq(true), eq(10));
+ }
@Test
public void testLocaleChangedCallsUpdateDefaultZenModeRules() throws Exception {
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
index 47ec390d6b01..05bb30742fbd 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java
@@ -149,6 +149,8 @@ public class PreferencesHelperTest extends UiServiceTestCase {
contentResolver.setFallbackToExisting(false);
Secure.putIntForUser(contentResolver,
Secure.NOTIFICATION_BADGING, 1, UserHandle.getUserId(UID_N_MR1));
+ Secure.putIntForUser(contentResolver,
+ Secure.NOTIFICATION_BUBBLES, 1, UserHandle.getUserId(UID_N_MR1));
ContentProvider testContentProvider = mock(ContentProvider.class);
when(testContentProvider.getIContentProvider()).thenReturn(mTestIContentProvider);
@@ -174,14 +176,14 @@ public class PreferencesHelperTest extends UiServiceTestCase {
.build();
}
- private ByteArrayOutputStream writeXmlAndPurge(String pkg, int uid, boolean forBackup,
- String... channelIds)
+ private ByteArrayOutputStream writeXmlAndPurge(
+ String pkg, int uid, boolean forBackup, int userId, String... channelIds)
throws Exception {
XmlSerializer serializer = new FastXmlSerializer();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
serializer.startDocument(null, true);
- mHelper.writeXml(serializer, forBackup);
+ mHelper.writeXml(serializer, forBackup, userId);
serializer.endDocument();
serializer.flush();
for (String channelId : channelIds) {
@@ -190,15 +192,17 @@ public class PreferencesHelperTest extends UiServiceTestCase {
return baos;
}
- private void loadStreamXml(ByteArrayOutputStream stream, boolean forRestore) throws Exception {
- loadByteArrayXml(stream.toByteArray(), forRestore);
+ private void loadStreamXml(ByteArrayOutputStream stream, boolean forRestore, int userId)
+ throws Exception {
+ loadByteArrayXml(stream.toByteArray(), forRestore, userId);
}
- private void loadByteArrayXml(byte[] byteArray, boolean forRestore) throws Exception {
+ private void loadByteArrayXml(byte[] byteArray, boolean forRestore, int userId)
+ throws Exception {
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(new ByteArrayInputStream(byteArray)), null);
parser.nextTag();
- mHelper.readXml(parser, forRestore);
+ mHelper.readXml(parser, forRestore, userId);
}
private void compareChannels(NotificationChannel expected, NotificationChannel actual) {
@@ -242,6 +246,69 @@ public class PreferencesHelperTest extends UiServiceTestCase {
when(mMockZenModeHelper.getNotificationPolicy()).thenReturn(mTestNotificationPolicy);
}
+ private void setUpPackageWithUid(String packageName, int uid) throws Exception {
+ when(mPm.getApplicationInfoAsUser(eq(packageName), anyInt(), anyInt()))
+ .thenReturn(new ApplicationInfo());
+ when(mPm.getPackageUidAsUser(eq(packageName), anyInt())).thenReturn(uid);
+ }
+
+ @Test
+ public void testWriteXml_onlyBackupsTargetUser() throws Exception {
+ // Setup package notifications.
+ String package0 = "test.package.user0";
+ int uid0 = 1001;
+ setUpPackageWithUid(package0, uid0);
+ NotificationChannel channel0 = new NotificationChannel("id0", "name0", IMPORTANCE_HIGH);
+ mHelper.createNotificationChannel(package0, uid0, channel0, true, false);
+
+ String package10 = "test.package.user10";
+ int uid10 = 1001001;
+ setUpPackageWithUid(package10, uid10);
+ NotificationChannel channel10 = new NotificationChannel("id10", "name10", IMPORTANCE_HIGH);
+ mHelper.createNotificationChannel(package10, uid10, channel10, true, false);
+
+ ByteArrayOutputStream baos = writeXmlAndPurge(package10, uid10, true, 10);
+
+ // Reset state.
+ mHelper.onPackagesChanged(true, 0, new String[] {package0}, new int[] {uid0});
+ mHelper.onPackagesChanged(true, 10, new String[] {package10}, new int[] {uid10});
+
+ // Parse backup data.
+ loadStreamXml(baos, true, 0);
+ loadStreamXml(baos, true, 10);
+
+ assertEquals(
+ channel10,
+ mHelper.getNotificationChannel(package10, uid10, channel10.getId(), false));
+ assertNull(mHelper.getNotificationChannel(package0, uid0, channel0.getId(), false));
+ }
+
+ @Test
+ public void testReadXml_onlyRestoresTargetUser() throws Exception {
+ // Setup package in user 0.
+ String package0 = "test.package.user0";
+ int uid0 = 1001;
+ setUpPackageWithUid(package0, uid0);
+ NotificationChannel channel0 = new NotificationChannel("id0", "name0", IMPORTANCE_HIGH);
+ mHelper.createNotificationChannel(package0, uid0, channel0, true, false);
+
+ ByteArrayOutputStream baos = writeXmlAndPurge(package0, uid0, true, 0);
+
+ // Reset state.
+ mHelper.onPackagesChanged(true, 0, new String[] {package0}, new int[] {uid0});
+
+ // Restore should convert the uid according to the target user.
+ int expectedUid = 1001001;
+ setUpPackageWithUid(package0, expectedUid);
+ // Parse backup data.
+ loadStreamXml(baos, true, 10);
+
+ assertEquals(
+ channel0,
+ mHelper.getNotificationChannel(package0, expectedUid, channel0.getId(), false));
+ assertNull(mHelper.getNotificationChannel(package0, uid0, channel0.getId(), false));
+ }
+
@Test
public void testChannelXml() throws Exception {
NotificationChannelGroup ncg = new NotificationChannelGroup("1", "bye");
@@ -270,12 +337,13 @@ public class PreferencesHelperTest extends UiServiceTestCase {
mHelper.setShowBadge(PKG_N_MR1, UID_N_MR1, true);
mHelper.setAppImportanceLocked(PKG_N_MR1, UID_N_MR1);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, channel1.getId(),
- channel2.getId(), NotificationChannel.DEFAULT_CHANNEL_ID);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false,
+ UserHandle.USER_ALL, channel1.getId(), channel2.getId(),
+ NotificationChannel.DEFAULT_CHANNEL_ID);
mHelper.onPackagesChanged(true, UserHandle.myUserId(), new String[]{PKG_N_MR1}, new int[]{
UID_N_MR1});
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
assertTrue(mHelper.canShowBadge(PKG_N_MR1, UID_N_MR1));
assertTrue(mHelper.getIsAppImportanceLocked(PKG_N_MR1, UID_N_MR1));
@@ -337,14 +405,15 @@ public class PreferencesHelperTest extends UiServiceTestCase {
mHelper.setImportance(PKG_O, UID_O, IMPORTANCE_NONE);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel1.getId(),
- channel2.getId(), channel3.getId(), NotificationChannel.DEFAULT_CHANNEL_ID);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true,
+ UserHandle.USER_SYSTEM, channel1.getId(), channel2.getId(), channel3.getId(),
+ NotificationChannel.DEFAULT_CHANNEL_ID);
mHelper.onPackagesChanged(true, UserHandle.myUserId(), new String[]{PKG_N_MR1, PKG_O},
new int[]{UID_N_MR1, UID_O});
mHelper.setShowBadge(PKG_O, UID_O, true);
- loadStreamXml(baos, true);
+ loadStreamXml(baos, true, UserHandle.USER_SYSTEM);
assertEquals(IMPORTANCE_NONE, mHelper.getImportance(PKG_O, UID_O));
assertTrue(mHelper.canShowBadge(PKG_N_MR1, UID_N_MR1));
@@ -385,10 +454,11 @@ public class PreferencesHelperTest extends UiServiceTestCase {
channel.setSound(SOUND_URI, mAudioAttributes);
mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel.getId());
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true,
+ UserHandle.USER_SYSTEM, channel.getId());
// Testing that in restore we are given the canonical version
- loadStreamXml(baos, true);
+ loadStreamXml(baos, true, UserHandle.USER_SYSTEM);
verify(mTestIContentProvider).uncanonicalize(any(), eq(CANONICAL_SOUND_URI));
}
@@ -410,9 +480,10 @@ public class PreferencesHelperTest extends UiServiceTestCase {
new NotificationChannel("id", "name", IMPORTANCE_LOW);
channel.setSound(SOUND_URI, mAudioAttributes);
mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel.getId());
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true,
+ UserHandle.USER_SYSTEM, channel.getId());
- loadStreamXml(baos, true);
+ loadStreamXml(baos, true, UserHandle.USER_SYSTEM);
NotificationChannel actualChannel = mHelper.getNotificationChannel(
PKG_N_MR1, UID_N_MR1, channel.getId(), false);
@@ -431,9 +502,10 @@ public class PreferencesHelperTest extends UiServiceTestCase {
new NotificationChannel("id", "name", IMPORTANCE_LOW);
channel.setSound(SOUND_URI, mAudioAttributes);
mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel.getId());
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true,
+ UserHandle.USER_SYSTEM, channel.getId());
- loadStreamXml(baos, true);
+ loadStreamXml(baos, true, UserHandle.USER_SYSTEM);
NotificationChannel actualChannel = mHelper.getNotificationChannel(
PKG_N_MR1, UID_N_MR1, channel.getId(), false);
@@ -460,7 +532,8 @@ public class PreferencesHelperTest extends UiServiceTestCase {
+ "</package>\n"
+ "</ranking>\n";
- loadByteArrayXml(backupWithUncanonicalizedSoundUri.getBytes(), true);
+ loadByteArrayXml(
+ backupWithUncanonicalizedSoundUri.getBytes(), true, UserHandle.USER_SYSTEM);
NotificationChannel actualChannel = mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, id, false);
assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, actualChannel.getSound());
@@ -472,9 +545,10 @@ public class PreferencesHelperTest extends UiServiceTestCase {
new NotificationChannel("id", "name", IMPORTANCE_LOW);
channel.setSound(null, mAudioAttributes);
mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel.getId());
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true,
+ UserHandle.USER_SYSTEM, channel.getId());
- loadStreamXml(baos, true);
+ loadStreamXml(baos, true, UserHandle.USER_SYSTEM);
NotificationChannel actualChannel = mHelper.getNotificationChannel(
PKG_N_MR1, UID_N_MR1, channel.getId(), false);
@@ -504,8 +578,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
assertEquals(channel2,
mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, channel2.getId(), false));
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel1.getId(),
- channel2.getId(), channel3.getId(), NotificationChannel.DEFAULT_CHANNEL_ID);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true,
+ UserHandle.USER_SYSTEM, channel1.getId(), channel2.getId(), channel3.getId(),
+ NotificationChannel.DEFAULT_CHANNEL_ID);
mHelper.onPackagesChanged(true, UserHandle.myUserId(), new String[]{PKG_N_MR1}, new int[]{
UID_N_MR1});
@@ -513,7 +588,7 @@ public class PreferencesHelperTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())),
null);
parser.nextTag();
- mHelper.readXml(parser, true);
+ mHelper.readXml(parser, true, UserHandle.USER_SYSTEM);
assertNull(mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, channel1.getId(), false));
assertNull(mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, channel3.getId(), false));
@@ -525,9 +600,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
@Test
public void testChannelXml_defaultChannelLegacyApp_noUserSettings() throws Exception {
ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false,
- NotificationChannel.DEFAULT_CHANNEL_ID);
+ UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
final NotificationChannel updated = mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1,
NotificationChannel.DEFAULT_CHANNEL_ID, false);
@@ -546,9 +621,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
mHelper.updateNotificationChannel(PKG_N_MR1, UID_N_MR1, defaultChannel, true);
ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false,
- NotificationChannel.DEFAULT_CHANNEL_ID);
+ UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
assertEquals(NotificationManager.IMPORTANCE_LOW, mHelper.getNotificationChannel(
PKG_N_MR1, UID_N_MR1, NotificationChannel.DEFAULT_CHANNEL_ID, false).getImportance());
@@ -568,7 +643,7 @@ public class PreferencesHelperTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(new ByteArrayInputStream(preupgradeXml.getBytes())),
null);
parser.nextTag();
- mHelper.readXml(parser, false);
+ mHelper.readXml(parser, false, UserHandle.USER_ALL);
final NotificationChannel updated1 =
mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, NotificationChannel.DEFAULT_CHANNEL_ID, false);
@@ -590,13 +665,13 @@ public class PreferencesHelperTest extends UiServiceTestCase {
final NotificationChannel defaultChannel = mHelper.getNotificationChannel(
PKG_N_MR1, UID_N_MR1, NotificationChannel.DEFAULT_CHANNEL_ID, false);
assertTrue(defaultChannel != null);
- ByteArrayOutputStream baos =
- writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, NotificationChannel.DEFAULT_CHANNEL_ID);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false,
+ UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID);
// Load package at higher sdk.
final ApplicationInfo upgraded = new ApplicationInfo();
upgraded.targetSdkVersion = Build.VERSION_CODES.N_MR1 + 1;
when(mPm.getApplicationInfoAsUser(eq(PKG_N_MR1), anyInt(), anyInt())).thenReturn(upgraded);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
// Default Channel should be gone.
assertEquals(null, mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1,
@@ -608,13 +683,13 @@ public class PreferencesHelperTest extends UiServiceTestCase {
mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1,
new NotificationChannel("bananas", "bananas", IMPORTANCE_LOW), true, false);
ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false,
- NotificationChannel.DEFAULT_CHANNEL_ID, "bananas");
+ UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID, "bananas");
// Load package at higher sdk.
final ApplicationInfo upgraded = new ApplicationInfo();
upgraded.targetSdkVersion = Build.VERSION_CODES.N_MR1 + 1;
when(mPm.getApplicationInfoAsUser(eq(PKG_N_MR1), anyInt(), anyInt())).thenReturn(upgraded);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
// Default Channel should be gone.
assertEquals(null, mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1,
@@ -624,11 +699,11 @@ public class PreferencesHelperTest extends UiServiceTestCase {
@Test
public void testLoadingOldChannelsDoesNotDeleteNewlyCreatedChannels() throws Exception {
ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false,
- NotificationChannel.DEFAULT_CHANNEL_ID, "bananas");
+ UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID, "bananas");
mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1,
new NotificationChannel("bananas", "bananas", IMPORTANCE_LOW), true, false);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
// Should still have the newly created channel that wasn't in the xml.
assertTrue(mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, "bananas", false) != null);
@@ -1828,6 +1903,46 @@ public class PreferencesHelperTest extends UiServiceTestCase {
}
@Test
+ public void testBubblesOverrideTrue() {
+ Secure.putIntForUser(getContext().getContentResolver(),
+ Secure.NOTIFICATION_BUBBLES, 1,
+ USER.getIdentifier());
+ mHelper.updateBubblesEnabled(); // would be called by settings observer
+ assertTrue(mHelper.bubblesEnabled(USER));
+ }
+
+ @Test
+ public void testBubblesOverrideFalse() {
+ Secure.putIntForUser(getContext().getContentResolver(),
+ Secure.NOTIFICATION_BUBBLES, 0,
+ USER.getIdentifier());
+ mHelper.updateBubblesEnabled(); // would be called by settings observer
+ assertFalse(mHelper.bubblesEnabled(USER));
+ }
+
+ @Test
+ public void testBubblesForUserAll() {
+ try {
+ mHelper.bubblesEnabled(UserHandle.ALL);
+ } catch (Exception e) {
+ fail("just don't throw");
+ }
+ }
+
+ @Test
+ public void testBubblesOverrideUserIsolation() {
+ Secure.putIntForUser(getContext().getContentResolver(),
+ Secure.NOTIFICATION_BUBBLES, 0,
+ USER.getIdentifier());
+ Secure.putIntForUser(getContext().getContentResolver(),
+ Secure.NOTIFICATION_BUBBLES, 1,
+ USER2.getIdentifier());
+ mHelper.updateBubblesEnabled(); // would be called by settings observer
+ assertFalse(mHelper.bubblesEnabled(USER));
+ assertTrue(mHelper.bubblesEnabled(USER2));
+ }
+
+ @Test
public void testOnLocaleChanged_updatesDefaultChannels() throws Exception {
String newLabel = "bananas!";
final NotificationChannel defaultChannel = mHelper.getNotificationChannel(PKG_N_MR1,
@@ -2007,9 +2122,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
@Test
public void testXml_statusBarIcons_default() throws Exception {
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
assertEquals(PreferencesHelper.DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS,
mHelper.shouldHideSilentStatusIcons());
@@ -2019,9 +2134,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
public void testXml_statusBarIcons() throws Exception {
mHelper.setHideSilentStatusIcons(!PreferencesHelper.DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
assertEquals(!PreferencesHelper.DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS,
mHelper.shouldHideSilentStatusIcons());
@@ -2115,9 +2230,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
public void testDelegateXml_noDelegate() throws Exception {
mHelper.setImportance(PKG_O, UID_O, IMPORTANCE_UNSPECIFIED);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O));
}
@@ -2126,9 +2241,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
public void testDelegateXml_delegate() throws Exception {
mHelper.setNotificationDelegate(PKG_O, UID_O, "other", 53);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
assertEquals("other", mHelper.getNotificationDelegate(PKG_O, UID_O));
}
@@ -2138,9 +2253,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
mHelper.setNotificationDelegate(PKG_O, UID_O, "other", 53);
mHelper.revokeNotificationDelegate(PKG_O, UID_O);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O));
}
@@ -2150,9 +2265,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
mHelper.setNotificationDelegate(PKG_O, UID_O, "other", 53);
mHelper.toggleNotificationDelegate(PKG_O, UID_O, false);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
// appears disabled
assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O));
@@ -2168,9 +2283,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
mHelper.toggleNotificationDelegate(PKG_O, UID_O, false);
mHelper.revokeNotificationDelegate(PKG_O, UID_O);
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
// appears disabled
assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O));
@@ -2186,9 +2301,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
public void testAllowBubbles_defaults() throws Exception {
assertTrue(mHelper.areBubblesAllowed(PKG_O, UID_O));
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
assertTrue(mHelper.areBubblesAllowed(PKG_O, UID_O));
assertEquals(0, mHelper.getAppLockedFields(PKG_O, UID_O));
@@ -2201,9 +2316,9 @@ public class PreferencesHelperTest extends UiServiceTestCase {
assertEquals(PreferencesHelper.LockableAppFields.USER_LOCKED_BUBBLE,
mHelper.getAppLockedFields(PKG_O, UID_O));
- ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL);
mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper);
- loadStreamXml(baos, false);
+ loadStreamXml(baos, false, UserHandle.USER_ALL);
assertFalse(mHelper.areBubblesAllowed(PKG_O, UID_O));
assertEquals(PreferencesHelper.LockableAppFields.USER_LOCKED_BUBBLE,
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java
index c79e1db0a745..b32288720fd2 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java
@@ -125,11 +125,8 @@ public class RankingHelperTest extends UiServiceTestCase {
InstrumentationRegistry.getContext().getContentResolver());
when(mContext.getPackageManager()).thenReturn(mPm);
when(mContext.getApplicationInfo()).thenReturn(legacy);
- // most tests assume badging is enabled
TestableContentResolver contentResolver = getContext().getContentResolver();
contentResolver.setFallbackToExisting(false);
- Secure.putIntForUser(contentResolver,
- Secure.NOTIFICATION_BADGING, 1, UserHandle.getUserId(UID));
ContentProvider testContentProvider = mock(ContentProvider.class);
when(testContentProvider.getIContentProvider()).thenReturn(mTestIContentProvider);
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
index a459b0a26932..08d83333e91b 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java
@@ -25,6 +25,7 @@ import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.TestCase.assertTrue;
+import static org.junit.Assert.assertNotEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -56,6 +57,7 @@ import android.media.AudioManagerInternal;
import android.media.AudioSystem;
import android.media.VolumePolicy;
import android.net.Uri;
+import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.Global;
import android.service.notification.Condition;
@@ -158,19 +160,58 @@ public class ZenModeHelperTest extends UiServiceTestCase {
return new XmlResourceParserImpl(parser);
}
- private ByteArrayOutputStream writeXmlAndPurge(boolean forBackup, Integer version)
- throws Exception {
+ private ByteArrayOutputStream writeXmlAndPurge(Integer version) throws Exception {
XmlSerializer serializer = new FastXmlSerializer();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
serializer.startDocument(null, true);
- mZenModeHelperSpy.writeXml(serializer, forBackup, version);
+ mZenModeHelperSpy.writeXml(serializer, false, version, UserHandle.USER_ALL);
serializer.endDocument();
serializer.flush();
mZenModeHelperSpy.setConfig(new ZenModeConfig(), null, "writing xml");
return baos;
}
+ private ByteArrayOutputStream writeXmlAndPurgeForUser(Integer version, int userId)
+ throws Exception {
+ XmlSerializer serializer = new FastXmlSerializer();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ serializer.setOutput(new BufferedOutputStream(baos), "utf-8");
+ serializer.startDocument(null, true);
+ mZenModeHelperSpy.writeXml(serializer, true, version, userId);
+ serializer.endDocument();
+ serializer.flush();
+ ZenModeConfig newConfig = new ZenModeConfig();
+ newConfig.user = userId;
+ mZenModeHelperSpy.setConfig(newConfig, null, "writing xml");
+ return baos;
+ }
+
+ private XmlPullParser getParserForByteStream(ByteArrayOutputStream baos) throws Exception {
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(
+ new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())), null);
+ parser.nextTag();
+ return parser;
+ }
+
+ private ArrayMap<String, ZenModeConfig.ZenRule> getCustomAutomaticRules() {
+ ArrayMap<String, ZenModeConfig.ZenRule> automaticRules = new ArrayMap<>();
+ ZenModeConfig.ZenRule customRule = new ZenModeConfig.ZenRule();
+ final ScheduleInfo customRuleInfo = new ScheduleInfo();
+ customRule.enabled = true;
+ customRule.creationTime = 0;
+ customRule.id = "customRule";
+ customRule.name = "Custom Rule";
+ customRule.zenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
+ customRule.conditionId = ZenModeConfig.toScheduleConditionId(customRuleInfo);
+ customRule.configurationActivity =
+ new ComponentName("android", "ScheduleConditionProvider");
+ customRule.pkg = customRule.configurationActivity.getPackageName();
+ automaticRules.put("customRule", customRule);
+ return automaticRules;
+ }
+
@Test
public void testZenOff_NoMuteApplied() {
mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_OFF;
@@ -639,50 +680,86 @@ public class ZenModeHelperTest extends UiServiceTestCase {
ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy();
- ByteArrayOutputStream baos = writeXmlAndPurge(false, null);
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(new BufferedInputStream(
- new ByteArrayInputStream(baos.toByteArray())), null);
- parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ ByteArrayOutputStream baos = writeXmlAndPurge(null);
+ XmlPullParser parser = getParserForByteStream(baos);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
assertEquals("Config mismatch: current vs expected: "
+ mZenModeHelperSpy.mConfig.diff(expected), expected, mZenModeHelperSpy.mConfig);
}
@Test
- public void testReadXmlRestore() throws Exception {
+ public void testWriteXml_onlyBackupsTargetUser() throws Exception {
+ // Setup configs for user 10 and 11.
setupZenConfig();
+ ZenModeConfig config10 = mZenModeHelperSpy.mConfig.copy();
+ config10.user = 10;
+ config10.allowAlarms = true;
+ config10.allowMedia = true;
+ mZenModeHelperSpy.setConfig(config10, null, "writeXml");
+ ZenModeConfig config11 = mZenModeHelperSpy.mConfig.copy();
+ config11.user = 11;
+ config11.allowAlarms = false;
+ config11.allowMedia = false;
+ mZenModeHelperSpy.setConfig(config11, null, "writeXml");
+
+ // Backup user 10 and reset values.
+ ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, 10);
+ ZenModeConfig newConfig11 = new ZenModeConfig();
+ newConfig11.user = 11;
+ mZenModeHelperSpy.mConfigs.put(11, newConfig11);
+
+ // Parse backup data.
+ XmlPullParser parser = getParserForByteStream(baos);
+ mZenModeHelperSpy.readXml(parser, true, 10);
+ mZenModeHelperSpy.readXml(parser, true, 11);
+
+ ZenModeConfig actual = mZenModeHelperSpy.mConfigs.get(10);
+ assertEquals(
+ "Config mismatch: current vs expected: " + actual.diff(config10), config10, actual);
+ assertNotEquals("Expected config mismatch", config11, mZenModeHelperSpy.mConfigs.get(11));
+ }
+ @Test
+ public void testReadXmlRestore_forSystemUser() throws Exception {
+ setupZenConfig();
// one enabled automatic rule
- ArrayMap<String, ZenModeConfig.ZenRule> automaticRules = new ArrayMap<>();
- ZenModeConfig.ZenRule customRule = new ZenModeConfig.ZenRule();
- final ScheduleInfo customRuleInfo = new ScheduleInfo();
- customRule.enabled = true;
- customRule.creationTime = 0;
- customRule.id = "customRule";
- customRule.name = "Custom Rule";
- customRule.zenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS;
- customRule.conditionId = ZenModeConfig.toScheduleConditionId(customRuleInfo);
- customRule.configurationActivity
- = new ComponentName("android", "ScheduleConditionProvider");
- customRule.pkg = customRule.configurationActivity.getPackageName();
- automaticRules.put("customRule", customRule);
- mZenModeHelperSpy.mConfig.automaticRules = automaticRules;
-
+ mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules();
ZenModeConfig original = mZenModeHelperSpy.mConfig.copy();
- ByteArrayOutputStream baos = writeXmlAndPurge(false, null);
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(new BufferedInputStream(
- new ByteArrayInputStream(baos.toByteArray())), null);
- parser.nextTag();
- mZenModeHelperSpy.readXml(parser, true);
+ ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, UserHandle.USER_SYSTEM);
+ XmlPullParser parser = getParserForByteStream(baos);
+ mZenModeHelperSpy.readXml(parser, true, UserHandle.USER_SYSTEM);
+
assertEquals("Config mismatch: current vs original: "
+ mZenModeHelperSpy.mConfig.diff(original), original, mZenModeHelperSpy.mConfig);
assertEquals(original.hashCode(), mZenModeHelperSpy.mConfig.hashCode());
}
+ /** Restore should ignore the data's user id and restore for the target user. */
+ @Test
+ public void testReadXmlRestore_forNonSystemUser() throws Exception {
+ // Setup config.
+ setupZenConfig();
+ mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules();
+ ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy();
+
+ // Backup data for user 0.
+ ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, UserHandle.USER_SYSTEM);
+
+ // Restore data for user 10.
+ XmlPullParser parser = getParserForByteStream(baos);
+ mZenModeHelperSpy.readXml(parser, true, 10);
+
+ ZenModeConfig actual = mZenModeHelperSpy.mConfigs.get(10);
+ expected.user = 10;
+ assertEquals(
+ "Config mismatch: current vs original: " + actual.diff(expected), expected, actual);
+ assertEquals(expected.hashCode(), actual.hashCode());
+ expected.user = 0;
+ assertNotEquals(expected, mZenModeHelperSpy.mConfig);
+ }
+
@Test
public void testWriteXmlWithZenPolicy() throws Exception {
final String ruleId = "customRule";
@@ -715,12 +792,12 @@ public class ZenModeHelperTest extends UiServiceTestCase {
ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy();
- ByteArrayOutputStream baos = writeXmlAndPurge(false, null);
+ ByteArrayOutputStream baos = writeXmlAndPurge(null);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(baos.toByteArray())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
ZenModeConfig.ZenRule original = expected.automaticRules.get(ruleId);
ZenModeConfig.ZenRule current = mZenModeHelperSpy.mConfig.automaticRules.get(ruleId);
@@ -729,7 +806,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
}
@Test
- public void testReadXmlRestoreWithZenPolicy() throws Exception {
+ public void testReadXmlRestoreWithZenPolicy_forSystemUser() throws Exception {
final String ruleId = "customRule";
setupZenConfig();
@@ -756,12 +833,9 @@ public class ZenModeHelperTest extends UiServiceTestCase {
ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy();
- ByteArrayOutputStream baos = writeXmlAndPurge(false, null);
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(new BufferedInputStream(
- new ByteArrayInputStream(baos.toByteArray())), null);
- parser.nextTag();
- mZenModeHelperSpy.readXml(parser, true);
+ ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, UserHandle.USER_SYSTEM);
+ XmlPullParser parser = getParserForByteStream(baos);
+ mZenModeHelperSpy.readXml(parser, true, UserHandle.USER_SYSTEM);
ZenModeConfig.ZenRule original = expected.automaticRules.get(ruleId);
ZenModeConfig.ZenRule current = mZenModeHelperSpy.mConfig.automaticRules.get(ruleId);
@@ -786,12 +860,12 @@ public class ZenModeHelperTest extends UiServiceTestCase {
mZenModeHelperSpy.mConfig.automaticRules = enabledAutoRule;
// set previous version
- ByteArrayOutputStream baos = writeXmlAndPurge(false, 5);
+ ByteArrayOutputStream baos = writeXmlAndPurge(5);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(baos.toByteArray())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
assertTrue(mZenModeHelperSpy.mConfig.automaticRules.containsKey("customRule"));
setupZenConfigMaintained();
@@ -811,7 +885,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(xml.getBytes())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
assertEquals(0, mZenModeHelperSpy.mConfig.suppressedVisualEffects);
@@ -827,7 +901,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(xml.getBytes())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
assertEquals(0, mZenModeHelperSpy.mConfig.suppressedVisualEffects);
}
@@ -846,7 +920,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(xml.getBytes())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
assertEquals(0, mZenModeHelperSpy.mConfig.suppressedVisualEffects);
}
@@ -865,7 +939,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(xml.getBytes())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
assertEquals(SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
| SUPPRESSED_EFFECT_LIGHTS
@@ -884,7 +958,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(xml.getBytes())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
assertEquals(SUPPRESSED_EFFECT_PEEK, mZenModeHelperSpy.mConfig.suppressedVisualEffects);
@@ -900,7 +974,7 @@ public class ZenModeHelperTest extends UiServiceTestCase {
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(xml.getBytes())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
assertEquals(SUPPRESSED_EFFECT_FULL_SCREEN_INTENT | SUPPRESSED_EFFECT_LIGHTS,
mZenModeHelperSpy.mConfig.suppressedVisualEffects);
@@ -915,12 +989,12 @@ public class ZenModeHelperTest extends UiServiceTestCase {
mZenModeHelperSpy.mConfig.automaticRules = new ArrayMap<>();
// set previous version
- ByteArrayOutputStream baos = writeXmlAndPurge(false, 5);
+ ByteArrayOutputStream baos = writeXmlAndPurge(5);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(baos.toByteArray())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
// check default rules
ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelperSpy.mConfig.automaticRules;
@@ -951,12 +1025,12 @@ public class ZenModeHelperTest extends UiServiceTestCase {
mZenModeHelperSpy.mConfig.automaticRules = disabledAutoRule;
// set previous version
- ByteArrayOutputStream baos = writeXmlAndPurge(false, 5);
+ ByteArrayOutputStream baos = writeXmlAndPurge(5);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(baos.toByteArray())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
// check default rules
ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelperSpy.mConfig.automaticRules;
@@ -1003,12 +1077,12 @@ public class ZenModeHelperTest extends UiServiceTestCase {
mZenModeHelperSpy.mConfig.automaticRules = automaticRules;
// set previous version
- ByteArrayOutputStream baos = writeXmlAndPurge(false, 5);
+ ByteArrayOutputStream baos = writeXmlAndPurge(5);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(baos.toByteArray())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
// check default rules
ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelperSpy.mConfig.automaticRules;
@@ -1072,12 +1146,12 @@ public class ZenModeHelperTest extends UiServiceTestCase {
mZenModeHelperSpy.mConfig.automaticRules = automaticRules;
// set previous version
- ByteArrayOutputStream baos = writeXmlAndPurge(false, 5);
+ ByteArrayOutputStream baos = writeXmlAndPurge(5);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(new BufferedInputStream(
new ByteArrayInputStream(baos.toByteArray())), null);
parser.nextTag();
- mZenModeHelperSpy.readXml(parser, false);
+ mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL);
// check default rules
ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelperSpy.mConfig.automaticRules;
diff --git a/services/tests/wmtests/AndroidManifest.xml b/services/tests/wmtests/AndroidManifest.xml
index 3f3b99692e9c..bfda2eac25c9 100644
--- a/services/tests/wmtests/AndroidManifest.xml
+++ b/services/tests/wmtests/AndroidManifest.xml
@@ -37,8 +37,10 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
+ <!-- TODO: Remove largeHeap hack when memory leak is fixed (b/123984854) -->
<application android:debuggable="true"
- android:testOnly="true">
+ android:testOnly="true"
+ android:largeHeap="true">
<uses-library android:name="android.test.mock" android:required="true" />
<activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityA" />
diff --git a/telephony/java/android/provider/Telephony.java b/telephony/java/android/provider/Telephony.java
index 548227067b67..4539ab3dc310 100644
--- a/telephony/java/android/provider/Telephony.java
+++ b/telephony/java/android/provider/Telephony.java
@@ -2118,6 +2118,608 @@ public final class Telephony {
}
/**
+ * Columns for the "rcs_*" tables used by {@link android.telephony.ims.RcsMessageStore} classes.
+ *
+ * @hide - not meant for public use
+ */
+ public interface RcsColumns {
+ /**
+ * The authority for the content provider
+ */
+ String AUTHORITY = "rcs";
+
+ /**
+ * The URI to start building upon to use {@link com.android.providers.telephony.RcsProvider}
+ */
+ Uri CONTENT_AND_AUTHORITY = Uri.parse("content://" + AUTHORITY);
+
+ /**
+ * The value to be used whenever a transaction that expects an integer to be returned
+ * failed.
+ */
+ int TRANSACTION_FAILED = Integer.MIN_VALUE;
+
+ /**
+ * The value that denotes a timestamp was not set before (e.g. a message that is not
+ * delivered yet will not have a DELIVERED_TIMESTAMP)
+ */
+ long TIMESTAMP_NOT_SET = 0;
+
+ /**
+ * The table that {@link android.telephony.ims.RcsThread} gets persisted to
+ */
+ interface RcsThreadColumns {
+ /**
+ * The path that should be used for referring to
+ * {@link android.telephony.ims.RcsThread}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String RCS_THREAD_URI_PART = "thread";
+
+ /**
+ * The URI to query or modify {@link android.telephony.ims.RcsThread} via the content
+ * provider.
+ */
+ Uri RCS_THREAD_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, RCS_THREAD_URI_PART);
+
+ /**
+ * The unique identifier of an {@link android.telephony.ims.RcsThread}
+ */
+ String RCS_THREAD_ID_COLUMN = "rcs_thread_id";
+ }
+
+ /**
+ * The table that {@link android.telephony.ims.Rcs1To1Thread} gets persisted to
+ */
+ interface Rcs1To1ThreadColumns extends RcsThreadColumns {
+ /**
+ * The path that should be used for referring to
+ * {@link android.telephony.ims.Rcs1To1Thread}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String RCS_1_TO_1_THREAD_URI_PART = "p2p_thread";
+
+ /**
+ * The URI to query or modify {@link android.telephony.ims.Rcs1To1Thread}s via the
+ * content provider
+ */
+ Uri RCS_1_TO_1_THREAD_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY,
+ RCS_1_TO_1_THREAD_URI_PART);
+
+ /**
+ * The SMS/MMS thread to fallback to in case of an RCS outage
+ */
+ String FALLBACK_THREAD_ID_COLUMN = "rcs_fallback_thread_id";
+ }
+
+ /**
+ * The table that {@link android.telephony.ims.RcsGroupThread} gets persisted to
+ */
+ interface RcsGroupThreadColumns extends RcsThreadColumns {
+ /**
+ * The path that should be used for referring to
+ * {@link android.telephony.ims.RcsGroupThread}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String RCS_GROUP_THREAD_URI_PART = "group_thread";
+
+ /**
+ * The URI to query or modify {@link android.telephony.ims.RcsGroupThread}s via the
+ * content provider
+ */
+ Uri RCS_GROUP_THREAD_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY,
+ RCS_GROUP_THREAD_URI_PART);
+
+ /**
+ * The owner/admin of the {@link android.telephony.ims.RcsGroupThread}
+ */
+ String OWNER_PARTICIPANT_COLUMN = "owner_participant";
+
+ /**
+ * The user visible name of the group
+ */
+ String GROUP_NAME_COLUMN = "group_name";
+
+ /**
+ * The user visible icon of the group
+ */
+ String GROUP_ICON_COLUMN = "group_icon";
+
+ /**
+ * The RCS conference URI for this group
+ */
+ String CONFERENCE_URI_COLUMN = "conference_uri";
+ }
+
+ /**
+ * The view that enables polling from all types of RCS threads at once
+ */
+ interface RcsUnifiedThreadColumns extends RcsThreadColumns, Rcs1To1ThreadColumns,
+ RcsGroupThreadColumns {
+ /**
+ * The type of this {@link android.telephony.ims.RcsThread}
+ */
+ String THREAD_TYPE_COLUMN = "thread_type";
+
+ /**
+ * Integer returned as a result from a database query that denotes the thread is 1 to 1
+ */
+ int THREAD_TYPE_1_TO_1 = 0;
+
+ /**
+ * Integer returned as a result from a database query that denotes the thread is 1 to 1
+ */
+ int THREAD_TYPE_GROUP = 1;
+ }
+
+ /**
+ * The table that {@link android.telephony.ims.RcsParticipant} gets persisted to
+ */
+ interface RcsParticipantColumns {
+ /**
+ * The path that should be used for referring to
+ * {@link android.telephony.ims.RcsParticipant}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String RCS_PARTICIPANT_URI_PART = "participant";
+
+ /**
+ * The URI to query or modify {@link android.telephony.ims.RcsParticipant}s via the
+ * content provider
+ */
+ Uri RCS_PARTICIPANT_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY,
+ RCS_PARTICIPANT_URI_PART);
+
+ /**
+ * The unique identifier of the entry in the database
+ */
+ String RCS_PARTICIPANT_ID_COLUMN = "rcs_participant_id";
+
+ /**
+ * A foreign key on canonical_address table, also used by SMS/MMS
+ */
+ String CANONICAL_ADDRESS_ID_COLUMN = "canonical_address_id";
+
+ /**
+ * The user visible RCS alias for this participant.
+ */
+ String RCS_ALIAS_COLUMN = "rcs_alias";
+ }
+
+ /**
+ * Additional constants to enable access to {@link android.telephony.ims.RcsParticipant}
+ * related data
+ */
+ interface RcsParticipantHelpers extends RcsParticipantColumns {
+ /**
+ * The view that unifies "rcs_participant" and "canonical_addresses" tables for easy
+ * access to participant address.
+ */
+ String RCS_PARTICIPANT_WITH_ADDRESS_VIEW = "rcs_participant_with_address_view";
+
+ /**
+ * The view that unifies "rcs_participant", "canonical_addresses" and
+ * "rcs_thread_participant" junction table to get full information on participants that
+ * contribute to threads.
+ */
+ String RCS_PARTICIPANT_WITH_THREAD_VIEW = "rcs_participant_with_thread_view";
+ }
+
+ /**
+ * The table that {@link android.telephony.ims.RcsMessage} gets persisted to
+ */
+ interface RcsMessageColumns {
+ /**
+ * Denotes the type of this message (i.e.
+ * {@link android.telephony.ims.RcsIncomingMessage} or
+ * {@link android.telephony.ims.RcsOutgoingMessage}
+ */
+ String MESSAGE_TYPE_COLUMN = "rcs_message_type";
+
+ /**
+ * The unique identifier for the message in the database - i.e. the primary key.
+ */
+ String MESSAGE_ID_COLUMN = "rcs_message_row_id";
+
+ /**
+ * The globally unique RCS identifier for the message. Please see 4.4.5.2 - GSMA
+ * RCC.53 (RCS Device API 1.6 Specification)
+ */
+ String GLOBAL_ID_COLUMN = "rcs_message_global_id";
+
+ /**
+ * The subscription where this message was sent from/to.
+ */
+ String SUB_ID_COLUMN = "sub_id";
+
+ /**
+ * The sending status of the message.
+ * @see android.telephony.ims.RcsMessage.RcsMessageStatus
+ */
+ String STATUS_COLUMN = "status";
+
+ /**
+ * The creation timestamp of the message.
+ */
+ String ORIGINATION_TIMESTAMP_COLUMN = "origination_timestamp";
+
+ /**
+ * The text content of the message.
+ */
+ String MESSAGE_TEXT_COLUMN = "rcs_text";
+
+ /**
+ * The latitude content of the message, if it contains a location.
+ */
+ String LATITUDE_COLUMN = "latitude";
+
+ /**
+ * The longitude content of the message, if it contains a location.
+ */
+ String LONGITUDE_COLUMN = "longitude";
+ }
+
+ /**
+ * The table that additional information of {@link android.telephony.ims.RcsIncomingMessage}
+ * gets persisted to.
+ */
+ interface RcsIncomingMessageColumns extends RcsMessageColumns {
+ /**
+ The path that should be used for referring to
+ * {@link android.telephony.ims.RcsIncomingMessage}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String INCOMING_MESSAGE_URI_PART = "incoming_message";
+
+ /**
+ * The URI to query incoming messages through
+ * {@link com.android.providers.telephony.RcsProvider}
+ */
+ Uri INCOMING_MESSAGE_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY,
+ INCOMING_MESSAGE_URI_PART);
+
+ /**
+ * The ID of the {@link android.telephony.ims.RcsParticipant} that sent this message
+ */
+ String SENDER_PARTICIPANT_ID_COLUMN = "sender_participant";
+
+ /**
+ * The timestamp of arrival for this message.
+ */
+ String ARRIVAL_TIMESTAMP_COLUMN = "arrival_timestamp";
+
+ /**
+ * The time when the recipient has read this message.
+ */
+ String SEEN_TIMESTAMP_COLUMN = "seen_timestamp";
+ }
+
+ /**
+ * The table that additional information of {@link android.telephony.ims.RcsOutgoingMessage}
+ * gets persisted to.
+ */
+ interface RcsOutgoingMessageColumns extends RcsMessageColumns {
+ /**
+ * The path that should be used for referring to
+ * {@link android.telephony.ims.RcsOutgoingMessage}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String OUTGOING_MESSAGE_URI_PART = "outgoing_message";
+
+ /**
+ * The URI to query or modify {@link android.telephony.ims.RcsOutgoingMessage}s via the
+ * content provider
+ */
+ Uri OUTGOING_MESSAGE_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY,
+ OUTGOING_MESSAGE_URI_PART);
+ }
+
+ /**
+ * The delivery information of an {@link android.telephony.ims.RcsOutgoingMessage}
+ */
+ interface RcsMessageDeliveryColumns extends RcsOutgoingMessageColumns {
+ /**
+ * The path that should be used for referring to
+ * {@link android.telephony.ims.RcsOutgoingMessageDelivery}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String DELIVERY_URI_PART = "delivery";
+
+ /**
+ * The timestamp of delivery of this message.
+ */
+ String DELIVERED_TIMESTAMP_COLUMN = "delivered_timestamp";
+
+ /**
+ * The time when the recipient has read this message.
+ */
+ String SEEN_TIMESTAMP_COLUMN = "seen_timestamp";
+ }
+
+ /**
+ * The views that allow querying {@link android.telephony.ims.RcsIncomingMessage} and
+ * {@link android.telephony.ims.RcsOutgoingMessage} at the same time.
+ */
+ interface RcsUnifiedMessageColumns extends RcsIncomingMessageColumns,
+ RcsOutgoingMessageColumns {
+ /**
+ * The path that is used to query all {@link android.telephony.ims.RcsMessage} in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String UNIFIED_MESSAGE_URI_PART = "message";
+
+ /**
+ * The URI to query all types of {@link android.telephony.ims.RcsMessage}s
+ */
+ Uri UNIFIED_MESSAGE_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY,
+ UNIFIED_MESSAGE_URI_PART);
+
+ /**
+ * The name of the view that unites rcs_message and rcs_incoming_message tables.
+ */
+ String UNIFIED_INCOMING_MESSAGE_VIEW = "unified_incoming_message_view";
+
+ /**
+ * The name of the view that unites rcs_message and rcs_outgoing_message tables.
+ */
+ String UNIFIED_OUTGOING_MESSAGE_VIEW = "unified_outgoing_message_view";
+
+ /**
+ * The column that shows from which table the message entry came from.
+ */
+ String MESSAGE_TYPE_COLUMN = "message_type";
+
+ /**
+ * Integer returned as a result from a database query that denotes that the message is
+ * an incoming message
+ */
+ int MESSAGE_TYPE_INCOMING = 1;
+
+ /**
+ * Integer returned as a result from a database query that denotes that the message is
+ * an outgoing message
+ */
+ int MESSAGE_TYPE_OUTGOING = 0;
+ }
+
+ /**
+ * The table that {@link android.telephony.ims.RcsFileTransferPart} gets persisted to.
+ */
+ interface RcsFileTransferColumns {
+ /**
+ * The path that should be used for referring to
+ * {@link android.telephony.ims.RcsFileTransferPart}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String FILE_TRANSFER_URI_PART = "file_transfer";
+
+ /**
+ * The URI to query or modify {@link android.telephony.ims.RcsFileTransferPart}s via the
+ * content provider
+ */
+ Uri FILE_TRANSFER_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY,
+ FILE_TRANSFER_URI_PART);
+
+ /**
+ * The globally unique file transfer ID for this RCS file transfer.
+ */
+ String FILE_TRANSFER_ID_COLUMN = "rcs_file_transfer_id";
+
+ /**
+ * The RCS session ID for this file transfer. The ID is implementation dependent but
+ * should be unique.
+ */
+ String SESSION_ID_COLUMN = "session_id";
+
+ /**
+ * The URI that points to the content of this file transfer
+ */
+ String CONTENT_URI_COLUMN = "content_uri";
+
+ /**
+ * The file type of this file transfer in bytes. The validity of types is not enforced
+ * in {@link android.telephony.ims.RcsMessageStore} APIs.
+ */
+ String CONTENT_TYPE_COLUMN = "content_type";
+
+ /**
+ * The size of the file transfer in bytes.
+ */
+ String FILE_SIZE_COLUMN = "file_size";
+
+ /**
+ * Number of bytes that was successfully transmitted for this file transfer
+ */
+ String SUCCESSFULLY_TRANSFERRED_BYTES = "transfer_offset";
+
+ /**
+ * The status of this file transfer
+ * @see android.telephony.ims.RcsFileTransferPart.RcsFileTransferStatus
+ */
+ String TRANSFER_STATUS_COLUMN = "transfer_status";
+
+ /**
+ * The on-screen width of the file transfer, if it contains multi-media
+ */
+ String WIDTH_COLUMN = "width";
+
+ /**
+ * The on-screen height of the file transfer, if it contains multi-media
+ */
+ String HEIGHT_COLUMN = "height";
+
+ /**
+ * The duration of the content in milliseconds if this file transfer contains
+ * multi-media
+ */
+ String DURATION_MILLIS_COLUMN = "duration";
+
+ /**
+ * The URI to the preview of the content of this file transfer
+ */
+ String PREVIEW_URI_COLUMN = "preview_uri";
+
+ /**
+ * The type of the preview of the content of this file transfer. The validity of types
+ * is not enforced in {@link android.telephony.ims.RcsMessageStore} APIs.
+ */
+ String PREVIEW_TYPE_COLUMN = "preview_type";
+ }
+
+ /**
+ * The table that holds the information for
+ * {@link android.telephony.ims.RcsGroupThreadEvent} and its subclasses.
+ */
+ interface RcsThreadEventColumns {
+ /**
+ * The string used in the {@link com.android.providers.telephony.RcsProvider} URI to
+ * refer to participant joined events (example URI:
+ * {@code content://rcs/group_thread/3/participant_joined_event})
+ */
+ String PARTICIPANT_JOINED_URI_PART = "participant_joined_event";
+
+ /**
+ * The string used in the {@link com.android.providers.telephony.RcsProvider} URI to
+ * refer to participant left events. (example URI:
+ * {@code content://rcs/group_thread/3/participant_left_event/4})
+ */
+ String PARTICIPANT_LEFT_URI_PART = "participant_left_event";
+
+ /**
+ * The string used in the {@link com.android.providers.telephony.RcsProvider} URI to
+ * refer to name changed events. (example URI:
+ * {@code content://rcs/group_thread/3/name_changed_event})
+ */
+ String NAME_CHANGED_URI_PART = "name_changed_event";
+
+ /**
+ * The string used in the {@link com.android.providers.telephony.RcsProvider} URI to
+ * refer to icon changed events. (example URI:
+ * {@code content://rcs/group_thread/3/icon_changed_event})
+ */
+ String ICON_CHANGED_URI_PART = "icon_changed_event";
+
+ /**
+ * The unique ID of this event in the database, i.e. the primary key
+ */
+ String EVENT_ID_COLUMN = "event_id";
+
+ /**
+ * The type of this event
+ *
+ * @see RcsEventTypes
+ */
+ String EVENT_TYPE_COLUMN = "event_type";
+
+ /**
+ * The timestamp in milliseconds of when this event happened
+ */
+ String TIMESTAMP_COLUMN = "origination_timestamp";
+
+ /**
+ * The participant that generated this event
+ */
+ String SOURCE_PARTICIPANT_ID_COLUMN = "source_participant";
+
+ /**
+ * The receiving participant of this event if this was an
+ * {@link android.telephony.ims.RcsGroupThreadParticipantJoinedEvent} or
+ * {@link android.telephony.ims.RcsGroupThreadParticipantLeftEvent}
+ */
+ String DESTINATION_PARTICIPANT_ID_COLUMN = "destination_participant";
+
+ /**
+ * The URI for the new icon of the group thread if this was an
+ * {@link android.telephony.ims.RcsGroupThreadIconChangedEvent}
+ */
+ String NEW_ICON_URI_COLUMN = "new_icon_uri";
+
+ /**
+ * The URI for the new name of the group thread if this was an
+ * {@link android.telephony.ims.RcsGroupThreadNameChangedEvent}
+ */
+ String NEW_NAME_COLUMN = "new_name";
+ }
+
+ /**
+ * The table that {@link android.telephony.ims.RcsParticipantAliasChangedEvent} gets
+ * persisted to
+ */
+ interface RcsParticipantEventColumns {
+ /**
+ * The path that should be used for referring to
+ * {@link android.telephony.ims.RcsParticipantAliasChangedEvent}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String ALIAS_CHANGE_EVENT_URI_PART = "alias_change_event";
+
+ /**
+ * The new alias of the participant
+ */
+ String NEW_ALIAS_COLUMN = "new_alias";
+ }
+
+ /**
+ * These values are used in {@link com.android.providers.telephony.RcsProvider} to determine
+ * what kind of event is present in the storage.
+ */
+ interface RcsEventTypes {
+ /**
+ * Integer constant that is stored in the
+ * {@link com.android.providers.telephony.RcsProvider} database that denotes the event
+ * is of type {@link android.telephony.ims.RcsParticipantAliasChangedEvent}
+ */
+ int PARTICIPANT_ALIAS_CHANGED_EVENT_TYPE = 1;
+
+ /**
+ * Integer constant that is stored in the
+ * {@link com.android.providers.telephony.RcsProvider} database that denotes the event
+ * is of type {@link android.telephony.ims.RcsGroupThreadParticipantJoinedEvent}
+ */
+ int PARTICIPANT_JOINED_EVENT_TYPE = 2;
+
+ /**
+ * Integer constant that is stored in the
+ * {@link com.android.providers.telephony.RcsProvider} database that denotes the event
+ * is of type {@link android.telephony.ims.RcsGroupThreadParticipantLeftEvent}
+ */
+ int PARTICIPANT_LEFT_EVENT_TYPE = 4;
+
+ /**
+ * Integer constant that is stored in the
+ * {@link com.android.providers.telephony.RcsProvider} database that denotes the event
+ * is of type {@link android.telephony.ims.RcsGroupThreadIconChangedEvent}
+ */
+ int ICON_CHANGED_EVENT_TYPE = 8;
+
+ /**
+ * Integer constant that is stored in the
+ * {@link com.android.providers.telephony.RcsProvider} database that denotes the event
+ * is of type {@link android.telephony.ims.RcsGroupThreadNameChangedEvent}
+ */
+ int NAME_CHANGED_EVENT_TYPE = 16;
+ }
+
+ /**
+ * The view that allows unified querying across all events
+ */
+ interface RcsUnifiedEventHelper extends RcsParticipantEventColumns, RcsThreadEventColumns {
+ /**
+ * The path that should be used for referring to
+ * {@link android.telephony.ims.RcsEvent}s in
+ * {@link com.android.providers.telephony.RcsProvider} URIs.
+ */
+ String RCS_EVENT_QUERY_URI_PATH = "event";
+
+ /**
+ * The URI to query {@link android.telephony.ims.RcsEvent}s via the content provider.
+ */
+ Uri RCS_EVENT_QUERY_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY,
+ RCS_EVENT_QUERY_URI_PATH);
+ }
+ }
+
+ /**
* Contains all MMS messages.
*/
public static final class Mms implements BaseMmsColumns {
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 739589412f0b..eab536f94290 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -1326,13 +1326,15 @@ public class TelephonyManager {
"android.intent.action.DATA_STALL_DETECTED";
/**
- * A service action that identifies a {@link android.app.SmsAppService} subclass in the
+ * A service action that identifies
+ * a {@link android.service.carrier.CarrierMessagingClientService} subclass in the
* AndroidManifest.xml.
*
- * <p>See {@link android.app.SmsAppService} for the details.
+ * <p>See {@link android.service.carrier.CarrierMessagingClientService} for the details.
*/
@SdkConstant(SdkConstantType.SERVICE_ACTION)
- public static final String ACTION_SMS_APP_SERVICE = "android.telephony.action.SMS_APP_SERVICE";
+ public static final String ACTION_CARRIER_MESSAGING_CLIENT_SERVICE =
+ "android.telephony.action.CARRIER_MESSAGING_CLIENT_SERVICE";
/**
* An int extra used with {@link #ACTION_DATA_STALL_DETECTED} to indicate the
diff --git a/telephony/java/android/telephony/ims/Rcs1To1Thread.java b/telephony/java/android/telephony/ims/Rcs1To1Thread.java
index 709b3aa0f804..cc28ee0758c2 100644
--- a/telephony/java/android/telephony/ims/Rcs1To1Thread.java
+++ b/telephony/java/android/telephony/ims/Rcs1To1Thread.java
@@ -15,42 +15,72 @@
*/
package android.telephony.ims;
-import android.os.Parcel;
+import android.annotation.NonNull;
+import android.annotation.WorkerThread;
/**
* Rcs1To1Thread represents a single RCS conversation thread with a total of two
- * {@link RcsParticipant}s.
- * @hide - TODO(sahinc) make this public
+ * {@link RcsParticipant}s. Please see Section 5 (1-to-1 Messaging) - GSMA RCC.71 (RCS Universal
+ * Profile Service Definition Document)
+ *
+ * @hide - TODO(109759350) make this public
*/
public class Rcs1To1Thread extends RcsThread {
+ private int mThreadId;
+
+ /**
+ * Public constructor only for RcsMessageStoreController to initialize new threads.
+ *
+ * @hide
+ */
public Rcs1To1Thread(int threadId) {
super(threadId);
+ mThreadId = threadId;
}
- public static final Creator<Rcs1To1Thread> CREATOR = new Creator<Rcs1To1Thread>() {
- @Override
- public Rcs1To1Thread createFromParcel(Parcel in) {
- return new Rcs1To1Thread(in);
- }
-
- @Override
- public Rcs1To1Thread[] newArray(int size) {
- return new Rcs1To1Thread[size];
- }
- };
+ /**
+ * @return Returns {@code false} as this is always a 1 to 1 thread.
+ */
+ @Override
+ public boolean isGroup() {
+ return false;
+ }
- protected Rcs1To1Thread(Parcel in) {
- super(in);
+ /**
+ * {@link Rcs1To1Thread}s can fall back to SMS as a back-up protocol. This function returns the
+ * thread id to be used to query {@code content://mms-sms/conversation/#} to get the fallback
+ * thread.
+ *
+ * @return The thread id to be used to query the mms-sms authority
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public long getFallbackThreadId() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.get1To1ThreadFallbackThreadId(mThreadId));
}
- @Override
- public int describeContents() {
- return 0;
+ /**
+ * If the RCS client allows falling back to SMS, it needs to create an MMS-SMS thread in the
+ * SMS/MMS Provider( see {@link android.provider.Telephony.MmsSms#CONTENT_CONVERSATIONS_URI}.
+ * Use this function to link the {@link Rcs1To1Thread} to the MMS-SMS thread. This function
+ * also updates the storage.
+ *
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setFallbackThreadId(long fallbackThreadId) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.set1To1ThreadFallbackThreadId(mThreadId, fallbackThreadId));
}
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(RCS_1_TO_1_TYPE);
- super.writeToParcel(dest, flags);
+ /**
+ * @return Returns the {@link RcsParticipant} that receives the messages sent in this thread.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @NonNull
+ @WorkerThread
+ public RcsParticipant getRecipient() throws RcsMessageStoreException {
+ return new RcsParticipant(
+ RcsControllerCall.call(iRcs -> iRcs.get1To1ThreadOtherParticipantId(mThreadId)));
}
}
diff --git a/telephony/java/android/telephony/ims/RcsControllerCall.java b/telephony/java/android/telephony/ims/RcsControllerCall.java
new file mode 100644
index 000000000000..5512c4c7b19d
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsControllerCall.java
@@ -0,0 +1,64 @@
+/*
+ * 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 android.telephony.ims;
+
+import android.content.Context;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.telephony.ims.aidl.IRcs;
+
+/**
+ * A wrapper class around RPC calls that {@link RcsMessageStore} APIs to minimize boilerplate code.
+ *
+ * @hide - not meant for public use
+ */
+class RcsControllerCall {
+ static <R> R call(RcsServiceCall<R> serviceCall) throws RcsMessageStoreException {
+ IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_RCS_SERVICE));
+ if (iRcs == null) {
+ throw new RcsMessageStoreException("Could not connect to RCS storage service");
+ }
+
+ try {
+ return serviceCall.methodOnIRcs(iRcs);
+ } catch (RemoteException exception) {
+ throw new RcsMessageStoreException(exception.getMessage());
+ }
+ }
+
+ static void callWithNoReturn(RcsServiceCallWithNoReturn serviceCall)
+ throws RcsMessageStoreException {
+ IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_RCS_SERVICE));
+ if (iRcs == null) {
+ throw new RcsMessageStoreException("Could not connect to RCS storage service");
+ }
+
+ try {
+ serviceCall.methodOnIRcs(iRcs);
+ } catch (RemoteException exception) {
+ throw new RcsMessageStoreException(exception.getMessage());
+ }
+ }
+
+ interface RcsServiceCall<R> {
+ R methodOnIRcs(IRcs iRcs) throws RemoteException;
+ }
+
+ interface RcsServiceCallWithNoReturn {
+ void methodOnIRcs(IRcs iRcs) throws RemoteException;
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsPart.aidl b/telephony/java/android/telephony/ims/RcsEvent.aidl
index 8b8077d57676..08974e0a771c 100644
--- a/telephony/java/android/telephony/ims/RcsPart.aidl
+++ b/telephony/java/android/telephony/ims/RcsEvent.aidl
@@ -17,4 +17,4 @@
package android.telephony.ims;
-parcelable RcsPart;
+parcelable RcsEvent;
diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.java b/telephony/java/android/telephony/ims/RcsEvent.java
index 931e93dc8bf1..744ac76a7828 100644
--- a/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.java
+++ b/telephony/java/android/telephony/ims/RcsEvent.java
@@ -13,40 +13,48 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package android.telephony.ims;
import android.os.Parcel;
import android.os.Parcelable;
/**
- * A continuation token to provide for {@link RcsMessageStore#getRcsThreads}. Use this token to
- * break large queries into manageable chunks
- * @hide - TODO make this public
+ * The base class for events that can happen on {@link RcsParticipant}s and {@link RcsThread}s.
+ * @hide - TODO(109759350) make this public
*/
-public class RcsThreadQueryContinuationToken implements Parcelable {
- protected RcsThreadQueryContinuationToken(Parcel in) {
+public abstract class RcsEvent implements Parcelable {
+ protected long mTimestamp;
+
+ protected RcsEvent(long timestamp) {
+ mTimestamp = timestamp;
}
- public static final Creator<RcsThreadQueryContinuationToken> CREATOR =
- new Creator<RcsThreadQueryContinuationToken>() {
- @Override
- public RcsThreadQueryContinuationToken createFromParcel(Parcel in) {
- return new RcsThreadQueryContinuationToken(in);
- }
+ /**
+ * @return Returns the time of when this event happened. The timestamp is defined as
+ * milliseconds passed after midnight, January 1, 1970 UTC
+ */
+ public long getTimestamp() {
+ return mTimestamp;
+ }
- @Override
- public RcsThreadQueryContinuationToken[] newArray(int size) {
- return new RcsThreadQueryContinuationToken[size];
- }
- };
+ /**
+ * Persists the event to the data store
+ *
+ * @hide
+ */
+ abstract void persist() throws RcsMessageStoreException;
- @Override
- public int describeContents() {
- return 0;
+ RcsEvent(Parcel in) {
+ mTimestamp = in.readLong();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
+ dest.writeLong(mTimestamp);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
}
}
diff --git a/telephony/java/android/telephony/ims/RcsGroupThread.aidl b/telephony/java/android/telephony/ims/RcsEventQueryParameters.aidl
index c4ce5299e512..9a3600bbae90 100644
--- a/telephony/java/android/telephony/ims/RcsGroupThread.aidl
+++ b/telephony/java/android/telephony/ims/RcsEventQueryParameters.aidl
@@ -17,4 +17,4 @@
package android.telephony.ims;
-parcelable RcsGroupThread;
+parcelable RcsEventQueryParameters;
diff --git a/telephony/java/android/telephony/ims/RcsEventQueryParameters.java b/telephony/java/android/telephony/ims/RcsEventQueryParameters.java
new file mode 100644
index 000000000000..6aee56f56f45
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsEventQueryParameters.java
@@ -0,0 +1,322 @@
+/*
+ * 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 android.telephony.ims;
+
+import static android.provider.Telephony.RcsColumns.RcsEventTypes.ICON_CHANGED_EVENT_TYPE;
+import static android.provider.Telephony.RcsColumns.RcsEventTypes.NAME_CHANGED_EVENT_TYPE;
+import static android.provider.Telephony.RcsColumns.RcsEventTypes.PARTICIPANT_ALIAS_CHANGED_EVENT_TYPE;
+import static android.provider.Telephony.RcsColumns.RcsEventTypes.PARTICIPANT_JOINED_EVENT_TYPE;
+import static android.provider.Telephony.RcsColumns.RcsEventTypes.PARTICIPANT_LEFT_EVENT_TYPE;
+
+import android.annotation.CheckResult;
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.security.InvalidParameterException;
+
+/**
+ * The parameters to pass into
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} in order to select a
+ * subset of {@link RcsEvent}s present in the message store.
+ *
+ * @hide TODO - make the Builder and builder() public. The rest should stay internal only.
+ */
+public class RcsEventQueryParameters implements Parcelable {
+ /**
+ * Flag to be used with {@link Builder#setEventType(int)} to make
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return all types of
+ * {@link RcsEvent}s
+ */
+ public static final int ALL_EVENTS = -1;
+
+ /**
+ * Flag to be used with {@link Builder#setEventType(int)} to make
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return sub-types of
+ * {@link RcsGroupThreadEvent}s
+ */
+ public static final int ALL_GROUP_THREAD_EVENTS = 0;
+
+ /**
+ * Flag to be used with {@link Builder#setEventType(int)} to make
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only
+ * {@link RcsParticipantAliasChangedEvent}s
+ */
+ public static final int PARTICIPANT_ALIAS_CHANGED_EVENT =
+ PARTICIPANT_ALIAS_CHANGED_EVENT_TYPE;
+
+ /**
+ * Flag to be used with {@link Builder#setEventType(int)} to make
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only
+ * {@link RcsGroupThreadParticipantJoinedEvent}s
+ */
+ public static final int GROUP_THREAD_PARTICIPANT_JOINED_EVENT =
+ PARTICIPANT_JOINED_EVENT_TYPE;
+
+ /**
+ * Flag to be used with {@link Builder#setEventType(int)} to make
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only
+ * {@link RcsGroupThreadParticipantLeftEvent}s
+ */
+ public static final int GROUP_THREAD_PARTICIPANT_LEFT_EVENT =
+ PARTICIPANT_LEFT_EVENT_TYPE;
+
+ /**
+ * Flag to be used with {@link Builder#setEventType(int)} to make
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only
+ * {@link RcsGroupThreadNameChangedEvent}s
+ */
+ public static final int GROUP_THREAD_NAME_CHANGED_EVENT = NAME_CHANGED_EVENT_TYPE;
+
+ /**
+ * Flag to be used with {@link Builder#setEventType(int)} to make
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only
+ * {@link RcsGroupThreadIconChangedEvent}s
+ */
+ public static final int GROUP_THREAD_ICON_CHANGED_EVENT = ICON_CHANGED_EVENT_TYPE;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({ALL_EVENTS, ALL_GROUP_THREAD_EVENTS, PARTICIPANT_ALIAS_CHANGED_EVENT,
+ GROUP_THREAD_PARTICIPANT_JOINED_EVENT, GROUP_THREAD_PARTICIPANT_LEFT_EVENT,
+ GROUP_THREAD_NAME_CHANGED_EVENT, GROUP_THREAD_ICON_CHANGED_EVENT})
+ public @interface EventType {
+ }
+
+ /**
+ * Flag to be used with {@link Builder#setSortProperty(int)} that makes the result set sorted
+ * in the order of creation for faster query results.
+ */
+ public static final int SORT_BY_CREATION_ORDER = 0;
+
+ /**
+ * Flag to be used with {@link Builder#setSortProperty(int)} that makes the result set sorted
+ * with respect to {@link RcsEvent#getTimestamp()}
+ */
+ public static final int SORT_BY_TIMESTAMP = 1;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({SORT_BY_CREATION_ORDER, SORT_BY_TIMESTAMP})
+ public @interface SortingProperty {
+ }
+
+ /**
+ * The key to pass into a Bundle, for usage in RcsProvider.query(Bundle)
+ * @hide - not meant for public use
+ */
+ public static final String EVENT_QUERY_PARAMETERS_KEY = "event_query_parameters";
+
+ // Which types of events the results should be limited to
+ private @EventType int mEventType;
+ // The property which the results should be sorted against
+ private int mSortingProperty;
+ // Whether the results should be sorted in ascending order
+ private boolean mIsAscending;
+ // The number of results that should be returned with this query
+ private int mLimit;
+ // The thread that the results are limited to
+ private int mThreadId;
+
+ RcsEventQueryParameters(@EventType int eventType, int threadId,
+ @SortingProperty int sortingProperty, boolean isAscending, int limit) {
+ mEventType = eventType;
+ mSortingProperty = sortingProperty;
+ mIsAscending = isAscending;
+ mLimit = limit;
+ mThreadId = threadId;
+ }
+
+ /**
+ * @return Returns the type of {@link RcsEvent}s that this {@link RcsEventQueryParameters} is
+ * set to query for.
+ */
+ public @EventType int getEventType() {
+ return mEventType;
+ }
+
+ /**
+ * @return Returns the type of {@link RcsEvent}s that this {@link RcsEventQueryParameters} is
+ * set to query for.
+ */
+ public int getLimit() {
+ return mLimit;
+ }
+
+ /**
+ * @return Returns the property where the results should be sorted against.
+ * @see SortingProperty
+ */
+ public int getSortingProperty() {
+ return mSortingProperty;
+ }
+
+ /**
+ * @return Returns {@code true} if the result set will be sorted in ascending order,
+ * {@code false} if it will be sorted in descending order.
+ */
+ public boolean getSortDirection() {
+ return mIsAscending;
+ }
+
+ /**
+ * @return Returns the ID of the {@link RcsGroupThread} that the results are limited to. As this
+ * API exposes an ID, it should stay hidden.
+ *
+ * @hide
+ */
+ public int getThreadId() {
+ return mThreadId;
+ }
+
+ /**
+ * A helper class to build the {@link RcsEventQueryParameters}.
+ */
+ public static class Builder {
+ private @EventType int mEventType;
+ private @SortingProperty int mSortingProperty;
+ private boolean mIsAscending;
+ private int mLimit = 100;
+ private int mThreadId;
+
+ /**
+ * Creates a new builder for {@link RcsEventQueryParameters} to be used in
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)}
+ */
+ public Builder() {
+ // empty implementation
+ }
+
+ /**
+ * Desired number of events to be returned from the query. Passing in 0 will return all
+ * existing events at once. The limit defaults to 100.
+ *
+ * @param limit The number to limit the query result to.
+ * @return The same instance of the builder to chain parameters.
+ * @throws InvalidParameterException If the given limit is negative.
+ */
+ @CheckResult
+ public Builder setResultLimit(@IntRange(from = 0) int limit)
+ throws InvalidParameterException {
+ if (limit < 0) {
+ throw new InvalidParameterException("The query limit must be non-negative");
+ }
+
+ mLimit = limit;
+ return this;
+ }
+
+ /**
+ * Sets the type of events to be returned from the query.
+ *
+ * @param eventType The type of event to be returned.
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setEventType(@EventType int eventType) {
+ mEventType = eventType;
+ return this;
+ }
+
+ /**
+ * Sets the property where the results should be sorted against. Defaults to
+ * {@link RcsEventQueryParameters.SortingProperty#SORT_BY_CREATION_ORDER}
+ *
+ * @param sortingProperty against which property the results should be sorted
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setSortProperty(@SortingProperty int sortingProperty) {
+ mSortingProperty = sortingProperty;
+ return this;
+ }
+
+ /**
+ * Sets whether the results should be sorted ascending or descending
+ *
+ * @param isAscending whether the results should be sorted ascending
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setSortDirection(boolean isAscending) {
+ mIsAscending = isAscending;
+ return this;
+ }
+
+ /**
+ * Limits the results to the given {@link RcsGroupThread}. Setting this value prevents
+ * returning any instances of {@link RcsParticipantAliasChangedEvent}.
+ *
+ * @param groupThread The thread to limit the results to.
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setGroupThread(@NonNull RcsGroupThread groupThread) {
+ mThreadId = groupThread.getThreadId();
+ return this;
+ }
+
+ /**
+ * Builds the {@link RcsEventQueryParameters} to use in
+ * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)}
+ *
+ * @return An instance of {@link RcsEventQueryParameters} to use with the event query.
+ */
+ public RcsEventQueryParameters build() {
+ return new RcsEventQueryParameters(mEventType, mThreadId, mSortingProperty,
+ mIsAscending, mLimit);
+ }
+ }
+
+ protected RcsEventQueryParameters(Parcel in) {
+ mEventType = in.readInt();
+ mThreadId = in.readInt();
+ mSortingProperty = in.readInt();
+ mIsAscending = in.readBoolean();
+ mLimit = in.readInt();
+ }
+
+ public static final Creator<RcsEventQueryParameters> CREATOR =
+ new Creator<RcsEventQueryParameters>() {
+ @Override
+ public RcsEventQueryParameters createFromParcel(Parcel in) {
+ return new RcsEventQueryParameters(in);
+ }
+
+ @Override
+ public RcsEventQueryParameters[] newArray(int size) {
+ return new RcsEventQueryParameters[size];
+ }
+ };
+
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mEventType);
+ dest.writeInt(mThreadId);
+ dest.writeInt(mSortingProperty);
+ dest.writeBoolean(mIsAscending);
+ dest.writeInt(mLimit);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessage.aidl b/telephony/java/android/telephony/ims/RcsEventQueryResult.aidl
index 6552a82c9072..7d133350973c 100644
--- a/telephony/java/android/telephony/ims/RcsIncomingMessage.aidl
+++ b/telephony/java/android/telephony/ims/RcsEventQueryResult.aidl
@@ -17,4 +17,4 @@
package android.telephony.ims;
-parcelable RcsIncomingMessage;
+parcelable RcsEventQueryResult;
diff --git a/telephony/java/android/telephony/ims/RcsEventQueryResult.java b/telephony/java/android/telephony/ims/RcsEventQueryResult.java
new file mode 100644
index 000000000000..27898ab0d9a2
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsEventQueryResult.java
@@ -0,0 +1,90 @@
+/*
+ * 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 android.telephony.ims;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.List;
+
+/**
+ * The result of a {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)}
+ * call. This class allows getting the token for querying the next batch of events in order to
+ * prevent handling large amounts of data at once.
+ *
+ * @hide
+ */
+public class RcsEventQueryResult implements Parcelable {
+ private RcsQueryContinuationToken mContinuationToken;
+ private List<RcsEvent> mEvents;
+
+ /**
+ * Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController}
+ * to create query results
+ *
+ * @hide
+ */
+ public RcsEventQueryResult(
+ RcsQueryContinuationToken continuationToken,
+ List<RcsEvent> events) {
+ mContinuationToken = continuationToken;
+ mEvents = events;
+ }
+
+ /**
+ * Returns a token to call
+ * {@link RcsMessageStore#getRcsEvents(RcsQueryContinuationToken)}
+ * to get the next batch of {@link RcsEvent}s.
+ */
+ public RcsQueryContinuationToken getContinuationToken() {
+ return mContinuationToken;
+ }
+
+ /**
+ * Returns all the {@link RcsEvent}s in the current query result. Call {@link
+ * RcsMessageStore#getRcsEvents(RcsQueryContinuationToken)} to get the next batch
+ * of {@link RcsEvent}s.
+ */
+ public List<RcsEvent> getEvents() {
+ return mEvents;
+ }
+
+ protected RcsEventQueryResult(Parcel in) {
+ }
+
+ public static final Creator<RcsEventQueryResult> CREATOR = new Creator<RcsEventQueryResult>() {
+ @Override
+ public RcsEventQueryResult createFromParcel(Parcel in) {
+ return new RcsEventQueryResult(in);
+ }
+
+ @Override
+ public RcsEventQueryResult[] newArray(int size) {
+ return new RcsEventQueryResult[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeParcelable(mContinuationToken, flags);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.aidl b/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.aidl
new file mode 100644
index 000000000000..5fec021525af
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.aidl
@@ -0,0 +1,20 @@
+/*
+ *
+ * Copyright 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 android.telephony.ims;
+
+parcelable RcsFileTransferCreationParameters;
diff --git a/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.java b/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.java
new file mode 100644
index 000000000000..bd7cb4bc90bc
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.java
@@ -0,0 +1,360 @@
+/*
+ * 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 android.telephony.ims;
+
+import android.annotation.CheckResult;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Pass an instance of this class to
+ * {@link RcsMessage#insertFileTransfer(RcsFileTransferCreationParameters)} create an
+ * {@link RcsFileTransferPart} and save it into storage.
+ *
+ * @hide - TODO(109759350) make this public
+ */
+public class RcsFileTransferCreationParameters implements Parcelable {
+ private String mRcsFileTransferSessionId;
+ private Uri mContentUri;
+ private String mContentMimeType;
+ private long mFileSize;
+ private long mTransferOffset;
+ private int mWidth;
+ private int mHeight;
+ private long mMediaDuration;
+ private Uri mPreviewUri;
+ private String mPreviewMimeType;
+ private @RcsFileTransferPart.RcsFileTransferStatus int mFileTransferStatus;
+
+ /**
+ * @return Returns the globally unique RCS file transfer session ID for the
+ * {@link RcsFileTransferPart} to be created
+ */
+ public String getRcsFileTransferSessionId() {
+ return mRcsFileTransferSessionId;
+ }
+
+ /**
+ * @return Returns the URI for the content of the {@link RcsFileTransferPart} to be created
+ */
+ public Uri getContentUri() {
+ return mContentUri;
+ }
+
+ /**
+ * @return Returns the MIME type for the content of the {@link RcsFileTransferPart} to be
+ * created
+ */
+ public String getContentMimeType() {
+ return mContentMimeType;
+ }
+
+ /**
+ * @return Returns the file size in bytes for the {@link RcsFileTransferPart} to be created
+ */
+ public long getFileSize() {
+ return mFileSize;
+ }
+
+ /**
+ * @return Returns the transfer offset for the {@link RcsFileTransferPart} to be created. The
+ * file transfer offset is defined as how many bytes have been successfully transferred to the
+ * receiver of this file transfer.
+ */
+ public long getTransferOffset() {
+ return mTransferOffset;
+ }
+
+ /**
+ * @return Returns the width of the {@link RcsFileTransferPart} to be created. The value is in
+ * pixels.
+ */
+ public int getWidth() {
+ return mWidth;
+ }
+
+ /**
+ * @return Returns the height of the {@link RcsFileTransferPart} to be created. The value is in
+ * pixels.
+ */
+ public int getHeight() {
+ return mHeight;
+ }
+
+ /**
+ * @return Returns the duration of the {@link RcsFileTransferPart} to be created.
+ */
+ public long getMediaDuration() {
+ return mMediaDuration;
+ }
+
+ /**
+ * @return Returns the URI of the preview of the content of the {@link RcsFileTransferPart} to
+ * be created. This should only be used for multi-media files.
+ */
+ public Uri getPreviewUri() {
+ return mPreviewUri;
+ }
+
+ /**
+ * @return Returns the MIME type of the preview of the content of the
+ * {@link RcsFileTransferPart} to be created. This should only be used for multi-media files.
+ */
+ public String getPreviewMimeType() {
+ return mPreviewMimeType;
+ }
+
+ /**
+ * @return Returns the status of the {@link RcsFileTransferPart} to be created.
+ */
+ public @RcsFileTransferPart.RcsFileTransferStatus int getFileTransferStatus() {
+ return mFileTransferStatus;
+ }
+
+ /**
+ * @hide
+ */
+ RcsFileTransferCreationParameters(Builder builder) {
+ mRcsFileTransferSessionId = builder.mRcsFileTransferSessionId;
+ mContentUri = builder.mContentUri;
+ mContentMimeType = builder.mContentMimeType;
+ mFileSize = builder.mFileSize;
+ mTransferOffset = builder.mTransferOffset;
+ mWidth = builder.mWidth;
+ mHeight = builder.mHeight;
+ mMediaDuration = builder.mLength;
+ mPreviewUri = builder.mPreviewUri;
+ mPreviewMimeType = builder.mPreviewMimeType;
+ mFileTransferStatus = builder.mFileTransferStatus;
+ }
+
+ /**
+ * A builder to create instances of {@link RcsFileTransferCreationParameters}
+ */
+ public class Builder {
+ private String mRcsFileTransferSessionId;
+ private Uri mContentUri;
+ private String mContentMimeType;
+ private long mFileSize;
+ private long mTransferOffset;
+ private int mWidth;
+ private int mHeight;
+ private long mLength;
+ private Uri mPreviewUri;
+ private String mPreviewMimeType;
+ private @RcsFileTransferPart.RcsFileTransferStatus int mFileTransferStatus;
+
+ /**
+ * Sets the globally unique RCS file transfer session ID for the {@link RcsFileTransferPart}
+ * to be created
+ *
+ * @param sessionId The RCS file transfer session ID
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setFileTransferSessionId(String sessionId) {
+ mRcsFileTransferSessionId = sessionId;
+ return this;
+ }
+
+ /**
+ * Sets the URI for the content of the {@link RcsFileTransferPart} to be created
+ *
+ * @param contentUri The URI for the file
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setContentUri(Uri contentUri) {
+ mContentUri = contentUri;
+ return this;
+ }
+
+ /**
+ * Sets the MIME type for the content of the {@link RcsFileTransferPart} to be created
+ *
+ * @param contentType The MIME type of the file
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setContentMimeType(String contentType) {
+ mContentMimeType = contentType;
+ return this;
+ }
+
+ /**
+ * Sets the file size for the {@link RcsFileTransferPart} to be created
+ *
+ * @param size The size of the file in bytes
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setFileSize(long size) {
+ mFileSize = size;
+ return this;
+ }
+
+ /**
+ * Sets the transfer offset for the {@link RcsFileTransferPart} to be created. The file
+ * transfer offset is defined as how many bytes have been successfully transferred to the
+ * receiver of this file transfer.
+ *
+ * @param offset The transfer offset in bytes
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setTransferOffset(long offset) {
+ mTransferOffset = offset;
+ return this;
+ }
+
+ /**
+ * Sets the width of the {@link RcsFileTransferPart} to be created. This should only be used
+ * for multi-media files.
+ *
+ * @param width The width of the multi-media file in pixels.
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setWidth(int width) {
+ mWidth = width;
+ return this;
+ }
+
+ /**
+ * Sets the height of the {@link RcsFileTransferPart} to be created. This should only be
+ * used for multi-media files.
+ *
+ * @param height The height of the multi-media file in pixels.
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setHeight(int height) {
+ mHeight = height;
+ return this;
+ }
+
+ /**
+ * Sets the length of the {@link RcsFileTransferPart} to be created. This should only be
+ * used for multi-media files such as audio or video.
+ *
+ * @param length The length of the multi-media file in milliseconds
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setMediaDuration(long length) {
+ mLength = length;
+ return this;
+ }
+
+ /**
+ * Sets the URI of the preview of the content of the {@link RcsFileTransferPart} to be
+ * created. This should only be used for multi-media files.
+ *
+ * @param previewUri The URI of the preview of the file transfer
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setPreviewUri(Uri previewUri) {
+ mPreviewUri = previewUri;
+ return this;
+ }
+
+ /**
+ * Sets the MIME type of the preview of the content of the {@link RcsFileTransferPart} to
+ * be created. This should only be used for multi-media files.
+ *
+ * @param previewType The MIME type of the preview of the file transfer
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setPreviewMimeType(String previewType) {
+ mPreviewMimeType = previewType;
+ return this;
+ }
+
+ /**
+ * Sets the status of the {@link RcsFileTransferPart} to be created.
+ *
+ * @param status The status of the file transfer
+ * @return The same instance of {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setFileTransferStatus(
+ @RcsFileTransferPart.RcsFileTransferStatus int status) {
+ mFileTransferStatus = status;
+ return this;
+ }
+
+ /**
+ * Creates an instance of {@link RcsFileTransferCreationParameters} with the given
+ * parameters.
+ *
+ * @return The same instance of {@link Builder} to chain methods
+ * @see RcsMessage#insertFileTransfer(RcsFileTransferCreationParameters)
+ */
+ public RcsFileTransferCreationParameters build() {
+ return new RcsFileTransferCreationParameters(this);
+ }
+ }
+
+ protected RcsFileTransferCreationParameters(Parcel in) {
+ mRcsFileTransferSessionId = in.readString();
+ mContentUri = in.readParcelable(Uri.class.getClassLoader());
+ mContentMimeType = in.readString();
+ mFileSize = in.readLong();
+ mTransferOffset = in.readLong();
+ mWidth = in.readInt();
+ mHeight = in.readInt();
+ mMediaDuration = in.readLong();
+ mPreviewUri = in.readParcelable(Uri.class.getClassLoader());
+ mPreviewMimeType = in.readString();
+ mFileTransferStatus = in.readInt();
+ }
+
+ public static final Creator<RcsFileTransferCreationParameters> CREATOR =
+ new Creator<RcsFileTransferCreationParameters>() {
+ @Override
+ public RcsFileTransferCreationParameters createFromParcel(Parcel in) {
+ return new RcsFileTransferCreationParameters(in);
+ }
+
+ @Override
+ public RcsFileTransferCreationParameters[] newArray(int size) {
+ return new RcsFileTransferCreationParameters[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(mRcsFileTransferSessionId);
+ dest.writeParcelable(mContentUri, flags);
+ dest.writeString(mContentMimeType);
+ dest.writeLong(mFileSize);
+ dest.writeLong(mTransferOffset);
+ dest.writeInt(mWidth);
+ dest.writeInt(mHeight);
+ dest.writeLong(mMediaDuration);
+ dest.writeParcelable(mPreviewUri, flags);
+ dest.writeString(mPreviewMimeType);
+ dest.writeInt(mFileTransferStatus);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsFileTransferPart.java b/telephony/java/android/telephony/ims/RcsFileTransferPart.java
index 39c58dd9c15b..2eadc4a1724e 100644
--- a/telephony/java/android/telephony/ims/RcsFileTransferPart.java
+++ b/telephony/java/android/telephony/ims/RcsFileTransferPart.java
@@ -15,34 +15,346 @@
*/
package android.telephony.ims;
-import android.os.Parcel;
+import android.annotation.IntDef;
+import android.annotation.Nullable;
+import android.annotation.WorkerThread;
+import android.net.Uri;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
/**
- * A part of a composite {@link RcsMessage} that holds a file transfer.
- * @hide - TODO(sahinc) make this public
+ * A part of a composite {@link RcsMessage} that holds a file transfer. Please see Section 7
+ * (File Transfer) - GSMA RCC.71 (RCS Universal Profile Service Definition Document)
+ *
+ * @hide - TODO(109759350) make this public
*/
-public class RcsFileTransferPart extends RcsPart {
- public static final Creator<RcsFileTransferPart> CREATOR = new Creator<RcsFileTransferPart>() {
- @Override
- public RcsFileTransferPart createFromParcel(Parcel in) {
- return new RcsFileTransferPart(in);
- }
+public class RcsFileTransferPart {
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} is not set yet.
+ */
+ public static final int NOT_SET = 0;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} is a draft and is not in the
+ * process of sending yet.
+ */
+ public static final int DRAFT = 1;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} is actively being sent right
+ * now.
+ */
+ public static final int SENDING = 2;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} was being sent, but the user has
+ * paused the sending process.
+ */
+ public static final int SENDING_PAUSED = 3;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} was attempted, but failed to
+ * send.
+ */
+ public static final int SENDING_FAILED = 4;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} is permanently cancelled to
+ * send.
+ */
+ public static final int SENDING_CANCELLED = 5;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} is actively being downloaded
+ * right now.
+ */
+ public static final int DOWNLOADING = 6;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} was being downloaded, but the
+ * user paused the downloading process.
+ */
+ public static final int DOWNLOADING_PAUSED = 7;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} was attempted, but failed to
+ * download.
+ */
+ public static final int DOWNLOADING_FAILED = 8;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} is permanently cancelled to
+ * download.
+ */
+ public static final int DOWNLOADING_CANCELLED = 9;
+
+ /**
+ * The status to indicate that this {@link RcsFileTransferPart} was successfully sent or
+ * received.
+ */
+ public static final int SUCCEEDED = 10;
+
+ @IntDef({
+ DRAFT, SENDING, SENDING_PAUSED, SENDING_FAILED, SENDING_CANCELLED, DOWNLOADING,
+ DOWNLOADING_PAUSED, DOWNLOADING_FAILED, DOWNLOADING_CANCELLED, SUCCEEDED
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface RcsFileTransferStatus {
+ }
+
+ private int mId;
+
+ /**
+ * @hide
+ */
+ RcsFileTransferPart(int id) {
+ mId = id;
+ }
+
+ /**
+ * @hide
+ */
+ public void setId(int id) {
+ mId = id;
+ }
+
+ /**
+ * @hide
+ */
+ public int getId() {
+ return mId;
+ }
+
+ /**
+ * Sets the RCS file transfer session ID for this file transfer and persists into storage.
+ *
+ * @param sessionId The session ID to be used for this file transfer.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setFileTransferSessionId(String sessionId) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferSessionId(mId, sessionId));
+ }
+
+ /**
+ * @return Returns the file transfer session ID.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public String getFileTransferSessionId() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferSessionId(mId));
+ }
+
+ /**
+ * Sets the content URI for this file transfer and persists into storage. The file transfer
+ * should be reachable using this URI.
+ *
+ * @param contentUri The URI for this file transfer.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setContentUri(Uri contentUri) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferContentUri(mId, contentUri));
+ }
+
+ /**
+ * @return Returns the URI for this file transfer
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @Nullable
+ @WorkerThread
+ public Uri getContentUri() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferContentUri(mId));
+ }
- @Override
- public RcsFileTransferPart[] newArray(int size) {
- return new RcsFileTransferPart[size];
- }
- };
+ /**
+ * Sets the MIME type of this file transfer and persists into storage. Whether this type
+ * actually matches any known or supported types is not checked.
+ *
+ * @param contentMimeType The type of this file transfer.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setContentMimeType(String contentMimeType) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setFileTransferContentType(mId, contentMimeType));
+ }
+
+ /**
+ * @return Returns the content type of this file transfer
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ @Nullable
+ public String getContentMimeType() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferContentType(mId));
+ }
+
+ /**
+ * Sets the content length (i.e. file size) for this file transfer and persists into storage.
+ *
+ * @param contentLength The content length of this file transfer
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setFileSize(long contentLength) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setFileTransferFileSize(mId, contentLength));
+ }
+
+ /**
+ * @return Returns the content length (i.e. file size) for this file transfer.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public long getFileSize() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferFileSize(mId));
+ }
+
+ /**
+ * Sets the transfer offset for this file transfer and persists into storage. The file transfer
+ * offset is defined as how many bytes have been successfully transferred to the receiver of
+ * this file transfer.
+ *
+ * @param transferOffset The transfer offset for this file transfer.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setTransferOffset(long transferOffset) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setFileTransferTransferOffset(mId, transferOffset));
+ }
+
+ /**
+ * @return Returns the number of bytes that have successfully transferred.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public long getTransferOffset() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferTransferOffset(mId));
+ }
+
+ /**
+ * Sets the status for this file transfer and persists into storage.
+ *
+ * @param status The status of this file transfer.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setFileTransferStatus(@RcsFileTransferStatus int status)
+ throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferStatus(mId, status));
+ }
+
+ /**
+ * @return Returns the status of this file transfer.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public @RcsFileTransferStatus int getFileTransferStatus() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferStatus(mId));
+ }
+
+ /**
+ * @return Returns the width of this multi-media message part in pixels.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public int getWidth() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferWidth(mId));
+ }
+
+ /**
+ * Sets the width of this RCS multi-media message part and persists into storage.
+ *
+ * @param width The width value in pixels
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setWidth(int width) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferWidth(mId, width));
+ }
+
+ /**
+ * @return Returns the height of this multi-media message part in pixels.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public int getHeight() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferHeight(mId));
+ }
+
+ /**
+ * Sets the height of this RCS multi-media message part and persists into storage.
+ *
+ * @param height The height value in pixels
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setHeight(int height) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferHeight(mId, height));
+ }
+
+ /**
+ * @return Returns the length of this multi-media file (e.g. video or audio) in milliseconds.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public long getLength() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferLength(mId));
+ }
+
+ /**
+ * Sets the length of this multi-media file (e.g. video or audio) and persists into storage.
+ *
+ * @param length The length of the file in milliseconds.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setLength(long length) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferLength(mId, length));
+ }
+
+ /**
+ * @return Returns the URI for the preview of this multi-media file (e.g. an image thumbnail for
+ * a video)
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public Uri getPreviewUri() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferPreviewUri(mId));
+ }
- protected RcsFileTransferPart(Parcel in) {
+ /**
+ * Sets the URI for the preview of this multi-media file and persists into storage.
+ *
+ * @param previewUri The URI to access to the preview file.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setPreviewUri(Uri previewUri) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferPreviewUri(mId, previewUri));
}
- @Override
- public int describeContents() {
- return 0;
+ /**
+ * @return Returns the MIME type of this multi-media file's preview.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public String getPreviewMimeType() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getFileTransferPreviewType(mId));
}
- @Override
- public void writeToParcel(Parcel dest, int flags) {
+ /**
+ * Sets the MIME type for this multi-media file's preview and persists into storage.
+ *
+ * @param previewMimeType The MIME type for the preview
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setPreviewMimeType(String previewMimeType) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setFileTransferPreviewType(mId, previewMimeType));
}
}
diff --git a/telephony/java/android/telephony/ims/RcsGroupThread.java b/telephony/java/android/telephony/ims/RcsGroupThread.java
index d954b2d70ac3..6f6258e3d894 100644
--- a/telephony/java/android/telephony/ims/RcsGroupThread.java
+++ b/telephony/java/android/telephony/ims/RcsGroupThread.java
@@ -15,38 +15,191 @@
*/
package android.telephony.ims;
-import android.os.Parcel;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.WorkerThread;
+import android.net.Uri;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
/**
* RcsGroupThread represents a single RCS conversation thread where {@link RcsParticipant}s can join
- * or leave.
+ * or leave. Please see Section 6 (Group Chat) - GSMA RCC.71 (RCS Universal Profile Service
+ * Definition Document)
+ *
* @hide - TODO(sahinc) make this public
*/
public class RcsGroupThread extends RcsThread {
- public static final Creator<RcsGroupThread> CREATOR = new Creator<RcsGroupThread>() {
- @Override
- public RcsGroupThread createFromParcel(Parcel in) {
- return new RcsGroupThread(in);
+ /**
+ * Public constructor only for RcsMessageStoreController to initialize new threads.
+ *
+ * @hide
+ */
+ public RcsGroupThread(int threadId) {
+ super(threadId);
+ }
+
+ /**
+ * @return Returns {@code true} as this is always a group thread
+ */
+ @Override
+ public boolean isGroup() {
+ return true;
+ }
+
+ /**
+ * @return Returns the given name of this {@link RcsGroupThread}. Please see US6-2 - GSMA RCC.71
+ * (RCS Universal Profile Service Definition Document)
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @Nullable
+ @WorkerThread
+ public String getGroupName() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getGroupThreadName(mThreadId));
+ }
+
+ /**
+ * Sets the name of this {@link RcsGroupThread} and saves it into storage. Please see US6-2 -
+ * GSMA RCC.71 (RCS Universal Profile Service Definition Document)
+ *
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setGroupName(String groupName) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setGroupThreadName(mThreadId, groupName));
+ }
+
+ /**
+ * @return Returns a URI that points to the group's icon {@link RcsGroupThread}. Please see
+ * US6-2 - GSMA RCC.71 (RCS Universal Profile Service Definition Document)
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @Nullable
+ public Uri getGroupIcon() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getGroupThreadIcon(mThreadId));
+ }
+
+ /**
+ * Sets the icon for this {@link RcsGroupThread} and saves it into storage. Please see US6-2 -
+ * GSMA RCC.71 (RCS Universal Profile Service Definition Document)
+ *
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setGroupIcon(@Nullable Uri groupIcon) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setGroupThreadIcon(mThreadId, groupIcon));
+ }
+
+ /**
+ * @return Returns the owner of this thread or {@code null} if there doesn't exist an owner
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @Nullable
+ @WorkerThread
+ public RcsParticipant getOwner() throws RcsMessageStoreException {
+ return new RcsParticipant(RcsControllerCall.call(
+ iRcs -> iRcs.getGroupThreadOwner(mThreadId)));
+ }
+
+ /**
+ * Sets the owner of this {@link RcsGroupThread} and saves it into storage. This is intended to
+ * be used for selecting a new owner for a group thread if the owner leaves the thread. The
+ * owner needs to be in the list of existing participants.
+ *
+ * @param participant The new owner of the thread. {@code null} values are allowed.
+ * @throws RcsMessageStoreException if the operation could not be persisted into storage
+ */
+ @WorkerThread
+ public void setOwner(@Nullable RcsParticipant participant) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setGroupThreadOwner(mThreadId, participant.getId()));
+ }
+
+ /**
+ * Adds a new {@link RcsParticipant} to this group thread and persists into storage. If the user
+ * is actively participating in this {@link RcsGroupThread}, an {@link RcsParticipant} on behalf
+ * of them should be added.
+ *
+ * @param participant The new participant to be added to the thread.
+ * @throws RcsMessageStoreException if the operation could not be persisted into storage
+ */
+ @WorkerThread
+ public void addParticipant(@NonNull RcsParticipant participant)
+ throws RcsMessageStoreException {
+ if (participant == null) {
+ return;
}
- @Override
- public RcsGroupThread[] newArray(int size) {
- return new RcsGroupThread[size];
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.addParticipantToGroupThread(mThreadId, participant.getId()));
+ }
+
+ /**
+ * Removes an {@link RcsParticipant} from this group thread and persists into storage. If the
+ * removed participant was the owner of this group, the owner will become null.
+ *
+ * @throws RcsMessageStoreException if the operation could not be persisted into storage
+ */
+ @WorkerThread
+ public void removeParticipant(@NonNull RcsParticipant participant)
+ throws RcsMessageStoreException {
+ if (participant == null) {
+ return;
}
- };
- protected RcsGroupThread(Parcel in) {
- super(in);
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.removeParticipantFromGroupThread(mThreadId, participant.getId()));
}
- @Override
- public int describeContents() {
- return 0;
+ /**
+ * Returns the set of {@link RcsParticipant}s that contribute to this group thread. The
+ * returned set does not support modifications, please use
+ * {@link RcsGroupThread#addParticipant(RcsParticipant)}
+ * and {@link RcsGroupThread#removeParticipant(RcsParticipant)} instead.
+ *
+ * @return the immutable set of {@link RcsParticipant} in this group thread.
+ * @throws RcsMessageStoreException if the values could not be read from the storage
+ */
+ @WorkerThread
+ @NonNull
+ public Set<RcsParticipant> getParticipants() throws RcsMessageStoreException {
+ RcsParticipantQueryParameters queryParameters =
+ new RcsParticipantQueryParameters.Builder().setThread(this).build();
+
+ RcsParticipantQueryResult queryResult = RcsControllerCall.call(
+ iRcs -> iRcs.getParticipants(queryParameters));
+
+ List<RcsParticipant> participantList = queryResult.getParticipants();
+ Set<RcsParticipant> participantSet = new LinkedHashSet<>(participantList);
+ return Collections.unmodifiableSet(participantSet);
}
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(RCS_GROUP_TYPE);
- super.writeToParcel(dest, flags);
+ /**
+ * Returns the conference URI for this {@link RcsGroupThread}. Please see 4.4.5.2 - GSMA RCC.53
+ * (RCS Device API 1.6 Specification
+ *
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @Nullable
+ @WorkerThread
+ public Uri getConferenceUri() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getGroupThreadConferenceUri(mThreadId));
+ }
+
+ /**
+ * Sets the conference URI for this {@link RcsGroupThread} and persists into storage. Please see
+ * 4.4.5.2 - GSMA RCC.53 (RCS Device API 1.6 Specification
+ *
+ * @param conferenceUri The URI as String to be used as the conference URI.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @Nullable
+ @WorkerThread
+ public void setConferenceUri(Uri conferenceUri) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setGroupThreadConferenceUri(mThreadId, conferenceUri));
}
}
diff --git a/telephony/java/android/telephony/ims/Rcs1To1Thread.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.aidl
index 9fdc41d2bd5f..77a23722f080 100644
--- a/telephony/java/android/telephony/ims/Rcs1To1Thread.aidl
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.aidl
@@ -1,5 +1,4 @@
/*
- *
* Copyright 2019, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,4 +16,4 @@
package android.telephony.ims;
-parcelable Rcs1To1Thread;
+parcelable RcsGroupThreadEvent;
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java
new file mode 100644
index 000000000000..a18437b8366e
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.telephony.ims;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+
+/**
+ * An event that happened on an {@link RcsGroupThread}.
+ *
+ * @hide - TODO(109759350) make this public
+ */
+public abstract class RcsGroupThreadEvent extends RcsEvent {
+ private final int mRcsGroupThreadId;
+ private final int mOriginatingParticipantId;
+
+ RcsGroupThreadEvent(long timestamp, int rcsGroupThreadId,
+ int originatingParticipantId) {
+ super(timestamp);
+ mRcsGroupThreadId = rcsGroupThreadId;
+ mOriginatingParticipantId = originatingParticipantId;
+ }
+
+ /**
+ * @return Returns the {@link RcsGroupThread} that this event happened on.
+ */
+ @NonNull
+ public RcsGroupThread getRcsGroupThread() {
+ return new RcsGroupThread(mRcsGroupThreadId);
+ }
+
+ /**
+ * @return Returns the {@link RcsParticipant} that performed the event.
+ */
+ @NonNull
+ public RcsParticipant getOriginatingParticipant() {
+ return new RcsParticipant(mOriginatingParticipantId);
+ }
+
+ RcsGroupThreadEvent(Parcel in) {
+ super(in);
+ mRcsGroupThreadId = in.readInt();
+ mOriginatingParticipantId = in.readInt();
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeInt(mRcsGroupThreadId);
+ dest.writeInt(mOriginatingParticipantId);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.aidl
new file mode 100644
index 000000000000..daea7922f3df
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright 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 android.telephony.ims;
+
+parcelable RcsGroupThreadIconChangedEvent;
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java
new file mode 100644
index 000000000000..7beed3ba7ec2
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.telephony.ims;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.net.Uri;
+import android.os.Parcel;
+
+/**
+ * An event that indicates an {@link RcsGroupThread}'s icon was changed. Please see R6-2-5 - GSMA
+ * RCC.71 (RCS Universal Profile Service Definition Document)
+ *
+ * @hide - TODO(109759350) make this public
+ */
+public class RcsGroupThreadIconChangedEvent extends RcsGroupThreadEvent {
+ private final Uri mNewIcon;
+
+ /**
+ * Creates a new {@link RcsGroupThreadIconChangedEvent}. This event is not persisted into
+ * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called.
+ *
+ * @param timestamp The timestamp of when this event happened, in milliseconds passed after
+ * midnight, January 1st, 1970 UTC
+ * @param rcsGroupThread The {@link RcsGroupThread} that this event happened on
+ * @param originatingParticipant The {@link RcsParticipant} that changed the
+ * {@link RcsGroupThread}'s icon.
+ * @param newIcon {@link Uri} to the new icon of this {@link RcsGroupThread}
+ * @see RcsMessageStore#persistRcsEvent(RcsEvent)
+ */
+ public RcsGroupThreadIconChangedEvent(long timestamp, @NonNull RcsGroupThread rcsGroupThread,
+ @NonNull RcsParticipant originatingParticipant, @Nullable Uri newIcon) {
+ super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId());
+ mNewIcon = newIcon;
+ }
+
+ /**
+ * @hide - internal constructor for queries
+ */
+ public RcsGroupThreadIconChangedEvent(long timestamp, int rcsGroupThreadId,
+ int originatingParticipantId, @Nullable Uri newIcon) {
+ super(timestamp, rcsGroupThreadId, originatingParticipantId);
+ mNewIcon = newIcon;
+ }
+
+ /**
+ * @return Returns the {@link Uri} to the icon of the {@link RcsGroupThread} after this
+ * {@link RcsGroupThreadIconChangedEvent} occured.
+ */
+ @Nullable
+ public Uri getNewIcon() {
+ return mNewIcon;
+ }
+
+ /**
+ * Persists the event to the data store.
+ *
+ * @hide - not meant for public use.
+ */
+ @Override
+ public void persist() throws RcsMessageStoreException {
+ // TODO ensure failure throws
+ RcsControllerCall.call(iRcs -> iRcs.createGroupThreadIconChangedEvent(
+ getTimestamp(), getRcsGroupThread().getThreadId(),
+ getOriginatingParticipant().getId(), mNewIcon));
+ }
+
+ public static final Creator<RcsGroupThreadIconChangedEvent> CREATOR =
+ new Creator<RcsGroupThreadIconChangedEvent>() {
+ @Override
+ public RcsGroupThreadIconChangedEvent createFromParcel(Parcel in) {
+ return new RcsGroupThreadIconChangedEvent(in);
+ }
+
+ @Override
+ public RcsGroupThreadIconChangedEvent[] newArray(int size) {
+ return new RcsGroupThreadIconChangedEvent[size];
+ }
+ };
+
+ protected RcsGroupThreadIconChangedEvent(Parcel in) {
+ super(in);
+ mNewIcon = in.readParcelable(Uri.class.getClassLoader());
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeParcelable(mNewIcon, flags);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.aidl
new file mode 100644
index 000000000000..3ed9bd11dc70
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.aidl
@@ -0,0 +1,20 @@
+/*
+ *
+ * Copyright 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 android.telephony.ims;
+
+parcelable RcsGroupThreadNameChangedEvent;
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java
new file mode 100644
index 000000000000..0d2ea4febfbc
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.telephony.ims;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+
+/**
+ * An event that indicates an {@link RcsGroupThread}'s name was changed. Please see R6-2-5 - GSMA
+ * RCC.71 (RCS Universal Profile Service Definition Document)
+ *
+ * @hide - TODO(109759350) make this public
+ */
+public class RcsGroupThreadNameChangedEvent extends RcsGroupThreadEvent {
+ private String mNewName;
+
+ /**
+ * Creates a new {@link RcsGroupThreadNameChangedEvent}. This event is not persisted into
+ * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called.
+ *
+ * @param timestamp The timestamp of when this event happened, in milliseconds passed after
+ * midnight, January 1st, 1970 UTC
+ * @param rcsGroupThread The {@link RcsGroupThread} that this event happened on
+ * @param originatingParticipant The {@link RcsParticipant} that changed the
+ * {@link RcsGroupThread}'s icon.
+ * @param newName The new name of the {@link RcsGroupThread}
+ * @see RcsMessageStore#persistRcsEvent(RcsEvent)
+ */
+ public RcsGroupThreadNameChangedEvent(long timestamp, @NonNull RcsGroupThread rcsGroupThread,
+ @NonNull RcsParticipant originatingParticipant, @Nullable String newName) {
+ super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId());
+ mNewName = newName;
+ }
+
+ /**
+ * @hide - internal constructor for queries
+ */
+ public RcsGroupThreadNameChangedEvent(long timestamp, int rcsGroupThreadId,
+ int originatingParticipantId, @Nullable String newName) {
+ super(timestamp, rcsGroupThreadId, originatingParticipantId);
+ mNewName = newName;
+ }
+
+ /**
+ * @return Returns the name of this {@link RcsGroupThread} after this
+ * {@link RcsGroupThreadNameChangedEvent} happened.
+ */
+ @Nullable
+ public String getNewName() {
+ return mNewName;
+ }
+
+ /**
+ * Persists the event to the data store.
+ *
+ * @hide - not meant for public use.
+ */
+ @Override
+ public void persist() throws RcsMessageStoreException {
+ RcsControllerCall.call(iRcs -> iRcs.createGroupThreadNameChangedEvent(
+ getTimestamp(), getRcsGroupThread().getThreadId(),
+ getOriginatingParticipant().getId(), mNewName));
+ }
+
+ public static final Creator<RcsGroupThreadNameChangedEvent> CREATOR =
+ new Creator<RcsGroupThreadNameChangedEvent>() {
+ @Override
+ public RcsGroupThreadNameChangedEvent createFromParcel(Parcel in) {
+ return new RcsGroupThreadNameChangedEvent(in);
+ }
+
+ @Override
+ public RcsGroupThreadNameChangedEvent[] newArray(int size) {
+ return new RcsGroupThreadNameChangedEvent[size];
+ }
+ };
+
+ protected RcsGroupThreadNameChangedEvent(Parcel in) {
+ super(in);
+ mNewName = in.readString();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeString(mNewName);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.aidl
new file mode 100644
index 000000000000..420abffa067a
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.aidl
@@ -0,0 +1,20 @@
+/*
+ *
+ * Copyright 2018, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.telephony.ims;
+
+parcelable RcsGroupThreadParticipantJoinedEvent;
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java
new file mode 100644
index 000000000000..2adafc7e1bb1
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.telephony.ims;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+
+/**
+ * An event that indicates an RCS participant has joined an {@link RcsThread}. Please see US6-3 -
+ * GSMA RCC.71 (RCS Universal Profile Service Definition Document)
+ *
+ * @hide - TODO(109759350) make this public
+ */
+public class RcsGroupThreadParticipantJoinedEvent extends RcsGroupThreadEvent {
+ private int mJoinedParticipantId;
+
+ /**
+ * Creates a new {@link RcsGroupThreadParticipantJoinedEvent}. This event is not persisted into
+ * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called.
+ *
+ * @param timestamp The timestamp of when this event happened, in milliseconds passed after
+ * midnight, January 1st, 1970 UTC
+ * @param rcsGroupThread The {@link RcsGroupThread} that this event happened on
+ * @param originatingParticipant The {@link RcsParticipant} that added or invited the new
+ * {@link RcsParticipant} into the {@link RcsGroupThread}
+ * @param joinedParticipant The new {@link RcsParticipant} that joined the
+ * {@link RcsGroupThread}
+ * @see RcsMessageStore#persistRcsEvent(RcsEvent)
+ */
+ public RcsGroupThreadParticipantJoinedEvent(long timestamp,
+ @NonNull RcsGroupThread rcsGroupThread, @NonNull RcsParticipant originatingParticipant,
+ @NonNull RcsParticipant joinedParticipant) {
+ super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId());
+ mJoinedParticipantId = joinedParticipant.getId();
+ }
+
+ /**
+ * @hide - internal constructor for queries
+ */
+ public RcsGroupThreadParticipantJoinedEvent(long timestamp, int rcsGroupThreadId,
+ int originatingParticipantId, int joinedParticipantId) {
+ super(timestamp, rcsGroupThreadId, originatingParticipantId);
+ mJoinedParticipantId = joinedParticipantId;
+ }
+
+ /**
+ * @return Returns the {@link RcsParticipant} that joined the associated {@link RcsGroupThread}
+ */
+ public RcsParticipant getJoinedParticipant() {
+ return new RcsParticipant(mJoinedParticipantId);
+ }
+
+ /**
+ * Persists the event to the data store.
+ *
+ * @hide - not meant for public use.
+ */
+ @Override
+ public void persist() throws RcsMessageStoreException {
+ RcsControllerCall.call(
+ iRcs -> iRcs.createGroupThreadParticipantJoinedEvent(getTimestamp(),
+ getRcsGroupThread().getThreadId(), getOriginatingParticipant().getId(),
+ getJoinedParticipant().getId()));
+ }
+
+ public static final Creator<RcsGroupThreadParticipantJoinedEvent> CREATOR =
+ new Creator<RcsGroupThreadParticipantJoinedEvent>() {
+ @Override
+ public RcsGroupThreadParticipantJoinedEvent createFromParcel(Parcel in) {
+ return new RcsGroupThreadParticipantJoinedEvent(in);
+ }
+
+ @Override
+ public RcsGroupThreadParticipantJoinedEvent[] newArray(int size) {
+ return new RcsGroupThreadParticipantJoinedEvent[size];
+ }
+ };
+
+ protected RcsGroupThreadParticipantJoinedEvent(Parcel in) {
+ super(in);
+ mJoinedParticipantId = in.readInt();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeInt(mJoinedParticipantId);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsMessage.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.aidl
index b32cd1208c40..ff139ac0ab1e 100644
--- a/telephony/java/android/telephony/ims/RcsMessage.aidl
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.aidl
@@ -17,4 +17,4 @@
package android.telephony.ims;
-parcelable RcsMessage;
+parcelable RcsGroupThreadParticipantLeftEvent;
diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java
new file mode 100644
index 000000000000..87c1852964ee
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.telephony.ims;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+
+/**
+ * An event that indicates an RCS participant has left an {@link RcsThread}. Please see US6-23 -
+ * GSMA RCC.71 (RCS Universal Profile Service Definition Document)
+ *
+ * @hide - TODO(109759350) make this public
+ */
+public class RcsGroupThreadParticipantLeftEvent extends RcsGroupThreadEvent {
+ private int mLeavingParticipantId;
+
+ /**
+ * Creates a new {@link RcsGroupThreadParticipantLeftEvent}. his event is not persisted into
+ * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called.
+ *
+ * @param timestamp The timestamp of when this event happened, in milliseconds passed after
+ * midnight, January 1st, 1970 UTC
+ * @param rcsGroupThread The {@link RcsGroupThread} that this event happened on
+ * @param originatingParticipant The {@link RcsParticipant} that removed the
+ * {@link RcsParticipant} from the {@link RcsGroupThread}. It is
+ * possible that originatingParticipant and leavingParticipant are
+ * the same (i.e. {@link RcsParticipant} left the group
+ * themselves)
+ * @param leavingParticipant The {@link RcsParticipant} that left the {@link RcsGroupThread}
+ * @see RcsMessageStore#persistRcsEvent(RcsEvent)
+ */
+ public RcsGroupThreadParticipantLeftEvent(long timestamp,
+ @NonNull RcsGroupThread rcsGroupThread, @NonNull RcsParticipant originatingParticipant,
+ @NonNull RcsParticipant leavingParticipant) {
+ super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId());
+ mLeavingParticipantId = leavingParticipant.getId();
+ }
+
+ /**
+ * @hide - internal constructor for queries
+ */
+ public RcsGroupThreadParticipantLeftEvent(long timestamp, int rcsGroupThreadId,
+ int originatingParticipantId, int leavingParticipantId) {
+ super(timestamp, rcsGroupThreadId, originatingParticipantId);
+ mLeavingParticipantId = leavingParticipantId;
+ }
+
+ /**
+ * @return Returns the {@link RcsParticipant} that left the associated {@link RcsGroupThread}
+ * after this {@link RcsGroupThreadParticipantLeftEvent} happened.
+ */
+ @NonNull
+ public RcsParticipant getLeavingParticipantId() {
+ return new RcsParticipant(mLeavingParticipantId);
+ }
+
+ @Override
+ public void persist() throws RcsMessageStoreException {
+ RcsControllerCall.call(
+ iRcs -> iRcs.createGroupThreadParticipantJoinedEvent(getTimestamp(),
+ getRcsGroupThread().getThreadId(), getOriginatingParticipant().getId(),
+ getLeavingParticipantId().getId()));
+ }
+
+ public static final Creator<RcsGroupThreadParticipantLeftEvent> CREATOR =
+ new Creator<RcsGroupThreadParticipantLeftEvent>() {
+ @Override
+ public RcsGroupThreadParticipantLeftEvent createFromParcel(Parcel in) {
+ return new RcsGroupThreadParticipantLeftEvent(in);
+ }
+
+ @Override
+ public RcsGroupThreadParticipantLeftEvent[] newArray(int size) {
+ return new RcsGroupThreadParticipantLeftEvent[size];
+ }
+ };
+
+ protected RcsGroupThreadParticipantLeftEvent(Parcel in) {
+ super(in);
+ mLeavingParticipantId = in.readInt();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeInt(mLeavingParticipantId);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessage.java b/telephony/java/android/telephony/ims/RcsIncomingMessage.java
index f39e06db068a..2ea115bd675b 100644
--- a/telephony/java/android/telephony/ims/RcsIncomingMessage.java
+++ b/telephony/java/android/telephony/ims/RcsIncomingMessage.java
@@ -15,34 +15,82 @@
*/
package android.telephony.ims;
-import android.os.Parcel;
+import android.annotation.WorkerThread;
/**
* This is a single instance of a message received over RCS.
- * @hide - TODO(sahinc) make this public
+ *
+ * @hide - TODO(109759350) make this public
*/
public class RcsIncomingMessage extends RcsMessage {
- public static final Creator<RcsIncomingMessage> CREATOR = new Creator<RcsIncomingMessage>() {
- @Override
- public RcsIncomingMessage createFromParcel(Parcel in) {
- return new RcsIncomingMessage(in);
- }
-
- @Override
- public RcsIncomingMessage[] newArray(int size) {
- return new RcsIncomingMessage[size];
- }
- };
-
- protected RcsIncomingMessage(Parcel in) {
+ /**
+ * @hide
+ */
+ RcsIncomingMessage(int id) {
+ super(id);
}
- @Override
- public int describeContents() {
- return 0;
+ /**
+ * Sets the timestamp of arrival for this message and persists into storage. The timestamp is
+ * defined as milliseconds passed after midnight, January 1, 1970 UTC
+ *
+ * @param arrivalTimestamp The timestamp to set to.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setArrivalTimestamp(long arrivalTimestamp) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setMessageArrivalTimestamp(mId, true, arrivalTimestamp));
+ }
+
+ /**
+ * @return Returns the timestamp of arrival for this message. The timestamp is defined as
+ * milliseconds passed after midnight, January 1, 1970 UTC
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public long getArrivalTimestamp() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getMessageArrivalTimestamp(mId, true));
+ }
+
+ /**
+ * Sets the timestamp of when the user saw this message and persists into storage. The timestamp
+ * is defined as milliseconds passed after midnight, January 1, 1970 UTC
+ *
+ * @param notifiedTimestamp The timestamp to set to.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setSeenTimestamp(long notifiedTimestamp) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setMessageSeenTimestamp(mId, true, notifiedTimestamp));
+ }
+
+ /**
+ * @return Returns the timestamp of when the user saw this message. The timestamp is defined as
+ * milliseconds passed after midnight, January 1, 1970 UTC
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public long getSeenTimestamp() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getMessageSeenTimestamp(mId, true));
+ }
+
+ /**
+ * @return Returns the sender of this incoming message.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public RcsParticipant getSenderParticipant() throws RcsMessageStoreException {
+ return new RcsParticipant(
+ RcsControllerCall.call(iRcs -> iRcs.getSenderParticipant(mId)));
}
+ /**
+ * @return Returns {@code true} as this is an incoming message
+ */
@Override
- public void writeToParcel(Parcel dest, int flags) {
+ public boolean isIncoming() {
+ return true;
}
}
diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.aidl b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.aidl
new file mode 100644
index 000000000000..76073c22af0c
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.aidl
@@ -0,0 +1,20 @@
+/*
+ *
+ * Copyright 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 android.telephony.ims;
+
+parcelable RcsIncomingMessageCreationParameters;
diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.java b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.java
new file mode 100644
index 000000000000..acde8af0d295
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.java
@@ -0,0 +1,180 @@
+/*
+ * 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 android.telephony.ims;
+
+import android.annotation.CheckResult;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * {@link RcsIncomingMessageCreationParameters} is a collection of parameters that should be passed
+ * into {@link RcsThread#addIncomingMessage(RcsIncomingMessageCreationParameters)} to generate an
+ * {@link RcsIncomingMessage} on that {@link RcsThread}
+ *
+ * @hide TODO:make public
+ */
+public class RcsIncomingMessageCreationParameters extends RcsMessageCreationParameters implements
+ Parcelable {
+ // The arrival timestamp for the RcsIncomingMessage to be created
+ private final long mArrivalTimestamp;
+ // The seen timestamp for the RcsIncomingMessage to be created
+ private final long mSeenTimestamp;
+ // The participant that sent this incoming message
+ private final int mSenderParticipantId;
+
+ /**
+ * Builder to help create an {@link RcsIncomingMessageCreationParameters}
+ *
+ * @see RcsThread#addIncomingMessage(RcsIncomingMessageCreationParameters)
+ */
+ public static class Builder extends RcsMessageCreationParameters.Builder {
+ private RcsParticipant mSenderParticipant;
+ private long mArrivalTimestamp;
+ private long mSeenTimestamp;
+
+ /**
+ * Creates a {@link Builder} to create an instance of
+ * {@link RcsIncomingMessageCreationParameters}
+ *
+ * @param originationTimestamp The timestamp of {@link RcsMessage} creation. The origination
+ * timestamp value in milliseconds passed after midnight,
+ * January 1, 1970 UTC
+ * @param arrivalTimestamp The timestamp of arrival, defined as milliseconds passed after
+ * midnight, January 1, 1970 UTC
+ * @param subscriptionId The subscription ID that was used to send or receive this
+ * {@link RcsMessage}
+ */
+ public Builder(long originationTimestamp, long arrivalTimestamp, int subscriptionId) {
+ super(originationTimestamp, subscriptionId);
+ mArrivalTimestamp = arrivalTimestamp;
+ }
+
+ /**
+ * Sets the {@link RcsParticipant} that send this {@link RcsIncomingMessage}
+ *
+ * @param senderParticipant The {@link RcsParticipant} that sent this
+ * {@link RcsIncomingMessage}
+ * @return The same instance of {@link Builder} to chain methods.
+ */
+ @CheckResult
+ public Builder setSenderParticipant(RcsParticipant senderParticipant) {
+ mSenderParticipant = senderParticipant;
+ return this;
+ }
+
+ /**
+ * Sets the time of the arrival of this {@link RcsIncomingMessage}
+
+ * @return The same instance of {@link Builder} to chain methods.
+ * @see RcsIncomingMessage#setArrivalTimestamp(long)
+ */
+ @CheckResult
+ public Builder setArrivalTimestamp(long arrivalTimestamp) {
+ mArrivalTimestamp = arrivalTimestamp;
+ return this;
+ }
+
+ /**
+ * Sets the time of the when this user saw the {@link RcsIncomingMessage}
+ * @param seenTimestamp The seen timestamp , defined as milliseconds passed after midnight,
+ * January 1, 1970 UTC
+ * @return The same instance of {@link Builder} to chain methods.
+ * @see RcsIncomingMessage#setSeenTimestamp(long)
+ */
+ @CheckResult
+ public Builder setSeenTimestamp(long seenTimestamp) {
+ mSeenTimestamp = seenTimestamp;
+ return this;
+ }
+
+ /**
+ * Creates parameters for creating a new incoming message.
+ * @return A new instance of {@link RcsIncomingMessageCreationParameters} to create a new
+ * {@link RcsIncomingMessage}
+ */
+ public RcsIncomingMessageCreationParameters build() {
+ return new RcsIncomingMessageCreationParameters(this);
+ }
+ }
+
+ private RcsIncomingMessageCreationParameters(Builder builder) {
+ super(builder);
+ mArrivalTimestamp = builder.mArrivalTimestamp;
+ mSeenTimestamp = builder.mSeenTimestamp;
+ mSenderParticipantId = builder.mSenderParticipant.getId();
+ }
+
+ protected RcsIncomingMessageCreationParameters(Parcel in) {
+ super(in);
+ mArrivalTimestamp = in.readLong();
+ mSeenTimestamp = in.readLong();
+ mSenderParticipantId = in.readInt();
+ }
+
+ /**
+ * @return Returns the arrival timestamp for the {@link RcsIncomingMessage} to be created.
+ * Timestamp is defined as milliseconds passed after midnight, January 1, 1970 UTC
+ */
+ public long getArrivalTimestamp() {
+ return mArrivalTimestamp;
+ }
+
+ /**
+ * @return Returns the seen timestamp for the {@link RcsIncomingMessage} to be created.
+ * Timestamp is defined as milliseconds passed after midnight, January 1, 1970 UTC
+ */
+ public long getSeenTimestamp() {
+ return mSeenTimestamp;
+ }
+
+ /**
+ * Helper getter for {@link com.android.internal.telephony.ims.RcsMessageStoreController} to
+ * create {@link RcsIncomingMessage}s
+ *
+ * Since the API doesn't expose any ID's to API users, this should be hidden.
+ * @hide
+ */
+ public int getSenderParticipantId() {
+ return mSenderParticipantId;
+ }
+
+ public static final Creator<RcsIncomingMessageCreationParameters> CREATOR =
+ new Creator<RcsIncomingMessageCreationParameters>() {
+ @Override
+ public RcsIncomingMessageCreationParameters createFromParcel(Parcel in) {
+ return new RcsIncomingMessageCreationParameters(in);
+ }
+
+ @Override
+ public RcsIncomingMessageCreationParameters[] newArray(int size) {
+ return new RcsIncomingMessageCreationParameters[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeLong(mArrivalTimestamp);
+ dest.writeLong(mSeenTimestamp);
+ dest.writeInt(mSenderParticipantId);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsLocationPart.aidl b/telephony/java/android/telephony/ims/RcsLocationPart.aidl
deleted file mode 100644
index 4fe5ca97a30d..000000000000
--- a/telephony/java/android/telephony/ims/RcsLocationPart.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsLocationPart;
diff --git a/telephony/java/android/telephony/ims/RcsLocationPart.java b/telephony/java/android/telephony/ims/RcsLocationPart.java
deleted file mode 100644
index 19be4ceaf688..000000000000
--- a/telephony/java/android/telephony/ims/RcsLocationPart.java
+++ /dev/null
@@ -1,48 +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 android.telephony.ims;
-
-import android.os.Parcel;
-
-/**
- * A part of a composite {@link RcsMessage} that holds a location
- * @hide - TODO(sahinc) make this public
- */
-public class RcsLocationPart extends RcsPart {
- public static final Creator<RcsLocationPart> CREATOR = new Creator<RcsLocationPart>() {
- @Override
- public RcsLocationPart createFromParcel(Parcel in) {
- return new RcsLocationPart(in);
- }
-
- @Override
- public RcsLocationPart[] newArray(int size) {
- return new RcsLocationPart[size];
- }
- };
-
- protected RcsLocationPart(Parcel in) {
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- }
-}
diff --git a/telephony/java/android/telephony/ims/RcsManager.java b/telephony/java/android/telephony/ims/RcsManager.java
index df108c88e3b0..e84d4ed9e7be 100644
--- a/telephony/java/android/telephony/ims/RcsManager.java
+++ b/telephony/java/android/telephony/ims/RcsManager.java
@@ -28,7 +28,7 @@ public class RcsManager {
private static final RcsMessageStore sRcsMessageStoreInstance = new RcsMessageStore();
/**
- * Returns an instance of RcsMessageStore.
+ * Returns an instance of {@link RcsMessageStore}
*/
public RcsMessageStore getRcsMessageStore() {
return sRcsMessageStoreInstance;
diff --git a/telephony/java/android/telephony/ims/RcsMessage.java b/telephony/java/android/telephony/ims/RcsMessage.java
index d46685c4a572..b70a9a7973f5 100644
--- a/telephony/java/android/telephony/ims/RcsMessage.java
+++ b/telephony/java/android/telephony/ims/RcsMessage.java
@@ -15,11 +15,314 @@
*/
package android.telephony.ims;
-import android.os.Parcelable;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.WorkerThread;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
/**
* This is a single instance of a message sent or received over RCS.
- * @hide - TODO(sahinc) make this public
+ *
+ * @hide - TODO(109759350) make this public
*/
-public abstract class RcsMessage implements Parcelable {
+public abstract class RcsMessage {
+ /**
+ * The value to indicate that this {@link RcsMessage} does not have any location information.
+ */
+ public static final double LOCATION_NOT_SET = Double.MIN_VALUE;
+
+ /**
+ * The status to indicate that this {@link RcsMessage}s status is not set yet.
+ */
+ public static final int NOT_SET = 0;
+
+ /**
+ * The status to indicate that this {@link RcsMessage} is a draft and is not in the process of
+ * sending yet.
+ */
+ public static final int DRAFT = 1;
+
+ /**
+ * The status to indicate that this {@link RcsMessage} was successfully sent.
+ */
+ public static final int QUEUED = 2;
+
+ /**
+ * The status to indicate that this {@link RcsMessage} is actively being sent.
+ */
+ public static final int SENDING = 3;
+
+ /**
+ * The status to indicate that this {@link RcsMessage} was successfully sent.
+ */
+ public static final int SENT = 4;
+
+ /**
+ * The status to indicate that this {@link RcsMessage} failed to send in an attempt before, and
+ * now being retried.
+ */
+ public static final int RETRYING = 5;
+
+ /**
+ * The status to indicate that this {@link RcsMessage} has permanently failed to send.
+ */
+ public static final int FAILED = 6;
+
+ /**
+ * The status to indicate that this {@link RcsMessage} was successfully received.
+ */
+ public static final int RECEIVED = 7;
+
+ /**
+ * The status to indicate that this {@link RcsMessage} was seen.
+ */
+ public static final int SEEN = 9;
+
+ protected int mId;
+
+ @IntDef({
+ DRAFT, QUEUED, SENDING, SENT, RETRYING, FAILED, RECEIVED, SEEN
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface RcsMessageStatus {
+ }
+
+ RcsMessage(int id) {
+ mId = id;
+ }
+
+ /**
+ * Returns the row Id from the common message.
+ *
+ * @hide
+ */
+ public int getId() {
+ return mId;
+ }
+
+ /**
+ * @return Returns the subscription ID that this {@link RcsMessage} was sent from, or delivered
+ * to.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ * @see android.telephony.SubscriptionInfo#getSubscriptionId
+ */
+ public int getSubscriptionId() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getMessageSubId(mId, isIncoming()));
+ }
+
+ /**
+ * Sets the subscription ID that this {@link RcsMessage} was sent from, or delivered to and
+ * persists it into storage.
+ *
+ * @param subId The subscription ID to persists into storage.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ * @see android.telephony.SubscriptionInfo#getSubscriptionId
+ */
+ @WorkerThread
+ public void setSubscriptionId(int subId) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setMessageSubId(mId, isIncoming(), subId));
+ }
+
+ /**
+ * Sets the status of this message and persists it into storage. Please see
+ * {@link RcsFileTransferPart#setFileTransferStatus(int)} to set statuses around file transfers.
+ *
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setStatus(@RcsMessageStatus int rcsMessageStatus) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setMessageStatus(mId, isIncoming(), rcsMessageStatus));
+ }
+
+ /**
+ * @return Returns the status of this message. Please see
+ * {@link RcsFileTransferPart#setFileTransferStatus(int)} to set statuses around file transfers.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public @RcsMessageStatus int getStatus() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getMessageStatus(mId, isIncoming()));
+ }
+
+ /**
+ * Sets the origination timestamp of this message and persists it into storage. Origination is
+ * defined as when the sender tapped the send button.
+ *
+ * @param timestamp The origination timestamp value in milliseconds passed after midnight,
+ * January 1, 1970 UTC
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setOriginationTimestamp(long timestamp) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setMessageOriginationTimestamp(mId, isIncoming(), timestamp));
+ }
+
+ /**
+ * @return Returns the origination timestamp of this message in milliseconds passed after
+ * midnight, January 1, 1970 UTC. Origination is defined as when the sender tapped the send
+ * button.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public long getOriginationTimestamp() throws RcsMessageStoreException {
+ return RcsControllerCall.call(
+ iRcs -> iRcs.getMessageOriginationTimestamp(mId, isIncoming()));
+ }
+
+ /**
+ * Sets the globally unique RCS message identifier for this message and persists it into
+ * storage. This function does not confirm that this message id is unique. Please see 4.4.5.2
+ * - GSMA RCC.53 (RCS Device API 1.6 Specification
+ *
+ * @param rcsMessageGlobalId The globally RCS message identifier
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setRcsMessageId(String rcsMessageGlobalId) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setGlobalMessageIdForMessage(mId, isIncoming(), rcsMessageGlobalId));
+ }
+
+ /**
+ * @return Returns the globally unique RCS message identifier for this message. Please see
+ * 4.4.5.2 - GSMA RCC.53 (RCS Device API 1.6 Specification
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public String getRcsMessageId() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getGlobalMessageIdForMessage(mId, isIncoming()));
+ }
+
+ /**
+ * @return Returns the user visible text included in this message.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public String getText() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getTextForMessage(mId, isIncoming()));
+ }
+
+ /**
+ * Sets the user visible text for this message and persists in storage.
+ *
+ * @param text The text this message now has
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setText(String text) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setTextForMessage(mId, isIncoming(), text));
+ }
+
+ /**
+ * @return Returns the associated latitude for this message, or
+ * {@link RcsMessage#LOCATION_NOT_SET} if it does not contain a location.
+ *
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public double getLatitude() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getLatitudeForMessage(mId, isIncoming()));
+ }
+
+ /**
+ * Sets the latitude for this message and persists in storage.
+ *
+ * @param latitude The latitude for this location message.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setLatitude(double latitude) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setLatitudeForMessage(mId, isIncoming(), latitude));
+ }
+
+ /**
+ * @return Returns the associated longitude for this message, or
+ * {@link RcsMessage#LOCATION_NOT_SET} if it does not contain a location.
+ *
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public double getLongitude() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getLongitudeForMessage(mId, isIncoming()));
+ }
+
+ /**
+ * Sets the longitude for this message and persists in storage.
+ *
+ * @param longitude The longitude for this location message.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setLongitude(double longitude) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.setLongitudeForMessage(mId, isIncoming(), longitude));
+ }
+
+ /**
+ * Attaches an {@link RcsFileTransferPart} to this message and persists into storage.
+ *
+ * @param fileTransferCreationParameters The parameters to be used to create the
+ * {@link RcsFileTransferPart}
+ * @return A new instance of {@link RcsFileTransferPart}
+ * @throws RcsMessageStoreException if the file transfer could not be persisted into storage.
+ */
+ @NonNull
+ @WorkerThread
+ public RcsFileTransferPart insertFileTransfer(
+ RcsFileTransferCreationParameters fileTransferCreationParameters)
+ throws RcsMessageStoreException {
+ return new RcsFileTransferPart(RcsControllerCall.call(
+ iRcs -> iRcs.storeFileTransfer(mId, isIncoming(), fileTransferCreationParameters)));
+ }
+
+ /**
+ * @return Returns all the {@link RcsFileTransferPart}s associated with this message in an
+ * unmodifiable set.
+ * @throws RcsMessageStoreException if the file transfers could not be read from the storage
+ */
+ @NonNull
+ @WorkerThread
+ public Set<RcsFileTransferPart> getFileTransferParts() throws RcsMessageStoreException {
+ Set<RcsFileTransferPart> fileTransferParts = new HashSet<>();
+
+ int[] fileTransferIds = RcsControllerCall.call(
+ iRcs -> iRcs.getFileTransfersAttachedToMessage(mId, isIncoming()));
+
+ for (int fileTransfer : fileTransferIds) {
+ fileTransferParts.add(new RcsFileTransferPart(fileTransfer));
+ }
+
+ return Collections.unmodifiableSet(fileTransferParts);
+ }
+
+ /**
+ * Removes a {@link RcsFileTransferPart} from this message, and deletes it in storage.
+ *
+ * @param fileTransferPart The part to delete.
+ * @throws RcsMessageStoreException if the file transfer could not be removed from storage
+ */
+ @WorkerThread
+ public void removeFileTransferPart(@NonNull RcsFileTransferPart fileTransferPart)
+ throws RcsMessageStoreException {
+ if (fileTransferPart == null) {
+ return;
+ }
+
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.deleteFileTransfer(fileTransferPart.getId()));
+ }
+
+ /**
+ * @return Returns {@code true} if this message was received on this device, {@code false} if it
+ * was sent.
+ */
+ public abstract boolean isIncoming();
}
diff --git a/telephony/java/android/telephony/ims/RcsMessageCreationParameters.aidl b/telephony/java/android/telephony/ims/RcsMessageCreationParameters.aidl
new file mode 100644
index 000000000000..5774d00ca934
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsMessageCreationParameters.aidl
@@ -0,0 +1,20 @@
+/*
+ *
+ * Copyright 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 android.telephony.ims;
+
+parcelable RcsMessageCreationParameters;
diff --git a/telephony/java/android/telephony/ims/RcsMessageCreationParameters.java b/telephony/java/android/telephony/ims/RcsMessageCreationParameters.java
new file mode 100644
index 000000000000..ff3f33ed2e1b
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsMessageCreationParameters.java
@@ -0,0 +1,265 @@
+/*
+ * 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 android.telephony.ims;
+
+import static android.telephony.ims.RcsMessage.LOCATION_NOT_SET;
+
+import android.annotation.CheckResult;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.telephony.SubscriptionInfo;
+
+/**
+ * The collection of parameters to be passed into
+ * {@link RcsThread#addIncomingMessage(RcsIncomingMessageCreationParameters)} and
+ * {@link RcsThread#addOutgoingMessage(RcsMessageCreationParameters)} to create and persist
+ * {@link RcsMessage}s on an {@link RcsThread}
+ *
+ * @hide TODO - make public
+ */
+public class RcsMessageCreationParameters implements Parcelable {
+ // The globally unique id of the RcsMessage to be created.
+ private final String mRcsMessageGlobalId;
+
+ // The subscription that this message was/will be received/sent from.
+ private final int mSubId;
+ // The sending/receiving status of the message
+ private final @RcsMessage.RcsMessageStatus int mMessageStatus;
+ // The timestamp of message creation
+ private final long mOriginationTimestamp;
+ // The user visible content of the message
+ private final String mText;
+ // The latitude of the message if this is a location message
+ private final double mLatitude;
+ // The longitude of the message if this is a location message
+ private final double mLongitude;
+
+ /**
+ * @return Returns the globally unique RCS Message ID for the {@link RcsMessage} to be created.
+ * Please see 4.4.5.2 - GSMA RCC.53 (RCS Device API 1.6 Specification
+ */
+ @Nullable
+ public String getRcsMessageGlobalId() {
+ return mRcsMessageGlobalId;
+ }
+
+ /**
+ * @return Returns the subscription ID that was used to send or receive the {@link RcsMessage}
+ * to be created.
+ */
+ public int getSubId() {
+ return mSubId;
+ }
+
+ /**
+ * @return Returns the status for the {@link RcsMessage} to be created.
+ * @see RcsMessage.RcsMessageStatus
+ */
+ public int getMessageStatus() {
+ return mMessageStatus;
+ }
+
+ /**
+ * @return Returns the origination timestamp of the {@link RcsMessage} to be created in
+ * milliseconds passed after midnight, January 1, 1970 UTC. Origination is defined as when
+ * the sender tapped the send button.
+ */
+ public long getOriginationTimestamp() {
+ return mOriginationTimestamp;
+ }
+
+ /**
+ * @return Returns the user visible text contained in the {@link RcsMessage} to be created
+ */
+ @Nullable
+ public String getText() {
+ return mText;
+ }
+
+ /**
+ * @return Returns the latitude of the {@link RcsMessage} to be created, or
+ * {@link RcsMessage#LOCATION_NOT_SET} if the message does not contain a location.
+ */
+ public double getLatitude() {
+ return mLatitude;
+ }
+
+ /**
+ * @return Returns the longitude of the {@link RcsMessage} to be created, or
+ * {@link RcsMessage#LOCATION_NOT_SET} if the message does not contain a location.
+ */
+ public double getLongitude() {
+ return mLongitude;
+ }
+
+ /**
+ * The base builder for creating {@link RcsMessage}s on {@link RcsThread}s.
+ *
+ * @see RcsIncomingMessageCreationParameters
+ */
+ public static class Builder {
+ private String mRcsMessageGlobalId;
+ private int mSubId;
+ private @RcsMessage.RcsMessageStatus int mMessageStatus;
+ private long mOriginationTimestamp;
+ private String mText;
+ private double mLatitude = LOCATION_NOT_SET;
+ private double mLongitude = LOCATION_NOT_SET;
+
+ /**
+ * Creates a new {@link Builder} to create an instance of
+ * {@link RcsMessageCreationParameters}.
+ *
+ * @param originationTimestamp The timestamp of {@link RcsMessage} creation. The origination
+ * timestamp value in milliseconds passed after midnight,
+ * January 1, 1970 UTC
+ * @param subscriptionId The subscription ID that was used to send or receive this
+ * {@link RcsMessage}
+ * @see SubscriptionInfo#getSubscriptionId()
+ */
+ public Builder(long originationTimestamp, int subscriptionId) {
+ mOriginationTimestamp = originationTimestamp;
+ mSubId = subscriptionId;
+ }
+
+ /**
+ * Sets the status of the {@link RcsMessage} to be built.
+ *
+ * @param rcsMessageStatus The status to be set
+ * @return The same instance of {@link Builder} to chain methods
+ * @see RcsMessage#setStatus(int)
+ */
+ @CheckResult
+ public Builder setStatus(@RcsMessage.RcsMessageStatus int rcsMessageStatus) {
+ mMessageStatus = rcsMessageStatus;
+ return this;
+ }
+
+ /**
+ * Sets the globally unique RCS message identifier for the {@link RcsMessage} to be built.
+ * This function does not confirm that this message id is unique. Please see 4.4.5.2 - GSMA
+ * RCC.53 (RCS Device API 1.6 Specification)
+ *
+ * @param rcsMessageId The ID to be set
+ * @return The same instance of {@link Builder} to chain methods
+ * @see RcsMessage#setRcsMessageId(String)
+ */
+ @CheckResult
+ public Builder setRcsMessageId(String rcsMessageId) {
+ mRcsMessageGlobalId = rcsMessageId;
+ return this;
+ }
+
+ /**
+ * Sets the text of the {@link RcsMessage} to be built.
+ *
+ * @param text The user visible text of the message
+ * @return The same instance of {@link Builder} to chain methods
+ * @see RcsMessage#setText(String)
+ */
+ @CheckResult
+ public Builder setText(String text) {
+ mText = text;
+ return this;
+ }
+
+ /**
+ * Sets the latitude of the {@link RcsMessage} to be built. Please see US5-24 - GSMA RCC.71
+ * (RCS Universal Profile Service Definition Document)
+ *
+ * @param latitude The latitude of the location information associated with this message.
+ * @return The same instance of {@link Builder} to chain methods
+ * @see RcsMessage#setLatitude(double)
+ */
+ @CheckResult
+ public Builder setLatitude(double latitude) {
+ mLatitude = latitude;
+ return this;
+ }
+
+ /**
+ * Sets the longitude of the {@link RcsMessage} to be built. Please see US5-24 - GSMA RCC.71
+ * (RCS Universal Profile Service Definition Document)
+ *
+ * @param longitude The longitude of the location information associated with this message.
+ * @return The same instance of {@link Builder} to chain methods
+ * @see RcsMessage#setLongitude(double)
+ */
+ @CheckResult
+ public Builder setLongitude(double longitude) {
+ mLongitude = longitude;
+ return this;
+ }
+
+ /**
+ * @hide
+ */
+ public RcsMessageCreationParameters build() {
+ return new RcsMessageCreationParameters(this);
+ }
+ }
+
+ protected RcsMessageCreationParameters(Builder builder) {
+ mRcsMessageGlobalId = builder.mRcsMessageGlobalId;
+ mSubId = builder.mSubId;
+ mMessageStatus = builder.mMessageStatus;
+ mOriginationTimestamp = builder.mOriginationTimestamp;
+ mText = builder.mText;
+ mLatitude = builder.mLatitude;
+ mLongitude = builder.mLongitude;
+ }
+
+ protected RcsMessageCreationParameters(Parcel in) {
+ mRcsMessageGlobalId = in.readString();
+ mSubId = in.readInt();
+ mMessageStatus = in.readInt();
+ mOriginationTimestamp = in.readLong();
+ mText = in.readString();
+ mLatitude = in.readDouble();
+ mLongitude = in.readDouble();
+ }
+
+ public static final Creator<RcsMessageCreationParameters> CREATOR =
+ new Creator<RcsMessageCreationParameters>() {
+ @Override
+ public RcsMessageCreationParameters createFromParcel(Parcel in) {
+ return new RcsMessageCreationParameters(in);
+ }
+
+ @Override
+ public RcsMessageCreationParameters[] newArray(int size) {
+ return new RcsMessageCreationParameters[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(mRcsMessageGlobalId);
+ dest.writeInt(mSubId);
+ dest.writeInt(mMessageStatus);
+ dest.writeLong(mOriginationTimestamp);
+ dest.writeString(mText);
+ dest.writeDouble(mLatitude);
+ dest.writeDouble(mLongitude);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryParameters.aidl b/telephony/java/android/telephony/ims/RcsMessageQueryParameters.aidl
new file mode 100644
index 000000000000..c325c23ba9bd
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsMessageQueryParameters.aidl
@@ -0,0 +1,20 @@
+/*
+ *
+ * Copyright 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 android.telephony.ims;
+
+parcelable RcsMessageQueryParameters;
diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryParameters.java b/telephony/java/android/telephony/ims/RcsMessageQueryParameters.java
new file mode 100644
index 000000000000..c964cf9af7c5
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsMessageQueryParameters.java
@@ -0,0 +1,361 @@
+/*
+ * 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 android.telephony.ims;
+
+import android.annotation.CheckResult;
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.security.InvalidParameterException;
+
+/**
+ * The parameters to pass into
+ * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} in order to select a
+ * subset of {@link RcsMessage}s present in the message store.
+ *
+ * @hide TODO - make the Builder and builder() public. The rest should stay internal only.
+ */
+public class RcsMessageQueryParameters implements Parcelable {
+ /**
+ * @hide - not meant for public use
+ */
+ public static final int THREAD_ID_NOT_SET = -1;
+
+ /**
+ * Flag to be used with {@link Builder#setSortProperty(int)} to denote that the results should
+ * be sorted in the same order of {@link RcsMessage}s that got persisted into storage for faster
+ * results.
+ */
+ public static final int SORT_BY_CREATION_ORDER = 0;
+
+ /**
+ * Flag to be used with {@link Builder#setSortProperty(int)} to denote that the results should
+ * be sorted according to the timestamp of {@link RcsMessage#getOriginationTimestamp()}
+ */
+ public static final int SORT_BY_TIMESTAMP = 1;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({SORT_BY_CREATION_ORDER, SORT_BY_TIMESTAMP})
+ public @interface SortingProperty {
+ }
+
+ /**
+ * Bitmask flag to be used with {@link Builder#setMessageType(int)} to make
+ * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} return
+ * {@link RcsIncomingMessage}s.
+ */
+ public static final int MESSAGE_TYPE_INCOMING = 0x0001;
+
+ /**
+ * Bitmask flag to be used with {@link Builder#setMessageType(int)} to make
+ * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} return
+ * {@link RcsOutgoingMessage}s.
+ */
+ public static final int MESSAGE_TYPE_OUTGOING = 0x0002;
+
+ /**
+ * Bitmask flag to be used with {@link Builder#setFileTransferPresence(int)} to make
+ * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} return {@link RcsMessage}s
+ * that have an {@link RcsFileTransferPart} attached.
+ */
+ public static final int MESSAGES_WITH_FILE_TRANSFERS = 0x0004;
+
+ /**
+ * Bitmask flag to be used with {@link Builder#setFileTransferPresence(int)} to make
+ * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} return {@link RcsMessage}s
+ * that don't have an {@link RcsFileTransferPart} attached.
+ */
+ public static final int MESSAGES_WITHOUT_FILE_TRANSFERS = 0x0008;
+
+ /**
+ * @hide - not meant for public use
+ */
+ public static final String MESSAGE_QUERY_PARAMETERS_KEY = "message_query_parameters";
+
+ // Whether the result should be filtered against incoming or outgoing messages
+ private int mMessageType;
+ // Whether the result should have file transfer messages attached or not
+ private int mFileTransferPresence;
+ // The SQL "Like" clause to filter messages
+ private String mMessageLike;
+ // The property the messages should be sorted against
+ private @SortingProperty int mSortingProperty;
+ // Whether the messages should be sorted in ascending order
+ private boolean mIsAscending;
+ // The number of results that should be returned with this query
+ private int mLimit;
+ // The thread that the results should be limited to
+ private int mThreadId;
+
+ RcsMessageQueryParameters(int messageType, int fileTransferPresence, String messageLike,
+ int threadId, @SortingProperty int sortingProperty, boolean isAscending, int limit) {
+ mMessageType = messageType;
+ mFileTransferPresence = fileTransferPresence;
+ mMessageLike = messageLike;
+ mSortingProperty = sortingProperty;
+ mIsAscending = isAscending;
+ mLimit = limit;
+ mThreadId = threadId;
+ }
+
+ /**
+ * @return Returns the type of {@link RcsMessage}s that this {@link RcsMessageQueryParameters}
+ * is set to query for.
+ */
+ public int getMessageType() {
+ return mMessageType;
+ }
+
+ /**
+ * @return Returns whether the result query should return {@link RcsMessage}s with
+ * {@link RcsFileTransferPart}s or not
+ */
+ public int getFileTransferPresence() {
+ return mFileTransferPresence;
+ }
+
+ /**
+ * @return Returns the SQL-inspired "LIKE" clause that will be used to match {@link RcsMessage}s
+ */
+ public String getMessageLike() {
+ return mMessageLike;
+ }
+
+ /**
+ * @return Returns the number of {@link RcsThread}s to be returned from the query. A value of
+ * 0 means there is no set limit.
+ */
+ public int getLimit() {
+ return mLimit;
+ }
+
+ /**
+ * @return Returns the property that will be used to sort the result against.
+ * @see SortingProperty
+ */
+ public @SortingProperty int getSortingProperty() {
+ return mSortingProperty;
+ }
+
+ /**
+ * @return Returns {@code true} if the result set will be sorted in ascending order,
+ * {@code false} if it will be sorted in descending order.
+ */
+ public boolean getSortDirection() {
+ return mIsAscending;
+ }
+
+ /**
+ * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get
+ * the thread that the result query should be limited to.
+ *
+ * As we do not expose any sort of integer ID's to public usage, this should be hidden.
+ *
+ * @hide - not meant for public use
+ */
+ public int getThreadId() {
+ return mThreadId;
+ }
+
+ /**
+ * A helper class to build the {@link RcsMessageQueryParameters}.
+ */
+ public static class Builder {
+ private @SortingProperty int mSortingProperty;
+ private int mMessageType;
+ private int mFileTransferPresence;
+ private String mMessageLike;
+ private boolean mIsAscending;
+ private int mLimit = 100;
+ private int mThreadId = THREAD_ID_NOT_SET;
+
+ /**
+ * Creates a new builder for {@link RcsMessageQueryParameters} to be used in
+ * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)}
+ *
+ */
+ public Builder() {
+ // empty implementation
+ }
+
+ /**
+ * Desired number of threads to be returned from the query. Passing in 0 will return all
+ * existing threads at once. The limit defaults to 100.
+ *
+ * @param limit The number to limit the query result to.
+ * @return The same instance of the builder to chain parameters.
+ * @throws InvalidParameterException If the given limit is negative.
+ */
+ @CheckResult
+ public Builder setResultLimit(@IntRange(from = 0) int limit)
+ throws InvalidParameterException {
+ if (limit < 0) {
+ throw new InvalidParameterException("The query limit must be non-negative");
+ }
+
+ mLimit = limit;
+ return this;
+ }
+
+ /**
+ * Sets the type of messages to be returned from the query.
+ *
+ * @param messageType The type of message to be returned.
+ * @return The same instance of the builder to chain parameters.
+ * @see RcsMessageQueryParameters#MESSAGE_TYPE_INCOMING
+ * @see RcsMessageQueryParameters#MESSAGE_TYPE_OUTGOING
+ */
+ @CheckResult
+ public Builder setMessageType(int messageType) {
+ mMessageType = messageType;
+ return this;
+ }
+
+ /**
+ * Sets whether file transfer messages should be included in the query result or not.
+ *
+ * @param fileTransferPresence Whether file transfers should be included in the result
+ * @return The same instance of the builder to chain parameters.
+ * @see RcsMessageQueryParameters#MESSAGES_WITH_FILE_TRANSFERS
+ * @see RcsMessageQueryParameters#MESSAGES_WITHOUT_FILE_TRANSFERS
+ */
+ @CheckResult
+ public Builder setFileTransferPresence(int fileTransferPresence) {
+ mFileTransferPresence = fileTransferPresence;
+ return this;
+ }
+
+ /**
+ * Sets an SQL-inspired "like" clause to match with messages. Using a percent sign ('%')
+ * wildcard matches any sequence of zero or more characters. Using an underscore ('_')
+ * wildcard matches any single character. Not using any wildcards would only perform a
+ * string match. The input string is case-insensitive.
+ *
+ * The input "Wh%" would match messages "who", "where" and "what", while the input "Wh_"
+ * would only match "who"
+ *
+ * @param messageLike The "like" clause for matching {@link RcsMessage}s.
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setMessageLike(String messageLike) {
+ mMessageLike = messageLike;
+ return this;
+ }
+
+ /**
+ * Sets the property where the results should be sorted against. Defaults to
+ * {@link RcsMessageQueryParameters.SortingProperty#SORT_BY_CREATION_ORDER}
+ *
+ * @param sortingProperty against which property the results should be sorted
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setSortProperty(@SortingProperty int sortingProperty) {
+ mSortingProperty = sortingProperty;
+ return this;
+ }
+
+ /**
+ * Sets whether the results should be sorted ascending or descending
+ *
+ * @param isAscending whether the results should be sorted ascending
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setSortDirection(boolean isAscending) {
+ mIsAscending = isAscending;
+ return this;
+ }
+
+ /**
+ * Limits the results to the given thread.
+ *
+ * @param thread the {@link RcsThread} that results should be limited to. If set to
+ * {@code null}, messages on all threads will be queried
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setThread(@Nullable RcsThread thread) {
+ if (thread == null) {
+ mThreadId = THREAD_ID_NOT_SET;
+ } else {
+ mThreadId = thread.getThreadId();
+ }
+ return this;
+ }
+
+ /**
+ * Builds the {@link RcsMessageQueryParameters} to use in
+ * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)}
+ *
+ * @return An instance of {@link RcsMessageQueryParameters} to use with the message
+ * query.
+ */
+ public RcsMessageQueryParameters build() {
+ return new RcsMessageQueryParameters(mMessageType, mFileTransferPresence, mMessageLike,
+ mThreadId, mSortingProperty, mIsAscending, mLimit);
+ }
+ }
+
+ /**
+ * Parcelable boilerplate below.
+ */
+ protected RcsMessageQueryParameters(Parcel in) {
+ mMessageType = in.readInt();
+ mFileTransferPresence = in.readInt();
+ mMessageLike = in.readString();
+ mSortingProperty = in.readInt();
+ mIsAscending = in.readBoolean();
+ mLimit = in.readInt();
+ mThreadId = in.readInt();
+ }
+
+ public static final Creator<RcsMessageQueryParameters> CREATOR =
+ new Creator<RcsMessageQueryParameters>() {
+ @Override
+ public RcsMessageQueryParameters createFromParcel(Parcel in) {
+ return new RcsMessageQueryParameters(in);
+ }
+
+ @Override
+ public RcsMessageQueryParameters[] newArray(int size) {
+ return new RcsMessageQueryParameters[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mMessageType);
+ dest.writeInt(mFileTransferPresence);
+ dest.writeString(mMessageLike);
+ dest.writeInt(mSortingProperty);
+ dest.writeBoolean(mIsAscending);
+ dest.writeInt(mLimit);
+ dest.writeInt(mThreadId);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsFileTransferPart.aidl b/telephony/java/android/telephony/ims/RcsMessageQueryResult.aidl
index eaf312877deb..a73ba50b6591 100644
--- a/telephony/java/android/telephony/ims/RcsFileTransferPart.aidl
+++ b/telephony/java/android/telephony/ims/RcsMessageQueryResult.aidl
@@ -17,4 +17,4 @@
package android.telephony.ims;
-parcelable RcsFileTransferPart;
+parcelable RcsMessageQueryResult;
diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java
new file mode 100644
index 000000000000..c3846fdebf2e
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java
@@ -0,0 +1,115 @@
+/*
+ * 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 android.telephony.ims;
+
+import static android.provider.Telephony.RcsColumns.RcsUnifiedMessageColumns.MESSAGE_TYPE_INCOMING;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.ims.RcsTypeIdPair;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The result of a {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)}
+ * call. This class allows getting the token for querying the next batch of messages in order to
+ * prevent handling large amounts of data at once.
+ *
+ * @hide
+ */
+public class RcsMessageQueryResult implements Parcelable {
+ // The token to continue the query to get the next batch of results
+ private RcsQueryContinuationToken mContinuationToken;
+ // The message type and message ID pairs for all the messages in this query result
+ private List<RcsTypeIdPair> mMessageTypeIdPairs;
+
+ /**
+ * Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController}
+ * to create query results
+ *
+ * @hide
+ */
+ public RcsMessageQueryResult(
+ RcsQueryContinuationToken continuationToken,
+ List<RcsTypeIdPair> messageTypeIdPairs) {
+ mContinuationToken = continuationToken;
+ mMessageTypeIdPairs = messageTypeIdPairs;
+ }
+
+ /**
+ * Returns a token to call
+ * {@link RcsMessageStore#getRcsMessages(RcsQueryContinuationToken)}
+ * to get the next batch of {@link RcsMessage}s.
+ */
+ @Nullable
+ public RcsQueryContinuationToken getContinuationToken() {
+ return mContinuationToken;
+ }
+
+ /**
+ * Returns all the {@link RcsMessage}s in the current query result. Call {@link
+ * RcsMessageStore#getRcsMessages(RcsQueryContinuationToken)} to get the next batch
+ * of {@link RcsMessage}s.
+ */
+ @NonNull
+ public List<RcsMessage> getMessages() {
+ List<RcsMessage> messages = new ArrayList<>();
+ for (RcsTypeIdPair typeIdPair : mMessageTypeIdPairs) {
+ if (typeIdPair.getType() == MESSAGE_TYPE_INCOMING) {
+ messages.add(new RcsIncomingMessage(typeIdPair.getId()));
+ } else {
+ messages.add(new RcsOutgoingMessage(typeIdPair.getId()));
+ }
+ }
+
+ return messages;
+ }
+
+ protected RcsMessageQueryResult(Parcel in) {
+ mContinuationToken = in.readParcelable(
+ RcsQueryContinuationToken.class.getClassLoader());
+ in.readTypedList(mMessageTypeIdPairs, RcsTypeIdPair.CREATOR);
+ }
+
+ public static final Creator<RcsMessageQueryResult> CREATOR =
+ new Creator<RcsMessageQueryResult>() {
+ @Override
+ public RcsMessageQueryResult createFromParcel(Parcel in) {
+ return new RcsMessageQueryResult(in);
+ }
+
+ @Override
+ public RcsMessageQueryResult[] newArray(int size) {
+ return new RcsMessageQueryResult[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeParcelable(mContinuationToken, flags);
+ dest.writeTypedList(mMessageTypeIdPairs);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsManager.aidl b/telephony/java/android/telephony/ims/RcsMessageSnippet.aidl
index 63bc71c5ee46..99b8eb704e00 100644
--- a/telephony/java/android/telephony/ims/RcsManager.aidl
+++ b/telephony/java/android/telephony/ims/RcsMessageSnippet.aidl
@@ -17,4 +17,4 @@
package android.telephony.ims;
-parcelable RcsManager;
+parcelable RcsMessageSnippet;
diff --git a/telephony/java/android/telephony/ims/RcsMessageSnippet.java b/telephony/java/android/telephony/ims/RcsMessageSnippet.java
new file mode 100644
index 000000000000..9399c2003827
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsMessageSnippet.java
@@ -0,0 +1,98 @@
+/*
+ * 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 android.telephony.ims;
+
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.telephony.ims.RcsMessage.RcsMessageStatus;
+
+/**
+ * An immutable summary of the latest {@link RcsMessage} on an {@link RcsThread}
+ *
+ * @hide TODO: make public
+ */
+public class RcsMessageSnippet implements Parcelable {
+ private final String mText;
+ private final @RcsMessageStatus int mStatus;
+ private final long mTimestamp;
+
+ /**
+ * @hide
+ */
+ public RcsMessageSnippet(String text, @RcsMessageStatus int status, long timestamp) {
+ mText = text;
+ mStatus = status;
+ mTimestamp = timestamp;
+ }
+
+ /**
+ * @return Returns the text of the {@link RcsMessage} with highest origination timestamp value
+ * (i.e. latest) in this thread
+ */
+ @Nullable
+ public String getSnippetText() {
+ return mText;
+ }
+
+ /**
+ * @return Returns the status of the {@link RcsMessage} with highest origination timestamp value
+ * (i.e. latest) in this thread
+ */
+ public @RcsMessageStatus int getSnippetStatus() {
+ return mStatus;
+ }
+
+ /**
+ * @return Returns the timestamp of the {@link RcsMessage} with highest origination timestamp
+ * value (i.e. latest) in this thread
+ */
+ public long getSnippetTimestamp() {
+ return mTimestamp;
+ }
+
+ protected RcsMessageSnippet(Parcel in) {
+ mText = in.readString();
+ mStatus = in.readInt();
+ mTimestamp = in.readLong();
+ }
+
+ public static final Creator<RcsMessageSnippet> CREATOR =
+ new Creator<RcsMessageSnippet>() {
+ @Override
+ public RcsMessageSnippet createFromParcel(Parcel in) {
+ return new RcsMessageSnippet(in);
+ }
+
+ @Override
+ public RcsMessageSnippet[] newArray(int size) {
+ return new RcsMessageSnippet[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(mText);
+ dest.writeInt(mStatus);
+ dest.writeLong(mTimestamp);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsMessageStore.java b/telephony/java/android/telephony/ims/RcsMessageStore.java
index 1bf6ffd81ca0..c8c36a8e479b 100644
--- a/telephony/java/android/telephony/ims/RcsMessageStore.java
+++ b/telephony/java/android/telephony/ims/RcsMessageStore.java
@@ -16,106 +16,223 @@
package android.telephony.ims;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.WorkerThread;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.telephony.Rlog;
-import android.telephony.ims.aidl.IRcs;
+import android.net.Uri;
+
+import java.util.List;
/**
* RcsMessageStore is the application interface to RcsProvider and provides access methods to
* RCS related database tables.
+ *
* @hide - TODO make this public
*/
public class RcsMessageStore {
- static final String TAG = "RcsMessageStore";
-
/**
* Returns the first chunk of existing {@link RcsThread}s in the common storage.
+ *
* @param queryParameters Parameters to specify to return a subset of all RcsThreads.
* Passing a value of null will return all threads.
+ * @throws RcsMessageStoreException if the query could not be completed on the storage
*/
@WorkerThread
- public RcsThreadQueryResult getRcsThreads(@Nullable RcsThreadQueryParameters queryParameters) {
- try {
- IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs"));
- if (iRcs != null) {
- return iRcs.getRcsThreads(queryParameters);
- }
- } catch (RemoteException re) {
- Rlog.e(TAG, "RcsMessageStore: Exception happened during getRcsThreads", re);
- }
-
- return null;
+ @NonNull
+ public RcsThreadQueryResult getRcsThreads(@Nullable RcsThreadQueryParameters queryParameters)
+ throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getRcsThreads(queryParameters));
}
/**
* Returns the next chunk of {@link RcsThread}s in the common storage.
+ *
* @param continuationToken A token to continue the query to get the next chunk. This is
- * obtained through {@link RcsThreadQueryResult#nextChunkToken}.
+ * obtained through {@link RcsThreadQueryResult#getContinuationToken}.
+ * @throws RcsMessageStoreException if the query could not be completed on the storage
*/
@WorkerThread
- public RcsThreadQueryResult getRcsThreads(RcsThreadQueryContinuationToken continuationToken) {
- try {
- IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs"));
- if (iRcs != null) {
- return iRcs.getRcsThreadsWithToken(continuationToken);
- }
- } catch (RemoteException re) {
- Rlog.e(TAG, "RcsMessageStore: Exception happened during getRcsThreads", re);
- }
+ @NonNull
+ public RcsThreadQueryResult getRcsThreads(@NonNull RcsQueryContinuationToken continuationToken)
+ throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getRcsThreadsWithToken(continuationToken));
+ }
+
+ /**
+ * Returns the first chunk of existing {@link RcsParticipant}s in the common storage.
+ *
+ * @param queryParameters Parameters to specify to return a subset of all RcsParticipants.
+ * Passing a value of null will return all participants.
+ * @throws RcsMessageStoreException if the query could not be completed on the storage
+ */
+ @WorkerThread
+ @NonNull
+ public RcsParticipantQueryResult getRcsParticipants(
+ @Nullable RcsParticipantQueryParameters queryParameters)
+ throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getParticipants(queryParameters));
+ }
+
+ /**
+ * Returns the next chunk of {@link RcsParticipant}s in the common storage.
+ *
+ * @param continuationToken A token to continue the query to get the next chunk. This is
+ * obtained through
+ * {@link RcsParticipantQueryResult#getContinuationToken}
+ * @throws RcsMessageStoreException if the query could not be completed on the storage
+ */
+ @WorkerThread
+ @NonNull
+ public RcsParticipantQueryResult getRcsParticipants(
+ @NonNull RcsQueryContinuationToken continuationToken)
+ throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getParticipantsWithToken(continuationToken));
+ }
- return null;
+ /**
+ * Returns the first chunk of existing {@link RcsMessage}s in the common storage.
+ *
+ * @param queryParameters Parameters to specify to return a subset of all RcsMessages.
+ * Passing a value of null will return all messages.
+ * @throws RcsMessageStoreException if the query could not be completed on the storage
+ */
+ @WorkerThread
+ @NonNull
+ public RcsMessageQueryResult getRcsMessages(
+ @Nullable RcsMessageQueryParameters queryParameters) throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getMessages(queryParameters));
+ }
+
+ /**
+ * Returns the next chunk of {@link RcsMessage}s in the common storage.
+ *
+ * @param continuationToken A token to continue the query to get the next chunk. This is
+ * obtained through {@link RcsMessageQueryResult#getContinuationToken}
+ * @throws RcsMessageStoreException if the query could not be completed on the storage
+ */
+ @WorkerThread
+ @NonNull
+ public RcsMessageQueryResult getRcsMessages(
+ @NonNull RcsQueryContinuationToken continuationToken) throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getMessagesWithToken(continuationToken));
+ }
+
+ /**
+ * Returns the first chunk of existing {@link RcsEvent}s in the common storage.
+ *
+ * @param queryParameters Parameters to specify to return a subset of all RcsEvents.
+ * Passing a value of null will return all events.
+ * @throws RcsMessageStoreException if the query could not be completed on the storage
+ */
+ @WorkerThread
+ @NonNull
+ public RcsEventQueryResult getRcsEvents(
+ @Nullable RcsEventQueryParameters queryParameters) throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getEvents(queryParameters));
+ }
+
+ /**
+ * Returns the next chunk of {@link RcsEvent}s in the common storage.
+ *
+ * @param continuationToken A token to continue the query to get the next chunk. This is
+ * obtained through {@link RcsEventQueryResult#getContinuationToken}.
+ * @throws RcsMessageStoreException if the query could not be completed on the storage
+ */
+ @WorkerThread
+ @NonNull
+ public RcsEventQueryResult getRcsEvents(
+ @NonNull RcsQueryContinuationToken continuationToken) throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getEventsWithToken(continuationToken));
+ }
+
+ /**
+ * Persists an {@link RcsEvent} to common storage.
+ *
+ * @param persistableEvent The {@link RcsEvent} to persist into storage.
+ * @throws RcsMessageStoreException if the query could not be completed on the storage
+ *
+ * @see RcsGroupThreadNameChangedEvent
+ * @see RcsGroupThreadIconChangedEvent
+ * @see RcsGroupThreadParticipantJoinedEvent
+ * @see RcsGroupThreadParticipantLeftEvent
+ * @see RcsParticipantAliasChangedEvent
+ */
+ @WorkerThread
+ @NonNull
+ public void persistRcsEvent(RcsEvent persistableEvent) throws RcsMessageStoreException {
+ persistableEvent.persist();
}
/**
* Creates a new 1 to 1 thread with the given participant and persists it in the storage.
+ *
+ * @param recipient The {@link RcsParticipant} that will receive the messages in this thread.
+ * @return The newly created {@link Rcs1To1Thread}
+ * @throws RcsMessageStoreException if the thread could not be persisted in the storage
*/
@WorkerThread
- public Rcs1To1Thread createRcs1To1Thread(RcsParticipant recipient) {
- try {
- IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs"));
- if (iRcs != null) {
- return iRcs.createRcs1To1Thread(recipient);
+ @NonNull
+ public Rcs1To1Thread createRcs1To1Thread(@NonNull RcsParticipant recipient)
+ throws RcsMessageStoreException {
+ return new Rcs1To1Thread(
+ RcsControllerCall.call(iRcs -> iRcs.createRcs1To1Thread(recipient.getId())));
+ }
+
+ /**
+ * Creates a new group thread with the given participants and persists it in the storage.
+ *
+ * @throws RcsMessageStoreException if the thread could not be persisted in the storage
+ */
+ @WorkerThread
+ @NonNull
+ public RcsGroupThread createGroupThread(@Nullable List<RcsParticipant> recipients,
+ @Nullable String groupName, @Nullable Uri groupIcon) throws RcsMessageStoreException {
+ int[] recipientIds = null;
+ if (recipients != null) {
+ recipientIds = new int[recipients.size()];
+
+ for (int i = 0; i < recipients.size(); i++) {
+ recipientIds[i] = recipients.get(i).getId();
}
- } catch (RemoteException re) {
- Rlog.e(TAG, "RcsMessageStore: Exception happened during createRcs1To1Thread", re);
}
- return null;
+ int[] finalRecipientIds = recipientIds;
+ return new RcsGroupThread(RcsControllerCall.call(
+ iRcs -> iRcs.createGroupThread(finalRecipientIds, groupName, groupIcon)));
}
/**
- * Delete the {@link RcsThread} identified by the given threadId.
- * @param threadId threadId of the thread to be deleted.
+ * Delete the given {@link RcsThread} from the storage.
+ *
+ * @param thread The thread to be deleted.
+ * @throws RcsMessageStoreException if the thread could not be deleted from the storage
*/
@WorkerThread
- public void deleteThread(int threadId) {
- try {
- IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs"));
- if (iRcs != null) {
- iRcs.deleteThread(threadId);
- }
- } catch (RemoteException re) {
- Rlog.e(TAG, "RcsMessageStore: Exception happened during deleteThread", re);
+ public void deleteThread(@NonNull RcsThread thread) throws RcsMessageStoreException {
+ if (thread == null) {
+ return;
+ }
+
+ boolean isDeleteSucceeded = RcsControllerCall.call(
+ iRcs -> iRcs.deleteThread(thread.getThreadId(), thread.getThreadType()));
+
+ if (!isDeleteSucceeded) {
+ throw new RcsMessageStoreException("Could not delete RcsThread");
}
}
/**
* Creates a new participant and persists it in the storage.
+ *
* @param canonicalAddress The defining address (e.g. phone number) of the participant.
+ * @param alias The RCS alias for the participant.
+ * @throws RcsMessageStoreException if the participant could not be created on the storage
*/
- public RcsParticipant createRcsParticipant(String canonicalAddress) {
- try {
- IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs"));
- if (iRcs != null) {
- return iRcs.createRcsParticipant(canonicalAddress);
- }
- } catch (RemoteException re) {
- Rlog.e(TAG, "RcsMessageStore: Exception happened during createRcsParticipant", re);
- }
-
- return null;
+ @WorkerThread
+ @NonNull
+ public RcsParticipant createRcsParticipant(String canonicalAddress, @Nullable String alias)
+ throws RcsMessageStoreException {
+ return new RcsParticipant(
+ RcsControllerCall.call(iRcs -> iRcs.createRcsParticipant(canonicalAddress, alias)));
}
}
diff --git a/telephony/java/android/telephony/ims/RcsParticipantEvent.java b/telephony/java/android/telephony/ims/RcsMessageStoreException.java
index 371b8b723d0a..e158f1a55aec 100644
--- a/telephony/java/android/telephony/ims/RcsParticipantEvent.java
+++ b/telephony/java/android/telephony/ims/RcsMessageStoreException.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2019 The Android Open Source Project
+ * 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.
@@ -13,13 +13,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.telephony.ims;
-import android.os.Parcelable;
+package android.telephony.ims;
/**
- * An event that is associated with an {@link RcsParticipant}
- * @hide - TODO(sahinc) make this public
+ * An exception that happened on {@link RcsMessageStore} or one of the derived storage classes in
+ * {@link android.telephony.ims}
+ *
+ * @hide TODO: make public
*/
-public abstract class RcsParticipantEvent implements Parcelable {
+public class RcsMessageStoreException extends Exception {
+
+ /**
+ * Constructs an {@link RcsMessageStoreException} with the specified detail message.
+ * @param message The detail message
+ * @see Throwable#getMessage()
+ */
+ public RcsMessageStoreException(String message) {
+ super(message);
+ }
}
diff --git a/telephony/java/android/telephony/ims/RcsMultiMediaPart.java b/telephony/java/android/telephony/ims/RcsMultiMediaPart.java
deleted file mode 100644
index d295fba365f0..000000000000
--- a/telephony/java/android/telephony/ims/RcsMultiMediaPart.java
+++ /dev/null
@@ -1,50 +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 android.telephony.ims;
-
-import android.os.Parcel;
-
-/**
- * A part of a composite {@link RcsMessage} that holds a media that is rendered on the screen
- * (i.e. image, video etc)
- * @hide - TODO(sahinc) make this public
- */
-public class RcsMultiMediaPart extends RcsFileTransferPart {
- public static final Creator<RcsMultiMediaPart> CREATOR = new Creator<RcsMultiMediaPart>() {
- @Override
- public RcsMultiMediaPart createFromParcel(Parcel in) {
- return new RcsMultiMediaPart(in);
- }
-
- @Override
- public RcsMultiMediaPart[] newArray(int size) {
- return new RcsMultiMediaPart[size];
- }
- };
-
- protected RcsMultiMediaPart(Parcel in) {
- super(in);
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- }
-}
diff --git a/telephony/java/android/telephony/ims/RcsMultimediaPart.aidl b/telephony/java/android/telephony/ims/RcsMultimediaPart.aidl
deleted file mode 100644
index 5992d95c3b9c..000000000000
--- a/telephony/java/android/telephony/ims/RcsMultimediaPart.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsMultimediaPart;
diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessage.aidl b/telephony/java/android/telephony/ims/RcsOutgoingMessage.aidl
deleted file mode 100644
index 6e0c80f3af81..000000000000
--- a/telephony/java/android/telephony/ims/RcsOutgoingMessage.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsOutgoingMessage;
diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessage.java b/telephony/java/android/telephony/ims/RcsOutgoingMessage.java
index bfb161133618..0bd55ec2d25a 100644
--- a/telephony/java/android/telephony/ims/RcsOutgoingMessage.java
+++ b/telephony/java/android/telephony/ims/RcsOutgoingMessage.java
@@ -15,34 +15,53 @@
*/
package android.telephony.ims;
-import android.os.Parcel;
+import android.annotation.NonNull;
+import android.annotation.WorkerThread;
+
+import java.util.ArrayList;
+import java.util.List;
/**
* This is a single instance of a message sent over RCS.
- * @hide - TODO(sahinc) make this public
+ *
+ * @hide - TODO(109759350) make this public
*/
public class RcsOutgoingMessage extends RcsMessage {
- public static final Creator<RcsOutgoingMessage> CREATOR = new Creator<RcsOutgoingMessage>() {
- @Override
- public RcsOutgoingMessage createFromParcel(Parcel in) {
- return new RcsOutgoingMessage(in);
- }
+ RcsOutgoingMessage(int id) {
+ super(id);
+ }
- @Override
- public RcsOutgoingMessage[] newArray(int size) {
- return new RcsOutgoingMessage[size];
- }
- };
+ /**
+ * @return Returns the {@link RcsOutgoingMessageDelivery}s associated with this message. Please
+ * note that the deliveries returned for the {@link RcsOutgoingMessage} may not always match the
+ * {@link RcsParticipant}s on the {@link RcsGroupThread} as the group recipients may have
+ * changed.
+ * @throws RcsMessageStoreException if the outgoing deliveries could not be read from storage.
+ */
+ @NonNull
+ @WorkerThread
+ public List<RcsOutgoingMessageDelivery> getOutgoingDeliveries()
+ throws RcsMessageStoreException {
+ int[] deliveryParticipants;
+ List<RcsOutgoingMessageDelivery> messageDeliveries = new ArrayList<>();
- protected RcsOutgoingMessage(Parcel in) {
- }
+ deliveryParticipants = RcsControllerCall.call(
+ iRcs -> iRcs.getMessageRecipients(mId));
- @Override
- public int describeContents() {
- return 0;
+ if (deliveryParticipants != null) {
+ for (Integer deliveryParticipant : deliveryParticipants) {
+ messageDeliveries.add(new RcsOutgoingMessageDelivery(deliveryParticipant, mId));
+ }
+ }
+
+ return messageDeliveries;
}
+ /**
+ * @return Returns {@code false} as this is not an incoming message.
+ */
@Override
- public void writeToParcel(Parcel dest, int flags) {
+ public boolean isIncoming() {
+ return false;
}
}
diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java b/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java
new file mode 100644
index 000000000000..b93f892df295
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.telephony.ims;
+
+import android.annotation.NonNull;
+import android.annotation.WorkerThread;
+
+/**
+ * This class holds the delivery information of an {@link RcsOutgoingMessage} for each
+ * {@link RcsParticipant} that the message was intended for.
+ *
+ * @hide - TODO(109759350) make this public
+ */
+public class RcsOutgoingMessageDelivery {
+ // The participant that this delivery is intended for
+ private final int mRecipientId;
+ // The message this delivery is associated with
+ private final int mRcsOutgoingMessageId;
+
+ /**
+ * Constructor to be used with RcsOutgoingMessage.getDelivery()
+ *
+ * @hide
+ */
+ RcsOutgoingMessageDelivery(int recipientId, int messageId) {
+ mRecipientId = recipientId;
+ mRcsOutgoingMessageId = messageId;
+ }
+
+ /**
+ * Sets the delivery time of this outgoing delivery and persists into storage.
+ *
+ * @param deliveredTimestamp The timestamp to set to delivery. It is defined as milliseconds
+ * passed after midnight, January 1, 1970 UTC
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setDeliveredTimestamp(long deliveredTimestamp) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setOutgoingDeliveryDeliveredTimestamp(
+ mRcsOutgoingMessageId, mRecipientId, deliveredTimestamp));
+ }
+
+ /**
+ * @return Returns the delivered timestamp of the associated message to the associated
+ * participant. Timestamp is defined as milliseconds passed after midnight, January 1, 1970 UTC.
+ * Returns 0 if the {@link RcsOutgoingMessage} is not delivered yet.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public long getDeliveredTimestamp() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getOutgoingDeliveryDeliveredTimestamp(
+ mRcsOutgoingMessageId, mRecipientId));
+ }
+
+ /**
+ * Sets the seen time of this outgoing delivery and persists into storage.
+ *
+ * @param seenTimestamp The timestamp to set to delivery. It is defined as milliseconds
+ * passed after midnight, January 1, 1970 UTC
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setSeenTimestamp(long seenTimestamp) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setOutgoingDeliverySeenTimestamp(
+ mRcsOutgoingMessageId, mRecipientId, seenTimestamp));
+ }
+
+ /**
+ * @return Returns the seen timestamp of the associated message by the associated
+ * participant. Timestamp is defined as milliseconds passed after midnight, January 1, 1970 UTC.
+ * Returns 0 if the {@link RcsOutgoingMessage} is not seen yet.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public long getSeenTimestamp() throws RcsMessageStoreException {
+ return RcsControllerCall.call(
+ iRcs -> iRcs.getOutgoingDeliverySeenTimestamp(mRcsOutgoingMessageId, mRecipientId));
+ }
+
+ /**
+ * Sets the status of this outgoing delivery and persists into storage.
+ *
+ * @param status The status of the associated {@link RcsMessage}s delivery to the associated
+ * {@link RcsParticipant}
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
+ */
+ @WorkerThread
+ public void setStatus(@RcsMessage.RcsMessageStatus int status) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setOutgoingDeliveryStatus(
+ mRcsOutgoingMessageId, mRecipientId, status));
+ }
+
+ /**
+ * @return Returns the status of this outgoing delivery.
+ * @throws RcsMessageStoreException if the value could not be read from the storage
+ */
+ @WorkerThread
+ public @RcsMessage.RcsMessageStatus int getStatus() throws RcsMessageStoreException {
+ return RcsControllerCall.call(
+ iRcs -> iRcs.getOutgoingDeliveryStatus(mRcsOutgoingMessageId, mRecipientId));
+ }
+
+ /**
+ * @return Returns the recipient associated with this delivery.
+ */
+ @NonNull
+ public RcsParticipant getRecipient() {
+ return new RcsParticipant(mRecipientId);
+ }
+
+ /**
+ * @return Returns the {@link RcsOutgoingMessage} associated with this delivery.
+ */
+ @NonNull
+ public RcsOutgoingMessage getMessage() {
+ return new RcsOutgoingMessage(mRcsOutgoingMessageId);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsParticipant.aidl b/telephony/java/android/telephony/ims/RcsParticipant.aidl
deleted file mode 100644
index 1c4436367e54..000000000000
--- a/telephony/java/android/telephony/ims/RcsParticipant.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsParticipant;
diff --git a/telephony/java/android/telephony/ims/RcsParticipant.java b/telephony/java/android/telephony/ims/RcsParticipant.java
index f678ec7e435b..ce0ad2c4749b 100644
--- a/telephony/java/android/telephony/ims/RcsParticipant.java
+++ b/telephony/java/android/telephony/ims/RcsParticipant.java
@@ -15,33 +15,17 @@
*/
package android.telephony.ims;
-import static android.telephony.ims.RcsMessageStore.TAG;
-
-import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.WorkerThread;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.telephony.Rlog;
-import android.telephony.ims.aidl.IRcs;
-import android.text.TextUtils;
-
-import com.android.internal.util.Preconditions;
/**
* RcsParticipant is an RCS capable contact that can participate in {@link RcsThread}s.
- * @hide - TODO(sahinc) make this public
+ *
+ * @hide - TODO(109759350) make this public
*/
-public class RcsParticipant implements Parcelable {
+public class RcsParticipant {
// The row ID of this participant in the database
private int mId;
- // The phone number of this participant
- private String mCanonicalAddress;
- // The RCS alias of this participant. This is different than the name of the contact in the
- // Contacts app - i.e. RCS protocol allows users to define aliases for themselves that doesn't
- // require other users to add them as contacts and give them a name.
- private String mAlias;
/**
* Constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController}
@@ -49,106 +33,95 @@ public class RcsParticipant implements Parcelable {
*
* @hide
*/
- public RcsParticipant(int id, @NonNull String canonicalAddress) {
+ public RcsParticipant(int id) {
mId = id;
- mCanonicalAddress = canonicalAddress;
}
/**
- * @return Returns the canonical address (i.e. normalized phone number) for this participant
+ * @return Returns the canonical address (i.e. normalized phone number) for this
+ * {@link RcsParticipant}
+ * @throws RcsMessageStoreException if the value could not be read from the storage
*/
- public String getCanonicalAddress() {
- return mCanonicalAddress;
+ @Nullable
+ @WorkerThread
+ public String getCanonicalAddress() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getRcsParticipantCanonicalAddress(mId));
}
/**
- * Sets the canonical address for this participant and updates it in storage.
- * @param canonicalAddress the canonical address to update to.
+ * @return Returns the alias for this {@link RcsParticipant}. Alias is usually the real name of
+ * the person themselves. Please see US5-15 - GSMA RCC.71 (RCS Universal Profile Service
+ * Definition Document)
+ * @throws RcsMessageStoreException if the value could not be read from the storage
*/
+ @Nullable
@WorkerThread
- public void setCanonicalAddress(@NonNull String canonicalAddress) {
- Preconditions.checkNotNull(canonicalAddress);
- if (canonicalAddress.equals(mCanonicalAddress)) {
- return;
- }
-
- mCanonicalAddress = canonicalAddress;
-
- try {
- IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs"));
- if (iRcs != null) {
- iRcs.updateRcsParticipantCanonicalAddress(mId, mCanonicalAddress);
- }
- } catch (RemoteException re) {
- Rlog.e(TAG, "RcsParticipant: Exception happened during setCanonicalAddress", re);
- }
+ public String getAlias() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getRcsParticipantAlias(mId));
}
/**
- * @return Returns the alias for this participant. Alias is usually the real name of the person
- * themselves.
+ * Sets the alias for this {@link RcsParticipant} and persists it in storage. Alias is usually
+ * the real name of the person themselves. Please see US5-15 - GSMA RCC.71 (RCS Universal
+ * Profile Service Definition Document)
+ *
+ * @param alias The alias to set to.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
*/
- public String getAlias() {
- return mAlias;
+ @WorkerThread
+ public void setAlias(String alias) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setRcsParticipantAlias(mId, alias));
}
/**
- * Sets the alias for this participant and persists it in storage. Alias is usually the real
- * name of the person themselves.
+ * @return Returns the contact ID for this {@link RcsParticipant}. Contact ID is a unique ID for
+ * an {@link RcsParticipant} that is RCS provisioned. Please see 4.4.5 - GSMA RCC.53 (RCS Device
+ * API 1.6 Specification)
+ * @throws RcsMessageStoreException if the value could not be read from the storage
*/
+ @Nullable
@WorkerThread
- public void setAlias(String alias) {
- if (TextUtils.equals(mAlias, alias)) {
- return;
- }
- mAlias = alias;
-
- try {
- IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs"));
- if (iRcs != null) {
- iRcs.updateRcsParticipantAlias(mId, mAlias);
- }
- } catch (RemoteException re) {
- Rlog.e(TAG, "RcsParticipant: Exception happened during setCanonicalAddress", re);
- }
+ public String getContactId() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getRcsParticipantContactId(mId));
}
/**
- * Returns the row id of this participant. This is not meant to be part of the SDK
+ * Sets the contact ID for this {@link RcsParticipant}. Contact ID is a unique ID for
+ * an {@link RcsParticipant} that is RCS provisioned. Please see 4.4.5 - GSMA RCC.53 (RCS Device
+ * API 1.6 Specification)
*
- * @hide
+ * @param contactId The contact ID to set to.
+ * @throws RcsMessageStoreException if the value could not be persisted into storage
*/
- public int getId() {
- return mId;
+ @WorkerThread
+ public void setContactId(String contactId) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setRcsParticipantContactId(mId, contactId));
}
- public static final Creator<RcsParticipant> CREATOR = new Creator<RcsParticipant>() {
- @Override
- public RcsParticipant createFromParcel(Parcel in) {
- return new RcsParticipant(in);
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
}
-
- @Override
- public RcsParticipant[] newArray(int size) {
- return new RcsParticipant[size];
+ if (!(obj instanceof RcsParticipant)) {
+ return false;
}
- };
+ RcsParticipant other = (RcsParticipant) obj;
- protected RcsParticipant(Parcel in) {
- mId = in.readInt();
- mCanonicalAddress = in.readString();
- mAlias = in.readString();
+ return mId == other.mId;
}
@Override
- public int describeContents() {
- return 0;
+ public int hashCode() {
+ return mId;
}
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(mId);
- dest.writeString(mCanonicalAddress);
- dest.writeString(mAlias);
+ /**
+ * Returns the row id of this participant. This is not meant to be part of the SDK
+ *
+ * @hide
+ */
+ public int getId() {
+ return mId;
}
}
diff --git a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java
index b9ca5a86f84d..04cdf86df9c0 100644
--- a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java
+++ b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java
@@ -15,27 +15,93 @@
*/
package android.telephony.ims;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.os.Parcel;
/**
- * An event that indicates an {@link RcsParticipant}'s alias was changed.
- * @hide - TODO(sahinc) make this public
+ * An event that indicates an {@link RcsParticipant}'s alias was changed. Please see US18-2 - GSMA
+ * RCC.71 (RCS Universal Profile Service Definition Document)
+ *
+ * @hide - TODO(109759350) make this public
*/
-public class RcsParticipantAliasChangedEvent extends RcsParticipantEvent {
+public class RcsParticipantAliasChangedEvent extends RcsEvent {
+ // The ID of the participant that changed their alias
+ private int mParticipantId;
+ // The new alias of the above participant
+ private String mNewAlias;
+
+ /**
+ * Creates a new {@link RcsParticipantAliasChangedEvent}. This event is not persisted into
+ * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called.
+ *
+ * @param timestamp The timestamp of when this event happened, in milliseconds passed after
+ * midnight, January 1st, 1970 UTC
+ * @param participant The {@link RcsParticipant} that got their alias changed
+ * @param newAlias The new alias the {@link RcsParticipant} has.
+ * @see RcsMessageStore#persistRcsEvent(RcsEvent)
+ */
+ public RcsParticipantAliasChangedEvent(long timestamp, @NonNull RcsParticipant participant,
+ @Nullable String newAlias) {
+ super(timestamp);
+ mParticipantId = participant.getId();
+ mNewAlias = newAlias;
+ }
+
+ /**
+ * @hide - internal constructor for queries
+ */
+ public RcsParticipantAliasChangedEvent(long timestamp, int participantId,
+ @Nullable String newAlias) {
+ super(timestamp);
+ mParticipantId = participantId;
+ mNewAlias = newAlias;
+ }
+
+ /**
+ * @return Returns the {@link RcsParticipant} whose alias was changed.
+ */
+ @NonNull
+ public RcsParticipant getParticipantId() {
+ return new RcsParticipant(mParticipantId);
+ }
+
+ /**
+ * @return Returns the alias of the associated {@link RcsParticipant} after this event happened
+ */
+ @Nullable
+ public String getNewAlias() {
+ return mNewAlias;
+ }
+
+ /**
+ * Persists the event to the data store.
+ *
+ * @hide - not meant for public use.
+ */
+ @Override
+ public void persist() throws RcsMessageStoreException {
+ RcsControllerCall.call(iRcs -> iRcs.createParticipantAliasChangedEvent(
+ getTimestamp(), getParticipantId().getId(), getNewAlias()));
+ }
+
public static final Creator<RcsParticipantAliasChangedEvent> CREATOR =
new Creator<RcsParticipantAliasChangedEvent>() {
- @Override
- public RcsParticipantAliasChangedEvent createFromParcel(Parcel in) {
- return new RcsParticipantAliasChangedEvent(in);
- }
+ @Override
+ public RcsParticipantAliasChangedEvent createFromParcel(Parcel in) {
+ return new RcsParticipantAliasChangedEvent(in);
+ }
- @Override
- public RcsParticipantAliasChangedEvent[] newArray(int size) {
- return new RcsParticipantAliasChangedEvent[size];
- }
- };
+ @Override
+ public RcsParticipantAliasChangedEvent[] newArray(int size) {
+ return new RcsParticipantAliasChangedEvent[size];
+ }
+ };
protected RcsParticipantAliasChangedEvent(Parcel in) {
+ super(in);
+ mNewAlias = in.readString();
+ mParticipantId = in.readInt();
}
@Override
@@ -45,5 +111,8 @@ public class RcsParticipantAliasChangedEvent extends RcsParticipantEvent {
@Override
public void writeToParcel(Parcel dest, int flags) {
+ super.writeToParcel(dest, flags);
+ dest.writeString(mNewAlias);
+ dest.writeInt(mParticipantId);
}
}
diff --git a/telephony/java/android/telephony/ims/RcsParticipantEvent.aidl b/telephony/java/android/telephony/ims/RcsParticipantEvent.aidl
deleted file mode 100644
index c0a77897abd5..000000000000
--- a/telephony/java/android/telephony/ims/RcsParticipantEvent.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsParticipantEvent;
diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.aidl b/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.aidl
new file mode 100644
index 000000000000..ea8288cd9f6a
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.aidl
@@ -0,0 +1,20 @@
+/*
+ *
+ * Copyright 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 android.telephony.ims;
+
+parcelable RcsParticipantQueryParameters;
diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.java b/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.java
new file mode 100644
index 000000000000..3611fc187fc4
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.java
@@ -0,0 +1,310 @@
+/*
+ * 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 android.telephony.ims;
+
+import android.annotation.CheckResult;
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.security.InvalidParameterException;
+
+/**
+ * The parameters to pass into
+ * {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParameters)} in order to select a
+ * subset of {@link RcsThread}s present in the message store.
+ *
+ * @hide TODO - make the Builder and builder() public. The rest should stay internal only.
+ */
+public class RcsParticipantQueryParameters implements Parcelable {
+ /**
+ * Flag to set with {@link Builder#setSortProperty(int)} to sort the results in the order of
+ * creation time for faster query results
+ */
+ public static final int SORT_BY_CREATION_ORDER = 0;
+
+ /**
+ * Flag to set with {@link Builder#setSortProperty(int)} to sort depending on the
+ * {@link RcsParticipant} aliases
+ */
+ public static final int SORT_BY_ALIAS = 1;
+
+ /**
+ * Flag to set with {@link Builder#setSortProperty(int)} to sort depending on the
+ * {@link RcsParticipant} canonical addresses
+ */
+ public static final int SORT_BY_CANONICAL_ADDRESS = 2;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({SORT_BY_CREATION_ORDER, SORT_BY_ALIAS, SORT_BY_CANONICAL_ADDRESS})
+ public @interface SortingProperty {
+ }
+
+ // The SQL "like" statement to filter against participant aliases
+ private String mAliasLike;
+ // The SQL "like" statement to filter against canonical addresses
+ private String mCanonicalAddressLike;
+ // The property to sort the result against
+ private @SortingProperty int mSortingProperty;
+ // Whether to sort the result in ascending order
+ private boolean mIsAscending;
+ // The number of results to be returned from the query
+ private int mLimit;
+ // Used to limit the results to participants of a single thread
+ private int mThreadId;
+
+ /**
+ * @hide
+ */
+ public static final String PARTICIPANT_QUERY_PARAMETERS_KEY = "participant_query_parameters";
+
+ RcsParticipantQueryParameters(int rcsThreadId, String aliasLike, String canonicalAddressLike,
+ @SortingProperty int sortingProperty, boolean isAscending,
+ int limit) {
+ mThreadId = rcsThreadId;
+ mAliasLike = aliasLike;
+ mCanonicalAddressLike = canonicalAddressLike;
+ mSortingProperty = sortingProperty;
+ mIsAscending = isAscending;
+ mLimit = limit;
+ }
+
+ /**
+ * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get
+ * the thread that the result query should be limited to.
+ *
+ * As we do not expose any sort of integer ID's to public usage, this should be hidden.
+ *
+ * @hide - not meant for public use
+ */
+ public int getThreadId() {
+ return mThreadId;
+ }
+
+ /**
+ * @return Returns the SQL-inspired "LIKE" clause that will be used to match
+ * {@link RcsParticipant}s with respect to their aliases
+ *
+ * @see RcsParticipant#getAlias()
+ */
+ public String getAliasLike() {
+ return mAliasLike;
+ }
+
+ /**
+ * @return Returns the SQL-inspired "LIKE" clause that will be used to match
+ * {@link RcsParticipant}s with respect to their canonical addresses.
+ *
+ * @see RcsParticipant#getCanonicalAddress()
+ */
+ public String getCanonicalAddressLike() {
+ return mCanonicalAddressLike;
+ }
+
+ /**
+ * @return Returns the number of {@link RcsParticipant}s to be returned from the query. A value
+ * of 0 means there is no set limit.
+ */
+ public int getLimit() {
+ return mLimit;
+ }
+
+ /**
+ * @return Returns the property that will be used to sort the result against.
+ * @see SortingProperty
+ */
+ public int getSortingProperty() {
+ return mSortingProperty;
+ }
+
+ /**
+ * @return Returns {@code true} if the result set will be sorted in ascending order,
+ * {@code false} if it will be sorted in descending order.
+ */
+ public boolean getSortDirection() {
+ return mIsAscending;
+ }
+
+ /**
+ * A helper class to build the {@link RcsParticipantQueryParameters}.
+ */
+ public static class Builder {
+ private String mAliasLike;
+ private String mCanonicalAddressLike;
+ private @SortingProperty int mSortingProperty;
+ private boolean mIsAscending;
+ private int mLimit = 100;
+ private int mThreadId;
+
+ /**
+ * Creates a new builder for {@link RcsParticipantQueryParameters} to be used in
+ * {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParameters)}
+ */
+ public Builder() {
+ // empty implementation
+ }
+
+ /**
+ * Limits the resulting {@link RcsParticipant}s to only the given {@link RcsThread}
+ *
+ * @param rcsThread The thread that the participants should be searched in.
+ * @return The same {@link Builder} to chain methods.
+ */
+ @CheckResult
+ public Builder setThread(RcsThread rcsThread) {
+ mThreadId = rcsThread.getThreadId();
+ return this;
+ }
+
+ /**
+ * Sets an SQL-inspired "like" clause to match with participant aliases. Using a percent
+ * sign ('%') wildcard matches any sequence of zero or more characters. Using an underscore
+ * ('_') wildcard matches any single character. Not using any wildcards would only perform a
+ * string match.The input string is case-insensitive.
+ *
+ * The input "An%e" would match {@link RcsParticipant}s with names Anne, Annie, Antonie,
+ * while the input "An_e" would only match Anne.
+ *
+ * @param likeClause The like clause to use for matching {@link RcsParticipant} aliases.
+ * @return The same {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setAliasLike(String likeClause) {
+ mAliasLike = likeClause;
+ return this;
+ }
+
+ /**
+ * Sets an SQL-inspired "like" clause to match with participant addresses. Using a percent
+ * sign ('%') wildcard matches any sequence of zero or more characters. Using an underscore
+ * ('_') wildcard matches any single character. Not using any wildcards would only perform a
+ * string match. The input string is case-insensitive.
+ *
+ * The input "+999%111" would match {@link RcsParticipant}s with addresses like "+9995111"
+ * or "+99955555111", while the input "+999_111" would only match "+9995111".
+ *
+ * @param likeClause The like clause to use for matching {@link RcsParticipant} canonical
+ * addresses.
+ * @return The same {@link Builder} to chain methods
+ */
+ @CheckResult
+ public Builder setCanonicalAddressLike(String likeClause) {
+ mCanonicalAddressLike = likeClause;
+ return this;
+ }
+
+ /**
+ * Desired number of threads to be returned from the query. Passing in 0 will return all
+ * existing threads at once. The limit defaults to 100.
+ *
+ * @param limit The number to limit the query result to.
+ * @return The same instance of the builder to chain parameters.
+ * @throws InvalidParameterException If the given limit is negative.
+ */
+ @CheckResult
+ public Builder setResultLimit(@IntRange(from = 0) int limit)
+ throws InvalidParameterException {
+ if (limit < 0) {
+ throw new InvalidParameterException("The query limit must be non-negative");
+ }
+
+ mLimit = limit;
+ return this;
+ }
+
+ /**
+ * Sets the property where the results should be sorted against. Defaults to
+ * {@link RcsParticipantQueryParameters.SortingProperty#SORT_BY_CREATION_ORDER}
+ *
+ * @param sortingProperty against which property the results should be sorted
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setSortProperty(@SortingProperty int sortingProperty) {
+ mSortingProperty = sortingProperty;
+ return this;
+ }
+
+ /**
+ * Sets whether the results should be sorted ascending or descending
+ *
+ * @param isAscending whether the results should be sorted ascending
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setSortDirection(boolean isAscending) {
+ mIsAscending = isAscending;
+ return this;
+ }
+
+ /**
+ * Builds the {@link RcsParticipantQueryParameters} to use in
+ * {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParameters)}
+ *
+ * @return An instance of {@link RcsParticipantQueryParameters} to use with the participant
+ * query.
+ */
+ public RcsParticipantQueryParameters build() {
+ return new RcsParticipantQueryParameters(mThreadId, mAliasLike, mCanonicalAddressLike,
+ mSortingProperty, mIsAscending, mLimit);
+ }
+ }
+
+ /**
+ * Parcelable boilerplate below.
+ */
+ protected RcsParticipantQueryParameters(Parcel in) {
+ mAliasLike = in.readString();
+ mCanonicalAddressLike = in.readString();
+ mSortingProperty = in.readInt();
+ mIsAscending = in.readByte() == 1;
+ mLimit = in.readInt();
+ mThreadId = in.readInt();
+ }
+
+ public static final Creator<RcsParticipantQueryParameters> CREATOR =
+ new Creator<RcsParticipantQueryParameters>() {
+ @Override
+ public RcsParticipantQueryParameters createFromParcel(Parcel in) {
+ return new RcsParticipantQueryParameters(in);
+ }
+
+ @Override
+ public RcsParticipantQueryParameters[] newArray(int size) {
+ return new RcsParticipantQueryParameters[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(mAliasLike);
+ dest.writeString(mCanonicalAddressLike);
+ dest.writeInt(mSortingProperty);
+ dest.writeByte((byte) (mIsAscending ? 1 : 0));
+ dest.writeInt(mLimit);
+ dest.writeInt(mThreadId);
+ }
+
+}
diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.aidl b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.aidl
new file mode 100644
index 000000000000..db5c00c8ce00
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.aidl
@@ -0,0 +1,20 @@
+/*
+ *
+ * Copyright 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 android.telephony.ims;
+
+parcelable RcsParticipantQueryResult;
diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java
new file mode 100644
index 000000000000..2f4ab465a6cf
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java
@@ -0,0 +1,105 @@
+/*
+ * 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 android.telephony.ims;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * The result of a {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParameters)}
+ * call. This class allows getting the token for querying the next batch of participants in order to
+ * prevent handling large amounts of data at once.
+ *
+ * @hide
+ */
+public class RcsParticipantQueryResult implements Parcelable {
+ // A token for the caller to continue their query for the next batch of results
+ private RcsQueryContinuationToken mContinuationToken;
+ // The list of participant IDs returned with this query
+ private List<Integer> mParticipants;
+
+ /**
+ * Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController}
+ * to create query results
+ *
+ * @hide
+ */
+ public RcsParticipantQueryResult(
+ RcsQueryContinuationToken continuationToken,
+ List<Integer> participants) {
+ mContinuationToken = continuationToken;
+ mParticipants = participants;
+ }
+
+ /**
+ * Returns a token to call
+ * {@link RcsMessageStore#getRcsParticipants(RcsQueryContinuationToken)}
+ * to get the next batch of {@link RcsParticipant}s.
+ */
+ @Nullable
+ public RcsQueryContinuationToken getContinuationToken() {
+ return mContinuationToken;
+ }
+
+ /**
+ * Returns all the {@link RcsParticipant}s in the current query result. Call {@link
+ * RcsMessageStore#getRcsParticipants(RcsQueryContinuationToken)} to get the next
+ * batch of {@link RcsParticipant}s.
+ */
+ @NonNull
+ public List<RcsParticipant> getParticipants() {
+ List<RcsParticipant> participantList = new ArrayList<>();
+ for (Integer participantId : mParticipants) {
+ participantList.add(new RcsParticipant(participantId));
+ }
+
+ return participantList;
+ }
+
+ protected RcsParticipantQueryResult(Parcel in) {
+ mContinuationToken = in.readParcelable(
+ RcsQueryContinuationToken.class.getClassLoader());
+ }
+
+ public static final Creator<RcsParticipantQueryResult> CREATOR =
+ new Creator<RcsParticipantQueryResult>() {
+ @Override
+ public RcsParticipantQueryResult createFromParcel(Parcel in) {
+ return new RcsParticipantQueryResult(in);
+ }
+
+ @Override
+ public RcsParticipantQueryResult[] newArray(int size) {
+ return new RcsParticipantQueryResult[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeParcelable(mContinuationToken, flags);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.aidl b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.aidl
new file mode 100644
index 000000000000..319379a462de
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.aidl
@@ -0,0 +1,20 @@
+/*
+ *
+ * Copyright 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 android.telephony.ims;
+
+parcelable RcsQueryContinuationToken;
diff --git a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java
new file mode 100644
index 000000000000..e880651d6cdb
--- /dev/null
+++ b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java
@@ -0,0 +1,151 @@
+/*
+ * 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 android.telephony.ims;
+
+import android.annotation.IntDef;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * This interface allows using the same implementation for continuation token usage in
+ * {@link com.android.providers.telephony.RcsProvider}
+ * @hide - TODO make getQueryType() and types public - the rest should stay internal
+ */
+public class RcsQueryContinuationToken implements Parcelable {
+ /**
+ * Denotes that this {@link RcsQueryContinuationToken} token is meant to allow continuing
+ * {@link RcsEvent} queries
+ */
+ public static final int EVENT_QUERY_CONTINUATION_TOKEN_TYPE = 0;
+
+ /**
+ * Denotes that this {@link RcsQueryContinuationToken} token is meant to allow continuing
+ * {@link RcsMessage} queries
+ */
+ public static final int MESSAGE_QUERY_CONTINUATION_TOKEN_TYPE = 1;
+
+ /**
+ * Denotes that this {@link RcsQueryContinuationToken} token is meant to allow continuing
+ * {@link RcsParticipant} queries
+ */
+ public static final int PARTICIPANT_QUERY_CONTINUATION_TOKEN_TYPE = 2;
+
+ /**
+ * Denotes that this {@link RcsQueryContinuationToken} token is meant to allow continuing
+ * {@link RcsThread} queries
+ */
+ public static final int THREAD_QUERY_CONTINUATION_TOKEN_TYPE = 3;
+
+ /**
+ * @hide - not meant for public use
+ */
+ public static final String QUERY_CONTINUATION_TOKEN = "query_continuation_token";
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({EVENT_QUERY_CONTINUATION_TOKEN_TYPE, MESSAGE_QUERY_CONTINUATION_TOKEN_TYPE,
+ PARTICIPANT_QUERY_CONTINUATION_TOKEN_TYPE, THREAD_QUERY_CONTINUATION_TOKEN_TYPE})
+ public @interface ContinuationTokenType {}
+
+ // The type of query this token should allow to continue
+ private @ContinuationTokenType int mQueryType;
+ // The raw query string for the initial query
+ private final String mRawQuery;
+ // The number of results that is returned with each query
+ private final int mLimit;
+ // The offset value that this query should start the query from
+ private int mOffset;
+
+ /**
+ * @hide
+ */
+ public RcsQueryContinuationToken(@ContinuationTokenType int queryType, String rawQuery,
+ int limit, int offset) {
+ mQueryType = queryType;
+ mRawQuery = rawQuery;
+ mLimit = limit;
+ mOffset = offset;
+ }
+
+ /**
+ * Returns the original raw query used on {@link com.android.providers.telephony.RcsProvider}
+ * @hide
+ */
+ public String getRawQuery() {
+ return mRawQuery;
+ }
+
+ /**
+ * Returns which index this continuation query should start from
+ * @hide
+ */
+ public int getOffset() {
+ return mOffset;
+ }
+
+ /**
+ * Increments the offset by the amount of result rows returned with the continuation query for
+ * the next query.
+ * @hide
+ */
+ public void incrementOffset() {
+ mOffset += mLimit;
+ }
+
+ /**
+ * Returns the type of query that this {@link RcsQueryContinuationToken} is intended to be used
+ * to continue.
+ */
+ public @ContinuationTokenType int getQueryType() {
+ return mQueryType;
+ }
+
+ protected RcsQueryContinuationToken(Parcel in) {
+ mQueryType = in.readInt();
+ mRawQuery = in.readString();
+ mLimit = in.readInt();
+ mOffset = in.readInt();
+ }
+
+ public static final Creator<RcsQueryContinuationToken> CREATOR =
+ new Creator<RcsQueryContinuationToken>() {
+ @Override
+ public RcsQueryContinuationToken createFromParcel(Parcel in) {
+ return new RcsQueryContinuationToken(in);
+ }
+
+ @Override
+ public RcsQueryContinuationToken[] newArray(int size) {
+ return new RcsQueryContinuationToken[size];
+ }
+ };
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mQueryType);
+ dest.writeString(mRawQuery);
+ dest.writeInt(mLimit);
+ dest.writeInt(mOffset);
+ }
+}
diff --git a/telephony/java/android/telephony/ims/RcsTextPart.aidl b/telephony/java/android/telephony/ims/RcsTextPart.aidl
deleted file mode 100644
index 4f9fe1fe26fe..000000000000
--- a/telephony/java/android/telephony/ims/RcsTextPart.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsTextPart;
diff --git a/telephony/java/android/telephony/ims/RcsTextPart.java b/telephony/java/android/telephony/ims/RcsTextPart.java
deleted file mode 100644
index 2a72df17f32a..000000000000
--- a/telephony/java/android/telephony/ims/RcsTextPart.java
+++ /dev/null
@@ -1,48 +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 android.telephony.ims;
-
-import android.os.Parcel;
-
-/**
- * A part of a composite {@link RcsMessage} that holds a string
- * @hide - TODO(sahinc) make this public
- */
-public class RcsTextPart extends RcsPart {
- public static final Creator<RcsTextPart> CREATOR = new Creator<RcsTextPart>() {
- @Override
- public RcsTextPart createFromParcel(Parcel in) {
- return new RcsTextPart(in);
- }
-
- @Override
- public RcsTextPart[] newArray(int size) {
- return new RcsTextPart[size];
- }
- };
-
- protected RcsTextPart(Parcel in) {
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- }
-}
diff --git a/telephony/java/android/telephony/ims/RcsThread.aidl b/telephony/java/android/telephony/ims/RcsThread.aidl
deleted file mode 100644
index d9cf6dbc0ff0..000000000000
--- a/telephony/java/android/telephony/ims/RcsThread.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony;
-
-parcelable RcsThread; \ No newline at end of file
diff --git a/telephony/java/android/telephony/ims/RcsThread.java b/telephony/java/android/telephony/ims/RcsThread.java
index c0a0d946d204..238f5e7ce625 100644
--- a/telephony/java/android/telephony/ims/RcsThread.java
+++ b/telephony/java/android/telephony/ims/RcsThread.java
@@ -16,60 +16,117 @@
package android.telephony.ims;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.Log;
+import static android.provider.Telephony.RcsColumns.RcsUnifiedThreadColumns.THREAD_TYPE_1_TO_1;
+import static android.provider.Telephony.RcsColumns.RcsUnifiedThreadColumns.THREAD_TYPE_GROUP;
+
+import android.annotation.NonNull;
+import android.annotation.WorkerThread;
+
+import com.android.internal.annotations.VisibleForTesting;
/**
* RcsThread represents a single RCS conversation thread. It holds messages that were sent and
* received and events that occurred on that thread.
- * @hide - TODO(sahinc) make this public
+ *
+ * @hide - TODO(109759350) make this public
*/
-public abstract class RcsThread implements Parcelable {
- // Since this is an abstract class that gets parcelled, the sub-classes need to write these
- // magic values into the parcel so that we know which type to unparcel into.
- protected static final int RCS_1_TO_1_TYPE = 998;
- protected static final int RCS_GROUP_TYPE = 999;
-
+public abstract class RcsThread {
+ // The rcs_participant_thread_id that represents this thread in the database
protected int mThreadId;
+ /**
+ * @hide
+ */
protected RcsThread(int threadId) {
mThreadId = threadId;
}
- protected RcsThread(Parcel in) {
- mThreadId = in.readInt();
+ /**
+ * @return Returns the summary of the latest message in this {@link RcsThread} packaged in an
+ * {@link RcsMessageSnippet} object
+ */
+ @WorkerThread
+ @NonNull
+ public RcsMessageSnippet getSnippet() throws RcsMessageStoreException {
+ return RcsControllerCall.call(iRcs -> iRcs.getMessageSnippet(mThreadId));
+ }
+
+ /**
+ * Adds a new {@link RcsIncomingMessage} to this RcsThread and persists it in storage.
+ *
+ * @throws RcsMessageStoreException if the message could not be persisted into storage.
+ */
+ @WorkerThread
+ @NonNull
+ public RcsIncomingMessage addIncomingMessage(
+ @NonNull RcsIncomingMessageCreationParameters rcsIncomingMessageCreationParameters)
+ throws RcsMessageStoreException {
+ return new RcsIncomingMessage(RcsControllerCall.call(iRcs -> iRcs.addIncomingMessage(
+ mThreadId, rcsIncomingMessageCreationParameters)));
}
- public static final Creator<RcsThread> CREATOR = new Creator<RcsThread>() {
- @Override
- public RcsThread createFromParcel(Parcel in) {
- int type = in.readInt();
+ /**
+ * Adds a new {@link RcsOutgoingMessage} to this RcsThread and persists it in storage.
+ *
+ * @throws RcsMessageStoreException if the message could not be persisted into storage.
+ */
+ @WorkerThread
+ @NonNull
+ public RcsOutgoingMessage addOutgoingMessage(
+ @NonNull RcsMessageCreationParameters rcsMessageCreationParameters)
+ throws RcsMessageStoreException {
+ int messageId = RcsControllerCall.call(iRcs -> iRcs.addOutgoingMessage(
+ mThreadId, rcsMessageCreationParameters));
- switch (type) {
- case RCS_1_TO_1_TYPE:
- return new Rcs1To1Thread(in);
- case RCS_GROUP_TYPE:
- return new RcsGroupThread(in);
- default:
- Log.e(RcsMessageStore.TAG, "Cannot unparcel RcsThread, wrong type: " + type);
- }
- return null;
- }
+ return new RcsOutgoingMessage(messageId);
+ }
+
+ /**
+ * Deletes an {@link RcsMessage} from this RcsThread and updates the storage.
+ *
+ * @param rcsMessage The message to delete from the thread
+ * @throws RcsMessageStoreException if the message could not be deleted
+ */
+ @WorkerThread
+ public void deleteMessage(@NonNull RcsMessage rcsMessage) throws RcsMessageStoreException {
+ RcsControllerCall.callWithNoReturn(
+ iRcs -> iRcs.deleteMessage(rcsMessage.getId(), rcsMessage.isIncoming(), mThreadId,
+ isGroup()));
+ }
+
+ /**
+ * Convenience function for loading all the {@link RcsMessage}s in this {@link RcsThread}. For
+ * a more detailed and paginated query, please use
+ * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)}
+ *
+ * @return Loads the {@link RcsMessage}s in this thread and returns them in an immutable list.
+ * @throws RcsMessageStoreException if the messages could not be read from the storage
+ */
+ @WorkerThread
+ @NonNull
+ public RcsMessageQueryResult getMessages() throws RcsMessageStoreException {
+ RcsMessageQueryParameters queryParameters =
+ new RcsMessageQueryParameters.Builder().setThread(this).build();
+ return RcsControllerCall.call(iRcs -> iRcs.getMessages(queryParameters));
+ }
- @Override
- public RcsThread[] newArray(int size) {
- return new RcsThread[0];
- }
- };
+ /**
+ * @return Returns whether this is a group thread or not
+ */
+ public abstract boolean isGroup();
- @Override
- public int describeContents() {
- return 0;
+ /**
+ * @hide
+ */
+ @VisibleForTesting
+ public int getThreadId() {
+ return mThreadId;
}
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeInt(mThreadId);
+ /**
+ * @hide
+ */
+ public int getThreadType() {
+ return isGroup() ? THREAD_TYPE_GROUP : THREAD_TYPE_1_TO_1;
}
}
diff --git a/telephony/java/android/telephony/ims/RcsThreadEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadEvent.aidl
deleted file mode 100644
index 4a40d8906bbb..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadEvent.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsThreadEvent;
diff --git a/telephony/java/android/telephony/ims/RcsThreadEvent.java b/telephony/java/android/telephony/ims/RcsThreadEvent.java
deleted file mode 100644
index e10baab9d8c5..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadEvent.java
+++ /dev/null
@@ -1,25 +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 android.telephony.ims;
-
-import android.os.Parcelable;
-
-/**
- * An event that happened on an {@link RcsThread}.
- * @hide - TODO(sahinc) make this public
- */
-public abstract class RcsThreadEvent implements Parcelable {
-}
diff --git a/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.aidl
deleted file mode 100644
index 82d985df4c6c..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsThreadIconChangedEvent;
diff --git a/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.java b/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.java
deleted file mode 100644
index b308fef46435..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.java
+++ /dev/null
@@ -1,49 +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 android.telephony.ims;
-
-import android.os.Parcel;
-
-/**
- * An event that indicates an {@link RcsGroupThread}'s icon was changed.
- * @hide - TODO(sahinc) make this public
- */
-public class RcsThreadIconChangedEvent extends RcsThreadEvent {
- public static final Creator<RcsThreadIconChangedEvent> CREATOR =
- new Creator<RcsThreadIconChangedEvent>() {
- @Override
- public RcsThreadIconChangedEvent createFromParcel(Parcel in) {
- return new RcsThreadIconChangedEvent(in);
- }
-
- @Override
- public RcsThreadIconChangedEvent[] newArray(int size) {
- return new RcsThreadIconChangedEvent[size];
- }
- };
-
- protected RcsThreadIconChangedEvent(Parcel in) {
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- }
-}
diff --git a/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.aidl
deleted file mode 100644
index 54a311d02958..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsThreadNameChangedEvent;
diff --git a/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.java b/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.java
deleted file mode 100644
index 6f5cfdf3b4c4..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.java
+++ /dev/null
@@ -1,49 +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 android.telephony.ims;
-
-import android.os.Parcel;
-
-/**
- * An event that indicates an {@link RcsGroupThread}'s name was changed.
- * @hide - TODO(sahinc) make this public
- */
-public class RcsThreadNameChangedEvent extends RcsThreadEvent {
- public static final Creator<RcsThreadNameChangedEvent> CREATOR =
- new Creator<RcsThreadNameChangedEvent>() {
- @Override
- public RcsThreadNameChangedEvent createFromParcel(Parcel in) {
- return new RcsThreadNameChangedEvent(in);
- }
-
- @Override
- public RcsThreadNameChangedEvent[] newArray(int size) {
- return new RcsThreadNameChangedEvent[size];
- }
- };
-
- protected RcsThreadNameChangedEvent(Parcel in) {
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- }
-}
diff --git a/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.aidl
deleted file mode 100644
index 047a42466ee7..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsThreadParticipantJoinedEvent;
diff --git a/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.java b/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.java
deleted file mode 100644
index 5c4073c430e7..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.java
+++ /dev/null
@@ -1,49 +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 android.telephony.ims;
-
-import android.os.Parcel;
-
-/**
- * An event that indicates an RCS participant has joined an {@link RcsGroupThread}.
- * @hide - TODO(sahinc) make this public
- */
-public class RcsThreadParticipantJoinedEvent extends RcsThreadEvent {
- public static final Creator<RcsThreadParticipantJoinedEvent> CREATOR =
- new Creator<RcsThreadParticipantJoinedEvent>() {
- @Override
- public RcsThreadParticipantJoinedEvent createFromParcel(Parcel in) {
- return new RcsThreadParticipantJoinedEvent(in);
- }
-
- @Override
- public RcsThreadParticipantJoinedEvent[] newArray(int size) {
- return new RcsThreadParticipantJoinedEvent[size];
- }
- };
-
- protected RcsThreadParticipantJoinedEvent(Parcel in) {
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- }
-}
diff --git a/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.aidl
deleted file mode 100644
index 52f9bbd3cd93..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- *
- * Copyright 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 android.telephony.ims;
-
-parcelable RcsThreadParticipantLeftEvent;
diff --git a/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.java b/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.java
deleted file mode 100644
index 4bf86b90ebb7..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.java
+++ /dev/null
@@ -1,49 +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 android.telephony.ims;
-
-import android.os.Parcel;
-
-/**
- * An event that indicates an RCS participant has left an {@link RcsGroupThread}.
- * @hide - TODO(sahinc) make this public
- */
-public class RcsThreadParticipantLeftEvent extends RcsThreadEvent {
- public static final Creator<RcsThreadParticipantLeftEvent> CREATOR =
- new Creator<RcsThreadParticipantLeftEvent>() {
- @Override
- public RcsThreadParticipantLeftEvent createFromParcel(Parcel in) {
- return new RcsThreadParticipantLeftEvent(in);
- }
-
- @Override
- public RcsThreadParticipantLeftEvent[] newArray(int size) {
- return new RcsThreadParticipantLeftEvent[size];
- }
- };
-
- protected RcsThreadParticipantLeftEvent(Parcel in) {
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- }
-}
diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.aidl b/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.aidl
deleted file mode 100644
index 7bcebfa08fcb..000000000000
--- a/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.aidl
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-**
-** Copyright 2018, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-package android.telephony.ims;
-
-parcelable RcsThreadQueryContinuationToken;
diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryParameters.aidl b/telephony/java/android/telephony/ims/RcsThreadQueryParameters.aidl
index feb2d4dec094..52e73ce02407 100644
--- a/telephony/java/android/telephony/ims/RcsThreadQueryParameters.aidl
+++ b/telephony/java/android/telephony/ims/RcsThreadQueryParameters.aidl
@@ -1,19 +1,19 @@
/*
-**
-** Copyright 2018, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
+ *
+ * Copyright 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 android.telephony.ims;
diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryParameters.java b/telephony/java/android/telephony/ims/RcsThreadQueryParameters.java
index f2c4ab1884ca..4aa42073b8f8 100644
--- a/telephony/java/android/telephony/ims/RcsThreadQueryParameters.java
+++ b/telephony/java/android/telephony/ims/RcsThreadQueryParameters.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * 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.
@@ -17,72 +17,133 @@
package android.telephony.ims;
import android.annotation.CheckResult;
+import android.annotation.IntDef;
+import android.annotation.IntRange;
+import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.security.InvalidParameterException;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
/**
* The parameters to pass into {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParameters)} in
* order to select a subset of {@link RcsThread}s present in the message store.
+ *
* @hide TODO - make the Builder and builder() public. The rest should stay internal only.
*/
public class RcsThreadQueryParameters implements Parcelable {
- private final boolean mIsGroup;
- private final Set<RcsParticipant> mRcsParticipants;
+ /**
+ * Bitmask flag to be used with {@link Builder#setThreadType(int)} to make
+ * {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParameters)} return
+ * {@link RcsGroupThread}s.
+ */
+ public static final int THREAD_TYPE_GROUP = 0x0001;
+
+ /**
+ * Bitmask flag to be used with {@link Builder#setThreadType(int)} to make
+ * {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParameters)} return
+ * {@link Rcs1To1Thread}s.
+ */
+ public static final int THREAD_TYPE_1_TO_1 = 0x0002;
+
+ // The type of threads to be filtered with the query
+ private final int mThreadType;
+ // The list of participants that are expected in the resulting threads
+ private final List<Integer> mRcsParticipantIds;
+ // The number of RcsThread's that should be returned with this query
private final int mLimit;
+ // The property which the result of the query should be sorted against
+ private final @SortingProperty int mSortingProperty;
+ // Whether the sorting should be done in ascending
private final boolean mIsAscending;
- RcsThreadQueryParameters(boolean isGroup, Set<RcsParticipant> participants, int limit,
- boolean isAscending) {
- mIsGroup = isGroup;
- mRcsParticipants = participants;
- mLimit = limit;
- mIsAscending = isAscending;
- }
+ /**
+ * Flag to be used with {@link Builder#setSortProperty(int)} to denote that the results should
+ * be sorted in the order of {@link RcsThread} creation time for faster results.
+ */
+ public static final int SORT_BY_CREATION_ORDER = 0;
/**
- * Returns a new builder to build a query with.
- * TODO - make public
+ * Flag to be used with {@link Builder#setSortProperty(int)} to denote that the results should
+ * be sorted according to the timestamp of {@link RcsThread#getSnippet()}
*/
- public static Builder builder() {
- return new Builder();
+ public static final int SORT_BY_TIMESTAMP = 1;
+
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({SORT_BY_CREATION_ORDER, SORT_BY_TIMESTAMP})
+ public @interface SortingProperty {
}
/**
- * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get
- * the list of participants.
* @hide
*/
- public Set<RcsParticipant> getRcsParticipants() {
- return mRcsParticipants;
+ public static final String THREAD_QUERY_PARAMETERS_KEY = "thread_query_parameters";
+
+ RcsThreadQueryParameters(int threadType, Set<RcsParticipant> participants,
+ int limit, int sortingProperty, boolean isAscending) {
+ mThreadType = threadType;
+ mRcsParticipantIds = convertParticipantSetToIdList(participants);
+ mLimit = limit;
+ mSortingProperty = sortingProperty;
+ mIsAscending = isAscending;
+ }
+
+ private static List<Integer> convertParticipantSetToIdList(Set<RcsParticipant> participants) {
+ List<Integer> ids = new ArrayList<>(participants.size());
+ for (RcsParticipant participant : participants) {
+ ids.add(participant.getId());
+ }
+ return ids;
}
/**
* This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get
- * whether group threads should be queried
- * @hide
+ * the list of participant IDs.
+ *
+ * As we don't expose any integer ID's to API users, this should stay hidden
+ *
+ * @hide - not meant for public use
*/
- public boolean isGroupThread() {
- return mIsGroup;
+ public List<Integer> getRcsParticipantsIds() {
+ return Collections.unmodifiableList(mRcsParticipantIds);
}
/**
- * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get
- * the number of tuples the result query should be limited to.
+ * @return Returns the bitmask flag for types of {@link RcsThread}s that this query should
+ * return.
+ */
+ public int getThreadType() {
+ return mThreadType;
+ }
+
+ /**
+ * @return Returns the number of {@link RcsThread}s to be returned from the query. A value
+ * of 0 means there is no set limit.
*/
public int getLimit() {
return mLimit;
}
/**
- * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to
- * determine the sort order.
+ * @return Returns the property that will be used to sort the result against.
+ * @see SortingProperty
*/
- public boolean isAscending() {
+ public @SortingProperty int getSortingProperty() {
+ return mSortingProperty;
+ }
+
+ /**
+ * @return Returns {@code true} if the result set will be sorted in ascending order,
+ * {@code false} if it will be sorted in descending order.
+ */
+ public boolean getSortDirection() {
return mIsAscending;
}
@@ -90,64 +151,74 @@ public class RcsThreadQueryParameters implements Parcelable {
* A helper class to build the {@link RcsThreadQueryParameters}.
*/
public static class Builder {
- private boolean mIsGroupThread;
+ private int mThreadType;
private Set<RcsParticipant> mParticipants;
private int mLimit = 100;
+ private @SortingProperty int mSortingProperty;
private boolean mIsAscending;
/**
- * Package private constructor for {@link RcsThreadQueryParameters.Builder}. To obtain this,
- * {@link RcsThreadQueryParameters#builder()} needs to be called.
+ * Constructs a {@link RcsThreadQueryParameters.Builder} to help build an
+ * {@link RcsThreadQueryParameters}
*/
- Builder() {
+ public Builder() {
mParticipants = new HashSet<>();
}
/**
* Limits the query to only return group threads.
- * @param isGroupThread Whether to limit the query result to group threads.
+ *
+ * @param threadType Whether to limit the query result to group threads.
* @return The same instance of the builder to chain parameters.
+ * @see RcsThreadQueryParameters#THREAD_TYPE_GROUP
+ * @see RcsThreadQueryParameters#THREAD_TYPE_1_TO_1
*/
@CheckResult
- public Builder isGroupThread(boolean isGroupThread) {
- mIsGroupThread = isGroupThread;
+ public Builder setThreadType(int threadType) {
+ mThreadType = threadType;
return this;
}
/**
- * Limits the query to only return threads that contain the given participant.
+ * Limits the query to only return threads that contain the given participant. If this
+ * property was not set, participants will not be taken into account while querying for
+ * threads.
+ *
* @param participant The participant that must be included in all of the returned threads.
* @return The same instance of the builder to chain parameters.
*/
@CheckResult
- public Builder withParticipant(RcsParticipant participant) {
+ public Builder setParticipant(@NonNull RcsParticipant participant) {
mParticipants.add(participant);
return this;
}
/**
- * Limits the query to only return threads that contain the given list of participants.
+ * Limits the query to only return threads that contain the given list of participants. If
+ * this property was not set, participants will not be taken into account while querying
+ * for threads.
+ *
* @param participants An iterable list of participants that must be included in all of the
* returned threads.
* @return The same instance of the builder to chain parameters.
*/
@CheckResult
- public Builder withParticipants(Iterable<RcsParticipant> participants) {
- for (RcsParticipant participant : participants) {
- mParticipants.add(participant);
- }
+ public Builder setParticipants(@NonNull List<RcsParticipant> participants) {
+ mParticipants.addAll(participants);
return this;
}
/**
* Desired number of threads to be returned from the query. Passing in 0 will return all
* existing threads at once. The limit defaults to 100.
+ *
* @param limit The number to limit the query result to.
* @return The same instance of the builder to chain parameters.
* @throws InvalidParameterException If the given limit is negative.
*/
@CheckResult
- public Builder limitResultsTo(int limit) throws InvalidParameterException {
+ public Builder setResultLimit(@IntRange(from = 0) int limit)
+ throws InvalidParameterException {
if (limit < 0) {
throw new InvalidParameterException("The query limit must be non-negative");
}
@@ -157,15 +228,26 @@ public class RcsThreadQueryParameters implements Parcelable {
}
/**
- * Sorts the results returned from the query via thread IDs.
+ * Sets the property where the results should be sorted against. Defaults to
+ * {@link SortingProperty#SORT_BY_CREATION_ORDER}
*
- * TODO - add sorting support for other fields
+ * @param sortingProperty whether to sort in ascending order or not
+ * @return The same instance of the builder to chain parameters.
+ */
+ @CheckResult
+ public Builder setSortProperty(@SortingProperty int sortingProperty) {
+ mSortingProperty = sortingProperty;
+ return this;
+ }
+
+ /**
+ * Sets whether the results should be sorted ascending or descending
*
- * @param isAscending whether to sort in ascending order or not
+ * @param isAscending whether the results should be sorted ascending
* @return The same instance of the builder to chain parameters.
*/
@CheckResult
- public Builder sort(boolean isAscending) {
+ public Builder setSortDirection(boolean isAscending) {
mIsAscending = isAscending;
return this;
}
@@ -177,8 +259,8 @@ public class RcsThreadQueryParameters implements Parcelable {
* @return An instance of {@link RcsThreadQueryParameters} to use with the thread query.
*/
public RcsThreadQueryParameters build() {
- return new RcsThreadQueryParameters(
- mIsGroupThread, mParticipants, mLimit, mIsAscending);
+ return new RcsThreadQueryParameters(mThreadType, mParticipants, mLimit,
+ mSortingProperty, mIsAscending);
}
}
@@ -186,14 +268,12 @@ public class RcsThreadQueryParameters implements Parcelable {
* Parcelable boilerplate below.
*/
protected RcsThreadQueryParameters(Parcel in) {
- mIsGroup = in.readBoolean();
-
- ArrayList<RcsParticipant> participantArrayList = new ArrayList<>();
- in.readTypedList(participantArrayList, RcsParticipant.CREATOR);
- mRcsParticipants = new HashSet<>(participantArrayList);
-
+ mThreadType = in.readInt();
+ mRcsParticipantIds = new ArrayList<>();
+ in.readList(mRcsParticipantIds, Integer.class.getClassLoader());
mLimit = in.readInt();
- mIsAscending = in.readBoolean();
+ mSortingProperty = in.readInt();
+ mIsAscending = in.readByte() == 1;
}
public static final Creator<RcsThreadQueryParameters> CREATOR =
@@ -216,10 +296,10 @@ public class RcsThreadQueryParameters implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
- dest.writeBoolean(mIsGroup);
- dest.writeTypedList(new ArrayList<>(mRcsParticipants));
+ dest.writeInt(mThreadType);
+ dest.writeList(mRcsParticipantIds);
dest.writeInt(mLimit);
- dest.writeBoolean(mIsAscending);
+ dest.writeInt(mSortingProperty);
+ dest.writeByte((byte) (mIsAscending ? 1 : 0));
}
-
}
diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl b/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl
index 4b06529d1294..b1d5cf4c7211 100644
--- a/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl
+++ b/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl
@@ -1,19 +1,19 @@
/*
-**
-** Copyright 2018, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
+ *
+ * Copyright 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 android.telephony.ims;
diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java
index 47715f8410d6..6515933fff0e 100644
--- a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java
+++ b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * 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.
@@ -16,22 +16,30 @@
package android.telephony.ims;
+import static android.provider.Telephony.RcsColumns.RcsUnifiedThreadColumns.THREAD_TYPE_1_TO_1;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.os.Parcel;
import android.os.Parcelable;
+import com.android.ims.RcsTypeIdPair;
+
+import java.util.ArrayList;
import java.util.List;
/**
- * The result of a {@link RcsMessageStore#getRcsThreads(RcsThreadQueryContinuationToken,
- * RcsThreadQueryParameters)}
+ * The result of a {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParameters)}
* call. This class allows getting the token for querying the next batch of threads in order to
* prevent handling large amounts of data at once.
*
* @hide
*/
public class RcsThreadQueryResult implements Parcelable {
- private RcsThreadQueryContinuationToken mContinuationToken;
- private List<RcsThread> mRcsThreads;
+ // A token for the caller to continue their query for the next batch of results
+ private RcsQueryContinuationToken mContinuationToken;
+ // The list of thread IDs returned with this query
+ private List<RcsTypeIdPair> mRcsThreadIds;
/**
* Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController}
@@ -40,31 +48,47 @@ public class RcsThreadQueryResult implements Parcelable {
* @hide
*/
public RcsThreadQueryResult(
- RcsThreadQueryContinuationToken continuationToken, List<RcsThread> rcsThreads) {
+ RcsQueryContinuationToken continuationToken,
+ List<RcsTypeIdPair> rcsThreadIds) {
mContinuationToken = continuationToken;
- mRcsThreads = rcsThreads;
+ mRcsThreadIds = rcsThreadIds;
}
/**
* Returns a token to call
- * {@link RcsMessageStore#getRcsThreads(RcsThreadQueryContinuationToken)}
+ * {@link RcsMessageStore#getRcsThreads(RcsQueryContinuationToken)}
* to get the next batch of {@link RcsThread}s.
*/
- public RcsThreadQueryContinuationToken nextChunkToken() {
+ @Nullable
+ public RcsQueryContinuationToken getContinuationToken() {
return mContinuationToken;
}
/**
* Returns all the RcsThreads in the current query result. Call {@link
- * RcsMessageStore#getRcsThreads(RcsThreadQueryContinuationToken)} to get the next batch of
+ * RcsMessageStore#getRcsThreads(RcsQueryContinuationToken)} to get the next batch of
* {@link RcsThread}s.
*/
+ @NonNull
public List<RcsThread> getThreads() {
- return mRcsThreads;
+ List<RcsThread> rcsThreads = new ArrayList<>();
+
+ for (RcsTypeIdPair typeIdPair : mRcsThreadIds) {
+ if (typeIdPair.getType() == THREAD_TYPE_1_TO_1) {
+ rcsThreads.add(new Rcs1To1Thread(typeIdPair.getId()));
+ } else {
+ rcsThreads.add(new RcsGroupThread(typeIdPair.getId()));
+ }
+ }
+
+ return rcsThreads;
}
protected RcsThreadQueryResult(Parcel in) {
- // TODO - implement
+ mContinuationToken = in.readParcelable(
+ RcsQueryContinuationToken.class.getClassLoader());
+ mRcsThreadIds = new ArrayList<>();
+ in.readList(mRcsThreadIds, Integer.class.getClassLoader());
}
public static final Creator<RcsThreadQueryResult> CREATOR =
@@ -87,6 +111,7 @@ public class RcsThreadQueryResult implements Parcelable {
@Override
public void writeToParcel(Parcel dest, int flags) {
- // TODO - implement
+ dest.writeParcelable(mContinuationToken, flags);
+ dest.writeList(mRcsThreadIds);
}
}
diff --git a/telephony/java/android/telephony/ims/aidl/IRcs.aidl b/telephony/java/android/telephony/ims/aidl/IRcs.aidl
index 0c958ba719f3..a399786dec54 100644
--- a/telephony/java/android/telephony/ims/aidl/IRcs.aidl
+++ b/telephony/java/android/telephony/ims/aidl/IRcs.aidl
@@ -16,9 +16,18 @@
package android.telephony.ims.aidl;
-import android.telephony.ims.RcsParticipant;
-import android.telephony.ims.Rcs1To1Thread;
-import android.telephony.ims.RcsThreadQueryContinuationToken;
+import android.net.Uri;
+import android.telephony.ims.RcsEventQueryParameters;
+import android.telephony.ims.RcsEventQueryResult;
+import android.telephony.ims.RcsFileTransferCreationParameters;
+import android.telephony.ims.RcsIncomingMessageCreationParameters;
+import android.telephony.ims.RcsMessageCreationParameters;
+import android.telephony.ims.RcsMessageSnippet;
+import android.telephony.ims.RcsMessageQueryParameters;
+import android.telephony.ims.RcsMessageQueryResult;
+import android.telephony.ims.RcsParticipantQueryParameters;
+import android.telephony.ims.RcsParticipantQueryResult;
+import android.telephony.ims.RcsQueryContinuationToken;
import android.telephony.ims.RcsThreadQueryParameters;
import android.telephony.ims.RcsThreadQueryResult;
@@ -27,23 +36,231 @@ import android.telephony.ims.RcsThreadQueryResult;
* {@hide}
*/
interface IRcs {
+ /////////////////////////
// RcsMessageStore APIs
+ /////////////////////////
RcsThreadQueryResult getRcsThreads(in RcsThreadQueryParameters queryParameters);
RcsThreadQueryResult getRcsThreadsWithToken(
- in RcsThreadQueryContinuationToken continuationToken);
+ in RcsQueryContinuationToken continuationToken);
- void deleteThread(int threadId);
+ RcsParticipantQueryResult getParticipants(in RcsParticipantQueryParameters queryParameters);
- Rcs1To1Thread createRcs1To1Thread(in RcsParticipant participant);
+ RcsParticipantQueryResult getParticipantsWithToken(
+ in RcsQueryContinuationToken continuationToken);
+ RcsMessageQueryResult getMessages(in RcsMessageQueryParameters queryParameters);
+
+ RcsMessageQueryResult getMessagesWithToken(
+ in RcsQueryContinuationToken continuationToken);
+
+ RcsEventQueryResult getEvents(in RcsEventQueryParameters queryParameters);
+
+ RcsEventQueryResult getEventsWithToken(
+ in RcsQueryContinuationToken continuationToken);
+
+ // returns true if the thread was successfully deleted
+ boolean deleteThread(int threadId, int threadType);
+
+ // Creates an Rcs1To1Thread and returns its row ID
+ int createRcs1To1Thread(int participantId);
+
+ // Creates an RcsGroupThread and returns its row ID
+ int createGroupThread(in int[] participantIds, String groupName, in Uri groupIcon);
+
+ /////////////////////////
// RcsThread APIs
- int getMessageCount(int rcsThreadId);
+ /////////////////////////
+
+ // Creates a new RcsIncomingMessage on the given thread and returns its row ID
+ int addIncomingMessage(int rcsThreadId,
+ in RcsIncomingMessageCreationParameters rcsIncomingMessageCreationParameters);
+
+ // Creates a new RcsOutgoingMessage on the given thread and returns its row ID
+ int addOutgoingMessage(int rcsThreadId,
+ in RcsMessageCreationParameters rcsMessageCreationParameters);
+
+ // TODO: modify RcsProvider URI's to allow deleting a message without specifying its thread
+ void deleteMessage(int rcsMessageId, boolean isIncoming, int rcsThreadId, boolean isGroup);
+
+ RcsMessageSnippet getMessageSnippet(int rcsThreadId);
+
+ /////////////////////////
+ // Rcs1To1Thread APIs
+ /////////////////////////
+ void set1To1ThreadFallbackThreadId(int rcsThreadId, long fallbackId);
+
+ long get1To1ThreadFallbackThreadId(int rcsThreadId);
+
+ int get1To1ThreadOtherParticipantId(int rcsThreadId);
+
+ /////////////////////////
+ // RcsGroupThread APIs
+ /////////////////////////
+ void setGroupThreadName(int rcsThreadId, String groupName);
+
+ String getGroupThreadName(int rcsThreadId);
+
+ void setGroupThreadIcon(int rcsThreadId, in Uri groupIcon);
+
+ Uri getGroupThreadIcon(int rcsThreadId);
+
+ void setGroupThreadOwner(int rcsThreadId, int participantId);
+
+ int getGroupThreadOwner(int rcsThreadId);
+
+ void setGroupThreadConferenceUri(int rcsThreadId, in Uri conferenceUri);
+
+ Uri getGroupThreadConferenceUri(int rcsThreadId);
+ void addParticipantToGroupThread(int rcsThreadId, int participantId);
+
+ void removeParticipantFromGroupThread(int rcsThreadId, int participantId);
+
+ /////////////////////////
// RcsParticipant APIs
- RcsParticipant createRcsParticipant(String canonicalAddress);
+ /////////////////////////
+
+ // Creates a new RcsParticipant and returns its rowId
+ int createRcsParticipant(String canonicalAddress, String alias);
+
+ String getRcsParticipantCanonicalAddress(int participantId);
+
+ String getRcsParticipantAlias(int participantId);
+
+ void setRcsParticipantAlias(int id, String alias);
+
+ String getRcsParticipantContactId(int participantId);
+
+ void setRcsParticipantContactId(int participantId, String contactId);
+
+ /////////////////////////
+ // RcsMessage APIs
+ /////////////////////////
+ void setMessageSubId(int messageId, boolean isIncoming, int subId);
+
+ int getMessageSubId(int messageId, boolean isIncoming);
+
+ void setMessageStatus(int messageId, boolean isIncoming, int status);
+
+ int getMessageStatus(int messageId, boolean isIncoming);
+
+ void setMessageOriginationTimestamp(int messageId, boolean isIncoming, long originationTimestamp);
+
+ long getMessageOriginationTimestamp(int messageId, boolean isIncoming);
+
+ void setGlobalMessageIdForMessage(int messageId, boolean isIncoming, String globalId);
+
+ String getGlobalMessageIdForMessage(int messageId, boolean isIncoming);
+
+ void setMessageArrivalTimestamp(int messageId, boolean isIncoming, long arrivalTimestamp);
+
+ long getMessageArrivalTimestamp(int messageId, boolean isIncoming);
+
+ void setMessageSeenTimestamp(int messageId, boolean isIncoming, long seenTimestamp);
+
+ long getMessageSeenTimestamp(int messageId, boolean isIncoming);
+
+ void setTextForMessage(int messageId, boolean isIncoming, String text);
+
+ String getTextForMessage(int messageId, boolean isIncoming);
+
+ void setLatitudeForMessage(int messageId, boolean isIncoming, double latitude);
+
+ double getLatitudeForMessage(int messageId, boolean isIncoming);
+
+ void setLongitudeForMessage(int messageId, boolean isIncoming, double longitude);
+
+ double getLongitudeForMessage(int messageId, boolean isIncoming);
+
+ // Returns the ID's of the file transfers attached to the given message
+ int[] getFileTransfersAttachedToMessage(int messageId, boolean isIncoming);
+
+ int getSenderParticipant(int messageId);
+
+ /////////////////////////
+ // RcsOutgoingMessageDelivery APIs
+ /////////////////////////
+
+ // Returns the participant ID's that this message is intended to be delivered to
+ int[] getMessageRecipients(int messageId);
+
+ long getOutgoingDeliveryDeliveredTimestamp(int messageId, int participantId);
+
+ void setOutgoingDeliveryDeliveredTimestamp(int messageId, int participantId, long deliveredTimestamp);
+
+ long getOutgoingDeliverySeenTimestamp(int messageId, int participantId);
+
+ void setOutgoingDeliverySeenTimestamp(int messageId, int participantId, long seenTimestamp);
+
+ int getOutgoingDeliveryStatus(int messageId, int participantId);
+
+ void setOutgoingDeliveryStatus(int messageId, int participantId, int status);
+
+ /////////////////////////
+ // RcsFileTransferPart APIs
+ /////////////////////////
+
+ // Performs the initial write to storage and returns the row ID.
+ int storeFileTransfer(int messageId, boolean isIncoming,
+ in RcsFileTransferCreationParameters fileTransferCreationParameters);
+
+ void deleteFileTransfer(int partId);
+
+ void setFileTransferSessionId(int partId, String sessionId);
+
+ String getFileTransferSessionId(int partId);
+
+ void setFileTransferContentUri(int partId, in Uri contentUri);
+
+ Uri getFileTransferContentUri(int partId);
+
+ void setFileTransferContentType(int partId, String contentType);
+
+ String getFileTransferContentType(int partId);
+
+ void setFileTransferFileSize(int partId, long fileSize);
+
+ long getFileTransferFileSize(int partId);
+
+ void setFileTransferTransferOffset(int partId, long transferOffset);
+
+ long getFileTransferTransferOffset(int partId);
+
+ void setFileTransferStatus(int partId, int transferStatus);
+
+ int getFileTransferStatus(int partId);
+
+ void setFileTransferWidth(int partId, int width);
+
+ int getFileTransferWidth(int partId);
+
+ void setFileTransferHeight(int partId, int height);
+
+ int getFileTransferHeight(int partId);
+
+ void setFileTransferLength(int partId, long length);
+
+ long getFileTransferLength(int partId);
+
+ void setFileTransferPreviewUri(int partId, in Uri uri);
+
+ Uri getFileTransferPreviewUri(int partId);
+
+ void setFileTransferPreviewType(int partId, String type);
+
+ String getFileTransferPreviewType(int partId);
+
+ /////////////////////////
+ // RcsEvent APIs
+ /////////////////////////
+ int createGroupThreadNameChangedEvent(long timestamp, int threadId, int originationParticipantId, String newName);
+
+ int createGroupThreadIconChangedEvent(long timestamp, int threadId, int originationParticipantId, in Uri newIcon);
+
+ int createGroupThreadParticipantJoinedEvent(long timestamp, int threadId, int originationParticipantId, int participantId);
- void updateRcsParticipantCanonicalAddress(int id, String canonicalAddress);
+ int createGroupThreadParticipantLeftEvent(long timestamp, int threadId, int originationParticipantId, int participantId);
- void updateRcsParticipantAlias(int id, String alias);
+ int createParticipantAliasChangedEvent(long timestamp, int participantId, String newAlias);
} \ No newline at end of file
diff --git a/telephony/java/com/android/ims/RcsTypeIdPair.java b/telephony/java/com/android/ims/RcsTypeIdPair.java
new file mode 100644
index 000000000000..a5177354002e
--- /dev/null
+++ b/telephony/java/com/android/ims/RcsTypeIdPair.java
@@ -0,0 +1,79 @@
+/*
+ * 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.ims;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A utility class to pass RCS IDs and types in RPC calls
+ *
+ * @hide
+ */
+public class RcsTypeIdPair implements Parcelable {
+ private int mType;
+ private int mId;
+
+ public RcsTypeIdPair(int type, int id) {
+ mType = type;
+ mId = id;
+ }
+
+ public int getType() {
+ return mType;
+ }
+
+ public void setType(int type) {
+ mType = type;
+ }
+
+ public int getId() {
+ return mId;
+ }
+
+ public void setId(int id) {
+ mId = id;
+ }
+
+ public RcsTypeIdPair(Parcel in) {
+ mType = in.readInt();
+ mId = in.readInt();
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mType);
+ dest.writeInt(mId);
+ }
+
+ public static final Creator<RcsTypeIdPair> CREATOR =
+ new Creator<RcsTypeIdPair>() {
+ @Override
+ public RcsTypeIdPair createFromParcel(Parcel in) {
+ return new RcsTypeIdPair(in);
+ }
+
+ @Override
+ public RcsTypeIdPair[] newArray(int size) {
+ return new RcsTypeIdPair[size];
+ }
+ };
+}
diff --git a/telephony/java/com/android/internal/telephony/TelephonyPermissions.java b/telephony/java/com/android/internal/telephony/TelephonyPermissions.java
index c76d153c6112..b9ec7bf56370 100644
--- a/telephony/java/com/android/internal/telephony/TelephonyPermissions.java
+++ b/telephony/java/com/android/internal/telephony/TelephonyPermissions.java
@@ -29,14 +29,20 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
+import android.provider.DeviceConfig;
import android.provider.Settings;
import android.telephony.Rlog;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
+import android.util.StatsLog;
import com.android.internal.annotations.VisibleForTesting;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
import java.util.function.Supplier;
/** Utility class for Telephony permission enforcement. */
@@ -48,6 +54,14 @@ public final class TelephonyPermissions {
private static final Supplier<ITelephony> TELEPHONY_SUPPLIER = () ->
ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE));
+ // Contains a mapping of packages that did not meet the new requirements to access device
+ // identifiers and the methods they were attempting to invoke; used to prevent duplicate
+ // reporting of packages / methods.
+ private static final Map<String, Set<String>> sReportedDeviceIDPackages;
+ static {
+ sReportedDeviceIDPackages = new HashMap<>();
+ }
+
private TelephonyPermissions() {}
/**
@@ -284,46 +298,63 @@ public final class TelephonyPermissions {
*/
private static boolean reportAccessDeniedToReadIdentifiers(Context context, int subId, int pid,
int uid, String callingPackage, String message) {
- // Check if the application is a 3P app; if so then a separate setting is required to relax
- // the check to begin flagging problems with 3P apps early.
+ // Check if the application is not preinstalled; if not then a separate setting is required
+ // to relax the check to begin flagging problems with non-preinstalled apps early.
boolean relax3PDeviceIdentifierCheck = Settings.Global.getInt(context.getContentResolver(),
Settings.Global.PRIVILEGED_DEVICE_IDENTIFIER_3P_CHECK_RELAXED, 0) == 1;
- boolean is3PApp = true;
+ boolean isPreinstalled = false;
// Also check if the application is a preloaded non-privileged app; if so there is a
// separate setting to relax the check for these apps to ensure users can relax the check
- // for 3P or non-priv apps as needed while continuing to test the other.
+ // for non-preinstalled or non-priv apps as needed while continuing to test the other.
boolean relaxNonPrivDeviceIdentifierCheck = Settings.Global.getInt(
context.getContentResolver(),
Settings.Global.PRIVILEGED_DEVICE_IDENTIFIER_NON_PRIV_CHECK_RELAXED, 0) == 1;
- boolean isNonPrivApp = false;
+ boolean isPrivApp = false;
// Similar to above support relaxing the check for privileged apps while still enforcing it
- // for non-privileged and 3P apps.
+ // for non-privileged and non-preinstalled apps.
boolean relaxPrivDeviceIdentifierCheck = Settings.Global.getInt(
context.getContentResolver(),
Settings.Global.PRIVILEGED_DEVICE_IDENTIFIER_PRIV_CHECK_RELAXED, 0) == 1;
ApplicationInfo callingPackageInfo = null;
try {
callingPackageInfo = context.getPackageManager().getApplicationInfo(callingPackage, 0);
- if (callingPackageInfo.isPrivilegedApp()) {
- is3PApp = false;
- } else if (callingPackageInfo.isSystemApp()) {
- is3PApp = false;
- isNonPrivApp = true;
+ if (callingPackageInfo.isSystemApp()) {
+ isPreinstalled = true;
+ if (callingPackageInfo.isPrivilegedApp()) {
+ isPrivApp = true;
+ }
}
} catch (PackageManager.NameNotFoundException e) {
// If the application info for the calling package could not be found then assume the
- // calling app is a 3P app to detect any issues with the check
+ // calling app is a non-preinstalled app to detect any issues with the check
Log.e(LOG_TAG, "Exception caught obtaining package info for package " + callingPackage,
e);
}
// The new Q restrictions for device identifier access will be enforced for all apps with
// settings to individually disable the new restrictions for privileged, preloaded
- // non-privileged, and 3P apps.
- if ((!is3PApp && !isNonPrivApp && !relaxPrivDeviceIdentifierCheck)
- || (is3PApp && !relax3PDeviceIdentifierCheck)
- || (isNonPrivApp && !relaxNonPrivDeviceIdentifierCheck)) {
- Log.wtf(LOG_TAG, "reportAccessDeniedToReadIdentifiers:" + callingPackage + ":" + message
- + ":is3PApp=" + is3PApp + ":isNonPrivApp=" + isNonPrivApp);
+ // non-privileged, and non-preinstalled apps.
+ if (!isIdentifierCheckDisabled() && (
+ (isPrivApp && !relaxPrivDeviceIdentifierCheck)
+ || (!isPreinstalled && !relax3PDeviceIdentifierCheck)
+ || (isPreinstalled && !isPrivApp && !relaxNonPrivDeviceIdentifierCheck))) {
+ // The current package should only be reported in StatsLog if it has not previously been
+ // reported for the currently invoked device identifier method.
+ boolean packageReported = sReportedDeviceIDPackages.containsKey(callingPackage);
+ if (!packageReported || !sReportedDeviceIDPackages.get(callingPackage).contains(
+ message)) {
+ Set invokedMethods;
+ if (!packageReported) {
+ invokedMethods = new HashSet<String>();
+ sReportedDeviceIDPackages.put(callingPackage, invokedMethods);
+ } else {
+ invokedMethods = sReportedDeviceIDPackages.get(callingPackage);
+ }
+ invokedMethods.add(message);
+ StatsLog.write(StatsLog.DEVICE_IDENTIFIER_ACCESS_DENIED, callingPackage, message,
+ isPreinstalled, isPrivApp);
+ }
+ Log.w(LOG_TAG, "reportAccessDeniedToReadIdentifiers:" + callingPackage + ":" + message
+ + ":isPreinstalled=" + isPreinstalled + ":isPrivApp=" + isPrivApp);
// if the target SDK is pre-Q then check if the calling package would have previously
// had access to device identifiers.
if (callingPackageInfo != null && (
@@ -348,6 +379,14 @@ public final class TelephonyPermissions {
}
/**
+ * Returns true if the new device identifier access restrictions are disabled.
+ */
+ private static boolean isIdentifierCheckDisabled() {
+ return Boolean.parseBoolean(DeviceConfig.getProperty(DeviceConfig.Privacy.NAMESPACE,
+ DeviceConfig.Privacy.PROPERTY_DEVICE_IDENTIFIER_ACCESS_RESTRICTIONS_DISABLED));
+ }
+
+ /**
* Check whether the app with the given pid/uid can read the call log.
* @return {@code true} if the specified app has the read call log permission and AppOpp granted
* to it, {@code false} otherwise.
diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java
new file mode 100644
index 000000000000..915a260f5c79
--- /dev/null
+++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.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.tests.ims;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.net.Uri;
+import android.os.Parcel;
+import android.support.test.runner.AndroidJUnit4;
+import android.telephony.ims.RcsGroupThread;
+import android.telephony.ims.RcsGroupThreadIconChangedEvent;
+import android.telephony.ims.RcsParticipant;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class RcsGroupThreadIconChangedEventTest {
+
+ @Test
+ public void testCanUnparcel() {
+ RcsGroupThread rcsGroupThread = new RcsGroupThread(1);
+ RcsParticipant rcsParticipant = new RcsParticipant(2);
+ Uri newIconUri = Uri.parse("content://new_icon");
+
+ RcsGroupThreadIconChangedEvent iconChangedEvent =
+ new RcsGroupThreadIconChangedEvent(1234567890, rcsGroupThread, rcsParticipant,
+ newIconUri);
+
+ Parcel parcel = Parcel.obtain();
+ iconChangedEvent.writeToParcel(parcel, iconChangedEvent.describeContents());
+
+ parcel.setDataPosition(0);
+
+ iconChangedEvent = RcsGroupThreadIconChangedEvent.CREATOR.createFromParcel(parcel);
+
+ assertThat(iconChangedEvent.getNewIcon()).isEqualTo(newIconUri);
+ assertThat(iconChangedEvent.getRcsGroupThread().getThreadId()).isEqualTo(1);
+ assertThat(iconChangedEvent.getOriginatingParticipant().getId()).isEqualTo(2);
+ assertThat(iconChangedEvent.getTimestamp()).isEqualTo(1234567890);
+ }
+}
diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java
new file mode 100644
index 000000000000..1384c016daa8
--- /dev/null
+++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.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.tests.ims;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.Parcel;
+import android.support.test.runner.AndroidJUnit4;
+import android.telephony.ims.RcsGroupThread;
+import android.telephony.ims.RcsGroupThreadNameChangedEvent;
+import android.telephony.ims.RcsParticipant;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class RcsGroupThreadNameChangedEventTest {
+ @Test
+ public void testCanUnparcel() {
+ String newName = "new name";
+
+ RcsGroupThread rcsGroupThread = new RcsGroupThread(1);
+ RcsParticipant rcsParticipant = new RcsParticipant(2);
+
+ RcsGroupThreadNameChangedEvent nameChangedEvent =
+ new RcsGroupThreadNameChangedEvent(1234567890, rcsGroupThread, rcsParticipant,
+ newName);
+
+ Parcel parcel = Parcel.obtain();
+ nameChangedEvent.writeToParcel(parcel, nameChangedEvent.describeContents());
+
+ parcel.setDataPosition(0);
+
+ nameChangedEvent = RcsGroupThreadNameChangedEvent.CREATOR.createFromParcel(
+ parcel);
+
+ assertThat(nameChangedEvent.getNewName()).isEqualTo(newName);
+ assertThat(nameChangedEvent.getRcsGroupThread().getThreadId()).isEqualTo(1);
+ assertThat(nameChangedEvent.getOriginatingParticipant().getId()).isEqualTo(2);
+ assertThat(nameChangedEvent.getTimestamp()).isEqualTo(1234567890);
+ }
+}
diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java
new file mode 100644
index 000000000000..d0af7db90627
--- /dev/null
+++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.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.tests.ims;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.Parcel;
+import android.support.test.runner.AndroidJUnit4;
+import android.telephony.ims.RcsGroupThread;
+import android.telephony.ims.RcsGroupThreadParticipantJoinedEvent;
+import android.telephony.ims.RcsParticipant;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class RcsGroupThreadParticipantJoinedEventTest {
+
+ @Test
+ public void testCanUnparcel() {
+ RcsGroupThread rcsGroupThread = new RcsGroupThread(1);
+ RcsParticipant rcsParticipant = new RcsParticipant(2);
+
+ RcsGroupThreadParticipantJoinedEvent participantJoinedEvent =
+ new RcsGroupThreadParticipantJoinedEvent(1234567890, rcsGroupThread, rcsParticipant,
+ rcsParticipant);
+
+ Parcel parcel = Parcel.obtain();
+ participantJoinedEvent.writeToParcel(parcel, participantJoinedEvent.describeContents());
+
+ parcel.setDataPosition(0);
+
+ participantJoinedEvent = RcsGroupThreadParticipantJoinedEvent.CREATOR.createFromParcel(
+ parcel);
+
+ assertThat(participantJoinedEvent.getJoinedParticipant().getId()).isEqualTo(2);
+ assertThat(participantJoinedEvent.getRcsGroupThread().getThreadId()).isEqualTo(1);
+ assertThat(participantJoinedEvent.getOriginatingParticipant().getId()).isEqualTo(2);
+ assertThat(participantJoinedEvent.getTimestamp()).isEqualTo(1234567890);
+ }
+}
diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java
new file mode 100644
index 000000000000..7ba5fa653258
--- /dev/null
+++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java
@@ -0,0 +1,53 @@
+/*
+ * 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.tests.ims;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.Parcel;
+import android.support.test.runner.AndroidJUnit4;
+import android.telephony.ims.RcsGroupThread;
+import android.telephony.ims.RcsGroupThreadParticipantLeftEvent;
+import android.telephony.ims.RcsParticipant;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class RcsGroupThreadParticipantLeftEventTest {
+ @Test
+ public void testCanUnparcel() {
+ RcsGroupThread rcsGroupThread = new RcsGroupThread(1);
+ RcsParticipant rcsParticipant = new RcsParticipant(2);
+
+ RcsGroupThreadParticipantLeftEvent participantLeftEvent =
+ new RcsGroupThreadParticipantLeftEvent(1234567890, rcsGroupThread, rcsParticipant,
+ rcsParticipant);
+
+ Parcel parcel = Parcel.obtain();
+ participantLeftEvent.writeToParcel(parcel, participantLeftEvent.describeContents());
+
+ parcel.setDataPosition(0);
+
+ // create from parcel
+ parcel.setDataPosition(0);
+ participantLeftEvent = RcsGroupThreadParticipantLeftEvent.CREATOR.createFromParcel(
+ parcel);
+ assertThat(participantLeftEvent.getRcsGroupThread().getThreadId()).isEqualTo(1);
+ assertThat(participantLeftEvent.getLeavingParticipantId().getId()).isEqualTo(2);
+ assertThat(participantLeftEvent.getTimestamp()).isEqualTo(1234567890);
+ }
+}
diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsMessageStoreTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsMessageStoreTest.java
deleted file mode 100644
index 44277edcdb8c..000000000000
--- a/tests/RcsTests/src/com/android/tests/ims/RcsMessageStoreTest.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tests.ims;
-
-import android.support.test.runner.AndroidJUnit4;
-import android.telephony.ims.RcsMessageStore;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-public class RcsMessageStoreTest {
- //TODO(sahinc): Add meaningful tests once we have more of the implementation in place
- @Test
- public void testDeleteThreadDoesntCrash() {
- RcsMessageStore mRcsMessageStore = new RcsMessageStore();
- mRcsMessageStore.deleteThread(0);
- }
-}
diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java
new file mode 100644
index 000000000000..3e2bbbf8256c
--- /dev/null
+++ b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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.tests.ims;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.Parcel;
+import android.support.test.runner.AndroidJUnit4;
+import android.telephony.ims.RcsParticipant;
+import android.telephony.ims.RcsParticipantAliasChangedEvent;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class RcsParticipantAliasChangedEventTest {
+ private static final String OLD_ALIAS = "old alias";
+ private static final String NEW_ALIAS = "new alias";
+ private RcsParticipant mParticipant;
+
+ @Before
+ public void setUp() {
+ mParticipant = new RcsParticipant(3);
+ }
+
+ @Test
+ public void testCanUnparcel() {
+ RcsParticipantAliasChangedEvent aliasChangedEvent =
+ new RcsParticipantAliasChangedEvent(1234567890, mParticipant, NEW_ALIAS);
+
+ Parcel parcel = Parcel.obtain();
+ aliasChangedEvent.writeToParcel(parcel, aliasChangedEvent.describeContents());
+
+ parcel.setDataPosition(0);
+
+ aliasChangedEvent = RcsParticipantAliasChangedEvent.CREATOR.createFromParcel(
+ parcel);
+
+ assertThat(aliasChangedEvent.getParticipantId().getId()).isEqualTo(3);
+ assertThat(aliasChangedEvent.getNewAlias()).isEqualTo(NEW_ALIAS);
+ assertThat(aliasChangedEvent.getTimestamp()).isEqualTo(1234567890);
+ }
+}
diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantQueryParametersTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantQueryParametersTest.java
new file mode 100644
index 000000000000..b4bcb5d12e0d
--- /dev/null
+++ b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantQueryParametersTest.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.tests.ims;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.os.Parcel;
+import android.support.test.runner.AndroidJUnit4;
+import android.telephony.ims.RcsParticipantQueryParameters;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+public class RcsParticipantQueryParametersTest {
+
+ @Test
+ public void testCanUnparcel() {
+ RcsParticipantQueryParameters rcsParticipantQueryParameters =
+ new RcsParticipantQueryParameters.Builder()
+ .setAliasLike("%alias_")
+ .setCanonicalAddressLike("_canonical%")
+ .setSortProperty(RcsParticipantQueryParameters.SORT_BY_CANONICAL_ADDRESS)
+ .setSortDirection(true)
+ .setResultLimit(432)
+ .build();
+
+
+ Parcel parcel = Parcel.obtain();
+ rcsParticipantQueryParameters.writeToParcel(parcel,
+ rcsParticipantQueryParameters.describeContents());
+
+ parcel.setDataPosition(0);
+ rcsParticipantQueryParameters = RcsParticipantQueryParameters.CREATOR.createFromParcel(
+ parcel);
+
+ assertThat(rcsParticipantQueryParameters.getAliasLike()).isEqualTo("%alias_");
+ assertThat(rcsParticipantQueryParameters.getCanonicalAddressLike()).contains("_canonical%");
+ assertThat(rcsParticipantQueryParameters.getLimit()).isEqualTo(432);
+ assertThat(rcsParticipantQueryParameters.getSortingProperty()).isEqualTo(
+ RcsParticipantQueryParameters.SORT_BY_CANONICAL_ADDRESS);
+ assertThat(rcsParticipantQueryParameters.getSortDirection()).isTrue();
+ }
+}
diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantTest.java
deleted file mode 100644
index c402dbffc84b..000000000000
--- a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantTest.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.tests.ims;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.os.Bundle;
-import android.support.test.runner.AndroidJUnit4;
-import android.telephony.ims.RcsParticipant;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-@RunWith(AndroidJUnit4.class)
-public class RcsParticipantTest {
- private static final int ID = 123;
- private static final String ALIAS = "alias";
- private static final String CANONICAL_ADDRESS = "+1234567890";
-
- @Test
- public void testCanUnparcel() {
- RcsParticipant rcsParticipant = new RcsParticipant(ID, CANONICAL_ADDRESS);
- rcsParticipant.setAlias(ALIAS);
-
- Bundle bundle = new Bundle();
- bundle.putParcelable("Some key", rcsParticipant);
- rcsParticipant = bundle.getParcelable("Some key");
-
- assertThat(rcsParticipant.getId()).isEqualTo(ID);
- assertThat(rcsParticipant.getAlias()).isEqualTo(ALIAS);
- assertThat(rcsParticipant.getCanonicalAddress()).isEqualTo(CANONICAL_ADDRESS);
- }
-}
diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsThreadQueryParametersTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsThreadQueryParametersTest.java
index a890a389bdfc..0a70eeccb0fa 100644
--- a/tests/RcsTests/src/com/android/tests/ims/RcsThreadQueryParametersTest.java
+++ b/tests/RcsTests/src/com/android/tests/ims/RcsThreadQueryParametersTest.java
@@ -15,39 +15,44 @@
*/
package com.android.tests.ims;
+import static android.telephony.ims.RcsThreadQueryParameters.SORT_BY_TIMESTAMP;
+import static android.telephony.ims.RcsThreadQueryParameters.THREAD_TYPE_GROUP;
+
import static com.google.common.truth.Truth.assertThat;
-import android.os.Bundle;
+import android.os.Parcel;
import android.support.test.runner.AndroidJUnit4;
import android.telephony.ims.RcsParticipant;
import android.telephony.ims.RcsThreadQueryParameters;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Mock;
@RunWith(AndroidJUnit4.class)
public class RcsThreadQueryParametersTest {
- private RcsThreadQueryParameters mRcsThreadQueryParameters;
- @Mock RcsParticipant mMockParticipant;
@Test
- public void testUnparceling() {
- String key = "some key";
- mRcsThreadQueryParameters = RcsThreadQueryParameters.builder()
- .isGroupThread(true)
- .withParticipant(mMockParticipant)
- .limitResultsTo(50)
- .sort(true)
+ public void testCanUnparcel() {
+ RcsParticipant rcsParticipant = new RcsParticipant(1);
+ RcsThreadQueryParameters rcsThreadQueryParameters = new RcsThreadQueryParameters.Builder()
+ .setThreadType(THREAD_TYPE_GROUP)
+ .setParticipant(rcsParticipant)
+ .setResultLimit(50)
+ .setSortProperty(SORT_BY_TIMESTAMP)
+ .setSortDirection(true)
.build();
- Bundle bundle = new Bundle();
- bundle.putParcelable(key, mRcsThreadQueryParameters);
- mRcsThreadQueryParameters = bundle.getParcelable(key);
+ Parcel parcel = Parcel.obtain();
+ rcsThreadQueryParameters.writeToParcel(parcel, rcsThreadQueryParameters.describeContents());
+
+ parcel.setDataPosition(0);
+ rcsThreadQueryParameters = RcsThreadQueryParameters.CREATOR.createFromParcel(parcel);
- assertThat(mRcsThreadQueryParameters.isGroupThread()).isTrue();
- assertThat(mRcsThreadQueryParameters.getRcsParticipants()).contains(mMockParticipant);
- assertThat(mRcsThreadQueryParameters.getLimit()).isEqualTo(50);
- assertThat(mRcsThreadQueryParameters.isAscending()).isTrue();
+ assertThat(rcsThreadQueryParameters.getThreadType()).isEqualTo(THREAD_TYPE_GROUP);
+ assertThat(rcsThreadQueryParameters.getRcsParticipantsIds())
+ .contains(rcsParticipant.getId());
+ assertThat(rcsThreadQueryParameters.getLimit()).isEqualTo(50);
+ assertThat(rcsThreadQueryParameters.getSortingProperty()).isEqualTo(SORT_BY_TIMESTAMP);
+ assertThat(rcsThreadQueryParameters.getSortDirection()).isTrue();
}
}
diff --git a/tests/net/java/android/net/LinkPropertiesTest.java b/tests/net/java/android/net/LinkPropertiesTest.java
index 299fbefc78e4..bdde0961909d 100644
--- a/tests/net/java/android/net/LinkPropertiesTest.java
+++ b/tests/net/java/android/net/LinkPropertiesTest.java
@@ -22,18 +22,15 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-import android.net.IpPrefix;
-import android.net.LinkAddress;
-import android.net.LinkProperties;
import android.net.LinkProperties.CompareResult;
import android.net.LinkProperties.ProvisioningChange;
-import android.net.RouteInfo;
-import android.os.Parcel;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
import android.system.OsConstants;
import android.util.ArraySet;
+import com.android.internal.util.TestUtils;
+
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -849,18 +846,6 @@ public class LinkPropertiesTest {
assertEquals(new ArraySet<>(expectRemoved), (new ArraySet<>(result.removed)));
}
- private void assertParcelingIsLossless(LinkProperties source) {
- Parcel p = Parcel.obtain();
- source.writeToParcel(p, /* flags */ 0);
- p.setDataPosition(0);
- final byte[] marshalled = p.marshall();
- p = Parcel.obtain();
- p.unmarshall(marshalled, 0, marshalled.length);
- p.setDataPosition(0);
- LinkProperties dest = LinkProperties.CREATOR.createFromParcel(p);
- assertEquals(source, dest);
- }
-
@Test
public void testLinkPropertiesParcelable() throws Exception {
LinkProperties source = new LinkProperties();
@@ -882,12 +867,12 @@ public class LinkPropertiesTest {
source.setNat64Prefix(new IpPrefix("2001:db8:1:2:64:64::/96"));
- assertParcelingIsLossless(source);
+ TestUtils.assertParcelingIsLossless(source, LinkProperties.CREATOR);
}
@Test
public void testParcelUninitialized() throws Exception {
LinkProperties empty = new LinkProperties();
- assertParcelingIsLossless(empty);
+ TestUtils.assertParcelingIsLossless(empty, LinkProperties.CREATOR);
}
}
diff --git a/tests/net/java/android/net/TcpKeepalivePacketDataTest.java b/tests/net/java/android/net/TcpKeepalivePacketDataTest.java
new file mode 100644
index 000000000000..1f2dd275bb7b
--- /dev/null
+++ b/tests/net/java/android/net/TcpKeepalivePacketDataTest.java
@@ -0,0 +1,126 @@
+/*
+ * 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 android.net;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import android.net.SocketKeepalive.InvalidPacketException;
+import android.net.TcpKeepalivePacketData.TcpSocketInfo;
+
+import com.android.internal.util.TestUtils;
+
+import libcore.net.InetAddressUtils;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+import java.net.InetAddress;
+import java.nio.ByteBuffer;
+
+@RunWith(JUnit4.class)
+public final class TcpKeepalivePacketDataTest {
+
+ @Before
+ public void setUp() {}
+
+ @Test
+ public void testV4TcpKeepalivePacket() {
+ final InetAddress srcAddr = InetAddressUtils.parseNumericAddress("192.168.0.1");
+ final InetAddress dstAddr = InetAddressUtils.parseNumericAddress("192.168.0.10");
+ final int srcPort = 1234;
+ final int dstPort = 4321;
+ final int seq = 0x11111111;
+ final int ack = 0x22222222;
+ final int wnd = 8000;
+ final int wndScale = 2;
+ TcpKeepalivePacketData resultData = null;
+ TcpSocketInfo testInfo = new TcpSocketInfo(
+ srcAddr, srcPort, dstAddr, dstPort, seq, ack, wnd, wndScale);
+ try {
+ resultData = TcpKeepalivePacketData.tcpKeepalivePacket(testInfo);
+ } catch (InvalidPacketException e) {
+ fail("InvalidPacketException: " + e);
+ }
+
+ assertEquals(testInfo.srcAddress, resultData.srcAddress);
+ assertEquals(testInfo.dstAddress, resultData.dstAddress);
+ assertEquals(testInfo.srcPort, resultData.srcPort);
+ assertEquals(testInfo.dstPort, resultData.dstPort);
+ assertEquals(testInfo.seq, resultData.tcpSeq);
+ assertEquals(testInfo.ack, resultData.tcpAck);
+ assertEquals(testInfo.rcvWndScale, resultData.tcpWndScale);
+
+ TestUtils.assertParcelingIsLossless(resultData, TcpKeepalivePacketData.CREATOR);
+
+ final byte[] packet = resultData.getPacket();
+ // IP version and TOS.
+ ByteBuffer buf = ByteBuffer.wrap(packet);
+ assertEquals(buf.getShort(), 0x4500);
+ // Source IP address.
+ byte[] ip = new byte[4];
+ buf = ByteBuffer.wrap(packet, 12, 4);
+ buf.get(ip);
+ assertArrayEquals(ip, srcAddr.getAddress());
+ // Destination IP address.
+ buf = ByteBuffer.wrap(packet, 16, 4);
+ buf.get(ip);
+ assertArrayEquals(ip, dstAddr.getAddress());
+
+ buf = ByteBuffer.wrap(packet, 20, 12);
+ // Source port.
+ assertEquals(buf.getShort(), srcPort);
+ // Destination port.
+ assertEquals(buf.getShort(), dstPort);
+ // Sequence number.
+ assertEquals(buf.getInt(), seq);
+ // Ack.
+ assertEquals(buf.getInt(), ack);
+ // Window size.
+ buf = ByteBuffer.wrap(packet, 34, 2);
+ assertEquals(buf.getShort(), wnd >> wndScale);
+ }
+
+ //TODO: add ipv6 test when ipv6 supported
+
+ @Test
+ public void testParcel() throws Exception {
+ final InetAddress srcAddr = InetAddresses.parseNumericAddress("192.168.0.1");
+ final InetAddress dstAddr = InetAddresses.parseNumericAddress("192.168.0.10");
+ final int srcPort = 1234;
+ final int dstPort = 4321;
+ final int sequence = 0x11111111;
+ final int ack = 0x22222222;
+ final int wnd = 48_000;
+ final int wndScale = 2;
+ TcpKeepalivePacketData testData = null;
+ TcpKeepalivePacketDataParcelable resultData = null;
+ TcpSocketInfo testInfo = new TcpSocketInfo(
+ srcAddr, srcPort, dstAddr, dstPort, sequence, ack, wnd, wndScale);
+ testData = TcpKeepalivePacketData.tcpKeepalivePacket(testInfo);
+ resultData = testData.toStableParcelable();
+ assertArrayEquals(resultData.srcAddress, srcAddr.getAddress());
+ assertArrayEquals(resultData.dstAddress, dstAddr.getAddress());
+ assertEquals(resultData.srcPort, srcPort);
+ assertEquals(resultData.dstPort, dstPort);
+ assertEquals(resultData.seq, sequence);
+ assertEquals(resultData.ack, ack);
+ }
+}
diff --git a/tests/net/java/com/android/internal/util/TestUtils.java b/tests/net/java/com/android/internal/util/TestUtils.java
index 6db01d343756..7e5a1d3ad4d3 100644
--- a/tests/net/java/com/android/internal/util/TestUtils.java
+++ b/tests/net/java/com/android/internal/util/TestUtils.java
@@ -16,12 +16,15 @@
package com.android.internal.util;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import android.os.ConditionVariable;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
+import android.os.Parcel;
+import android.os.Parcelable;
public final class TestUtils {
private TestUtils() { }
@@ -50,4 +53,18 @@ public final class TestUtils {
fail(handler.toString() + " did not become idle after " + timeoutMs + " ms");
}
}
+
+ // TODO : fetch the creator through reflection or something instead of passing it
+ public static <T extends Parcelable, C extends Parcelable.Creator<T>>
+ void assertParcelingIsLossless(T source, C creator) {
+ Parcel p = Parcel.obtain();
+ source.writeToParcel(p, /* flags */ 0);
+ p.setDataPosition(0);
+ final byte[] marshalled = p.marshall();
+ p = Parcel.obtain();
+ p.unmarshall(marshalled, 0, marshalled.length);
+ p.setDataPosition(0);
+ T dest = creator.createFromParcel(p);
+ assertEquals(source, dest);
+ }
}