summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt10
-rw-r--r--apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java10
-rw-r--r--apex/media/framework/Android.bp3
-rw-r--r--apex/media/framework/api/system-current.txt4
-rw-r--r--apex/media/framework/java/android/media/MediaTranscodeManager.java4
-rw-r--r--boot/Android.bp23
-rw-r--r--core/api/current.txt229
-rw-r--r--core/api/system-current.txt32
-rw-r--r--core/api/test-current.txt4
-rw-r--r--core/java/android/accessibilityservice/AccessibilityService.java81
-rw-r--r--core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl3
-rw-r--r--core/java/android/app/AppOpsManager.java16
-rw-r--r--core/java/android/app/Notification.java172
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java17
-rw-r--r--core/java/android/content/pm/ActivityInfo.java7
-rw-r--r--core/java/android/content/pm/RegisteredServicesCache.java11
-rw-r--r--core/java/android/content/res/ColorStateList.java5
-rw-r--r--core/java/android/hardware/camera2/CameraManager.java3
-rw-r--r--core/java/android/hardware/camera2/params/MandatoryStreamCombination.java83
-rw-r--r--core/java/android/net/vcn/IVcnStatusCallback.aidl2
-rw-r--r--core/java/android/net/vcn/VcnConfig.java13
-rw-r--r--core/java/android/net/vcn/VcnGatewayConnectionConfig.java39
-rw-r--r--core/java/android/net/vcn/VcnManager.java21
-rw-r--r--core/java/android/os/BatteryConsumer.java56
-rw-r--r--core/java/android/os/BatteryUsageStats.java15
-rw-r--r--core/java/android/os/BatteryUsageStatsQuery.java17
-rw-r--r--core/java/android/os/PowerComponents.java37
-rw-r--r--core/java/android/os/SystemBatteryConsumer.java4
-rw-r--r--core/java/android/os/UidBatteryConsumer.java4
-rw-r--r--core/java/android/os/UserBatteryConsumer.java5
-rw-r--r--core/java/android/os/incremental/IncrementalManager.java11
-rw-r--r--core/java/android/permission/IPermissionController.aidl6
-rw-r--r--core/java/android/permission/PermissionControllerManager.java44
-rw-r--r--core/java/android/permission/PermissionControllerService.java53
-rw-r--r--core/java/android/view/HapticFeedbackConstants.java6
-rw-r--r--core/java/android/view/OWNERS4
-rw-r--r--core/java/android/view/SurfaceControlHdrLayerInfoListener.java102
-rw-r--r--core/java/android/view/ViewRootImpl.java25
-rw-r--r--core/java/android/view/accessibility/AccessibilityInteractionClient.java113
-rw-r--r--core/java/android/view/accessibility/AccessibilityManager.java30
-rw-r--r--core/java/com/android/internal/app/IBatteryStats.aidl2
-rw-r--r--core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java15
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java169
-rw-r--r--core/java/com/android/internal/os/BatteryUsageStatsProvider.java9
-rw-r--r--core/java/com/android/internal/os/BluetoothPowerCalculator.java33
-rw-r--r--core/java/com/android/internal/os/CpuPowerCalculator.java30
-rw-r--r--core/java/com/android/internal/os/GnssPowerCalculator.java56
-rw-r--r--core/java/com/android/internal/os/MobileRadioPowerCalculator.java68
-rw-r--r--core/java/com/android/internal/os/PowerCalculator.java43
-rw-r--r--core/java/com/android/internal/os/ScreenPowerCalculator.java102
-rw-r--r--core/java/com/android/internal/os/WifiPowerCalculator.java77
-rw-r--r--core/java/com/android/internal/os/ZygoteServer.java2
-rw-r--r--core/java/com/android/internal/widget/RecyclerView.java20
-rw-r--r--core/jni/Android.bp6
-rw-r--r--core/jni/AndroidRuntime.cpp2
-rw-r--r--core/jni/android_media_AudioSystem.cpp58
-rw-r--r--core/jni/android_view_SurfaceControlHdrLayerInfoListener.cpp136
-rw-r--r--core/res/AndroidManifest.xml18
-rw-r--r--core/res/res/drawable/perm_group_camera.xml9
-rw-r--r--core/res/res/values-af/strings.xml69
-rw-r--r--core/res/res/values-am/strings.xml69
-rw-r--r--core/res/res/values-ar/strings.xml9
-rw-r--r--core/res/res/values-as/strings.xml9
-rw-r--r--core/res/res/values-az/strings.xml9
-rw-r--r--core/res/res/values-b+sr+Latn/strings.xml69
-rw-r--r--core/res/res/values-be/strings.xml87
-rw-r--r--core/res/res/values-bg/strings.xml69
-rw-r--r--core/res/res/values-bn/strings.xml27
-rw-r--r--core/res/res/values-bs/strings.xml69
-rw-r--r--core/res/res/values-ca/strings.xml71
-rw-r--r--core/res/res/values-cs/strings.xml69
-rw-r--r--core/res/res/values-da/strings.xml69
-rw-r--r--core/res/res/values-de/strings.xml6
-rw-r--r--core/res/res/values-el/strings.xml9
-rw-r--r--core/res/res/values-en-rAU/strings.xml6
-rw-r--r--core/res/res/values-en-rCA/strings.xml6
-rw-r--r--core/res/res/values-en-rGB/strings.xml6
-rw-r--r--core/res/res/values-en-rIN/strings.xml6
-rw-r--r--core/res/res/values-en-rXC/strings.xml28
-rw-r--r--core/res/res/values-es-rUS/strings.xml9
-rw-r--r--core/res/res/values-es/strings.xml69
-rw-r--r--core/res/res/values-et/strings.xml69
-rw-r--r--core/res/res/values-eu/strings.xml69
-rw-r--r--core/res/res/values-fa/strings.xml69
-rw-r--r--core/res/res/values-fi/strings.xml9
-rw-r--r--core/res/res/values-fr-rCA/strings.xml9
-rw-r--r--core/res/res/values-fr/strings.xml66
-rw-r--r--core/res/res/values-gl/strings.xml69
-rw-r--r--core/res/res/values-gu/strings.xml6
-rw-r--r--core/res/res/values-hi/strings.xml9
-rw-r--r--core/res/res/values-hr/strings.xml69
-rw-r--r--core/res/res/values-hu/strings.xml69
-rw-r--r--core/res/res/values-hy/strings.xml69
-rw-r--r--core/res/res/values-in/strings.xml73
-rw-r--r--core/res/res/values-is/strings.xml69
-rw-r--r--core/res/res/values-it/strings.xml69
-rw-r--r--core/res/res/values-iw/strings.xml69
-rw-r--r--core/res/res/values-ja/strings.xml69
-rw-r--r--core/res/res/values-ka/strings.xml69
-rw-r--r--core/res/res/values-kk/strings.xml69
-rw-r--r--core/res/res/values-km/strings.xml9
-rw-r--r--core/res/res/values-kn/strings.xml9
-rw-r--r--core/res/res/values-ko/strings.xml69
-rw-r--r--core/res/res/values-ky/strings.xml9
-rw-r--r--core/res/res/values-lo/strings.xml9
-rw-r--r--core/res/res/values-lt/strings.xml69
-rw-r--r--core/res/res/values-lv/strings.xml69
-rw-r--r--core/res/res/values-mk/strings.xml69
-rw-r--r--core/res/res/values-ml/strings.xml69
-rw-r--r--core/res/res/values-mn/strings.xml87
-rw-r--r--core/res/res/values-mr/strings.xml66
-rw-r--r--core/res/res/values-ms/strings.xml69
-rw-r--r--core/res/res/values-my/strings.xml69
-rw-r--r--core/res/res/values-nb/strings.xml69
-rw-r--r--core/res/res/values-ne/strings.xml9
-rw-r--r--core/res/res/values-nl/strings.xml113
-rw-r--r--core/res/res/values-or/strings.xml66
-rw-r--r--core/res/res/values-pa/strings.xml6
-rw-r--r--core/res/res/values-pl/strings.xml9
-rw-r--r--core/res/res/values-pt-rBR/strings.xml9
-rw-r--r--core/res/res/values-pt-rPT/strings.xml69
-rw-r--r--core/res/res/values-pt/strings.xml9
-rw-r--r--core/res/res/values-ro/strings.xml9
-rw-r--r--core/res/res/values-ru/strings.xml9
-rw-r--r--core/res/res/values-si/strings.xml69
-rw-r--r--core/res/res/values-sk/strings.xml69
-rw-r--r--core/res/res/values-sl/strings.xml9
-rw-r--r--core/res/res/values-sq/strings.xml69
-rw-r--r--core/res/res/values-sr/strings.xml69
-rw-r--r--core/res/res/values-sv/strings.xml69
-rw-r--r--core/res/res/values-sw/strings.xml69
-rw-r--r--core/res/res/values-ta/strings.xml9
-rw-r--r--core/res/res/values-te/strings.xml9
-rw-r--r--core/res/res/values-th/strings.xml69
-rw-r--r--core/res/res/values-tl/strings.xml69
-rw-r--r--core/res/res/values-tr/strings.xml69
-rw-r--r--core/res/res/values-uk/strings.xml69
-rw-r--r--core/res/res/values-ur/strings.xml6
-rw-r--r--core/res/res/values-uz/strings.xml69
-rw-r--r--core/res/res/values-vi/strings.xml66
-rw-r--r--core/res/res/values-zh-rCN/strings.xml66
-rw-r--r--core/res/res/values-zh-rHK/strings.xml69
-rw-r--r--core/res/res/values-zh-rTW/strings.xml69
-rw-r--r--core/res/res/values-zu/strings.xml69
-rw-r--r--core/res/res/values/config.xml6
-rw-r--r--core/res/res/values/public.xml38
-rw-r--r--core/res/res/values/strings.xml5
-rw-r--r--core/res/res/values/symbols.xml2
-rw-r--r--core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetrics.java258
-rw-r--r--core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetricsCollector.java209
-rw-r--r--core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/SystemServiceCallLoadTest.java12
-rw-r--r--core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/WiFiLoadTest.java17
-rw-r--r--core/tests/coretests/src/android/app/NotificationTest.java9
-rw-r--r--core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java3
-rw-r--r--core/tests/coretests/src/com/android/internal/os/AmbientDisplayPowerCalculatorTest.java8
-rw-r--r--core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java13
-rw-r--r--core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java5
-rw-r--r--core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java51
-rw-r--r--core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java6
-rw-r--r--core/tests/coretests/src/com/android/internal/os/CpuPowerCalculatorTest.java12
-rw-r--r--core/tests/coretests/src/com/android/internal/os/GnssPowerCalculatorTest.java10
-rw-r--r--core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java12
-rw-r--r--core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java16
-rw-r--r--core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java23
-rw-r--r--data/etc/privapp-permissions-platform.xml2
-rw-r--r--drm/java/Android.bp9
-rw-r--r--graphics/java/Android.bp9
-rw-r--r--graphics/java/android/graphics/drawable/RippleAnimationSession.java31
-rw-r--r--graphics/java/android/graphics/drawable/RippleDrawable.java13
-rw-r--r--identity/Android.bp31
-rw-r--r--identity/java/Android.bp9
-rw-r--r--keystore/java/Android.bp9
-rw-r--r--libs/WindowManager/Shell/res/values/config.xml3
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java24
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java2
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java5
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java81
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java73
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java19
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java6
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java7
-rw-r--r--libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipShelfHeightTest.kt (renamed from libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipMovesInAllApps.kt)17
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipBoundsAlgorithmTest.java5
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java3
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java8
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTouchHandlerTest.java8
-rw-r--r--libs/hwui/effects/StretchEffect.cpp35
-rw-r--r--libs/hwui/renderthread/RenderThread.cpp10
-rw-r--r--libs/hwui/renderthread/RenderThread.h1
-rw-r--r--libs/hwui/renderthread/VulkanSurface.cpp37
-rw-r--r--libs/hwui/renderthread/VulkanSurface.h1
-rw-r--r--libs/hwui/utils/Color.cpp14
-rw-r--r--location/java/Android.bp9
-rw-r--r--lowpan/java/Android.bp9
-rw-r--r--media/java/android/media/AudioSystem.java9
-rw-r--r--media/java/android/media/IMediaRouterService.aidl1
-rw-r--r--media/java/android/media/MediaCodec.java1
-rw-r--r--media/java/android/media/MediaFormat.java9
-rw-r--r--media/java/android/media/MediaRouter2.java16
-rw-r--r--media/mca/effect/java/Android.bp9
-rw-r--r--media/mca/filterfw/java/Android.bp9
-rw-r--r--media/mca/filterpacks/java/Android.bp9
-rw-r--r--mime/java/Android.bp9
-rw-r--r--mms/java/Android.bp9
-rw-r--r--native/android/OWNERS4
-rw-r--r--native/android/libandroid.map.txt1
-rw-r--r--native/android/surface_control.cpp14
-rw-r--r--opengl/java/Android.bp9
-rw-r--r--packages/PackageInstaller/res/values-af/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-am/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ar/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-as/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-az/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-b+sr+Latn/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-be/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-bg/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-bn/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-bs/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ca/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-cs/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-da/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-de/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-el/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-en-rAU/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-en-rCA/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-en-rGB/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-en-rIN/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-en-rXC/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-es-rUS/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-es/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-et/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-eu/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-fa/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-fi/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-fr-rCA/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-fr/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-gl/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-gu/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-hi/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-hr/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-hu/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-hy/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-in/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-is/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-it/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-iw/strings.xml26
-rw-r--r--packages/PackageInstaller/res/values-ja/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ka/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-kk/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-km/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-kn/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ko/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ky/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-lo/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-lt/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-lv/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-mk/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ml/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-mn/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-mr/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ms/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-my/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-nb/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ne/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-nl/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-or/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-pa/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-pl/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-pt-rBR/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-pt-rPT/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-pt/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ro/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ru/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-si/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-sk/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-sl/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-sq/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-sr/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-sv/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-sw/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ta/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-te/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-th/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-tl/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-tr/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-uk/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-ur/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-uz/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-vi/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-zh-rCN/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-zh-rHK/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-zh-rTW/strings.xml18
-rw-r--r--packages/PackageInstaller/res/values-zu/strings.xml18
-rw-r--r--packages/SettingsLib/res/drawable/ic_3g_mobiledata.xml19
-rw-r--r--packages/SettingsLib/res/drawable/ic_4g_mobiledata.xml19
-rw-r--r--packages/SettingsLib/res/drawable/ic_5g_mobiledata.xml20
-rw-r--r--packages/SettingsLib/res/drawable/ic_5g_uc_mobiledata.xml33
-rw-r--r--packages/SettingsLib/res/drawable/ic_5g_uw_mobiledata.xml33
-rw-r--r--packages/SettingsLib/res/drawable/ic_carrier_wifi.xml15
-rw-r--r--packages/SettingsLib/res/drawable/ic_lte_mobiledata.xml23
-rw-r--r--packages/SettingsLib/res/values/strings.xml2
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java15
-rw-r--r--packages/Shell/AndroidManifest.xml6
-rw-r--r--packages/SystemUI/AndroidManifest.xml11
-rw-r--r--packages/SystemUI/docs/falsing.md8
-rw-r--r--packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSFactory.java15
-rw-r--r--packages/SystemUI/res/drawable/circle_wallet_primary_50dp.xml22
-rw-r--r--packages/SystemUI/res/drawable/global_actions_lite_background.xml22
-rw-r--r--packages/SystemUI/res/drawable/global_actions_lite_button.xml22
-rw-r--r--packages/SystemUI/res/drawable/ic_fingerprint.xml58
-rw-r--r--packages/SystemUI/res/drawable/qs_customizer_toolbar.xml3
-rw-r--r--packages/SystemUI/res/drawable/rounded_corners.xml21
-rw-r--r--packages/SystemUI/res/drawable/stat_sys_roaming_large.xml10
-rw-r--r--packages/SystemUI/res/drawable/wallet_button.xml27
-rw-r--r--packages/SystemUI/res/drawable/wallet_empty_state_bg.xml33
-rw-r--r--packages/SystemUI/res/layout/auth_biometric_contents.xml4
-rw-r--r--packages/SystemUI/res/layout/auth_biometric_face_to_udfps_view.xml25
-rw-r--r--packages/SystemUI/res/layout/disabled_udfps_view.xml2
-rw-r--r--packages/SystemUI/res/layout/global_actions_grid_item_lite.xml47
-rw-r--r--packages/SystemUI/res/layout/global_actions_grid_lite.xml56
-rw-r--r--packages/SystemUI/res/layout/long_screenshot.xml3
-rw-r--r--packages/SystemUI/res/layout/people_space_tile_view.xml11
-rw-r--r--packages/SystemUI/res/layout/qs_footer_impl_two_lines.xml8
-rw-r--r--packages/SystemUI/res/layout/quick_access_wallet.xml22
-rw-r--r--packages/SystemUI/res/layout/wallet_card_view.xml47
-rw-r--r--packages/SystemUI/res/layout/wallet_empty_state.xml47
-rw-r--r--packages/SystemUI/res/layout/wallet_fullscreen.xml86
-rw-r--r--packages/SystemUI/res/values-af/strings.xml20
-rw-r--r--packages/SystemUI/res/values-am/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ar/strings.xml8
-rw-r--r--packages/SystemUI/res/values-as/strings.xml22
-rw-r--r--packages/SystemUI/res/values-az/strings.xml20
-rw-r--r--packages/SystemUI/res/values-b+sr+Latn/strings.xml20
-rw-r--r--packages/SystemUI/res/values-be/strings.xml23
-rw-r--r--packages/SystemUI/res/values-bg/strings.xml20
-rw-r--r--packages/SystemUI/res/values-bn/strings.xml8
-rw-r--r--packages/SystemUI/res/values-bs/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ca/strings.xml20
-rw-r--r--packages/SystemUI/res/values-cs/strings.xml20
-rw-r--r--packages/SystemUI/res/values-da/strings.xml20
-rw-r--r--packages/SystemUI/res/values-de/strings.xml20
-rw-r--r--packages/SystemUI/res/values-el/strings.xml20
-rw-r--r--packages/SystemUI/res/values-en-rAU/strings.xml13
-rw-r--r--packages/SystemUI/res/values-en-rCA/strings.xml13
-rw-r--r--packages/SystemUI/res/values-en-rGB/strings.xml13
-rw-r--r--packages/SystemUI/res/values-en-rIN/strings.xml13
-rw-r--r--packages/SystemUI/res/values-en-rXC/strings.xml13
-rw-r--r--packages/SystemUI/res/values-es-rUS/strings.xml20
-rw-r--r--packages/SystemUI/res/values-es/strings.xml20
-rw-r--r--packages/SystemUI/res/values-et/strings.xml20
-rw-r--r--packages/SystemUI/res/values-eu/strings.xml20
-rw-r--r--packages/SystemUI/res/values-fa/strings.xml22
-rw-r--r--packages/SystemUI/res/values-fi/strings.xml20
-rw-r--r--packages/SystemUI/res/values-fr-rCA/strings.xml8
-rw-r--r--packages/SystemUI/res/values-fr/strings.xml20
-rw-r--r--packages/SystemUI/res/values-gl/strings.xml22
-rw-r--r--packages/SystemUI/res/values-gu/strings.xml20
-rw-r--r--packages/SystemUI/res/values-hi/strings.xml22
-rw-r--r--packages/SystemUI/res/values-hr/strings.xml20
-rw-r--r--packages/SystemUI/res/values-hu/strings.xml20
-rw-r--r--packages/SystemUI/res/values-hy/strings.xml20
-rw-r--r--packages/SystemUI/res/values-in/strings.xml22
-rw-r--r--packages/SystemUI/res/values-is/strings.xml20
-rw-r--r--packages/SystemUI/res/values-it/strings.xml20
-rw-r--r--packages/SystemUI/res/values-iw/strings.xml54
-rw-r--r--packages/SystemUI/res/values-ja/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ka/strings.xml20
-rw-r--r--packages/SystemUI/res/values-kk/strings.xml20
-rw-r--r--packages/SystemUI/res/values-km/strings.xml20
-rw-r--r--packages/SystemUI/res/values-kn/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ko/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ky/strings.xml8
-rw-r--r--packages/SystemUI/res/values-lo/strings.xml20
-rw-r--r--packages/SystemUI/res/values-lt/strings.xml20
-rw-r--r--packages/SystemUI/res/values-lv/strings.xml20
-rw-r--r--packages/SystemUI/res/values-mk/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ml/strings.xml20
-rw-r--r--packages/SystemUI/res/values-mn/strings.xml20
-rw-r--r--packages/SystemUI/res/values-mr/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ms/strings.xml20
-rw-r--r--packages/SystemUI/res/values-my/strings.xml20
-rw-r--r--packages/SystemUI/res/values-nb/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ne/strings.xml20
-rw-r--r--packages/SystemUI/res/values-nl/strings.xml26
-rw-r--r--packages/SystemUI/res/values-or/strings.xml20
-rw-r--r--packages/SystemUI/res/values-pa/strings.xml20
-rw-r--r--packages/SystemUI/res/values-pl/strings.xml20
-rw-r--r--packages/SystemUI/res/values-pt-rBR/strings.xml8
-rw-r--r--packages/SystemUI/res/values-pt-rPT/strings.xml20
-rw-r--r--packages/SystemUI/res/values-pt/strings.xml8
-rw-r--r--packages/SystemUI/res/values-ro/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ru/strings.xml20
-rw-r--r--packages/SystemUI/res/values-si/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sk/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sl/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sq/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sr/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sv/strings.xml20
-rw-r--r--packages/SystemUI/res/values-sw/strings.xml22
-rw-r--r--packages/SystemUI/res/values-ta/strings.xml20
-rw-r--r--packages/SystemUI/res/values-te/strings.xml22
-rw-r--r--packages/SystemUI/res/values-th/strings.xml20
-rw-r--r--packages/SystemUI/res/values-tl/strings.xml20
-rw-r--r--packages/SystemUI/res/values-tr/strings.xml20
-rw-r--r--packages/SystemUI/res/values-uk/strings.xml20
-rw-r--r--packages/SystemUI/res/values-ur/strings.xml8
-rw-r--r--packages/SystemUI/res/values-uz/strings.xml20
-rw-r--r--packages/SystemUI/res/values-vi/strings.xml20
-rw-r--r--packages/SystemUI/res/values-zh-rCN/strings.xml20
-rw-r--r--packages/SystemUI/res/values-zh-rHK/strings.xml20
-rw-r--r--packages/SystemUI/res/values-zh-rTW/strings.xml20
-rw-r--r--packages/SystemUI/res/values-zu/strings.xml20
-rw-r--r--packages/SystemUI/res/values/colors.xml12
-rw-r--r--packages/SystemUI/res/values/config.xml19
-rw-r--r--packages/SystemUI/res/values/dimens.xml24
-rw-r--r--packages/SystemUI/res/values/flags.xml2
-rw-r--r--packages/SystemUI/res/values/strings.xml6
-rw-r--r--packages/SystemUI/res/values/styles.xml23
-rw-r--r--packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java105
-rw-r--r--packages/SystemUI/src/com/android/keyguard/DisabledUdfpsView.java7
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java7
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java17
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java5
-rw-r--r--packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToUdfpsView.java147
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceView.java55
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricUdfpsView.java284
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java55
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java330
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDrawable.java25
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardDrawable.java34
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java128
-rw-r--r--packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt14
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java2171
-rw-r--r--packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java2391
-rw-r--r--packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayoutLite.java133
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonView.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java44
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSDetail.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java17
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureClient.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/NotificationGroupingUtil.java16
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt29
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java14
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java5
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java27
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java6
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java37
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java26
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt67
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java59
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/telephony/TelephonyCallback.java24
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallet/dagger/WalletModule.java51
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallet/ui/DotIndicatorDecoration.java181
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java122
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardCarousel.java473
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardView.java54
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewHolder.java42
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewInfo.java50
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java330
-rw-r--r--packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java242
-rw-r--r--packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java13
-rw-r--r--packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java30
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java43
-rw-r--r--packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java45
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java87
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java119
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java20
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/camera/CameraIntentsTest.kt56
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java167
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java289
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java19
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/KeyButtonViewTest.java19
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSession.java188
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSessionTest.java293
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureControllerTest.java309
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/AppOpsCoordinatorTest.java9
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java3
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java9
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java8
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java5
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java30
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java4
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/wallet/ui/WalletScreenControllerTest.java274
-rw-r--r--rs/java/Android.bp9
-rw-r--r--sax/java/Android.bp9
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java12
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java33
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityShellCommand.java8
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityTrace.java25
-rw-r--r--services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java5
-rw-r--r--services/backup/OWNERS1
-rw-r--r--services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java13
-rw-r--r--services/core/java/com/android/server/VcnManagementService.java33
-rw-r--r--services/core/java/com/android/server/accounts/AccountManagerService.java2
-rw-r--r--services/core/java/com/android/server/am/ActiveServices.java37
-rw-r--r--services/core/java/com/android/server/am/BroadcastQueue.java155
-rw-r--r--services/core/java/com/android/server/app/GameManagerService.java53
-rw-r--r--services/core/java/com/android/server/appop/DiscreteRegistry.java59
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java46
-rw-r--r--services/core/java/com/android/server/biometrics/AuthService.java31
-rw-r--r--services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java8
-rw-r--r--services/core/java/com/android/server/clipboard/ClipboardService.java22
-rw-r--r--services/core/java/com/android/server/inputmethod/InputMethodManagerService.java32
-rw-r--r--services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java16
-rw-r--r--services/core/java/com/android/server/media/MediaRouterService.java6
-rw-r--r--services/core/java/com/android/server/net/NetworkPolicyManagerService.java14
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerSession.java20
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java26
-rw-r--r--services/core/java/com/android/server/pm/ShortcutPackage.java753
-rw-r--r--services/core/java/com/android/server/pm/ShortcutService.java13
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java14
-rw-r--r--services/core/java/com/android/server/vcn/UnderlyingNetworkTracker.java47
-rw-r--r--services/core/java/com/android/server/vcn/Vcn.java64
-rw-r--r--services/core/java/com/android/server/vcn/VcnGatewayConnection.java4
-rw-r--r--services/core/java/com/android/server/wallpaper/WallpaperManagerService.java3
-rw-r--r--services/core/java/com/android/server/wm/AccessibilityController.java77
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java6
-rw-r--r--services/core/java/com/android/server/wm/WindowContainer.java8
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerInternal.java16
-rw-r--r--services/core/java/com/android/server/wm/WindowStateAnimator.java22
-rw-r--r--services/core/jni/Android.bp1
-rw-r--r--services/core/jni/gnss/GnssMeasurementCallback.cpp6
-rw-r--r--services/tests/servicestests/AndroidManifest.xml2
-rw-r--r--services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java1
-rw-r--r--services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProviderTest.java4
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java11
-rw-r--r--services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java15
-rw-r--r--services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java9
-rwxr-xr-xservices/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java40
-rw-r--r--services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java2
-rw-r--r--services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java32
-rw-r--r--telecomm/java/Android.bp9
-rw-r--r--telephony/common/Android.bp9
-rw-r--r--telephony/java/Android.bp10
-rw-r--r--telephony/java/android/telephony/CarrierConfigManager.java2
-rw-r--r--telephony/java/android/telephony/SubscriptionInfo.java4
-rw-r--r--telephony/java/android/telephony/SubscriptionManager.java8
-rw-r--r--telephony/java/android/telephony/TelephonyManager.java6
-rw-r--r--tests/SilkFX/src/com/android/test/silkfx/common/ColorModeControls.kt26
-rw-r--r--tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java16
-rw-r--r--tests/vcn/java/android/net/vcn/VcnConfigTest.java12
-rw-r--r--tests/vcn/java/android/net/vcn/VcnGatewayConnectionConfigTest.java28
-rw-r--r--tests/vcn/java/android/net/vcn/VcnManagerTest.java8
-rw-r--r--tests/vcn/java/com/android/server/VcnManagementServiceTest.java6
-rw-r--r--tests/vcn/java/com/android/server/vcn/UnderlyingNetworkTrackerTest.java16
-rw-r--r--tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java7
-rw-r--r--tests/vcn/java/com/android/server/vcn/VcnTest.java35
-rw-r--r--tools/aapt2/cmd/Link_test.cpp18
-rw-r--r--tools/aapt2/format/binary/BinaryResourceParser.cpp9
-rw-r--r--tools/aapt2/java/ClassDefinition.h12
602 files changed, 14806 insertions, 9121 deletions
diff --git a/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt b/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt
index d5ed95f18f93..90dca25b3b70 100644
--- a/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt
+++ b/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt
@@ -159,7 +159,15 @@ class PackageParsingPerfTest {
PARALLEL_MAX_THREADS, "package-parsing-test",
Process.THREAD_PRIORITY_FOREGROUND)
- fun submit(file: File) = service.submit { queue.put(parse(file)) }
+ fun submit(file: File) {
+ service.submit {
+ try {
+ queue.put(parse(file))
+ } catch (e: Exception) {
+ queue.put(e)
+ }
+ }
+ }
fun take() = queue.poll(QUEUE_POLL_TIMEOUT_SECONDS, TimeUnit.SECONDS)
diff --git a/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java b/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
index cb1fccf1e96e..d459c0502189 100644
--- a/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
+++ b/apex/jobscheduler/framework/java/android/os/PowerExemptionManager.java
@@ -183,6 +183,10 @@ public class PowerExemptionManager {
public static final int REASON_APPOP = 66;
/** @hide */
public static final int REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD = 67;
+ /** @hide */
+ public static final int REASON_OP_ACTIVATE_VPN = 68;
+ /** @hide */
+ public static final int REASON_OP_ACTIVATE_PLATFORM_VPN = 69;
/* BG-FGS-launch is allowed by temp-allow-list or system-allow-list.
Reason code for temp and system allow list starts here.
@@ -344,6 +348,8 @@ public class PowerExemptionManager {
REASON_ALLOWLISTED_PACKAGE,
REASON_APPOP,
REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD,
+ REASON_OP_ACTIVATE_VPN,
+ REASON_OP_ACTIVATE_PLATFORM_VPN,
// temp and system allow list reasons.
REASON_GEOFENCING,
REASON_PUSH_MESSAGING,
@@ -603,6 +609,10 @@ public class PowerExemptionManager {
return "APPOP";
case REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD:
return "ACTIVITY_VISIBILITY_GRACE_PERIOD";
+ case REASON_OP_ACTIVATE_VPN:
+ return "OP_ACTIVATE_VPN";
+ case REASON_OP_ACTIVATE_PLATFORM_VPN:
+ return "OP_ACTIVATE_PLATFORM_VPN";
case REASON_GEOFENCING:
return "GEOFENCING";
case REASON_PUSH_MESSAGING:
diff --git a/apex/media/framework/Android.bp b/apex/media/framework/Android.bp
index 3cf585e73003..7020f1824fda 100644
--- a/apex/media/framework/Android.bp
+++ b/apex/media/framework/Android.bp
@@ -133,9 +133,6 @@ java_sdk_library {
":updatable-media-srcs",
],
- api_lint: {
- enabled: false,
- },
impl_library_visibility: ["//frameworks/av/apex:__subpackages__"],
}
diff --git a/apex/media/framework/api/system-current.txt b/apex/media/framework/api/system-current.txt
index 8d83309f5be0..7df0b4be95c0 100644
--- a/apex/media/framework/api/system-current.txt
+++ b/apex/media/framework/api/system-current.txt
@@ -60,8 +60,8 @@ package android.media {
method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest build();
method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setClientPid(int);
method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setClientUid(int);
- method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setDestinationFileDescriptor(android.os.ParcelFileDescriptor);
- method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setSourceFileDescriptor(android.os.ParcelFileDescriptor);
+ method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setDestinationFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
+ method @NonNull public android.media.MediaTranscodeManager.VideoTranscodingRequest.Builder setSourceFileDescriptor(@NonNull android.os.ParcelFileDescriptor);
}
}
diff --git a/apex/media/framework/java/android/media/MediaTranscodeManager.java b/apex/media/framework/java/android/media/MediaTranscodeManager.java
index 775b0e54b24c..a7de602abc1e 100644
--- a/apex/media/framework/java/android/media/MediaTranscodeManager.java
+++ b/apex/media/framework/java/android/media/MediaTranscodeManager.java
@@ -1207,14 +1207,14 @@ public final class MediaTranscodeManager {
@Override
@NonNull
- public Builder setSourceFileDescriptor(ParcelFileDescriptor fd) {
+ public Builder setSourceFileDescriptor(@NonNull ParcelFileDescriptor fd) {
super.setSourceFileDescriptor(fd);
return self();
}
@Override
@NonNull
- public Builder setDestinationFileDescriptor(ParcelFileDescriptor fd) {
+ public Builder setDestinationFileDescriptor(@NonNull ParcelFileDescriptor fd) {
super.setDestinationFileDescriptor(fd);
return self();
}
diff --git a/boot/Android.bp b/boot/Android.bp
index 4f7c44eca818..71edea27ada6 100644
--- a/boot/Android.bp
+++ b/boot/Android.bp
@@ -23,7 +23,24 @@ package {
default_applicable_licenses: ["frameworks_base_license"],
}
-boot_image {
- name: "framework-boot-image",
- image_name: "boot",
+// This module provides access to information Soong has related to the
+// whole platform bootclasspath. Currently, that information is provided solely
+// through configuration but additional information will be added here.
+//
+// This will provide support for the following:
+// * Hidden API processing for those parts of the bootclasspath that are not
+// part of an APEX.
+// * Compatibility checking to ensure that the hidden API bits encoded into the
+// dex files by the modularized hidden API processing is compatible with the
+// runtimes of earlier releases which expect the bits to have been computed
+// over the entirety of the bootclasspath in one go not separately.
+// * Dexpreopting apps and other libraries not on the platform bootclasspath.
+// * Generating and installing the appropriate files to the device which will
+// allow it to generate the bootclasspath related environment variables
+// dynamically.
+//
+// This module needs to be present in the build for the above processing to be
+// done correctly.
+platform_bootclasspath {
+ name: "platform-bootclasspath",
}
diff --git a/core/api/current.txt b/core/api/current.txt
index 89cf257d894c..893616e05966 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -174,6 +174,7 @@ package android {
field public static final String USE_FULL_SCREEN_INTENT = "android.permission.USE_FULL_SCREEN_INTENT";
field public static final String USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER = "android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER";
field public static final String USE_SIP = "android.permission.USE_SIP";
+ field public static final String UWB_RANGING = "android.permission.UWB_RANGING";
field public static final String VIBRATE = "android.permission.VIBRATE";
field public static final String WAKE_LOCK = "android.permission.WAKE_LOCK";
field public static final String WRITE_APN_SETTINGS = "android.permission.WRITE_APN_SETTINGS";
@@ -303,7 +304,7 @@ package android {
field public static final int allowAudioPlaybackCapture = 16844289; // 0x1010601
field public static final int allowBackup = 16843392; // 0x1010280
field public static final int allowClearUserData = 16842757; // 0x1010005
- field public static final int allowClickWhenDisabled = 16844312; // 0x1010618
+ field public static final int allowClickWhenDisabled;
field public static final int allowEmbedded = 16843765; // 0x10103f5
field public static final int allowNativeHeapPointerTagging = 16844306; // 0x1010612
field public static final int allowParallelSyncs = 16843570; // 0x1010332
@@ -334,7 +335,7 @@ package android {
field public static final int apiKey = 16843281; // 0x1010211
field public static final int appCategory = 16844101; // 0x1010545
field public static final int appComponentFactory = 16844154; // 0x101057a
- field public static final int attributionTags = 16844354; // 0x1010642
+ field public static final int attributionTags;
field public static final int author = 16843444; // 0x10102b4
field public static final int authorities = 16842776; // 0x1010018
field public static final int autoAdvanceViewId = 16843535; // 0x101030f
@@ -400,7 +401,7 @@ package android {
field public static final int calendarViewShown = 16843596; // 0x101034c
field public static final int calendarViewStyle = 16843613; // 0x101035d
field public static final int canControlMagnification = 16844039; // 0x1010507
- field public static final int canPauseRecording = 16844314; // 0x101061a
+ field public static final int canPauseRecording;
field public static final int canPerformGestures = 16844045; // 0x101050d
field public static final int canRecord = 16844060; // 0x101051c
field @Deprecated public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8
@@ -442,7 +443,7 @@ package android {
field public static final int clickable = 16842981; // 0x10100e5
field public static final int clipChildren = 16842986; // 0x10100ea
field public static final int clipOrientation = 16843274; // 0x101020a
- field public static final int clipToOutline = 16844328; // 0x1010628
+ field public static final int clipToOutline;
field public static final int clipToPadding = 16842987; // 0x10100eb
field public static final int closeIcon = 16843905; // 0x1010481
field @Deprecated public static final int codes = 16843330; // 0x1010242
@@ -512,7 +513,7 @@ package android {
field public static final int dashGap = 16843175; // 0x10101a7
field public static final int dashWidth = 16843174; // 0x10101a6
field public static final int data = 16842798; // 0x101002e
- field public static final int dataExtractionRules = 16844350; // 0x101063e
+ field public static final int dataExtractionRules;
field public static final int datePickerDialogTheme = 16843948; // 0x10104ac
field public static final int datePickerMode = 16843955; // 0x10104b3
field public static final int datePickerStyle = 16843612; // 0x101035c
@@ -534,8 +535,8 @@ package android {
field public static final int detailSocialSummary = 16843428; // 0x10102a4
field public static final int detailsElementBackground = 16843598; // 0x101034e
field public static final int dial = 16843010; // 0x1010102
- field public static final int dialTint = 16844342; // 0x1010636
- field public static final int dialTintMode = 16844343; // 0x1010637
+ field public static final int dialTint;
+ field public static final int dialTintMode;
field public static final int dialogCornerRadius = 16844145; // 0x1010571
field public static final int dialogIcon = 16843252; // 0x10101f4
field public static final int dialogLayout = 16843255; // 0x10101f7
@@ -583,7 +584,7 @@ package android {
field public static final int dropDownWidth = 16843362; // 0x1010262
field public static final int duplicateParentState = 16842985; // 0x10100e9
field public static final int duration = 16843160; // 0x1010198
- field public static final int edgeEffectType = 16844329; // 0x1010629
+ field public static final int edgeEffectType;
field public static final int editTextBackground = 16843602; // 0x1010352
field public static final int editTextColor = 16843601; // 0x1010351
field public static final int editTextPreferenceStyle = 16842898; // 0x1010092
@@ -669,7 +670,7 @@ package android {
field @Deprecated public static final int fontProviderCerts = 16844125; // 0x101055d
field @Deprecated public static final int fontProviderPackage = 16844119; // 0x1010557
field @Deprecated public static final int fontProviderQuery = 16844113; // 0x1010551
- field public static final int fontProviderSystemFontFamily = 16844322; // 0x1010622
+ field public static final int fontProviderSystemFontFamily;
field public static final int fontStyle = 16844095; // 0x101053f
field public static final int fontVariationSettings = 16844144; // 0x1010570
field public static final int fontWeight = 16844083; // 0x1010533
@@ -733,14 +734,14 @@ package android {
field public static final int groupIndicator = 16843019; // 0x101010b
field public static final int gwpAsanMode = 16844310; // 0x1010616
field public static final int hand_hour = 16843011; // 0x1010103
- field public static final int hand_hourTint = 16844344; // 0x1010638
- field public static final int hand_hourTintMode = 16844345; // 0x1010639
+ field public static final int hand_hourTint;
+ field public static final int hand_hourTintMode;
field public static final int hand_minute = 16843012; // 0x1010104
- field public static final int hand_minuteTint = 16844346; // 0x101063a
- field public static final int hand_minuteTintMode = 16844347; // 0x101063b
- field public static final int hand_second = 16844323; // 0x1010623
- field public static final int hand_secondTint = 16844348; // 0x101063c
- field public static final int hand_secondTintMode = 16844349; // 0x101063d
+ field public static final int hand_minuteTint;
+ field public static final int hand_minuteTintMode;
+ field public static final int hand_second;
+ field public static final int hand_secondTint;
+ field public static final int hand_secondTintMode;
field public static final int handle = 16843354; // 0x101025a
field public static final int handleProfiling = 16842786; // 0x1010022
field public static final int hapticFeedbackEnabled = 16843358; // 0x101025e
@@ -824,7 +825,7 @@ package android {
field public static final int installLocation = 16843447; // 0x10102b7
field public static final int interactiveUiTimeout = 16844181; // 0x1010595
field public static final int interpolator = 16843073; // 0x1010141
- field public static final int isAccessibilityTool = 16844353; // 0x1010641
+ field public static final int isAccessibilityTool;
field public static final int isAlwaysSyncable = 16843571; // 0x1010333
field public static final int isAsciiCapable = 16843753; // 0x10103e9
field public static final int isAuxiliary = 16843647; // 0x101037f
@@ -866,8 +867,8 @@ package android {
field public static final int keyboardNavigationCluster = 16844096; // 0x1010540
field public static final int keycode = 16842949; // 0x10100c5
field public static final int killAfterRestore = 16843420; // 0x101029c
- field public static final int knownCerts = 16844330; // 0x101062a
- field public static final int lStar = 16844359; // 0x1010647
+ field public static final int knownCerts;
+ field public static final int lStar;
field public static final int label = 16842753; // 0x1010001
field public static final int labelFor = 16843718; // 0x10103c6
field @Deprecated public static final int labelTextSize = 16843317; // 0x1010235
@@ -977,8 +978,8 @@ package android {
field public static final int maxLines = 16843091; // 0x1010153
field public static final int maxLongVersionCode = 16844163; // 0x1010583
field public static final int maxRecents = 16843846; // 0x1010446
- field public static final int maxResizeHeight = 16844339; // 0x1010633
- field public static final int maxResizeWidth = 16844338; // 0x1010632
+ field public static final int maxResizeHeight;
+ field public static final int maxResizeWidth;
field public static final int maxRows = 16843059; // 0x1010133
field public static final int maxSdkVersion = 16843377; // 0x1010271
field public static final int maxWidth = 16843039; // 0x101011f
@@ -987,7 +988,7 @@ package android {
field public static final int measureWithLargestChild = 16843476; // 0x10102d4
field public static final int mediaRouteButtonStyle = 16843693; // 0x10103ad
field public static final int mediaRouteTypes = 16843694; // 0x10103ae
- field public static final int memtagMode = 16844324; // 0x1010624
+ field public static final int memtagMode;
field public static final int menuCategory = 16843230; // 0x10101de
field public static final int mimeGroup = 16844309; // 0x1010615
field public static final int mimeType = 16842790; // 0x1010026
@@ -1011,7 +1012,7 @@ package android {
field public static final int multiArch = 16843918; // 0x101048e
field public static final int multiprocess = 16842771; // 0x1010013
field public static final int name = 16842755; // 0x1010003
- field public static final int nativeHeapZeroInitialized = 16844325; // 0x1010625
+ field public static final int nativeHeapZeroInitialized;
field public static final int navigationBarColor = 16843858; // 0x1010452
field public static final int navigationBarDividerColor = 16844141; // 0x101056d
field public static final int navigationContentDescription = 16843969; // 0x10104c1
@@ -1081,13 +1082,13 @@ package android {
field public static final int panelTextAppearance = 16842850; // 0x1010062
field public static final int parentActivityName = 16843687; // 0x10103a7
field @Deprecated public static final int password = 16843100; // 0x101015c
- field public static final int passwordsActivity = 16844351; // 0x101063f
+ field public static final int passwordsActivity;
field public static final int path = 16842794; // 0x101002a
- field public static final int pathAdvancedPattern = 16844320; // 0x1010620
+ field public static final int pathAdvancedPattern;
field public static final int pathData = 16843781; // 0x1010405
field public static final int pathPattern = 16842796; // 0x101002c
field public static final int pathPrefix = 16842795; // 0x101002b
- field public static final int pathSuffix = 16844318; // 0x101061e
+ field public static final int pathSuffix;
field public static final int patternPathData = 16843978; // 0x10104ca
field public static final int permission = 16842758; // 0x1010006
field public static final int permissionFlags = 16843719; // 0x10103c7
@@ -1124,7 +1125,7 @@ package android {
field public static final int presentationTheme = 16843712; // 0x10103c0
field public static final int preserveLegacyExternalStorage = 16844308; // 0x1010614
field public static final int previewImage = 16843482; // 0x10102da
- field public static final int previewLayout = 16844327; // 0x1010627
+ field public static final int previewLayout;
field public static final int primaryContentAlpha = 16844114; // 0x1010552
field public static final int priority = 16842780; // 0x101001c
field public static final int privateImeOptions = 16843299; // 0x1010223
@@ -1181,8 +1182,8 @@ package android {
field public static final int reqNavigation = 16843306; // 0x101022a
field public static final int reqTouchScreen = 16843303; // 0x1010227
field public static final int requestLegacyExternalStorage = 16844291; // 0x1010603
- field public static final int requestOptimizedExternalStorageAccess = 16844357; // 0x1010645
- field public static final int requireDeviceScreenOn = 16844317; // 0x101061d
+ field public static final int requestOptimizedExternalStorageAccess;
+ field public static final int requireDeviceScreenOn;
field public static final int requireDeviceUnlock = 16843756; // 0x10103ec
field public static final int required = 16843406; // 0x101028e
field public static final int requiredAccountType = 16843734; // 0x10103d6
@@ -1207,7 +1208,7 @@ package android {
field public static final int right = 16843183; // 0x10101af
field public static final int ringtonePreferenceStyle = 16842899; // 0x1010093
field public static final int ringtoneType = 16843257; // 0x10101f9
- field public static final int rollbackDataPolicy = 16844311; // 0x1010617
+ field public static final int rollbackDataPolicy;
field public static final int rotation = 16843558; // 0x1010326
field public static final int rotationAnimation = 16844090; // 0x101053a
field public static final int rotationX = 16843559; // 0x1010327
@@ -1268,7 +1269,7 @@ package android {
field public static final int segmentedButtonStyle = 16843568; // 0x1010330
field public static final int selectAllOnFocus = 16843102; // 0x101015e
field public static final int selectable = 16843238; // 0x10101e6
- field public static final int selectableAsDefault = 16844352; // 0x1010640
+ field public static final int selectableAsDefault;
field public static final int selectableItemBackground = 16843534; // 0x101030e
field public static final int selectableItemBackgroundBorderless = 16843868; // 0x101045c
field @Deprecated public static final int selectedDateVerticalBar = 16843591; // 0x1010347
@@ -1296,7 +1297,7 @@ package android {
field public static final int showDefault = 16843258; // 0x10101fa
field public static final int showDividers = 16843561; // 0x1010329
field public static final int showForAllUsers = 16844015; // 0x10104ef
- field public static final int showInInputMethodPicker = 16844361; // 0x1010649
+ field public static final int showInInputMethodPicker;
field public static final int showMetadataInPreview = 16844079; // 0x101052f
field @Deprecated public static final int showOnLockScreen = 16843721; // 0x10103c9
field public static final int showSilent = 16843259; // 0x10101fb
@@ -1319,17 +1320,17 @@ package android {
field public static final int spinnerMode = 16843505; // 0x10102f1
field public static final int spinnerStyle = 16842881; // 0x1010081
field public static final int spinnersShown = 16843595; // 0x101034b
- field public static final int splashScreenTheme = 16844337; // 0x1010631
+ field public static final int splashScreenTheme;
field public static final int splitMotionEvents = 16843503; // 0x10102ef
field public static final int splitName = 16844105; // 0x1010549
field public static final int splitTrack = 16843852; // 0x101044c
field public static final int spotShadowAlpha = 16843967; // 0x10104bf
field public static final int src = 16843033; // 0x1010119
field public static final int ssp = 16843747; // 0x10103e3
- field public static final int sspAdvancedPattern = 16844321; // 0x1010621
+ field public static final int sspAdvancedPattern;
field public static final int sspPattern = 16843749; // 0x10103e5
field public static final int sspPrefix = 16843748; // 0x10103e4
- field public static final int sspSuffix = 16844319; // 0x101061f
+ field public static final int sspSuffix;
field public static final int stackFromBottom = 16843005; // 0x10100fd
field public static final int stackViewStyle = 16843838; // 0x101043e
field public static final int starStyle = 16842882; // 0x1010082
@@ -1402,7 +1403,7 @@ package android {
field public static final int supportsRtl = 16843695; // 0x10103af
field public static final int supportsSwitchingToNextInputMethod = 16843755; // 0x10103eb
field public static final int supportsUploading = 16843419; // 0x101029b
- field public static final int suppressesSpellChecker = 16844355; // 0x1010643
+ field public static final int suppressesSpellChecker;
field public static final int switchMinWidth = 16843632; // 0x1010370
field public static final int switchPadding = 16843633; // 0x1010371
field public static final int switchPreferenceStyle = 16843629; // 0x101036d
@@ -1417,8 +1418,8 @@ package android {
field public static final int tabWidgetStyle = 16842883; // 0x1010083
field public static final int tag = 16842961; // 0x10100d1
field public static final int targetActivity = 16843266; // 0x1010202
- field public static final int targetCellHeight = 16844341; // 0x1010635
- field public static final int targetCellWidth = 16844340; // 0x1010634
+ field public static final int targetCellHeight;
+ field public static final int targetCellWidth;
field public static final int targetClass = 16842799; // 0x101002f
field @Deprecated public static final int targetDescriptions = 16843680; // 0x10103a0
field public static final int targetId = 16843740; // 0x10103dc
@@ -1588,7 +1589,7 @@ package android {
field public static final int useLevel = 16843167; // 0x101019f
field public static final int userVisible = 16843409; // 0x1010291
field public static final int usesCleartextTraffic = 16844012; // 0x10104ec
- field public static final int usesPermissionFlags = 16844356; // 0x1010644
+ field public static final int usesPermissionFlags;
field public static final int value = 16842788; // 0x1010024
field public static final int valueFrom = 16843486; // 0x10102de
field public static final int valueTo = 16843487; // 0x10102df
@@ -1643,10 +1644,10 @@ package android {
field public static final int windowAllowReturnTransitionOverlap = 16843835; // 0x101043b
field public static final int windowAnimationStyle = 16842926; // 0x10100ae
field public static final int windowBackground = 16842836; // 0x1010054
- field public static final int windowBackgroundBlurRadius = 16844331; // 0x101062b
+ field public static final int windowBackgroundBlurRadius;
field public static final int windowBackgroundFallback = 16844035; // 0x1010503
- field public static final int windowBlurBehindEnabled = 16844316; // 0x101061c
- field public static final int windowBlurBehindRadius = 16844315; // 0x101061b
+ field public static final int windowBlurBehindEnabled;
+ field public static final int windowBlurBehindRadius;
field public static final int windowClipToOutline = 16843947; // 0x10104ab
field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b
field public static final int windowContentOverlay = 16842841; // 0x1010059
@@ -1665,7 +1666,7 @@ package android {
field public static final int windowHideAnimation = 16842935; // 0x10100b7
field public static final int windowIsFloating = 16842839; // 0x1010057
field public static final int windowIsTranslucent = 16842840; // 0x1010058
- field public static final int windowLayoutAffinity = 16844313; // 0x1010619
+ field public static final int windowLayoutAffinity;
field public static final int windowLayoutInDisplayCutoutMode = 16844166; // 0x1010586
field public static final int windowLightNavigationBar = 16844140; // 0x101056c
field public static final int windowLightStatusBar = 16844000; // 0x10104e0
@@ -1684,11 +1685,11 @@ package android {
field public static final int windowShowAnimation = 16842934; // 0x10100b6
field public static final int windowShowWallpaper = 16843410; // 0x1010292
field public static final int windowSoftInputMode = 16843307; // 0x101022b
- field public static final int windowSplashScreenAnimatedIcon = 16844333; // 0x101062d
- field public static final int windowSplashScreenAnimationDuration = 16844334; // 0x101062e
- field public static final int windowSplashScreenBackground = 16844332; // 0x101062c
- field public static final int windowSplashScreenBrandingImage = 16844335; // 0x101062f
- field public static final int windowSplashScreenIconBackgroundColor = 16844336; // 0x1010630
+ field public static final int windowSplashScreenAnimatedIcon;
+ field public static final int windowSplashScreenAnimationDuration;
+ field public static final int windowSplashScreenBackground;
+ field public static final int windowSplashScreenBrandingImage;
+ field public static final int windowSplashScreenIconBackgroundColor;
field @Deprecated public static final int windowSplashscreenContent = 16844132; // 0x1010564
field @Deprecated public static final int windowSwipeToDismiss = 16843763; // 0x10103f3
field public static final int windowTitleBackgroundStyle = 16842844; // 0x101005c
@@ -1736,66 +1737,66 @@ package android {
field @Deprecated public static final int secondary_text_dark_nodisable = 17170438; // 0x1060006
field @Deprecated public static final int secondary_text_light = 17170439; // 0x1060007
field @Deprecated public static final int secondary_text_light_nodisable = 17170440; // 0x1060008
- field public static final int system_accent1_0 = 17170485; // 0x1060035
- field public static final int system_accent1_100 = 17170487; // 0x1060037
- field public static final int system_accent1_1000 = 17170496; // 0x1060040
- field public static final int system_accent1_200 = 17170488; // 0x1060038
- field public static final int system_accent1_300 = 17170489; // 0x1060039
- field public static final int system_accent1_400 = 17170490; // 0x106003a
- field public static final int system_accent1_50 = 17170486; // 0x1060036
- field public static final int system_accent1_500 = 17170491; // 0x106003b
- field public static final int system_accent1_600 = 17170492; // 0x106003c
- field public static final int system_accent1_700 = 17170493; // 0x106003d
- field public static final int system_accent1_800 = 17170494; // 0x106003e
- field public static final int system_accent1_900 = 17170495; // 0x106003f
- field public static final int system_accent2_0 = 17170497; // 0x1060041
- field public static final int system_accent2_100 = 17170499; // 0x1060043
- field public static final int system_accent2_1000 = 17170508; // 0x106004c
- field public static final int system_accent2_200 = 17170500; // 0x1060044
- field public static final int system_accent2_300 = 17170501; // 0x1060045
- field public static final int system_accent2_400 = 17170502; // 0x1060046
- field public static final int system_accent2_50 = 17170498; // 0x1060042
- field public static final int system_accent2_500 = 17170503; // 0x1060047
- field public static final int system_accent2_600 = 17170504; // 0x1060048
- field public static final int system_accent2_700 = 17170505; // 0x1060049
- field public static final int system_accent2_800 = 17170506; // 0x106004a
- field public static final int system_accent2_900 = 17170507; // 0x106004b
- field public static final int system_accent3_0 = 17170509; // 0x106004d
- field public static final int system_accent3_100 = 17170511; // 0x106004f
- field public static final int system_accent3_1000 = 17170520; // 0x1060058
- field public static final int system_accent3_200 = 17170512; // 0x1060050
- field public static final int system_accent3_300 = 17170513; // 0x1060051
- field public static final int system_accent3_400 = 17170514; // 0x1060052
- field public static final int system_accent3_50 = 17170510; // 0x106004e
- field public static final int system_accent3_500 = 17170515; // 0x1060053
- field public static final int system_accent3_600 = 17170516; // 0x1060054
- field public static final int system_accent3_700 = 17170517; // 0x1060055
- field public static final int system_accent3_800 = 17170518; // 0x1060056
- field public static final int system_accent3_900 = 17170519; // 0x1060057
- field public static final int system_neutral1_0 = 17170461; // 0x106001d
- field public static final int system_neutral1_100 = 17170463; // 0x106001f
- field public static final int system_neutral1_1000 = 17170472; // 0x1060028
- field public static final int system_neutral1_200 = 17170464; // 0x1060020
- field public static final int system_neutral1_300 = 17170465; // 0x1060021
- field public static final int system_neutral1_400 = 17170466; // 0x1060022
- field public static final int system_neutral1_50 = 17170462; // 0x106001e
- field public static final int system_neutral1_500 = 17170467; // 0x1060023
- field public static final int system_neutral1_600 = 17170468; // 0x1060024
- field public static final int system_neutral1_700 = 17170469; // 0x1060025
- field public static final int system_neutral1_800 = 17170470; // 0x1060026
- field public static final int system_neutral1_900 = 17170471; // 0x1060027
- field public static final int system_neutral2_0 = 17170473; // 0x1060029
- field public static final int system_neutral2_100 = 17170475; // 0x106002b
- field public static final int system_neutral2_1000 = 17170484; // 0x1060034
- field public static final int system_neutral2_200 = 17170476; // 0x106002c
- field public static final int system_neutral2_300 = 17170477; // 0x106002d
- field public static final int system_neutral2_400 = 17170478; // 0x106002e
- field public static final int system_neutral2_50 = 17170474; // 0x106002a
- field public static final int system_neutral2_500 = 17170479; // 0x106002f
- field public static final int system_neutral2_600 = 17170480; // 0x1060030
- field public static final int system_neutral2_700 = 17170481; // 0x1060031
- field public static final int system_neutral2_800 = 17170482; // 0x1060032
- field public static final int system_neutral2_900 = 17170483; // 0x1060033
+ field public static final int system_accent1_0;
+ field public static final int system_accent1_100;
+ field public static final int system_accent1_1000;
+ field public static final int system_accent1_200;
+ field public static final int system_accent1_300;
+ field public static final int system_accent1_400;
+ field public static final int system_accent1_50;
+ field public static final int system_accent1_500;
+ field public static final int system_accent1_600;
+ field public static final int system_accent1_700;
+ field public static final int system_accent1_800;
+ field public static final int system_accent1_900;
+ field public static final int system_accent2_0;
+ field public static final int system_accent2_100;
+ field public static final int system_accent2_1000;
+ field public static final int system_accent2_200;
+ field public static final int system_accent2_300;
+ field public static final int system_accent2_400;
+ field public static final int system_accent2_50;
+ field public static final int system_accent2_500;
+ field public static final int system_accent2_600;
+ field public static final int system_accent2_700;
+ field public static final int system_accent2_800;
+ field public static final int system_accent2_900;
+ field public static final int system_accent3_0;
+ field public static final int system_accent3_100;
+ field public static final int system_accent3_1000;
+ field public static final int system_accent3_200;
+ field public static final int system_accent3_300;
+ field public static final int system_accent3_400;
+ field public static final int system_accent3_50;
+ field public static final int system_accent3_500;
+ field public static final int system_accent3_600;
+ field public static final int system_accent3_700;
+ field public static final int system_accent3_800;
+ field public static final int system_accent3_900;
+ field public static final int system_neutral1_0;
+ field public static final int system_neutral1_100;
+ field public static final int system_neutral1_1000;
+ field public static final int system_neutral1_200;
+ field public static final int system_neutral1_300;
+ field public static final int system_neutral1_400;
+ field public static final int system_neutral1_50;
+ field public static final int system_neutral1_500;
+ field public static final int system_neutral1_600;
+ field public static final int system_neutral1_700;
+ field public static final int system_neutral1_800;
+ field public static final int system_neutral1_900;
+ field public static final int system_neutral2_0;
+ field public static final int system_neutral2_100;
+ field public static final int system_neutral2_1000;
+ field public static final int system_neutral2_200;
+ field public static final int system_neutral2_300;
+ field public static final int system_neutral2_400;
+ field public static final int system_neutral2_50;
+ field public static final int system_neutral2_500;
+ field public static final int system_neutral2_600;
+ field public static final int system_neutral2_700;
+ field public static final int system_neutral2_800;
+ field public static final int system_neutral2_900;
field public static final int tab_indicator_text = 17170441; // 0x1060009
field @Deprecated public static final int tertiary_text_dark = 17170448; // 0x1060010
field @Deprecated public static final int tertiary_text_light = 17170449; // 0x1060011
@@ -1811,9 +1812,9 @@ package android {
field public static final int dialog_min_width_minor = 17104900; // 0x1050004
field public static final int notification_large_icon_height = 17104902; // 0x1050006
field public static final int notification_large_icon_width = 17104901; // 0x1050005
- field public static final int system_app_widget_background_radius = 17104904; // 0x1050008
- field public static final int system_app_widget_inner_radius = 17104905; // 0x1050009
- field public static final int system_app_widget_internal_padding = 17104906; // 0x105000a
+ field public static final int system_app_widget_background_radius;
+ field public static final int system_app_widget_inner_radius;
+ field public static final int system_app_widget_internal_padding;
field public static final int thumbnail_height = 17104897; // 0x1050001
field public static final int thumbnail_width = 17104898; // 0x1050002
}
@@ -18660,6 +18661,7 @@ package android.hardware.camera2.params {
method @NonNull public java.util.List<android.util.Size> getAvailableSizes();
method public int getFormat();
method public boolean isInput();
+ method public boolean isMaximumSize();
method public boolean isUltraHighResolution();
}
@@ -27093,12 +27095,13 @@ package android.net.vcn {
public final class VcnGatewayConnectionConfig {
method @NonNull public int[] getExposedCapabilities();
+ method @NonNull public String getGatewayConnectionName();
method @IntRange(from=android.net.vcn.VcnGatewayConnectionConfig.MIN_MTU_V6) public int getMaxMtu();
method @NonNull public long[] getRetryInterval();
}
public static final class VcnGatewayConnectionConfig.Builder {
- ctor public VcnGatewayConnectionConfig.Builder(@NonNull android.net.vcn.VcnControlPlaneConfig);
+ ctor public VcnGatewayConnectionConfig.Builder(@NonNull String, @NonNull android.net.vcn.VcnControlPlaneConfig);
method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder addExposedCapability(int);
method @NonNull public android.net.vcn.VcnGatewayConnectionConfig build();
method @NonNull public android.net.vcn.VcnGatewayConnectionConfig.Builder removeExposedCapability(int);
@@ -27122,7 +27125,7 @@ package android.net.vcn {
public abstract static class VcnManager.VcnStatusCallback {
ctor public VcnManager.VcnStatusCallback();
- method public abstract void onGatewayConnectionError(@NonNull int[], int, @Nullable Throwable);
+ method public abstract void onGatewayConnectionError(@NonNull String, int, @Nullable Throwable);
method public abstract void onStatusChanged(int);
}
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 2551b77b5353..3f2aa79da3fc 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -313,15 +313,15 @@ package android {
public static final class R.attr {
field public static final int allowClearUserDataOnFailedRestore = 16844288; // 0x1010600
- field public static final int hotwordDetectionService = 16844326; // 0x1010626
+ field public static final int hotwordDetectionService;
field public static final int isVrOnly = 16844152; // 0x1010578
field public static final int minExtensionVersion = 16844305; // 0x1010611
- field public static final int playHomeTransitionSound = 16844358; // 0x1010646
+ field public static final int playHomeTransitionSound;
field public static final int requiredSystemPropertyName = 16844133; // 0x1010565
field public static final int requiredSystemPropertyValue = 16844134; // 0x1010566
field public static final int sdkVersion = 16844304; // 0x1010610
field public static final int supportsAmbientMode = 16844173; // 0x101058d
- field public static final int throttleDurationMillis = 16844360; // 0x1010648
+ field public static final int throttleDurationMillis;
field public static final int userRestriction = 16844164; // 0x1010584
}
@@ -350,8 +350,8 @@ package android {
}
public static final class R.string {
- field public static final int config_customMediaKeyDispatcher = 17039404; // 0x104002c
- field public static final int config_customMediaSessionPolicyProvider = 17039405; // 0x104002d
+ field public static final int config_customMediaKeyDispatcher;
+ field public static final int config_customMediaSessionPolicyProvider;
field public static final int config_defaultAssistant = 17039393; // 0x1040021
field public static final int config_defaultBrowser = 17039394; // 0x1040022
field public static final int config_defaultCallRedirection = 17039397; // 0x1040025
@@ -364,15 +364,15 @@ package android {
field public static final int config_helpIntentNameKey = 17039390; // 0x104001e
field public static final int config_helpPackageNameKey = 17039387; // 0x104001b
field public static final int config_helpPackageNameValue = 17039388; // 0x104001c
- field public static final int config_systemAutomotiveCluster = 17039400; // 0x1040028
- field public static final int config_systemAutomotiveProjection = 17039401; // 0x1040029
- field public static final int config_systemContacts = 17039403; // 0x104002b
+ field public static final int config_systemAutomotiveCluster;
+ field public static final int config_systemAutomotiveProjection;
+ field public static final int config_systemContacts;
field public static final int config_systemGallery = 17039399; // 0x1040027
- field public static final int config_systemShell = 17039402; // 0x104002a
- field public static final int config_systemSpeechRecognizer = 17039406; // 0x104002e
- field public static final int config_systemTelevisionNotificationHandler = 17039409; // 0x1040031
- field public static final int config_systemWellbeing = 17039408; // 0x1040030
- field public static final int config_systemWifiCoexManager = 17039407; // 0x104002f
+ field public static final int config_systemShell;
+ field public static final int config_systemSpeechRecognizer;
+ field public static final int config_systemTelevisionNotificationHandler;
+ field public static final int config_systemWellbeing;
+ field public static final int config_systemWifiCoexManager;
}
public static final class R.style {
@@ -5274,7 +5274,7 @@ package android.media {
method @NonNull public java.util.List<android.media.MediaRoute2Info> getAllRoutes();
method @Nullable public String getClientPackageName();
method @Nullable public android.media.MediaRouter2.RoutingController getController(@NonNull String);
- method @Nullable public static android.media.MediaRouter2 getInstance(@NonNull android.content.Context, @NonNull String);
+ method @Nullable @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING) public static android.media.MediaRouter2 getInstance(@NonNull android.content.Context, @NonNull String);
method public void setRouteVolume(@NonNull android.media.MediaRoute2Info, int);
method public void startScan();
method public void stopScan();
@@ -8766,6 +8766,8 @@ package android.permission {
public final class PermissionControllerManager {
method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void applyStagedRuntimePermissionBackup(@NonNull String, @NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Boolean>);
+ method @Nullable public String getGroupOfPlatformPermission(@NonNull String);
+ method @NonNull public java.util.Set<java.lang.String> getPlatformPermissionsForGroup(@NonNull String);
method @RequiresPermission(android.Manifest.permission.GET_RUNTIME_PERMISSIONS) public void getRuntimePermissionBackup(@NonNull android.os.UserHandle, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<byte[]>);
method @RequiresPermission(android.Manifest.permission.REVOKE_RUNTIME_PERMISSIONS) public void revokeRuntimePermissions(@NonNull java.util.Map<java.lang.String,java.util.List<java.lang.String>>, boolean, int, @NonNull java.util.concurrent.Executor, @NonNull android.permission.PermissionControllerManager.OnRevokeRuntimePermissionsCallback);
method @RequiresPermission(anyOf={android.Manifest.permission.GRANT_RUNTIME_PERMISSIONS, android.Manifest.permission.RESTORE_RUNTIME_PERMISSIONS}) public void stageAndApplyRuntimePermissionsBackup(@NonNull byte[], @NonNull android.os.UserHandle);
@@ -8787,7 +8789,9 @@ package android.permission {
method @NonNull public final android.os.IBinder onBind(android.content.Intent);
method @BinderThread public abstract void onCountPermissionApps(@NonNull java.util.List<java.lang.String>, int, @NonNull java.util.function.IntConsumer);
method @BinderThread public abstract void onGetAppPermissions(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionPresentationInfo>>);
+ method @BinderThread public void onGetGroupOfPlatformPermission(@NonNull String, @NonNull java.util.function.Consumer<java.lang.String>);
method @BinderThread public abstract void onGetPermissionUsages(boolean, long, @NonNull java.util.function.Consumer<java.util.List<android.permission.RuntimePermissionUsageInfo>>);
+ method @BinderThread public void onGetPlatformPermissionsForGroup(@NonNull String, @NonNull java.util.function.Consumer<java.util.List<java.lang.String>>);
method @BinderThread public abstract void onGetRuntimePermissionsBackup(@NonNull android.os.UserHandle, @NonNull java.io.OutputStream, @NonNull Runnable);
method @BinderThread public abstract void onGrantOrUpgradeDefaultRuntimePermissions(@NonNull Runnable);
method @BinderThread public void onOneTimePermissionSessionTimeout(@NonNull String);
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index 6745a69e001e..7b6f9b3f2b26 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -58,8 +58,8 @@ package android {
public static final class R.string {
field public static final int config_defaultAssistant = 17039393; // 0x1040021
field public static final int config_defaultDialer = 17039395; // 0x1040023
- field public static final int config_systemAutomotiveCluster = 17039400; // 0x1040028
- field public static final int config_systemAutomotiveProjection = 17039401; // 0x1040029
+ field public static final int config_systemAutomotiveCluster;
+ field public static final int config_systemAutomotiveProjection;
field public static final int config_systemGallery = 17039399; // 0x1040027
}
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index d5368213be08..483defab43c9 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -886,7 +886,7 @@ public abstract class AccessibilityService extends Service {
* them, otherwise an empty list.
*/
public List<AccessibilityWindowInfo> getWindows() {
- return AccessibilityInteractionClient.getInstance().getWindows(mConnectionId);
+ return AccessibilityInteractionClient.getInstance(this).getWindows(mConnectionId);
}
/**
@@ -914,7 +914,8 @@ public abstract class AccessibilityService extends Service {
*/
@NonNull
public final SparseArray<List<AccessibilityWindowInfo>> getWindowsOnAllDisplays() {
- return AccessibilityInteractionClient.getInstance().getWindowsOnAllDisplays(mConnectionId);
+ return AccessibilityInteractionClient.getInstance(this).getWindowsOnAllDisplays(
+ mConnectionId);
}
/**
@@ -940,7 +941,8 @@ public abstract class AccessibilityService extends Service {
* @return The root node if this service can retrieve window content.
*/
public AccessibilityNodeInfo getRootInActiveWindow() {
- return AccessibilityInteractionClient.getInstance().getRootInActiveWindow(mConnectionId);
+ return AccessibilityInteractionClient.getInstance(this).getRootInActiveWindow(
+ mConnectionId);
}
/**
@@ -949,7 +951,7 @@ public abstract class AccessibilityService extends Service {
*/
public final void disableSelf() {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (connection != null) {
try {
connection.disableSelf();
@@ -970,7 +972,7 @@ public abstract class AccessibilityService extends Service {
private void setDefaultTokenInternal(Context context, int displayId) {
final WindowManagerImpl wm = (WindowManagerImpl) context.getSystemService(WINDOW_SERVICE);
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
IBinder token = null;
if (connection != null) {
synchronized (mLock) {
@@ -1042,7 +1044,7 @@ public abstract class AccessibilityService extends Service {
public final @NonNull FingerprintGestureController getFingerprintGestureController() {
if (mFingerprintGestureController == null) {
mFingerprintGestureController = new FingerprintGestureController(
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId));
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId));
}
return mFingerprintGestureController;
}
@@ -1074,8 +1076,7 @@ public abstract class AccessibilityService extends Service {
@Nullable GestureResultCallback callback,
@Nullable Handler handler) {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
- mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (connection == null) {
return false;
}
@@ -1287,7 +1288,7 @@ public abstract class AccessibilityService extends Service {
private void setMagnificationCallbackEnabled(boolean enabled) {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1348,7 +1349,7 @@ public abstract class AccessibilityService extends Service {
*/
public float getScale() {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1377,7 +1378,7 @@ public abstract class AccessibilityService extends Service {
*/
public float getCenterX() {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1406,7 +1407,7 @@ public abstract class AccessibilityService extends Service {
*/
public float getCenterY() {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1440,7 +1441,7 @@ public abstract class AccessibilityService extends Service {
@NonNull
public Region getMagnificationRegion() {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1469,7 +1470,7 @@ public abstract class AccessibilityService extends Service {
*/
public boolean reset(boolean animate) {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1497,7 +1498,7 @@ public abstract class AccessibilityService extends Service {
*/
public boolean setScale(float scale, boolean animate) {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1529,7 +1530,7 @@ public abstract class AccessibilityService extends Service {
*/
public boolean setCenter(float centerX, float centerY, boolean animate) {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1701,7 +1702,7 @@ public abstract class AccessibilityService extends Service {
private void setSoftKeyboardCallbackEnabled(boolean enabled) {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1760,7 +1761,7 @@ public abstract class AccessibilityService extends Service {
@SoftKeyboardShowMode
public int getShowMode() {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1789,7 +1790,7 @@ public abstract class AccessibilityService extends Service {
*/
public boolean setShowMode(@SoftKeyboardShowMode int showMode) {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1835,7 +1836,7 @@ public abstract class AccessibilityService extends Service {
*/
public boolean switchToInputMethod(@NonNull String imeId) {
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
+ AccessibilityInteractionClient.getInstance(mService).getConnection(
mService.mConnectionId);
if (connection != null) {
try {
@@ -1888,7 +1889,7 @@ public abstract class AccessibilityService extends Service {
displayId);
if (controller == null) {
controller = new AccessibilityButtonController(
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId));
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId));
mAccessibilityButtonControllers.put(displayId, controller);
}
return controller;
@@ -1922,7 +1923,7 @@ public abstract class AccessibilityService extends Service {
*/
public final @NonNull List<AccessibilityAction> getSystemActions() {
IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (connection != null) {
try {
return connection.getSystemActions();
@@ -1955,7 +1956,7 @@ public abstract class AccessibilityService extends Service {
*/
public final boolean performGlobalAction(int action) {
IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (connection != null) {
try {
return connection.performGlobalAction(action);
@@ -1996,7 +1997,7 @@ public abstract class AccessibilityService extends Service {
* @see AccessibilityNodeInfo#FOCUS_ACCESSIBILITY
*/
public AccessibilityNodeInfo findFocus(int focus) {
- return AccessibilityInteractionClient.getInstance().findFocus(mConnectionId,
+ return AccessibilityInteractionClient.getInstance(this).findFocus(mConnectionId,
AccessibilityWindowInfo.ANY_WINDOW_ID, AccessibilityNodeInfo.ROOT_NODE_ID, focus);
}
@@ -2012,7 +2013,7 @@ public abstract class AccessibilityService extends Service {
*/
public final AccessibilityServiceInfo getServiceInfo() {
IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (connection != null) {
try {
return connection.getServiceInfo();
@@ -2044,12 +2045,12 @@ public abstract class AccessibilityService extends Service {
*/
private void sendServiceInfo() {
IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (mInfo != null && connection != null) {
try {
connection.setServiceInfo(mInfo);
mInfo = null;
- AccessibilityInteractionClient.getInstance().clearCache();
+ AccessibilityInteractionClient.getInstance(this).clearCache();
} catch (RemoteException re) {
Log.w(LOG_TAG, "Error while setting AccessibilityServiceInfo", re);
re.rethrowFromSystemServer();
@@ -2096,8 +2097,7 @@ public abstract class AccessibilityService extends Service {
Preconditions.checkNotNull(executor, "executor cannot be null");
Preconditions.checkNotNull(callback, "callback cannot be null");
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(
- mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (connection == null) {
sendScreenshotFailure(ERROR_TAKE_SCREENSHOT_INTERNAL_ERROR, executor, callback);
return;
@@ -2136,7 +2136,7 @@ public abstract class AccessibilityService extends Service {
*/
public void setAccessibilityFocusAppearance(int strokeWidth, @ColorInt int color) {
IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (connection != null) {
try {
connection.setFocusAppearance(strokeWidth, color);
@@ -2261,12 +2261,14 @@ public abstract class AccessibilityService extends Service {
private final HandlerCaller mCaller;
private final Callbacks mCallback;
+ private final Context mContext;
private int mConnectionId = AccessibilityInteractionClient.NO_ID;
public IAccessibilityServiceClientWrapper(Context context, Looper looper,
Callbacks callback) {
mCallback = callback;
+ mContext = context;
mCaller = new HandlerCaller(context, looper, this, true /*asyncHandler*/);
}
@@ -2366,7 +2368,8 @@ public abstract class AccessibilityService extends Service {
boolean serviceWantsEvent = message.arg1 != 0;
if (event != null) {
// Send the event to AccessibilityCache via AccessibilityInteractionClient
- AccessibilityInteractionClient.getInstance().onAccessibilityEvent(event);
+ AccessibilityInteractionClient.getInstance(mContext).onAccessibilityEvent(
+ event);
if (serviceWantsEvent
&& (mConnectionId != AccessibilityInteractionClient.NO_ID)) {
// Send the event to AccessibilityService
@@ -2395,15 +2398,15 @@ public abstract class AccessibilityService extends Service {
IBinder windowToken = (IBinder) args.arg2;
args.recycle();
if (connection != null) {
- AccessibilityInteractionClient.getInstance().addConnection(mConnectionId,
- connection);
+ AccessibilityInteractionClient.getInstance(mContext).addConnection(
+ mConnectionId, connection);
mCallback.init(mConnectionId, windowToken);
mCallback.onServiceConnected();
} else {
- AccessibilityInteractionClient.getInstance().removeConnection(
+ AccessibilityInteractionClient.getInstance(mContext).removeConnection(
mConnectionId);
mConnectionId = AccessibilityInteractionClient.NO_ID;
- AccessibilityInteractionClient.getInstance().clearCache();
+ AccessibilityInteractionClient.getInstance(mContext).clearCache();
mCallback.init(AccessibilityInteractionClient.NO_ID, null);
}
return;
@@ -2415,14 +2418,14 @@ public abstract class AccessibilityService extends Service {
return;
}
case DO_CLEAR_ACCESSIBILITY_CACHE: {
- AccessibilityInteractionClient.getInstance().clearCache();
+ AccessibilityInteractionClient.getInstance(mContext).clearCache();
return;
}
case DO_ON_KEY_EVENT: {
KeyEvent event = (KeyEvent) message.obj;
try {
IAccessibilityServiceConnection connection = AccessibilityInteractionClient
- .getInstance().getConnection(mConnectionId);
+ .getInstance(mContext).getConnection(mConnectionId);
if (connection != null) {
final boolean result = mCallback.onKeyEvent(event);
final int sequence = message.arg1;
@@ -2637,7 +2640,7 @@ public abstract class AccessibilityService extends Service {
public void setGestureDetectionPassthroughRegion(int displayId, @NonNull Region region) {
Preconditions.checkNotNull(region, "region cannot be null");
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (connection != null) {
try {
connection.setGestureDetectionPassthroughRegion(displayId, region);
@@ -2663,7 +2666,7 @@ public abstract class AccessibilityService extends Service {
public void setTouchExplorationPassthroughRegion(int displayId, @NonNull Region region) {
Preconditions.checkNotNull(region, "region cannot be null");
final IAccessibilityServiceConnection connection =
- AccessibilityInteractionClient.getInstance().getConnection(mConnectionId);
+ AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId);
if (connection != null) {
try {
connection.setTouchExplorationPassthroughRegion(displayId, region);
diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
index ab21dc9f14ad..923b6f41414a 100644
--- a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
+++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
@@ -117,4 +117,7 @@ interface IAccessibilityServiceConnection {
void setTouchExplorationPassthroughRegion(int displayId, in Region region);
void setFocusAppearance(int strokeWidth, int color);
+
+ oneway void logTrace(long timestamp, String where, String callingParams, int processId,
+ long threadId, int callingUid, in Bundle serializedCallingStackInBundle);
}
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 6ce0b2283603..5a35bbed3fa4 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -1223,8 +1223,11 @@ public class AppOpsManager {
public static final int OP_MANAGE_MEDIA = AppProtoEnums.APP_OP_MANAGE_MEDIA;
/** @hide */
+ public static final int OP_UWB_RANGING = AppProtoEnums.APP_OP_UWB_RANGING;
+
+ /** @hide */
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
- public static final int _NUM_OP = 112;
+ public static final int _NUM_OP = 113;
/** Access to coarse location information. */
public static final String OPSTR_COARSE_LOCATION = "android:coarse_location";
@@ -1637,6 +1640,8 @@ public class AppOpsManager {
* @hide
*/
public static final String OPSTR_MANAGE_MEDIA = "android:manage_media";
+ /** @hide */
+ public static final String OPSTR_UWB_RANGING = "android:uwb_ranging";
/** {@link #sAppOpsToNote} not initialized yet for this op */
private static final byte SHOULD_COLLECT_NOTE_OP_NOT_INITIALIZED = 0;
@@ -1706,6 +1711,7 @@ public class AppOpsManager {
// Nearby devices
OP_BLUETOOTH_SCAN,
OP_BLUETOOTH_CONNECT,
+ OP_UWB_RANGING,
// APPOP PERMISSIONS
OP_ACCESS_NOTIFICATIONS,
@@ -1846,6 +1852,7 @@ public class AppOpsManager {
OP_COARSE_LOCATION, // OP_COARSE_LOCATION_SOURCE
OP_MANAGE_MEDIA, // MANAGE_MEDIA
OP_BLUETOOTH_CONNECT, // OP_BLUETOOTH_CONNECT
+ OP_UWB_RANGING, // OP_UWB_RANGING
};
/**
@@ -1964,6 +1971,7 @@ public class AppOpsManager {
OPSTR_COARSE_LOCATION_SOURCE,
OPSTR_MANAGE_MEDIA,
OPSTR_BLUETOOTH_CONNECT,
+ OPSTR_UWB_RANGING,
};
/**
@@ -2083,6 +2091,7 @@ public class AppOpsManager {
"COARSE_LOCATION_SOURCE",
"MANAGE_MEDIA",
"BLUETOOTH_CONNECT",
+ "UWB_RANGING"
};
/**
@@ -2203,6 +2212,7 @@ public class AppOpsManager {
null, // no permission for OP_ACCESS_COARSE_LOCATION_SOURCE,
Manifest.permission.MANAGE_MEDIA,
Manifest.permission.BLUETOOTH_CONNECT,
+ Manifest.permission.UWB_RANGING,
};
/**
@@ -2323,6 +2333,7 @@ public class AppOpsManager {
null, // ACCESS_COARSE_LOCATION_SOURCE
null, // MANAGE_MEDIA
null, // BLUETOOTH_CONNECT
+ null, // UWB_RANGING
};
/**
@@ -2442,6 +2453,7 @@ public class AppOpsManager {
null, // ACCESS_COARSE_LOCATION_SOURCE
null, // MANAGE_MEDIA
null, // BLUETOOTH_CONNECT
+ null, // UWB_RANGING
};
/**
@@ -2560,6 +2572,7 @@ public class AppOpsManager {
AppOpsManager.MODE_ALLOWED, // ACCESS_COARSE_LOCATION_SOURCE
AppOpsManager.MODE_DEFAULT, // MANAGE_MEDIA
AppOpsManager.MODE_ALLOWED, // BLUETOOTH_CONNECT
+ AppOpsManager.MODE_ALLOWED, // UWB_RANGING
};
/**
@@ -2682,6 +2695,7 @@ public class AppOpsManager {
false, // ACCESS_COARSE_LOCATION_SOURCE
false, // MANAGE_MEDIA
false, // BLUETOOTH_CONNECT
+ false, // UWB_RANGING
};
/**
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 2fbea28f34d5..92f707e543c8 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -3744,10 +3744,8 @@ public class Notification implements Parcelable
private int mTextColorsAreForBackground = COLOR_INVALID;
private int mPrimaryTextColor = COLOR_INVALID;
private int mSecondaryTextColor = COLOR_INVALID;
- private boolean mRebuildStyledRemoteViews;
private boolean mTintActionButtons;
- private boolean mTintWithThemeAccent;
private boolean mInNightMode;
/**
@@ -3783,7 +3781,6 @@ public class Notification implements Parcelable
mContext = context;
Resources res = mContext.getResources();
mTintActionButtons = res.getBoolean(R.bool.config_tintNotificationActionButtons);
- mTintWithThemeAccent = res.getBoolean(R.bool.config_tintNotificationsWithTheme);
if (res.getBoolean(R.bool.config_enableNightMode)) {
Configuration currentConfig = res.getConfiguration();
@@ -5208,15 +5205,21 @@ public class Notification implements Parcelable
|| mSecondaryTextColor == COLOR_INVALID
|| mTextColorsAreForBackground != backgroundColor) {
mTextColorsAreForBackground = backgroundColor;
- mPrimaryTextColor = ContrastColorUtil.resolvePrimaryColor(mContext,
+ int defaultPrimaryTextColor = ContrastColorUtil.resolvePrimaryColor(mContext,
backgroundColor, mInNightMode);
- mSecondaryTextColor = ContrastColorUtil.resolveSecondaryColor(mContext,
+ int defaultSecondaryTextColor = ContrastColorUtil.resolveSecondaryColor(mContext,
backgroundColor, mInNightMode);
- if (backgroundColor != COLOR_DEFAULT && isColorized(p)) {
+ boolean colorized = backgroundColor != COLOR_DEFAULT;
+ if (colorized) {
mPrimaryTextColor = ContrastColorUtil.findAlphaToMeetContrast(
- mPrimaryTextColor, backgroundColor, 4.5);
+ defaultPrimaryTextColor, backgroundColor, 4.5);
mSecondaryTextColor = ContrastColorUtil.findAlphaToMeetContrast(
- mSecondaryTextColor, backgroundColor, 4.5);
+ defaultSecondaryTextColor, backgroundColor, 4.5);
+ } else {
+ mPrimaryTextColor = obtainThemeColor(R.attr.textColorPrimary,
+ defaultPrimaryTextColor);
+ mSecondaryTextColor = obtainThemeColor(R.attr.textColorSecondary,
+ defaultSecondaryTextColor);
}
}
}
@@ -5243,11 +5246,9 @@ public class Notification implements Parcelable
contentView.setProgressBar(R.id.progress, max, progress, ind);
contentView.setProgressBackgroundTintList(R.id.progress,
mContext.getColorStateList(R.color.notification_progress_background_color));
- if (mTintWithThemeAccent || getRawColor(p) != COLOR_DEFAULT) {
- ColorStateList progressTint = ColorStateList.valueOf(getAccentColor(p));
- contentView.setProgressTintList(R.id.progress, progressTint);
- contentView.setProgressIndeterminateTintList(R.id.progress, progressTint);
- }
+ ColorStateList progressTint = ColorStateList.valueOf(getAccentColor(p));
+ contentView.setProgressTintList(R.id.progress, progressTint);
+ contentView.setProgressIndeterminateTintList(R.id.progress, progressTint);
return true;
} else {
contentView.setViewVisibility(R.id.progress, View.GONE);
@@ -5810,8 +5811,7 @@ public class Notification implements Parcelable
}
private boolean useExistingRemoteView() {
- return mStyle == null || (!mStyle.displayCustomViewInline()
- && !mRebuildStyledRemoteViews);
+ return mStyle == null || !mStyle.displayCustomViewInline();
}
/**
@@ -6083,8 +6083,7 @@ public class Notification implements Parcelable
background = outResultColor[0].getDefaultColor();
textColor = ContrastColorUtil.resolvePrimaryColor(mContext,
background, mInNightMode);
- } else if (mTintActionButtons && !mInNightMode
- && getRawColor(p) != COLOR_DEFAULT && !isColorized(p)) {
+ } else if (mTintActionButtons && !mInNightMode && !isColorized(p)) {
textColor = getAccentColor(p);
} else {
textColor = getPrimaryTextColor(p);
@@ -6262,7 +6261,7 @@ public class Notification implements Parcelable
* is the primary text color, otherwise it's the contrast-adjusted app-provided color.
*/
private @ColorInt int getSmallIconColor(StandardTemplateParams p) {
- return isColorized(p) ? getPrimaryTextColor(p) : getContrastColor(p);
+ return getContrastColor(p);
}
/**
@@ -6274,11 +6273,9 @@ public class Notification implements Parcelable
if (isColorized(p)) {
return getPrimaryTextColor(p);
}
- if (mTintWithThemeAccent) {
- int color = obtainThemeColor(R.attr.colorAccent, COLOR_INVALID);
- if (color != COLOR_INVALID) {
- return color;
- }
+ int color = obtainThemeColor(R.attr.colorAccent, COLOR_INVALID);
+ if (color != COLOR_INVALID) {
+ return color;
}
return getContrastColor(p);
}
@@ -6288,7 +6285,7 @@ public class Notification implements Parcelable
* color when colorized, or when not using theme color tints.
*/
private @ColorInt int getProtectionColor(StandardTemplateParams p) {
- if (mTintWithThemeAccent && !isColorized(p)) {
+ if (!isColorized(p)) {
int color = obtainThemeColor(R.attr.colorBackgroundFloating, COLOR_INVALID);
if (color != COLOR_INVALID) {
return color;
@@ -6307,12 +6304,10 @@ public class Notification implements Parcelable
if (isColorized(p)) {
return getPrimaryTextColor(p);
}
- if (mTintWithThemeAccent) {
- int color = obtainThemeColor(com.android.internal.R.attr.colorAccentTertiary,
- COLOR_INVALID);
- if (color != COLOR_INVALID) {
- return color;
- }
+ int color = obtainThemeColor(com.android.internal.R.attr.colorAccentTertiary,
+ COLOR_INVALID);
+ if (color != COLOR_INVALID) {
+ return color;
}
return getContrastColor(p);
}
@@ -6342,6 +6337,9 @@ public class Notification implements Parcelable
* Gets the contrast-adjusted version of the color provided by the app.
*/
private @ColorInt int getContrastColor(StandardTemplateParams p) {
+ if (isColorized(p)) {
+ return getPrimaryTextColor(p);
+ }
int rawColor = getRawColor(p);
if (mCachedContrastColorIsFor == rawColor && mCachedContrastColor != COLOR_INVALID) {
return mCachedContrastColor;
@@ -6352,9 +6350,10 @@ public class Notification implements Parcelable
int background = getDefaultBackgroundColor();
if (rawColor == COLOR_DEFAULT) {
ensureColors(p);
- color = ContrastColorUtil.resolveDefaultColor(mContext, background, mInNightMode);
- if (mTintWithThemeAccent) {
- color = obtainThemeColor(R.attr.colorAccent, color);
+ color = obtainThemeColor(R.attr.colorAccent, COLOR_INVALID);
+ if (color == COLOR_INVALID) {
+ color = ContrastColorUtil.resolveDefaultColor(mContext, background,
+ mInNightMode);
}
} else {
color = ContrastColorUtil.resolveContrastColor(mContext, rawColor,
@@ -6375,11 +6374,6 @@ public class Notification implements Parcelable
* @param p the template params to inflate this with
*/
private @ColorInt int getRawColor(StandardTemplateParams p) {
- // When notifications are theme-tinted, the raw color is only used for the icon, so go
- // ahead and keep that color instead of changing the color for minimized notifs.
- if (p.mReduceHighlights && !mTintWithThemeAccent) {
- return COLOR_DEFAULT;
- }
return mN.color;
}
@@ -6486,6 +6480,7 @@ public class Notification implements Parcelable
+ " notification: " + mN.mShortcutId
+ " vs bubble: " + mN.mBubbleMetadata.getShortcutId());
}
+ validateColorizedHasColor();
// first, add any extras from the calling code
if (mUserExtras != null) {
@@ -6539,6 +6534,21 @@ public class Notification implements Parcelable
return mN;
}
+ // This code is executed on behalf of other apps' notifications, sometimes even by 3p apps,
+ // a use case that is not supported by the Compat Framework library.
+ @SuppressWarnings("AndroidFrameworkCompatChange")
+ private void validateColorizedHasColor() {
+ if (mN.color == COLOR_DEFAULT && mN.extras.getBoolean(EXTRA_COLORIZED)) {
+ if (mContext.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.S) {
+ throw new IllegalArgumentException(
+ "Colorized notifications must set a color (other than COLOR_DEFAULT).");
+ } else {
+ Log.w(TAG, "Colorized notifications must set a color (other than "
+ + "COLOR_DEFAULT). This is required for apps targeting S.");
+ }
+ }
+ }
+
/**
* Returns the color for the given Theme.DeviceDefault.DayNight attribute, or
* defValue if that could not be completed
@@ -6551,13 +6561,9 @@ public class Notification implements Parcelable
}
theme = new ContextThemeWrapper(mContext, R.style.Theme_DeviceDefault_DayNight)
.getTheme();
- TypedArray ta = theme.obtainStyledAttributes(new int[]{attrRes});
- if (ta == null) {
- return defaultColor;
+ try (TypedArray ta = theme.obtainStyledAttributes(new int[]{attrRes})) {
+ return ta == null ? defaultColor : ta.getColor(0, defaultColor);
}
- int background = ta.getColor(0, defaultColor);
- ta.recycle();
- return background;
}
/**
@@ -6671,11 +6677,7 @@ public class Notification implements Parcelable
* which must be resolved by the caller before being used.
*/
private @ColorInt int getUnresolvedBackgroundColor(StandardTemplateParams p) {
- if (isColorized(p)) {
- return getRawColor(p);
- } else {
- return COLOR_DEFAULT;
- }
+ return isColorized(p) ? getRawColor(p) : COLOR_DEFAULT;
}
/**
@@ -6700,18 +6702,6 @@ public class Notification implements Parcelable
}
/**
- * Forces all styled remoteViews to be built from scratch and not use any cached
- * RemoteViews.
- * This is needed for legacy apps that are baking in their remoteviews into the
- * notification.
- *
- * @hide
- */
- public void setRebuildStyledRemoteViews(boolean rebuild) {
- mRebuildStyledRemoteViews = rebuild;
- }
-
- /**
* Get the text that should be displayed in the statusBar when heads upped. This is
* usually just the app name, but may be different depending on the style.
*
@@ -6878,7 +6868,7 @@ public class Notification implements Parcelable
* @hide
*/
public boolean isColorized() {
- return extras.getBoolean(EXTRA_COLORIZED)
+ return color != COLOR_DEFAULT && extras.getBoolean(EXTRA_COLORIZED)
&& (hasColorizedPermission() || isForegroundService());
}
@@ -8389,27 +8379,6 @@ public class Notification implements Parcelable
return true;
}
- private CharSequence createConversationTitleFromMessages() {
- ArraySet<CharSequence> names = new ArraySet<>();
- for (int i = 0; i < mMessages.size(); i++) {
- Message m = mMessages.get(i);
- Person sender = m.getSenderPerson();
- if (sender != null) {
- names.add(sender.getName());
- }
- }
- SpannableStringBuilder title = new SpannableStringBuilder();
- int size = names.size();
- for (int i = 0; i < size; i++) {
- CharSequence name = names.valueAt(i);
- if (!TextUtils.isEmpty(title)) {
- title.append(", ");
- }
- title.append(BidiFormatter.getInstance().unicodeWrap(name));
- }
- return title;
- }
-
/**
* @hide
*/
@@ -8423,11 +8392,6 @@ public class Notification implements Parcelable
return remoteViews;
}
- private static TextAppearanceSpan makeFontColorSpan(int color) {
- return new TextAppearanceSpan(null, 0, 0,
- ColorStateList.valueOf(color), null);
- }
-
public static final class Message {
/** @hide */
public static final String KEY_TEXT = "text";
@@ -9096,10 +9060,8 @@ public class Notification implements Parcelable
container.setDrawableTint(buttonId, false, tintColor,
PorterDuff.Mode.SRC_ATOP);
- final TypedArray typedArray = mBuilder.mContext.obtainStyledAttributes(
- new int[]{ android.R.attr.colorControlHighlight });
- int rippleAlpha = Color.alpha(typedArray.getColor(0, 0));
- typedArray.recycle();
+ int rippleAlpha = Color.alpha(mBuilder.obtainThemeColor(
+ android.R.attr.colorControlHighlight, COLOR_DEFAULT));
int rippleColor = Color.argb(rippleAlpha, Color.red(tintColor), Color.green(tintColor),
Color.blue(tintColor));
container.setRippleDrawableColor(buttonId, ColorStateList.valueOf(rippleColor));
@@ -9186,9 +9148,12 @@ public class Notification implements Parcelable
* </pre>
*/
public static class CallStyle extends Style {
- private static final int CALL_TYPE_INCOMING = 1;
- private static final int CALL_TYPE_ONGOING = 2;
- private static final int CALL_TYPE_SCREENING = 3;
+ /** @hide */
+ public static final int CALL_TYPE_INCOMING = 1;
+ /** @hide */
+ public static final int CALL_TYPE_ONGOING = 2;
+ /** @hide */
+ public static final int CALL_TYPE_SCREENING = 3;
/**
* This is a key used privately on the action.extras to give spacing priority
@@ -9889,23 +9854,6 @@ public class Notification implements Parcelable
// Comparison done for all custom RemoteViews, independent of style
return false;
}
-
- private RemoteViews buildIntoRemoteView(RemoteViews template, RemoteViews customContent,
- boolean headerless) {
- if (customContent != null) {
- // Need to clone customContent before adding, because otherwise it can no longer be
- // parceled independently of remoteViews.
- customContent = customContent.clone();
- customContent.overrideTextColors(mBuilder.getPrimaryTextColor(mBuilder.mParams));
- if (headerless) {
- template.removeFromParent(R.id.notification_top_line);
- }
- template.removeAllViews(R.id.notification_main_column);
- template.addView(R.id.notification_main_column, customContent);
- template.addFlags(RemoteViews.FLAG_REAPPLY_DISALLOWED);
- }
- return template;
- }
}
/**
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index e4120913c9f7..843aa2ecb492 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -1774,19 +1774,6 @@ public class DevicePolicyManager {
= "android.app.action.SYSTEM_UPDATE_POLICY_CHANGED";
/**
- * Broadcast action to notify ManagedProvisioning that
- * {@link UserManager#DISALLOW_SHARE_INTO_MANAGED_PROFILE} restriction has changed.
- * @hide
- * @deprecated No longer needed as ManagedProvisioning no longer handles
- * {@link UserManager#DISALLOW_SHARE_INTO_MANAGED_PROFILE} restriction changing.
- */
- // TODO(b/177221010): Remove when Managed Provisioning no longer depend on it.
- @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
- @Deprecated
- public static final String ACTION_DATA_SHARING_RESTRICTION_CHANGED =
- "android.app.action.DATA_SHARING_RESTRICTION_CHANGED";
-
- /**
* Broadcast action from ManagedProvisioning to notify that the latest change to
* {@link UserManager#DISALLOW_SHARE_INTO_MANAGED_PROFILE} restriction has been successfully
* applied (cross profile intent filters updated). Only usesd for CTS tests.
@@ -2678,8 +2665,8 @@ public class DevicePolicyManager {
* A boolean extra which determines whether to skip the ownership disclaimer screen during the
* provisioning flow. The default value is {@code false}.
*
- * If the value is {@code true}, it is the responsibility of the provisioning initiator to
- * show the relevant disclaimer.
+ * If the value is {@code true}, the provisioning initiator must display a device ownership
+ * disclaimer screen similar to that provided in AOSP.
*
* <p>This extra is only respected when provided alongside the {@link
* #ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE} intent action.
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index 0952b3e1233c..fa9142ca9449 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -896,11 +896,13 @@ public class ActivityInfo extends ComponentInfo implements Parcelable {
};
/**
- * This change id forces the packages it is applied to to be resizable. We only allow resizing
- * in fullscreen windowing mode, but not forcing the app into resizable multi-windowing mode.
+ * This change id forces the packages it is applied to be resizable. It won't change whether
+ * the app can be put into multi-windowing mode, but allow the app to resize when the window
+ * container resizes, such as display size change.
* @hide
*/
@ChangeId
+ @Overridable
@Disabled
@TestApi
public static final long FORCE_RESIZE_APP = 174042936L; // buganizer id
@@ -910,6 +912,7 @@ public class ActivityInfo extends ComponentInfo implements Parcelable {
* @hide
*/
@ChangeId
+ @Overridable
@Disabled
@TestApi
public static final long FORCE_NON_RESIZE_APP = 181136395L; // buganizer id
diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java
index 7696cbe0b631..7ecb11248d23 100644
--- a/core/java/android/content/pm/RegisteredServicesCache.java
+++ b/core/java/android/content/pm/RegisteredServicesCache.java
@@ -42,7 +42,6 @@ import android.util.Xml;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.os.BackgroundThread;
import com.android.internal.util.ArrayUtils;
import libcore.io.IoUtils;
@@ -162,20 +161,18 @@ public abstract class RegisteredServicesCache<V> {
intentFilter.addAction(Intent.ACTION_PACKAGE_CHANGED);
intentFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
intentFilter.addDataScheme("package");
- Handler handler = BackgroundThread.getHandler();
- mContext.registerReceiverAsUser(
- mPackageReceiver, UserHandle.ALL, intentFilter, null, handler);
+ mContext.registerReceiverAsUser(mPackageReceiver, UserHandle.ALL, intentFilter, null, null);
// Register for events related to sdcard installation.
IntentFilter sdFilter = new IntentFilter();
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
- mContext.registerReceiver(mExternalReceiver, sdFilter, null, handler);
+ mContext.registerReceiver(mExternalReceiver, sdFilter);
// Register for user-related events
IntentFilter userFilter = new IntentFilter();
sdFilter.addAction(Intent.ACTION_USER_REMOVED);
- mContext.registerReceiver(mUserRemovedReceiver, userFilter, null, handler);
+ mContext.registerReceiver(mUserRemovedReceiver, userFilter);
}
private void handlePackageEvent(Intent intent, int userId) {
@@ -268,7 +265,7 @@ public abstract class RegisteredServicesCache<V> {
public void setListener(RegisteredServicesCacheListener<V> listener, Handler handler) {
if (handler == null) {
- handler = BackgroundThread.getHandler();
+ handler = new Handler(mContext.getMainLooper());
}
synchronized (this) {
mHandler = handler;
diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java
index cdd8265ad5cd..4c6255da0a39 100644
--- a/core/java/android/content/res/ColorStateList.java
+++ b/core/java/android/content/res/ColorStateList.java
@@ -376,10 +376,13 @@ public class ColorStateList extends ComplexColor implements Parcelable {
int[] stateSpec = new int[numAttrs];
for (int i = 0; i < numAttrs; i++) {
final int stateResId = attrs.getAttributeNameResource(i);
+ if (stateResId == R.attr.lStar) {
+ // Non-finalized resource ids cannot be used in switch statements.
+ continue;
+ }
switch (stateResId) {
case R.attr.color:
case R.attr.alpha:
- case R.attr.lStar:
// Recognized attribute, ignore.
break;
default:
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index 726bca4d1cd2..1e62a15772e9 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -1382,6 +1382,8 @@ public final class CameraManager {
// devices going offline (in real world scenarios, these permissions aren't
// changeable). Future calls to getCameraIdList() will reflect the changes in
// the camera id list after getCameraIdListNoLazy() is called.
+ // We need to remove the torch ids which may have been associated with the
+ // devices removed as well. This is the same situation.
cameraStatuses = mCameraService.addListener(testListener);
mCameraService.removeListener(testListener);
for (CameraStatus c : cameraStatuses) {
@@ -1400,6 +1402,7 @@ public final class CameraManager {
}
for (String id : deviceIdsToRemove) {
onStatusChangedLocked(ICameraServiceListener.STATUS_NOT_PRESENT, id);
+ mTorchStatus.remove(id);
}
} catch (ServiceSpecificException e) {
// Unexpected failure
diff --git a/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java b/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java
index 29bdee3edcee..bd8df8724f92 100644
--- a/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java
+++ b/core/java/android/hardware/camera2/params/MandatoryStreamCombination.java
@@ -63,27 +63,32 @@ public final class MandatoryStreamCombination {
private final ArrayList<Size> mAvailableSizes = new ArrayList<Size> ();
private final boolean mIsInput;
private final boolean mIsUltraHighResolution;
+ private final boolean mIsMaximumSize;
/**
* Create a new {@link MandatoryStreamInformation}.
*
- @param availableSizes List of possible stream sizes.
+ * @param availableSizes List of possible stream sizes.
* @param format Image format.
+ * @param isMaximumSize Whether this is a maximum size stream.
*
* @throws IllegalArgumentException
* if sizes is empty or if the format was not user-defined in
* ImageFormat/PixelFormat.
* @hide
*/
- public MandatoryStreamInformation(@NonNull List<Size> availableSizes, @Format int format) {
- this(availableSizes, format, /*isInput*/false, /*maximumResolution*/false);
+ public MandatoryStreamInformation(@NonNull List<Size> availableSizes, @Format int format,
+ boolean isMaximumSize) {
+ this(availableSizes, format, isMaximumSize, /*isInput*/false,
+ /*isUltraHighResolution*/false);
}
/**
* Create a new {@link MandatoryStreamInformation}.
*
- @param availableSizes List of possible stream sizes.
+ * @param availableSizes List of possible stream sizes.
* @param format Image format.
+ * @param isMaximumSize Whether this is a maximum size stream.
* @param isInput Flag indicating whether this stream is input.
*
* @throws IllegalArgumentException
@@ -92,17 +97,20 @@ public final class MandatoryStreamCombination {
* @hide
*/
public MandatoryStreamInformation(@NonNull List<Size> availableSizes, @Format int format,
- boolean isInput) {
- this(availableSizes, format, isInput, /*maximumResolution*/ false);
+ boolean isMaximumSize, boolean isInput) {
+ this(availableSizes, format, isMaximumSize, isInput,
+ /*isUltraHighResolution*/ false);
}
/**
* Create a new {@link MandatoryStreamInformation}.
*
- @param availableSizes List of possible stream sizes.
+ * @param availableSizes List of possible stream sizes.
* @param format Image format.
+ * @param isMaximumSize Whether this is a maximum size stream.
* @param isInput Flag indicating whether this stream is input.
- * @param isMaxResolution Flag indicating whether this is a maximum resolution stream.
+ * @param isUltraHighResolution Flag indicating whether this is a ultra-high resolution
+ * stream.
*
* @throws IllegalArgumentException
* if sizes is empty or if the format was not user-defined in
@@ -110,12 +118,13 @@ public final class MandatoryStreamCombination {
* @hide
*/
public MandatoryStreamInformation(@NonNull List<Size> availableSizes, @Format int format,
- boolean isInput, boolean isUltraHighResolution) {
+ boolean isMaximumSize, boolean isInput, boolean isUltraHighResolution) {
if (availableSizes.isEmpty()) {
throw new IllegalArgumentException("No available sizes");
}
mAvailableSizes.addAll(availableSizes);
mFormat = checkArgumentFormat(format);
+ mIsMaximumSize = isMaximumSize;
mIsInput = isInput;
mIsUltraHighResolution = isUltraHighResolution;
}
@@ -130,10 +139,12 @@ public final class MandatoryStreamCombination {
/**
* Confirms whether or not this is an ultra high resolution stream.
- * An 'ultra high resolution' stream is one which has a configuration which appears in
+ *
+ * <p>An 'ultra high resolution' stream is one which has a configuration which appears in
* {@link android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION},
* Streams which are ultra high resolution must not be included with streams which are not
- * ultra high resolution in the same {@link android.hardware.camera2.CaptureRequest}.
+ * ultra high resolution in the same {@link android.hardware.camera2.CaptureRequest}.</p>
+ *
* @return true in case the stream is ultra high resolution, false otherwise.
*/
public boolean isUltraHighResolution() {
@@ -141,6 +152,34 @@ public final class MandatoryStreamCombination {
}
/**
+ * Confirms whether or not this is a maximum size stream.
+ *
+ * <p>A stream with maximum size is one with the camera device's maximum resolution
+ * for the stream's format as appears in {@link
+ * android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP}. This
+ * maximum size has the same meaning as the 'MAXIMUM' target size documented in the camera
+ * capture session {@link CameraDevice#createCaptureSession guideline}.</p>
+ *
+ * <p>The application can use a
+ * {@link android.hardware.camera2.MultiResolutionImageReader} for a maximum size
+ * output stream if the camera device supports multi-resolution outputs for the stream's
+ * format. See {@link
+ * android.hardware.camera2.CameraCharacteristics#SCALER_MULTI_RESOLUTION_STREAM_CONFIGURATION_MAP}
+ * for details.</p>
+ *
+ * <p>This is different from the ultra high resolution flag, which applies only to
+ * ultra high resolution sensor camera devices and refers to a stream in
+ * {@link
+ * android.hardware.camera2.CameraCharacteristics#SCALER_STREAM_CONFIGURATION_MAP_MAXIMUM_RESOLUTION}
+ * instead.</p>
+ *
+ * @return true if the stream is a maximum size stream.
+ */
+ public boolean isMaximumSize() {
+ return mIsMaximumSize;
+ }
+
+ /**
* Return the list of available sizes for this mandatory stream.
*
* <p>Per documented {@link CameraDevice#createCaptureSession guideline} the largest
@@ -827,7 +866,8 @@ public final class MandatoryStreamCombination {
getMaxSize(mStreamConfigMap.getOutputSizes(template.mFormat)));
sizes.add(sizeChosen);
try {
- streamInfo = new MandatoryStreamInformation(sizes, template.mFormat);
+ streamInfo = new MandatoryStreamInformation(sizes, template.mFormat,
+ /*isMaximumSize*/false);
} catch (IllegalArgumentException e) {
String cause = "No available sizes found for format: " + template.mFormat
+ " size threshold: " + template.mSizeThreshold + " combination: "
@@ -890,9 +930,11 @@ public final class MandatoryStreamCombination {
inputSize.add(maxRawInputSize);
streamsInfo.add(new MandatoryStreamInformation(inputSize,
- ImageFormat.RAW_SENSOR, /*isInput*/true, /*ultraHighResolution*/true));
+ ImageFormat.RAW_SENSOR, /*isMaximumSize*/true, /*isInput*/true,
+ /*ultraHighResolution*/true));
streamsInfo.add(new MandatoryStreamInformation(inputSize,
- ImageFormat.RAW_SENSOR, /*isInput*/ false, /*ultraHighResolution*/true));
+ ImageFormat.RAW_SENSOR, /*isMaximumSize*/true, /*isInput*/ false,
+ /*ultraHighResolution*/true));
MandatoryStreamCombination streamCombination;
streamCombination = new MandatoryStreamCombination(streamsInfo,
"Remosaic reprocessing", /*isReprocess*/true);
@@ -917,10 +959,11 @@ public final class MandatoryStreamCombination {
Size sizeChosen =
getMaxSize(streamConfigMap.getOutputSizes(
template.mFormat));
+ boolean isMaximumSize = (template.mSizeThreshold == SizeThreshold.MAXIMUM);
sizes.add(sizeChosen);
try {
streamInfo = new MandatoryStreamInformation(sizes, template.mFormat,
- /*isInput*/ false, /*ultraHighResolution*/ true);
+ isMaximumSize, /*isInput*/ false, /*ultraHighResolution*/ true);
} catch (IllegalArgumentException e) {
String cause = "No available sizes found for format: " + template.mFormat
+ " size threshold: " + template.mSizeThreshold + " combination: "
@@ -1096,8 +1139,9 @@ public final class MandatoryStreamCombination {
format = ImageFormat.YUV_420_888;
}
streamsInfo.add(new MandatoryStreamInformation(inputSize, format,
- /*isInput*/true));
- streamsInfo.add(new MandatoryStreamInformation(inputSize, format));
+ /*isMaximumSize*/true, /*isInput*/true));
+ streamsInfo.add(new MandatoryStreamInformation(inputSize, format,
+ /*isMaximumSize*/true));
}
for (StreamTemplate template : combTemplate.mStreamTemplates) {
@@ -1112,8 +1156,11 @@ public final class MandatoryStreamCombination {
}
MandatoryStreamInformation streamInfo;
+ boolean isMaximumSize =
+ (template.mSizeThreshold == SizeThreshold.MAXIMUM);
try {
- streamInfo = new MandatoryStreamInformation(sizes, template.mFormat);
+ streamInfo = new MandatoryStreamInformation(sizes, template.mFormat,
+ isMaximumSize);
} catch (IllegalArgumentException e) {
Log.e(TAG, "No available sizes found for format: " + template.mFormat +
" size threshold: " + template.mSizeThreshold + " combination: " +
diff --git a/core/java/android/net/vcn/IVcnStatusCallback.aidl b/core/java/android/net/vcn/IVcnStatusCallback.aidl
index 236ae8bb11b2..11bc443c9dd6 100644
--- a/core/java/android/net/vcn/IVcnStatusCallback.aidl
+++ b/core/java/android/net/vcn/IVcnStatusCallback.aidl
@@ -20,7 +20,7 @@ package android.net.vcn;
oneway interface IVcnStatusCallback {
void onVcnStatusChanged(int statusCode);
void onGatewayConnectionError(
- in int[] gatewayNetworkCapabilities,
+ in String gatewayConnectionName,
int errorCode,
in String exceptionClass,
in String exceptionMessage);
diff --git a/core/java/android/net/vcn/VcnConfig.java b/core/java/android/net/vcn/VcnConfig.java
index 52cc2182b094..d41c0b4fbdb3 100644
--- a/core/java/android/net/vcn/VcnConfig.java
+++ b/core/java/android/net/vcn/VcnConfig.java
@@ -183,12 +183,25 @@ public final class VcnConfig implements Parcelable {
*
* @param gatewayConnectionConfig the configuration for an individual gateway connection
* @return this {@link Builder} instance, for chaining
+ * @throws IllegalArgumentException if a VcnGatewayConnectionConfig has already been set for
+ * this {@link VcnConfig} with the same GatewayConnection name (as returned via {@link
+ * VcnGatewayConnectionConfig#getGatewayConnectionName()}).
*/
@NonNull
public Builder addGatewayConnectionConfig(
@NonNull VcnGatewayConnectionConfig gatewayConnectionConfig) {
Objects.requireNonNull(gatewayConnectionConfig, "gatewayConnectionConfig was null");
+ for (final VcnGatewayConnectionConfig vcnGatewayConnectionConfig :
+ mGatewayConnectionConfigs) {
+ if (vcnGatewayConnectionConfig
+ .getGatewayConnectionName()
+ .equals(gatewayConnectionConfig.getGatewayConnectionName())) {
+ throw new IllegalArgumentException(
+ "GatewayConnection for specified name already exists");
+ }
+ }
+
mGatewayConnectionConfigs.add(gatewayConnectionConfig);
return this;
}
diff --git a/core/java/android/net/vcn/VcnGatewayConnectionConfig.java b/core/java/android/net/vcn/VcnGatewayConnectionConfig.java
index d4e8e2dca296..75db3820f5e7 100644
--- a/core/java/android/net/vcn/VcnGatewayConnectionConfig.java
+++ b/core/java/android/net/vcn/VcnGatewayConnectionConfig.java
@@ -148,6 +148,8 @@ public final class VcnGatewayConnectionConfig {
TimeUnit.MINUTES.toMillis(5),
TimeUnit.MINUTES.toMillis(15)
};
+ private static final String GATEWAY_CONNECTION_NAME_KEY = "mGatewayConnectionName";
+ @NonNull private final String mGatewayConnectionName;
private static final String CTRL_PLANE_CONFIG_KEY = "mCtrlPlaneConfig";
@NonNull private VcnControlPlaneConfig mCtrlPlaneConfig;
@@ -166,11 +168,13 @@ public final class VcnGatewayConnectionConfig {
/** Builds a VcnGatewayConnectionConfig with the specified parameters. */
private VcnGatewayConnectionConfig(
+ @NonNull String gatewayConnectionName,
@NonNull VcnControlPlaneConfig ctrlPlaneConfig,
@NonNull Set<Integer> exposedCapabilities,
@NonNull Set<Integer> underlyingCapabilities,
@NonNull long[] retryIntervalsMs,
@IntRange(from = MIN_MTU_V6) int maxMtu) {
+ mGatewayConnectionName = gatewayConnectionName;
mCtrlPlaneConfig = ctrlPlaneConfig;
mExposedCapabilities = new TreeSet(exposedCapabilities);
mUnderlyingCapabilities = new TreeSet(underlyingCapabilities);
@@ -192,6 +196,7 @@ public final class VcnGatewayConnectionConfig {
final PersistableBundle underlyingCapsBundle =
in.getPersistableBundle(UNDERLYING_CAPABILITIES_KEY);
+ mGatewayConnectionName = in.getString(GATEWAY_CONNECTION_NAME_KEY);
mCtrlPlaneConfig = VcnControlPlaneConfig.fromPersistableBundle(ctrlPlaneConfigBundle);
mExposedCapabilities = new TreeSet<>(PersistableBundleUtils.toList(
exposedCapsBundle, PersistableBundleUtils.INTEGER_DESERIALIZER));
@@ -204,6 +209,7 @@ public final class VcnGatewayConnectionConfig {
}
private void validate() {
+ Objects.requireNonNull(mGatewayConnectionName, "gatewayConnectionName was null");
Objects.requireNonNull(mCtrlPlaneConfig, "control plane config was null");
Preconditions.checkArgument(
@@ -242,6 +248,20 @@ public final class VcnGatewayConnectionConfig {
}
/**
+ * Returns the configured Gateway Connection name.
+ *
+ * <p>This name is used by the configuring apps to distinguish between
+ * VcnGatewayConnectionConfigs configured on a single {@link VcnConfig}. This will be used as
+ * the identifier in VcnStatusCallback invocations.
+ *
+ * @see VcnManager.VcnStatusCallback#onGatewayConnectionError
+ */
+ @NonNull
+ public String getGatewayConnectionName() {
+ return mGatewayConnectionName;
+ }
+
+ /**
* Returns control plane configuration.
*
* @hide
@@ -364,6 +384,7 @@ public final class VcnGatewayConnectionConfig {
new ArrayList<>(mUnderlyingCapabilities),
PersistableBundleUtils.INTEGER_SERIALIZER);
+ result.putString(GATEWAY_CONNECTION_NAME_KEY, mGatewayConnectionName);
result.putPersistableBundle(CTRL_PLANE_CONFIG_KEY, ctrlPlaneConfigBundle);
result.putPersistableBundle(EXPOSED_CAPABILITIES_KEY, exposedCapsBundle);
result.putPersistableBundle(UNDERLYING_CAPABILITIES_KEY, underlyingCapsBundle);
@@ -376,6 +397,7 @@ public final class VcnGatewayConnectionConfig {
@Override
public int hashCode() {
return Objects.hash(
+ mGatewayConnectionName,
mExposedCapabilities,
mUnderlyingCapabilities,
Arrays.hashCode(mRetryIntervalsMs),
@@ -389,7 +411,8 @@ public final class VcnGatewayConnectionConfig {
}
final VcnGatewayConnectionConfig rhs = (VcnGatewayConnectionConfig) other;
- return mExposedCapabilities.equals(rhs.mExposedCapabilities)
+ return mGatewayConnectionName.equals(rhs.mGatewayConnectionName)
+ && mExposedCapabilities.equals(rhs.mExposedCapabilities)
&& mUnderlyingCapabilities.equals(rhs.mUnderlyingCapabilities)
&& Arrays.equals(mRetryIntervalsMs, rhs.mRetryIntervalsMs)
&& mMaxMtu == rhs.mMaxMtu;
@@ -399,6 +422,7 @@ public final class VcnGatewayConnectionConfig {
* This class is used to incrementally build {@link VcnGatewayConnectionConfig} objects.
*/
public static final class Builder {
+ @NonNull private final String mGatewayConnectionName;
@NonNull private final VcnControlPlaneConfig mCtrlPlaneConfig;
@NonNull private final Set<Integer> mExposedCapabilities = new ArraySet();
@NonNull private final Set<Integer> mUnderlyingCapabilities = new ArraySet();
@@ -412,12 +436,22 @@ public final class VcnGatewayConnectionConfig {
/**
* Construct a Builder object.
*
+ * @param gatewayConnectionName the String GatewayConnection name for this
+ * VcnGatewayConnectionConfig. Each VcnGatewayConnectionConfig within a {@link
+ * VcnConfig} must be given a unique name. This name is used by the caller to
+ * distinguish between VcnGatewayConnectionConfigs configured on a single {@link
+ * VcnConfig}. This will be used as the identifier in VcnStatusCallback invocations.
* @param ctrlPlaneConfig the control plane configuration
* @see VcnControlPlaneConfig
+ * @see VcnManager.VcnStatusCallback#onGatewayConnectionError
*/
- public Builder(@NonNull VcnControlPlaneConfig ctrlPlaneConfig) {
+ public Builder(
+ @NonNull String gatewayConnectionName,
+ @NonNull VcnControlPlaneConfig ctrlPlaneConfig) {
+ Objects.requireNonNull(gatewayConnectionName, "gatewayConnectionName was null");
Objects.requireNonNull(ctrlPlaneConfig, "ctrlPlaneConfig was null");
+ mGatewayConnectionName = gatewayConnectionName;
mCtrlPlaneConfig = ctrlPlaneConfig;
}
@@ -562,6 +596,7 @@ public final class VcnGatewayConnectionConfig {
@NonNull
public VcnGatewayConnectionConfig build() {
return new VcnGatewayConnectionConfig(
+ mGatewayConnectionName,
mCtrlPlaneConfig,
mExposedCapabilities,
mUnderlyingCapabilities,
diff --git a/core/java/android/net/vcn/VcnManager.java b/core/java/android/net/vcn/VcnManager.java
index abd41dacdeb6..344b20c036a0 100644
--- a/core/java/android/net/vcn/VcnManager.java
+++ b/core/java/android/net/vcn/VcnManager.java
@@ -437,7 +437,7 @@ public class VcnManager {
* Invoked when status of the VCN for this callback's subscription group changes.
*
* @param statusCode the code for the status change encountered by this {@link
- * VcnStatusCallback}'s subscription group.
+ * VcnStatusCallback}'s subscription group. This value will be one of VCN_STATUS_CODE_*.
*/
public abstract void onStatusChanged(@VcnStatusCode int statusCode);
@@ -445,18 +445,17 @@ public class VcnManager {
* Invoked when a VCN Gateway Connection corresponding to this callback's subscription group
* encounters an error.
*
- * @param networkCapabilities an array of NetworkCapabilities.NET_CAPABILITY_* capabilities
- * for the Gateway Connection that encountered the error, for identification purposes.
- * These will be a sorted list with no duplicates and will match {@link
- * VcnGatewayConnectionConfig#getExposedCapabilities()} for one of the {@link
- * VcnGatewayConnectionConfig}s set in the {@link VcnConfig} for this subscription
- * group.
- * @param errorCode the code to indicate the error that occurred
+ * @param gatewayConnectionName the String GatewayConnection name for the GatewayConnection
+ * encountering an error. This will match the name for exactly one {@link
+ * VcnGatewayConnectionConfig} for the {@link VcnConfig} configured for this callback's
+ * subscription group
+ * @param errorCode the code to indicate the error that occurred. This value will be one of
+ * VCN_ERROR_CODE_*.
* @param detail Throwable to provide additional information about the error, or {@code
* null} if none
*/
public abstract void onGatewayConnectionError(
- @NonNull int[] networkCapabilities,
+ @NonNull String gatewayConnectionName,
@VcnErrorCode int errorCode,
@Nullable Throwable detail);
}
@@ -586,7 +585,7 @@ public class VcnManager {
// TODO(b/180521637): use ServiceSpecificException for safer Exception 'parceling'
@Override
public void onGatewayConnectionError(
- @NonNull int[] networkCapabilities,
+ @NonNull String gatewayConnectionName,
@VcnErrorCode int errorCode,
@Nullable String exceptionClass,
@Nullable String exceptionMessage) {
@@ -597,7 +596,7 @@ public class VcnManager {
mExecutor.execute(
() ->
mCallback.onGatewayConnectionError(
- networkCapabilities, errorCode, cause)));
+ gatewayConnectionName, errorCode, cause)));
}
private static Throwable createThrowableByClassName(
diff --git a/core/java/android/os/BatteryConsumer.java b/core/java/android/os/BatteryConsumer.java
index 2b6f336848c3..033148379041 100644
--- a/core/java/android/os/BatteryConsumer.java
+++ b/core/java/android/os/BatteryConsumer.java
@@ -124,6 +124,30 @@ public abstract class BatteryConsumer {
public static final int FIRST_CUSTOM_TIME_COMPONENT_ID = 1000;
public static final int LAST_CUSTOM_TIME_COMPONENT_ID = 9999;
+ /**
+ * Identifiers of models used for power estimation.
+ *
+ * @hide
+ */
+ @IntDef(prefix = {"POWER_MODEL_"}, value = {
+ POWER_MODEL_POWER_PROFILE,
+ POWER_MODEL_MEASURED_ENERGY,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface PowerModel {
+ }
+
+ /**
+ * Power model that is based on average consumption rates that hardware components
+ * consume in various states.
+ */
+ public static final int POWER_MODEL_POWER_PROFILE = 0;
+
+ /**
+ * Power model that is based on energy consumption measured by on-device power monitors.
+ */
+ public static final int POWER_MODEL_MEASURED_ENERGY = 1;
+
private final PowerComponents mPowerComponents;
protected BatteryConsumer(@NonNull PowerComponents powerComponents) {
@@ -149,6 +173,16 @@ public abstract class BatteryConsumer {
}
/**
+ * Returns the ID of the model that was used for power estimation.
+ *
+ * @param componentId The ID of the power component, e.g.
+ * {@link BatteryConsumer#POWER_COMPONENT_CPU}.
+ */
+ public @PowerModel int getPowerModel(@BatteryConsumer.PowerComponent int componentId) {
+ return mPowerComponents.getPowerModel(componentId);
+ }
+
+ /**
* Returns the amount of drain attributed to the specified custom drain type.
*
* @param componentId The ID of the custom power component.
@@ -188,9 +222,10 @@ public abstract class BatteryConsumer {
protected abstract static class BaseBuilder<T extends BaseBuilder<?>> {
final PowerComponents.Builder mPowerComponentsBuilder;
- public BaseBuilder(int customPowerComponentCount, int customTimeComponentCount) {
+ public BaseBuilder(int customPowerComponentCount, int customTimeComponentCount,
+ boolean includePowerModels) {
mPowerComponentsBuilder = new PowerComponents.Builder(customPowerComponentCount,
- customTimeComponentCount);
+ customTimeComponentCount, includePowerModels);
}
/**
@@ -200,10 +235,23 @@ public abstract class BatteryConsumer {
* {@link BatteryConsumer#POWER_COMPONENT_CPU}.
* @param componentPower Amount of consumed power in mAh.
*/
- @SuppressWarnings("unchecked")
@NonNull
public T setConsumedPower(@PowerComponent int componentId, double componentPower) {
- mPowerComponentsBuilder.setConsumedPower(componentId, componentPower);
+ return setConsumedPower(componentId, componentPower, POWER_MODEL_POWER_PROFILE);
+ }
+
+ /**
+ * Sets the amount of drain attributed to the specified drain type, e.g. CPU, WiFi etc.
+ *
+ * @param componentId The ID of the power component, e.g.
+ * {@link BatteryConsumer#POWER_COMPONENT_CPU}.
+ * @param componentPower Amount of consumed power in mAh.
+ */
+ @SuppressWarnings("unchecked")
+ @NonNull
+ public T setConsumedPower(@PowerComponent int componentId, double componentPower,
+ @PowerModel int powerModel) {
+ mPowerComponentsBuilder.setConsumedPower(componentId, componentPower, powerModel);
return (T) this;
}
diff --git a/core/java/android/os/BatteryUsageStats.java b/core/java/android/os/BatteryUsageStats.java
index a0721c32fc2a..f2887748f460 100644
--- a/core/java/android/os/BatteryUsageStats.java
+++ b/core/java/android/os/BatteryUsageStats.java
@@ -74,7 +74,7 @@ public final class BatteryUsageStats implements Parcelable {
for (int i = 0; i < systemBatteryConsumerCount; i++) {
final SystemBatteryConsumer consumer =
builder.mSystemBatteryConsumerBuilders.valueAt(i).build();
- totalPower += consumer.getConsumedPower();
+ totalPower += consumer.getConsumedPower() - consumer.getPowerConsumedByApps();
mSystemBatteryConsumers.add(consumer);
}
@@ -261,6 +261,7 @@ public final class BatteryUsageStats implements Parcelable {
public static final class Builder {
private final int mCustomPowerComponentCount;
private final int mCustomTimeComponentCount;
+ private final boolean mIncludePowerModels;
private long mStatsStartTimestampMs;
private int mDischargePercentage;
private double mDischargedPowerLowerBoundMah;
@@ -277,8 +278,14 @@ public final class BatteryUsageStats implements Parcelable {
private List<BatteryStats.HistoryTag> mHistoryTagPool;
public Builder(int customPowerComponentCount, int customTimeComponentCount) {
+ this(customPowerComponentCount, customTimeComponentCount, false);
+ }
+
+ public Builder(int customPowerComponentCount, int customTimeComponentCount,
+ boolean includePowerModels) {
mCustomPowerComponentCount = customPowerComponentCount;
mCustomTimeComponentCount = customTimeComponentCount;
+ mIncludePowerModels = includePowerModels;
}
/**
@@ -360,7 +367,7 @@ public final class BatteryUsageStats implements Parcelable {
UidBatteryConsumer.Builder builder = mUidBatteryConsumerBuilders.get(uid);
if (builder == null) {
builder = new UidBatteryConsumer.Builder(mCustomPowerComponentCount,
- mCustomTimeComponentCount, batteryStatsUid);
+ mCustomTimeComponentCount, mIncludePowerModels, batteryStatsUid);
mUidBatteryConsumerBuilders.put(uid, builder);
}
return builder;
@@ -376,7 +383,7 @@ public final class BatteryUsageStats implements Parcelable {
SystemBatteryConsumer.Builder builder = mSystemBatteryConsumerBuilders.get(drainType);
if (builder == null) {
builder = new SystemBatteryConsumer.Builder(mCustomPowerComponentCount,
- mCustomTimeComponentCount, drainType);
+ mCustomTimeComponentCount, mIncludePowerModels, drainType);
mSystemBatteryConsumerBuilders.put(drainType, builder);
}
return builder;
@@ -391,7 +398,7 @@ public final class BatteryUsageStats implements Parcelable {
UserBatteryConsumer.Builder builder = mUserBatteryConsumerBuilders.get(userId);
if (builder == null) {
builder = new UserBatteryConsumer.Builder(mCustomPowerComponentCount,
- mCustomTimeComponentCount, userId);
+ mCustomTimeComponentCount, mIncludePowerModels, userId);
mUserBatteryConsumerBuilders.put(userId, builder);
}
return builder;
diff --git a/core/java/android/os/BatteryUsageStatsQuery.java b/core/java/android/os/BatteryUsageStatsQuery.java
index 85861bc1d2aa..50804422e92f 100644
--- a/core/java/android/os/BatteryUsageStatsQuery.java
+++ b/core/java/android/os/BatteryUsageStatsQuery.java
@@ -60,6 +60,12 @@ public final class BatteryUsageStatsQuery implements Parcelable {
*/
public static final int FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY = 2;
+ /**
+ * Indicates that identifiers of power models used for computations of power
+ * consumption should be included in the BatteryUsageStats.
+ */
+ public static final int FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS = 4;
+
private static final long DEFAULT_MAX_STATS_AGE_MS = 5 * 60 * 1000;
private final int mFlags;
@@ -187,6 +193,17 @@ public final class BatteryUsageStatsQuery implements Parcelable {
}
/**
+ * Requests to return identifiers of models that were used for estimation
+ * of power consumption.
+ *
+ * Should only be used for testing and debugging.
+ */
+ public Builder includePowerModels() {
+ mFlags |= BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS;
+ return this;
+ }
+
+ /**
* Set the client's tolerance for stale battery stats. The data may be up to
* this many milliseconds out-of-date.
*/
diff --git a/core/java/android/os/PowerComponents.java b/core/java/android/os/PowerComponents.java
index d239b23b6ff6..238f4518b7d3 100644
--- a/core/java/android/os/PowerComponents.java
+++ b/core/java/android/os/PowerComponents.java
@@ -33,12 +33,14 @@ class PowerComponents {
private final double[] mPowerComponentsMah;
private final long[] mTimeComponentsMs;
private final int mCustomPowerComponentCount;
+ private final byte[] mPowerModels;
PowerComponents(@NonNull Builder builder) {
mCustomPowerComponentCount = builder.mCustomPowerComponentCount;
mPowerComponentsMah = builder.mPowerComponentsMah;
mTimeComponentsMs = builder.mTimeComponentsMs;
mTotalConsumedPowerMah = builder.getTotalPower();
+ mPowerModels = builder.mPowerModels;
}
PowerComponents(@NonNull Parcel source) {
@@ -46,6 +48,12 @@ class PowerComponents {
mCustomPowerComponentCount = source.readInt();
mPowerComponentsMah = source.createDoubleArray();
mTimeComponentsMs = source.createLongArray();
+ if (source.readBoolean()) {
+ mPowerModels = new byte[BatteryConsumer.POWER_COMPONENT_COUNT];
+ source.readByteArray(mPowerModels);
+ } else {
+ mPowerModels = null;
+ }
}
/** Writes contents to Parcel */
@@ -54,6 +62,12 @@ class PowerComponents {
dest.writeInt(mCustomPowerComponentCount);
dest.writeDoubleArray(mPowerComponentsMah);
dest.writeLongArray(mTimeComponentsMs);
+ if (mPowerModels != null) {
+ dest.writeBoolean(true);
+ dest.writeByteArray(mPowerModels);
+ } else {
+ dest.writeBoolean(false);
+ }
}
/**
@@ -103,6 +117,15 @@ class PowerComponents {
}
}
+ @BatteryConsumer.PowerModel
+ int getPowerModel(@BatteryConsumer.PowerComponent int component) {
+ if (mPowerModels == null) {
+ throw new IllegalStateException(
+ "Power model IDs were not requested in the BatteryUsageStatsQuery");
+ }
+ return mPowerModels[component];
+ }
+
/**
* Returns the amount of time used by the specified component, e.g. CPU, WiFi etc.
*
@@ -148,14 +171,21 @@ class PowerComponents {
private final double[] mPowerComponentsMah;
private final int mCustomPowerComponentCount;
private final long[] mTimeComponentsMs;
+ private final byte[] mPowerModels;
- Builder(int customPowerComponentCount, int customTimeComponentCount) {
+ Builder(int customPowerComponentCount, int customTimeComponentCount,
+ boolean includePowerModels) {
mCustomPowerComponentCount = customPowerComponentCount;
int powerComponentCount =
BatteryConsumer.POWER_COMPONENT_COUNT + customPowerComponentCount;
mPowerComponentsMah = new double[powerComponentCount];
mTimeComponentsMs =
new long[BatteryConsumer.TIME_COMPONENT_COUNT + customTimeComponentCount];
+ if (includePowerModels) {
+ mPowerModels = new byte[BatteryConsumer.POWER_COMPONENT_COUNT];
+ } else {
+ mPowerModels = null;
+ }
}
/**
@@ -167,7 +197,7 @@ class PowerComponents {
*/
@NonNull
public Builder setConsumedPower(@BatteryConsumer.PowerComponent int componentId,
- double componentPower) {
+ double componentPower, @BatteryConsumer.PowerModel int powerModel) {
if (componentId >= BatteryConsumer.POWER_COMPONENT_COUNT) {
throw new IllegalArgumentException(
"Unsupported power component ID: " + componentId);
@@ -178,6 +208,9 @@ class PowerComponents {
throw new IllegalArgumentException(
"Unsupported power component ID: " + componentId);
}
+ if (mPowerModels != null) {
+ mPowerModels[componentId] = (byte) powerModel;
+ }
return this;
}
diff --git a/core/java/android/os/SystemBatteryConsumer.java b/core/java/android/os/SystemBatteryConsumer.java
index 5f35332f4818..e973e4c1044e 100644
--- a/core/java/android/os/SystemBatteryConsumer.java
+++ b/core/java/android/os/SystemBatteryConsumer.java
@@ -141,8 +141,8 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable
private List<UidBatteryConsumer.Builder> mUidBatteryConsumers;
Builder(int customPowerComponentCount, int customTimeComponentCount,
- @DrainType int drainType) {
- super(customPowerComponentCount, customTimeComponentCount);
+ boolean includePowerModels, @DrainType int drainType) {
+ super(customPowerComponentCount, customTimeComponentCount, includePowerModels);
mDrainType = drainType;
}
diff --git a/core/java/android/os/UidBatteryConsumer.java b/core/java/android/os/UidBatteryConsumer.java
index dfa0c396485d..87c263b3dd38 100644
--- a/core/java/android/os/UidBatteryConsumer.java
+++ b/core/java/android/os/UidBatteryConsumer.java
@@ -140,8 +140,8 @@ public final class UidBatteryConsumer extends BatteryConsumer implements Parcela
private boolean mExcludeFromBatteryUsageStats;
public Builder(int customPowerComponentCount, int customTimeComponentCount,
- @NonNull BatteryStats.Uid batteryStatsUid) {
- super(customPowerComponentCount, customTimeComponentCount);
+ boolean includePowerModels, @NonNull BatteryStats.Uid batteryStatsUid) {
+ super(customPowerComponentCount, customTimeComponentCount, includePowerModels);
mBatteryStatsUid = batteryStatsUid;
mUid = batteryStatsUid.getUid();
}
diff --git a/core/java/android/os/UserBatteryConsumer.java b/core/java/android/os/UserBatteryConsumer.java
index 94e567f368b0..78322088a3a4 100644
--- a/core/java/android/os/UserBatteryConsumer.java
+++ b/core/java/android/os/UserBatteryConsumer.java
@@ -77,8 +77,9 @@ public class UserBatteryConsumer extends BatteryConsumer implements Parcelable {
private final int mUserId;
private List<UidBatteryConsumer.Builder> mUidBatteryConsumers;
- Builder(int customPowerComponentCount, int customTimeComponentCount, int userId) {
- super(customPowerComponentCount, customTimeComponentCount);
+ Builder(int customPowerComponentCount, int customTimeComponentCount,
+ boolean includePowerModels, int userId) {
+ super(customPowerComponentCount, customTimeComponentCount, includePowerModels);
mUserId = userId;
}
diff --git a/core/java/android/os/incremental/IncrementalManager.java b/core/java/android/os/incremental/IncrementalManager.java
index 047c05a8734b..7fb9ae0d86cc 100644
--- a/core/java/android/os/incremental/IncrementalManager.java
+++ b/core/java/android/os/incremental/IncrementalManager.java
@@ -25,6 +25,7 @@ import android.content.pm.DataLoaderParams;
import android.content.pm.IPackageLoadingProgressCallback;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
+import android.util.Slog;
import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
@@ -285,7 +286,7 @@ public final class IncrementalManager {
* Unbinds the target dir and deletes the corresponding storage instance.
* Deletes the package name and associated storage id from maps.
*/
- public void onPackageRemoved(@NonNull File codeFile) {
+ public void rmPackageDir(@NonNull File codeFile) {
try {
final String codePath = codeFile.getAbsolutePath();
final IncrementalStorage storage = openStorage(codePath);
@@ -294,11 +295,9 @@ public final class IncrementalManager {
}
mLoadingProgressCallbacks.cleanUpCallbacks(storage);
unregisterHealthListener(codePath);
-
- // Parent since we bind-mount a folder one level above.
- mService.deleteBindMount(storage.getId(), codeFile.getParent());
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
+ storage.unBind(codePath);
+ } catch (IOException e) {
+ Slog.w(TAG, "Failed to remove code path", e);
}
}
diff --git a/core/java/android/permission/IPermissionController.aidl b/core/java/android/permission/IPermissionController.aidl
index 6d677f35b563..66e1c5a93f16 100644
--- a/core/java/android/permission/IPermissionController.aidl
+++ b/core/java/android/permission/IPermissionController.aidl
@@ -48,4 +48,10 @@ oneway interface IPermissionController {
void getPrivilegesDescriptionStringForProfile(
in String deviceProfileName,
in AndroidFuture<String> callback);
+ void getPlatformPermissionsForGroup(
+ in String permissionGroupName,
+ in AndroidFuture<List<String>> callback);
+ void getGroupOfPlatformPermission(
+ in String permissionName,
+ in AndroidFuture<String> callback);
}
diff --git a/core/java/android/permission/PermissionControllerManager.java b/core/java/android/permission/PermissionControllerManager.java
index 913b827332bf..05eb23ad705d 100644
--- a/core/java/android/permission/PermissionControllerManager.java
+++ b/core/java/android/permission/PermissionControllerManager.java
@@ -45,6 +45,7 @@ import android.os.Handler;
import android.os.Process;
import android.os.UserHandle;
import android.util.ArrayMap;
+import android.util.ArraySet;
import android.util.Log;
import android.util.Pair;
@@ -66,6 +67,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
+import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
@@ -720,4 +722,46 @@ public final class PermissionControllerManager {
mRemoteService.run(
service -> service.notifyOneTimePermissionSessionTimeout(packageName));
}
+
+ /**
+ * Get the platform permissions which belong to a particular permission group
+ *
+ * @param permissionGroupName The permission group whose permissions are desired
+ * @return A list of the platform permissions in the group, or empty if the group is not a valid
+ * platform group.
+ */
+ public @NonNull Set<String> getPlatformPermissionsForGroup(
+ @NonNull String permissionGroupName) {
+ try {
+ return new ArraySet<>(mRemoteService.postAsync(service -> {
+ AndroidFuture<List<String>> future = new AndroidFuture<>();
+ service.getPlatformPermissionsForGroup(permissionGroupName, future);
+ return future;
+ }).get(REQUEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS));
+ } catch (Exception e) {
+ Log.e(TAG, "Failed to get permissions of " + permissionGroupName, e);
+ return null;
+ }
+ }
+
+ /**
+ * Get the platform group of a particular permission, if the permission is a platform permission
+ *
+ * @param permissionName The permission name whose group is desired
+ * @return The name of the permission group this permission belongs to, or null if it has no
+ * group, or is not a platform permission
+ */
+ public @Nullable String getGroupOfPlatformPermission(
+ @NonNull String permissionName) {
+ try {
+ return mRemoteService.postAsync(service -> {
+ AndroidFuture<String> future = new AndroidFuture<>();
+ service.getGroupOfPlatformPermission(permissionName, future);
+ return future;
+ }).get(REQUEST_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
+ } catch (Exception e) {
+ Log.e(TAG, "Failed to get group of " + permissionName, e);
+ return null;
+ }
+ }
}
diff --git a/core/java/android/permission/PermissionControllerService.java b/core/java/android/permission/PermissionControllerService.java
index ad9e8b3d6dd4..0b99b85fdf24 100644
--- a/core/java/android/permission/PermissionControllerService.java
+++ b/core/java/android/permission/PermissionControllerService.java
@@ -301,6 +301,29 @@ public abstract class PermissionControllerService extends Service {
}
/**
+ * Get the platform permissions which belong to a particular permission group
+ *
+ * @param permissionGroupName The permission group whose permissions are desired
+ * @param callback A callback the permission names will be passed to
+ */
+ @BinderThread
+ public void onGetPlatformPermissionsForGroup(@NonNull String permissionGroupName,
+ @NonNull Consumer<List<String>> callback) {
+ throw new AbstractMethodError("Must be overridden in implementing class");
+ }
+
+ /**
+ * Get the platform group of a particular permission, if the permission is a platform permission
+ *
+ * @param permissionName The permission name whose group is desired
+ * @param callback A callback the group name will be passed to
+ */
+ @BinderThread
+ public void onGetGroupOfPlatformPermission(@NonNull String permissionName,
+ @NonNull Consumer<String> callback) {
+ throw new AbstractMethodError("Must be overridden in implementing class");
+ }
+ /**
* Get a user-readable sentence, describing the set of privileges that are to be granted to a
* companion app managing a device of the given profile.
*
@@ -563,6 +586,36 @@ public abstract class PermissionControllerService extends Service {
callback.completeExceptionally(t);
}
}
+
+ @Override
+ public void getPlatformPermissionsForGroup(
+ @NonNull String permissionName,
+ @NonNull AndroidFuture<List<String>> callback) {
+ try {
+ Objects.requireNonNull(permissionName);
+ Objects.requireNonNull(callback);
+ PermissionControllerService.this.onGetPlatformPermissionsForGroup(
+ permissionName, callback::complete);
+ } catch (Throwable t) {
+ callback.completeExceptionally(t);
+ }
+ }
+
+ @Override
+ public void getGroupOfPlatformPermission(
+ @NonNull String permissionGroupName,
+ @NonNull AndroidFuture<String> callback) {
+ try {
+ Objects.requireNonNull(permissionGroupName);
+ Objects.requireNonNull(callback);
+ PermissionControllerService
+ .this
+ .onGetGroupOfPlatformPermission(
+ permissionGroupName, callback::complete);
+ } catch (Throwable t) {
+ callback.completeExceptionally(t);
+ }
+ }
};
}
}
diff --git a/core/java/android/view/HapticFeedbackConstants.java b/core/java/android/view/HapticFeedbackConstants.java
index c62e93463048..9f63500fc853 100644
--- a/core/java/android/view/HapticFeedbackConstants.java
+++ b/core/java/android/view/HapticFeedbackConstants.java
@@ -129,6 +129,12 @@ public class HapticFeedbackConstants {
public static final int SAFE_MODE_ENABLED = 10001;
/**
+ * Invocation of the voice assistant via hardware button.
+ * @hide
+ */
+ public static final int ASSISTANT_BUTTON = 10002;
+
+ /**
* Flag for {@link View#performHapticFeedback(int, int)
* View.performHapticFeedback(int, int)}: Ignore the setting in the
* view for whether to perform haptic feedback, do it always.
diff --git a/core/java/android/view/OWNERS b/core/java/android/view/OWNERS
index 4a1d68547f70..cdf1e46ac5db 100644
--- a/core/java/android/view/OWNERS
+++ b/core/java/android/view/OWNERS
@@ -59,6 +59,10 @@ per-file ViewRootImpl.java = file:/services/core/java/com/android/server/input/O
per-file ViewRootImpl.java = file:/services/core/java/com/android/server/wm/OWNERS
per-file ViewRootImpl.java = file:/core/java/android/view/inputmethod/OWNERS
per-file AccessibilityInteractionController.java = file:/services/accessibility/OWNERS
+per-file OnReceiveContentListener.java = file:/core/java/android/service/autofill/OWNERS
+per-file OnReceiveContentListener.java = file:/core/java/android/widget/OWNERS
+per-file ContentInfo.java = file:/core/java/android/service/autofill/OWNERS
+per-file ContentInfo.java = file:/core/java/android/widget/OWNERS
# WindowManager
per-file DisplayCutout.aidl = file:/services/core/java/com/android/server/wm/OWNERS
diff --git a/core/java/android/view/SurfaceControlHdrLayerInfoListener.java b/core/java/android/view/SurfaceControlHdrLayerInfoListener.java
new file mode 100644
index 000000000000..13d68d021e31
--- /dev/null
+++ b/core/java/android/view/SurfaceControlHdrLayerInfoListener.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.annotation.RequiresPermission;
+import android.os.IBinder;
+import android.util.ArrayMap;
+
+import libcore.util.NativeAllocationRegistry;
+
+import java.util.Objects;
+
+/**
+ * Allows for the monitoring of layers with HDR content
+ *
+ * @hide */
+public abstract class SurfaceControlHdrLayerInfoListener {
+ private static final NativeAllocationRegistry sRegistry =
+ NativeAllocationRegistry.createMalloced(
+ SurfaceControlHdrLayerInfoListener.class.getClassLoader(), nGetDestructor());
+
+ /**
+ * Callback when the HDR information about the given display has changed
+ *
+ * @param displayToken The display this callback is about
+ * @param numberOfHdrLayers How many HDR layers are visible on the display
+ * @param maxW The width of the HDR layer with the largest area
+ * @param maxH The height of the HDR layer with the largest area
+ * @param flags Additional metadata flags, currently always 0
+ * TODO(b/182312559): Add some flags
+ *
+ * @hide */
+ public abstract void onHdrInfoChanged(IBinder displayToken, int numberOfHdrLayers,
+ int maxW, int maxH, int flags);
+
+ /**
+ * Registers this as an HDR info listener on the provided display
+ * @param displayToken
+ */
+ @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS)
+ public void register(IBinder displayToken) {
+ Objects.requireNonNull(displayToken);
+ synchronized (this) {
+ if (mRegisteredListeners.containsKey(displayToken)) {
+ return;
+ }
+ long nativePtr = nRegister(displayToken);
+ Runnable destructor = sRegistry.registerNativeAllocation(this, nativePtr);
+ mRegisteredListeners.put(displayToken, destructor);
+ }
+ }
+
+ /**
+ * Unregisters this as an HDR info listener on the provided display
+ * @param displayToken
+ */
+ @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS)
+ public void unregister(IBinder displayToken) {
+ Objects.requireNonNull(displayToken);
+ final Runnable destructor;
+ synchronized (this) {
+ destructor = mRegisteredListeners.remove(displayToken);
+ }
+ if (destructor != null) {
+ destructor.run();
+ }
+ }
+
+ /**
+ * Unregisters this on all previously registered displays
+ */
+ @RequiresPermission(android.Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS)
+ public void unregisterAll() {
+ final ArrayMap<IBinder, Runnable> toDestroy;
+ synchronized (this) {
+ toDestroy = mRegisteredListeners;
+ mRegisteredListeners = new ArrayMap<>();
+ }
+ for (Runnable destructor : toDestroy.values()) {
+ destructor.run();
+ }
+ }
+
+ private ArrayMap<IBinder, Runnable> mRegisteredListeners = new ArrayMap<>();
+
+ private static native long nGetDestructor();
+ private native long nRegister(IBinder displayToken);
+}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index e2cf9624e1a5..0df26b2592ec 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1193,8 +1193,7 @@ public final class ViewRootImpl implements ViewParent,
Looper.myLooper());
if (mAttachInfo.mThreadedRenderer != null) {
- InputMetricsListener listener =
- new InputMetricsListener(mInputEventReceiver);
+ InputMetricsListener listener = new InputMetricsListener();
mHardwareRendererObserver = new HardwareRendererObserver(
listener, listener.data, mHandler, true /*waitForPresentTime*/);
mAttachInfo.mThreadedRenderer.addObserver(mHardwareRendererObserver);
@@ -1390,6 +1389,9 @@ public final class ViewRootImpl implements ViewParent,
if (mAttachInfo.mThreadedRenderer != null) {
mAttachInfo.mHardwareAccelerated =
mAttachInfo.mHardwareAccelerationRequested = true;
+ if (mHardwareRendererObserver != null) {
+ mAttachInfo.mThreadedRenderer.addObserver(mHardwareRendererObserver);
+ }
}
}
}
@@ -8075,6 +8077,9 @@ public final class ViewRootImpl implements ViewParent,
ThreadedRenderer hardwareRenderer = mAttachInfo.mThreadedRenderer;
if (hardwareRenderer != null) {
+ if (mHardwareRendererObserver != null) {
+ hardwareRenderer.removeObserver(mHardwareRendererObserver);
+ }
if (mView != null) {
hardwareRenderer.destroyHardwareResources(mView);
}
@@ -8576,18 +8581,12 @@ public final class ViewRootImpl implements ViewParent,
super.dispose();
}
}
- WindowInputEventReceiver mInputEventReceiver;
+ private WindowInputEventReceiver mInputEventReceiver;
final class InputMetricsListener
implements HardwareRendererObserver.OnFrameMetricsAvailableListener {
public long[] data = new long[FrameMetrics.Index.FRAME_STATS_COUNT];
- private InputEventReceiver mReceiver;
-
- InputMetricsListener(InputEventReceiver receiver) {
- mReceiver = receiver;
- }
-
@Override
public void onFrameMetricsAvailable(int dropCountSinceLastInvocation) {
final int inputEventId = (int) data[FrameMetrics.Index.INPUT_EVENT_ID];
@@ -8601,7 +8600,10 @@ public final class ViewRootImpl implements ViewParent,
return;
}
final long gpuCompletedTime = data[FrameMetrics.Index.GPU_COMPLETED];
- mReceiver.reportTimeline(inputEventId, gpuCompletedTime, presentTime);
+ if (mInputEventReceiver == null) {
+ return;
+ }
+ mInputEventReceiver.reportTimeline(inputEventId, gpuCompletedTime, presentTime);
}
}
HardwareRendererObserver mHardwareRendererObserver;
@@ -10204,9 +10206,6 @@ public final class ViewRootImpl implements ViewParent,
if (useBLAST() && mBlastBufferQueue != null) {
mBlastBufferQueue.mergeWithNextTransaction(transaction, frameNumber);
- } else {
- transaction.deferTransactionUntil(surfaceControl, surfaceControl, frameNumber);
- transaction.apply();
}
}
diff --git a/core/java/android/view/accessibility/AccessibilityInteractionClient.java b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
index f63749be6df2..e64157734fdb 100644
--- a/core/java/android/view/accessibility/AccessibilityInteractionClient.java
+++ b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
@@ -20,6 +20,7 @@ import android.accessibilityservice.IAccessibilityServiceConnection;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.compat.annotation.UnsupportedAppUsage;
+import android.content.Context;
import android.os.Binder;
import android.os.Build;
import android.os.Bundle;
@@ -39,6 +40,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
@@ -83,6 +85,8 @@ public final class AccessibilityInteractionClient
public static final int NO_ID = -1;
+ public static final String CALL_STACK = "call_stack";
+
private static final String LOG_TAG = "AccessibilityInteractionClient";
private static final boolean DEBUG = false;
@@ -113,7 +117,10 @@ public final class AccessibilityInteractionClient
private final Object mInstanceLock = new Object();
+ private final AccessibilityManager mAccessibilityManager;
+
private volatile int mInteractionId = -1;
+ private volatile int mCallingUid = Process.INVALID_UID;
private AccessibilityNodeInfo mFindAccessibilityNodeInfoResult;
@@ -152,6 +159,37 @@ public final class AccessibilityInteractionClient
}
/**
+ * @return The client for the current thread.
+ */
+ public static AccessibilityInteractionClient getInstance(Context context) {
+ final long threadId = Thread.currentThread().getId();
+ if (context != null) {
+ return getInstanceForThread(threadId, context);
+ }
+ return getInstanceForThread(threadId);
+ }
+
+ /**
+ * <strong>Note:</strong> We keep one instance per interrogating thread since
+ * the instance contains state which can lead to undesired thread interleavings.
+ * We do not have a thread local variable since other threads should be able to
+ * look up the correct client knowing a thread id. See ViewRootImpl for details.
+ *
+ * @return The client for a given <code>threadId</code>.
+ */
+ public static AccessibilityInteractionClient getInstanceForThread(
+ long threadId, Context context) {
+ synchronized (sStaticLock) {
+ AccessibilityInteractionClient client = sClients.get(threadId);
+ if (client == null) {
+ client = new AccessibilityInteractionClient(context);
+ sClients.put(threadId, client);
+ }
+ return client;
+ }
+ }
+
+ /**
* Gets a cached accessibility service connection.
*
* @param connectionId The connection id.
@@ -197,6 +235,11 @@ public final class AccessibilityInteractionClient
private AccessibilityInteractionClient() {
/* reducing constructor visibility */
+ mAccessibilityManager = null;
+ }
+
+ private AccessibilityInteractionClient(Context context) {
+ mAccessibilityManager = context.getSystemService(AccessibilityManager.class);
}
/**
@@ -453,6 +496,15 @@ public final class AccessibilityInteractionClient
if (packageNames != null) {
List<AccessibilityNodeInfo> infos = getFindAccessibilityNodeInfosResultAndClear(
interactionId);
+ if (mAccessibilityManager != null
+ && mAccessibilityManager.isAccessibilityTracingEnabled()) {
+ logTrace(connection, "findAccessibilityNodeInfoByAccessibilityId",
+ "InteractionId:" + interactionId + ";Result: " + infos
+ + ";connectionId=" + connectionId + ";accessibilityWindowId="
+ + accessibilityWindowId + ";accessibilityNodeId="
+ + accessibilityNodeId + ";bypassCache=" + bypassCache
+ + ";prefetchFlags=" + prefetchFlags + ";arguments=" + arguments);
+ }
finalizeAndCacheAccessibilityNodeInfos(infos, connectionId,
bypassCache, packageNames);
if (infos != null && !infos.isEmpty()) {
@@ -514,6 +566,14 @@ public final class AccessibilityInteractionClient
if (packageNames != null) {
List<AccessibilityNodeInfo> infos = getFindAccessibilityNodeInfosResultAndClear(
interactionId);
+ if (mAccessibilityManager != null
+ && mAccessibilityManager.isAccessibilityTracingEnabled()) {
+ logTrace(connection, "findAccessibilityNodeInfosByViewId", "InteractionId="
+ + interactionId + ":Result: " + infos + ";connectionId="
+ + connectionId + ";accessibilityWindowId=" + accessibilityWindowId
+ + ";accessibilityNodeId=" + accessibilityNodeId + ";viewId="
+ + viewId);
+ }
if (infos != null) {
finalizeAndCacheAccessibilityNodeInfos(infos, connectionId,
false, packageNames);
@@ -568,6 +628,13 @@ public final class AccessibilityInteractionClient
if (packageNames != null) {
List<AccessibilityNodeInfo> infos = getFindAccessibilityNodeInfosResultAndClear(
interactionId);
+ if (mAccessibilityManager != null
+ && mAccessibilityManager.isAccessibilityTracingEnabled()) {
+ logTrace(connection, "findAccessibilityNodeInfosByText", "InteractionId="
+ + interactionId + ":Result: " + infos + ";connectionId="
+ + connectionId + ";accessibilityWindowId=" + accessibilityWindowId
+ + ";accessibilityNodeId=" + accessibilityNodeId + ";text=" + text);
+ }
if (infos != null) {
finalizeAndCacheAccessibilityNodeInfos(infos, connectionId,
false, packageNames);
@@ -621,6 +688,14 @@ public final class AccessibilityInteractionClient
if (packageNames != null) {
AccessibilityNodeInfo info = getFindAccessibilityNodeInfoResultAndClear(
interactionId);
+ if (mAccessibilityManager != null
+ && mAccessibilityManager.isAccessibilityTracingEnabled()) {
+ logTrace(connection, "findFocus", "InteractionId=" + interactionId
+ + ":Result: " + info + ";connectionId=" + connectionId
+ + ";accessibilityWindowId=" + accessibilityWindowId
+ + ";accessibilityNodeId=" + accessibilityNodeId + ";focusType="
+ + focusType);
+ }
finalizeAndCacheAccessibilityNodeInfo(info, connectionId, false, packageNames);
return info;
}
@@ -671,6 +746,14 @@ public final class AccessibilityInteractionClient
AccessibilityNodeInfo info = getFindAccessibilityNodeInfoResultAndClear(
interactionId);
finalizeAndCacheAccessibilityNodeInfo(info, connectionId, false, packageNames);
+ if (mAccessibilityManager != null
+ && mAccessibilityManager.isAccessibilityTracingEnabled()) {
+ logTrace(connection, "focusSearch", "InteractionId=" + interactionId
+ + ":Result: " + info + ";connectionId=" + connectionId
+ + ";accessibilityWindowId=" + accessibilityWindowId
+ + ";accessibilityNodeId=" + accessibilityNodeId + ";direction="
+ + direction);
+ }
return info;
}
} else {
@@ -716,7 +799,17 @@ public final class AccessibilityInteractionClient
}
if (success) {
- return getPerformAccessibilityActionResultAndClear(interactionId);
+ final boolean result =
+ getPerformAccessibilityActionResultAndClear(interactionId);
+ if (mAccessibilityManager != null
+ && mAccessibilityManager.isAccessibilityTracingEnabled()) {
+ logTrace(connection, "performAccessibilityAction", "InteractionId="
+ + interactionId + ":Result: " + result + ";connectionId="
+ + connectionId + ";accessibilityWindowId=" + accessibilityWindowId
+ + ";accessibilityNodeId=" + accessibilityNodeId + ";action="
+ + action + ";arguments=" + arguments);
+ }
+ return result;
}
} else {
if (DEBUG) {
@@ -774,6 +867,7 @@ public final class AccessibilityInteractionClient
if (interactionId > mInteractionId) {
mFindAccessibilityNodeInfoResult = info;
mInteractionId = interactionId;
+ mCallingUid = Binder.getCallingUid();
}
mInstanceLock.notifyAll();
}
@@ -823,6 +917,7 @@ public final class AccessibilityInteractionClient
mFindAccessibilityNodeInfosResult = Collections.emptyList();
}
mInteractionId = interactionId;
+ mCallingUid = Binder.getCallingUid();
}
mInstanceLock.notifyAll();
}
@@ -851,6 +946,7 @@ public final class AccessibilityInteractionClient
if (interactionId > mInteractionId) {
mPerformAccessibilityActionResult = succeeded;
mInteractionId = interactionId;
+ mCallingUid = Binder.getCallingUid();
}
mInstanceLock.notifyAll();
}
@@ -1059,4 +1155,19 @@ public final class AccessibilityInteractionClient
}
return true;
}
+
+ private void logTrace(
+ IAccessibilityServiceConnection connection, String method, String params) {
+ try {
+ Bundle b = new Bundle();
+ ArrayList<StackTraceElement> callStack = new ArrayList<StackTraceElement>(
+ Arrays.asList(Thread.currentThread().getStackTrace()));
+ b.putSerializable(CALL_STACK, callStack);
+ connection.logTrace(SystemClock.elapsedRealtimeNanos(),
+ LOG_TAG + ".callback for " + method, params, Process.myPid(),
+ Thread.currentThread().getId(), mCallingUid, b);
+ } catch (RemoteException e) {
+ Log.e(LOG_TAG, "Failed to log trace. " + e);
+ }
+ }
}
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index 56dcd5951e5e..fc9e5e2ef04e 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -111,6 +111,9 @@ public final class AccessibilityManager {
public static final int STATE_FLAG_REQUEST_MULTI_FINGER_GESTURES = 0x00000010;
/** @hide */
+ public static final int STATE_FLAG_ACCESSIBILITY_TRACING_ENABLED = 0x00000020;
+
+ /** @hide */
public static final int DALTONIZER_DISABLED = -1;
/** @hide */
@@ -232,6 +235,9 @@ public final class AccessibilityManager {
@UnsupportedAppUsage(trackingBug = 123768939L)
boolean mIsHighTextContrastEnabled;
+ // Whether accessibility tracing is enabled or not
+ boolean mIsAccessibilityTracingEnabled = false;
+
AccessibilityPolicy mAccessibilityPolicy;
private int mPerformingAction = 0;
@@ -1004,6 +1010,17 @@ public final class AccessibilityManager {
}
/**
+ * Gets accessibility tracing enabled state.
+ *
+ * @hide
+ */
+ public boolean isAccessibilityTracingEnabled() {
+ synchronized (mLock) {
+ return mIsAccessibilityTracingEnabled;
+ }
+ }
+
+ /**
* Get the preparers that are registered for an accessibility ID
*
* @param id The ID of interest
@@ -1197,6 +1214,8 @@ public final class AccessibilityManager {
(stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0;
final boolean highTextContrastEnabled =
(stateFlags & STATE_FLAG_HIGH_TEXT_CONTRAST_ENABLED) != 0;
+ final boolean accessibilityTracingEnabled =
+ (stateFlags & STATE_FLAG_ACCESSIBILITY_TRACING_ENABLED) != 0;
final boolean wasEnabled = isEnabled();
final boolean wasTouchExplorationEnabled = mIsTouchExplorationEnabled;
@@ -1218,6 +1237,8 @@ public final class AccessibilityManager {
if (wasHighTextContrastEnabled != highTextContrastEnabled) {
notifyHighTextContrastStateChanged();
}
+
+ updateAccessibilityTracingState(accessibilityTracingEnabled);
}
/**
@@ -1675,6 +1696,15 @@ public final class AccessibilityManager {
}
/**
+ * Update mIsAccessibilityTracingEnabled.
+ */
+ private void updateAccessibilityTracingState(boolean enabled) {
+ synchronized (mLock) {
+ mIsAccessibilityTracingEnabled = enabled;
+ }
+ }
+
+ /**
* Update interactive and non-interactive UI timeout.
*
* @param uiTimeout A pair of {@code int}s. First integer for interactive one, and second
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 957e416986e0..6bf46457a1de 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -34,7 +34,7 @@ import android.telephony.SignalStrength;
interface IBatteryStats {
// These first methods are also called by native code, so must
- // be kept in sync with frameworks/native/libs/binder/include/binder/IBatteryStats.h
+ // be kept in sync with frameworks/native/libs/binder/include_batterystats/batterystats/IBatteryStats.h
void noteStartSensor(int uid, int sensor);
void noteStopSensor(int uid, int sensor);
void noteStartVideo(int uid);
diff --git a/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java b/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java
index 586607e413d9..2f4958223270 100644
--- a/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java
+++ b/core/java/com/android/internal/os/AmbientDisplayPowerCalculator.java
@@ -44,14 +44,15 @@ public class AmbientDisplayPowerCalculator extends PowerCalculator {
@Override
public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats,
long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) {
+ final long measuredEnergyUC = batteryStats.getScreenDozeMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(measuredEnergyUC, query);
final long durationMs = calculateDuration(batteryStats, rawRealtimeUs,
BatteryStats.STATS_SINCE_CHARGED);
- final double powerMah = getMeasuredOrEstimatedPower(
- batteryStats.getScreenDozeMeasuredBatteryConsumptionUC(),
- mPowerEstimator, durationMs, query.shouldForceUsePowerProfileModel());
+ final double powerMah = getMeasuredOrEstimatedPower(powerModel,
+ measuredEnergyUC, mPowerEstimator, durationMs);
builder.getOrCreateSystemBatteryConsumerBuilder(
SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY)
- .setConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE, powerMah)
+ .setConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE, powerMah, powerModel)
.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE, durationMs);
}
@@ -64,10 +65,12 @@ public class AmbientDisplayPowerCalculator extends PowerCalculator {
@Override
public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
+ final long measuredEnergyUC = batteryStats.getScreenDozeMeasuredBatteryConsumptionUC();
final long durationMs = calculateDuration(batteryStats, rawRealtimeUs, statsType);
- final double powerMah = getMeasuredOrEstimatedPower(
+ final int powerModel = getPowerModel(measuredEnergyUC);
+ final double powerMah = getMeasuredOrEstimatedPower(powerModel,
batteryStats.getScreenDozeMeasuredBatteryConsumptionUC(),
- mPowerEstimator, durationMs, false);
+ mPowerEstimator, durationMs);
if (powerMah > 0) {
BatterySipper bs = new BatterySipper(BatterySipper.DrainType.AMBIENT_DISPLAY, null, 0);
bs.usagePowerMah = powerMah;
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index b0920b0100da..ac72d290b8b2 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -41,7 +41,6 @@ import android.net.NetworkStats;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.os.BatteryManager;
-import android.os.BatteryProperty;
import android.os.BatteryStats;
import android.os.Binder;
import android.os.Build;
@@ -58,7 +57,6 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
-import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.WorkSource;
import android.os.WorkSource.WorkChain;
@@ -150,14 +148,6 @@ import java.util.concurrent.locks.ReentrantLock;
public class BatteryStatsImpl extends BatteryStats {
private static final String TAG = "BatteryStatsImpl";
private static final boolean DEBUG = false;
-
- // TODO(b/169376495): STOPSHIP if true
- private static final boolean DEBUG_FOREGROUND_STATS = true;
-
- private static final boolean ENABLE_FOREGROUND_STATS_COLLECTION =
- DEBUG_FOREGROUND_STATS && SystemProperties.getBoolean(
- "debug.battery_foreground_stats_collection", false);
-
public static final boolean DEBUG_ENERGY = false;
private static final boolean DEBUG_ENERGY_CPU = DEBUG_ENERGY;
private static final boolean DEBUG_BINDER_STATS = false;
@@ -752,37 +742,6 @@ public class BatteryStatsImpl extends BatteryStats {
long mTrackRunningHistoryElapsedRealtimeMs = 0;
long mTrackRunningHistoryUptimeMs = 0;
- private static final int FOREGROUND_UID_INITIAL_CAPACITY = 10;
- private static final int INVALID_UID = -1;
-
- private final IntArray mForegroundUids = ENABLE_FOREGROUND_STATS_COLLECTION
- ? new IntArray(FOREGROUND_UID_INITIAL_CAPACITY) : null;
-
- // Last recorded battery energy capacity.
- // This is used for computing foregrund power per application.
- // See: PowerForUid below
- private long mLastBatteryEnergyCapacityNwh = 0;
-
- private static final class PowerForUid {
- public long energyNwh = 0;
- // Same as energyNwh, but not tracked for the first 2 minutes;
- public long filteredEnergyNwh = 0;
- public double totalHours = 0;
- public long baseTimeMs = 0;
-
- double computePower() {
- // units in nW
- return totalHours != 0 ? energyNwh / totalHours : -1.0;
- }
-
- double computeFilteredPower() {
- // units in nW
- return totalHours != 0 ? filteredEnergyNwh / totalHours : -1.0;
- }
- }
- private final HashMap<Integer, PowerForUid> mUidToPower = ENABLE_FOREGROUND_STATS_COLLECTION
- ? new HashMap<>() : null;
-
@NonNull
final BatteryStatsHistory mBatteryStatsHistory;
@@ -1094,7 +1053,6 @@ public class BatteryStatsImpl extends BatteryStats {
private int mNumConnectivityChange;
private int mBatteryVoltageMv = -1;
- private int mBatteryChargeUah = -1;
private int mEstimatedBatteryCapacityMah = -1;
private int mMinLearnedBatteryCapacityUah = -1;
@@ -4020,49 +3978,6 @@ public class BatteryStatsImpl extends BatteryStats {
// TODO(b/155216561): It is possible for isolated uids to be in a higher
// state than its parent uid. We should track the highest state within the union of host
// and isolated uids rather than only the parent uid.
-
-
- int uidState = mapToInternalProcessState(state);
-
- boolean isForeground = (uidState == Uid.PROCESS_STATE_TOP)
- || (uidState == Uid.PROCESS_STATE_FOREGROUND);
-
-
- if (ENABLE_FOREGROUND_STATS_COLLECTION) {
- boolean previouslyInForegrond = false;
- for (int i = 0; i < mForegroundUids.size(); i++) {
- if (mForegroundUids.get(i) == uid) {
- previouslyInForegrond = true;
- if (!isForeground) {
- // If we were previously in the foreground, remove the uid
- // from the foreground set and dirty the slot.
- mForegroundUids.set(i, INVALID_UID);
- final PowerForUid pfu =
- mUidToPower.computeIfAbsent(uid, unused -> new PowerForUid());
- pfu.baseTimeMs = 0;
- break;
- }
- }
- }
-
- if (!previouslyInForegrond && isForeground) {
- boolean addedToForeground = false;
- // Check if we have a free slot to clobber...
- for (int i = 0; i < mForegroundUids.size(); i++) {
- if (mForegroundUids.get(i) == INVALID_UID) {
- addedToForeground = true;
- mForegroundUids.set(i, uid);
- break;
- }
- }
-
- // ...if not, append to the end of the array.
- if (!addedToForeground) {
- mForegroundUids.add(uid);
- }
- }
- }
-
FrameworkStatsLog.write(FrameworkStatsLog.UID_PROCESS_STATE_CHANGED, uid,
ActivityManager.processStateAmToProto(state));
getUidStatsLocked(uid, elapsedRealtimeMs, uptimeMs)
@@ -13547,7 +13462,6 @@ public class BatteryStatsImpl extends BatteryStats {
doWrite = true;
resetAllStatsLocked(mSecUptime, mSecRealtime);
if (chargeUah > 0 && level > 0) {
- mBatteryChargeUah = chargeUah;
// Only use the reported coulomb charge value if it is supported and reported.
mEstimatedBatteryCapacityMah = (int) ((chargeUah / 1000) / (level / 100.0));
}
@@ -13720,48 +13634,7 @@ public class BatteryStatsImpl extends BatteryStats {
startRecordingHistory(elapsedRealtimeMs, uptimeMs, true);
}
}
-
mBatteryVoltageMv = voltageMv;
-
- if (ENABLE_FOREGROUND_STATS_COLLECTION) {
- if (onBattery) {
- final long energyNwh = (voltageMv * (long) chargeUah);
- final long energyDelta = mLastBatteryEnergyCapacityNwh - energyNwh;
- for (int i = 0; i < mForegroundUids.size(); i++) {
- final int uid = mForegroundUids.get(i);
- if (uid == INVALID_UID) {
- continue;
- }
- final PowerForUid pfu = mUidToPower
- .computeIfAbsent(uid, unused -> new PowerForUid());
- if (pfu.baseTimeMs <= 0) {
- pfu.baseTimeMs = currentTimeMs;
- } else {
- // Check if mLastBatteryEnergyCapacityNwh > energyNwh,
- // to make sure we only count discharges
- if (energyDelta > 0) {
- pfu.energyNwh += energyDelta;
- // Convert from milliseconds to hours
- // 1000 ms per second * 3600 seconds per hour
- pfu.totalHours += ((double) (currentTimeMs - pfu.baseTimeMs)
- / (1.0 * 1000 * 60 * 60));
- // Now convert from 2 minutes to hours
- // 2 minutes = 1/30 of an hour
- if (pfu.totalHours > (2.0 / 60)) {
- pfu.filteredEnergyNwh += energyDelta;
- }
-
- }
- pfu.baseTimeMs = currentTimeMs;
- }
- }
- mLastBatteryEnergyCapacityNwh = energyNwh;
- } else if (onBattery != mOnBattery) {
- // Transition to onBattery = false
- mUidToPower.values().forEach(v -> v.baseTimeMs = 0);
- }
- }
-
mCurrentBatteryLevel = level;
if (mDischargePlugLevel < 0) {
mDischargePlugLevel = level;
@@ -16679,48 +16552,6 @@ public class BatteryStatsImpl extends BatteryStats {
}
public void dumpLocked(Context context, PrintWriter pw, int flags, int reqUid, long histStart) {
- if (ENABLE_FOREGROUND_STATS_COLLECTION) {
- long actualChargeUah = -1;
- long actualEnergyNwh = -1;
- try {
- IBatteryPropertiesRegistrar registrar =
- IBatteryPropertiesRegistrar.Stub.asInterface(
- ServiceManager.getService("batteryproperties"));
- if (registrar != null) {
- BatteryProperty prop = new BatteryProperty();
- if (registrar.getProperty(
- BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER, prop) == 0) {
- actualChargeUah = prop.getLong();
- }
- prop = new BatteryProperty();
- if (registrar.getProperty(
- BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER, prop) == 0) {
- actualEnergyNwh = prop.getLong();
- }
- }
- } catch (RemoteException e) {
- // Ignore.
- }
- pw.printf("ActualCharge (uAh): %d\n", (int) actualChargeUah);
- pw.printf("ActualEnergy (nWh): %d\n", actualEnergyNwh);
- pw.printf("mBatteryCharge (uAh): %d\n", mBatteryChargeUah);
- pw.printf("mBatteryVolts (mV): %d\n", mBatteryVoltageMv);
- pw.printf("est energy (nWh): %d\n", mBatteryVoltageMv * (long) mBatteryChargeUah);
- pw.printf("mEstimatedBatteryCapacity (mAh): %d\n", mEstimatedBatteryCapacityMah);
- pw.printf("mMinLearnedBatteryCapacity (uAh): %d\n", mMinLearnedBatteryCapacityUah);
- pw.printf("mMaxLearnedBatteryCapacity (uAh): %d\n", mMaxLearnedBatteryCapacityUah);
- pw.printf("est. capacity: %f\n",
- (float) actualChargeUah / (mEstimatedBatteryCapacityMah * 1000));
- pw.printf("mCurrentBatteryLevel: %d\n", mCurrentBatteryLevel);
- pw.println("Total Power per app:");
- mUidToPower.entrySet().forEach(e ->
- pw.printf("Uid: %d, Total watts (nW): %f\n",
- e.getKey(), e.getValue().computePower()));
- pw.println("Total Power per app after first 2 minutes initial launch:");
- mUidToPower.entrySet().forEach(e ->
- pw.printf("Uid: %d, Total watts (nW): %f\n",
- e.getKey(), e.getValue().computeFilteredPower()));
- }
if (DEBUG) {
pw.println("mOnBatteryTimeBase:");
mOnBatteryTimeBase.dump(pw, " ");
diff --git a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
index f8ae0c1858f8..49c564b8a737 100644
--- a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
+++ b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
@@ -132,9 +132,12 @@ public class BatteryUsageStatsProvider {
// TODO(b/174186358): read extra time component number from configuration
final int customTimeComponentCount = 0;
- final BatteryUsageStats.Builder batteryUsageStatsBuilder =
- new BatteryUsageStats.Builder(customPowerComponentCount, customTimeComponentCount)
- .setStatsStartTimestamp(mStats.getStartClockTime());
+ final boolean includePowerModels = (query.getFlags()
+ & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS) != 0;
+
+ final BatteryUsageStats.Builder batteryUsageStatsBuilder = new BatteryUsageStats.Builder(
+ customPowerComponentCount, customTimeComponentCount, includePowerModels);
+ batteryUsageStatsBuilder.setStatsStartTimestamp(mStats.getStartClockTime());
SparseArray<? extends BatteryStats.Uid> uidStats = mStats.getUidStats();
for (int i = uidStats.size() - 1; i >= 0; i--) {
diff --git a/core/java/com/android/internal/os/BluetoothPowerCalculator.java b/core/java/com/android/internal/os/BluetoothPowerCalculator.java
index 75a98133a8f3..a418dfff5d8f 100644
--- a/core/java/com/android/internal/os/BluetoothPowerCalculator.java
+++ b/core/java/com/android/internal/os/BluetoothPowerCalculator.java
@@ -15,8 +15,6 @@
*/
package com.android.internal.os;
-import static android.os.BatteryStats.POWER_DATA_UNAVAILABLE;
-
import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryStats.ControllerActivityCounter;
@@ -75,12 +73,13 @@ public class BluetoothPowerCalculator extends PowerCalculator {
}
}
- final long measuredChargeUC = query.shouldForceUsePowerProfileModel() ?
- POWER_DATA_UNAVAILABLE : batteryStats.getBluetoothMeasuredBatteryConsumptionUC();
+ final long measuredChargeUC = batteryStats.getBluetoothMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(measuredChargeUC, query);
final ControllerActivityCounter activityCounter =
batteryStats.getBluetoothControllerActivity();
final long systemDurationMs = calculateDuration(activityCounter);
- final double systemPowerMah = calculatePowerMah(measuredChargeUC, activityCounter);
+ final double systemPowerMah =
+ calculatePowerMah(powerModel, measuredChargeUC, activityCounter);
// Subtract what the apps used, but clamp to 0.
final long systemComponentDurationMs = Math.max(0, systemDurationMs - total.durationMs);
@@ -92,23 +91,22 @@ public class BluetoothPowerCalculator extends PowerCalculator {
.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_BLUETOOTH,
systemComponentDurationMs)
.setConsumedPower(BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
- Math.max(systemPowerMah, total.powerMah))
+ Math.max(systemPowerMah, total.powerMah), powerModel)
.setPowerConsumedByApps(total.powerMah);
}
private void calculateApp(UidBatteryConsumer.Builder app, PowerAndDuration total,
BatteryUsageStatsQuery query) {
-
- final long measuredChargeUC = query.shouldForceUsePowerProfileModel() ?
- POWER_DATA_UNAVAILABLE :
+ final long measuredChargeUC =
app.getBatteryStatsUid().getBluetoothMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(measuredChargeUC, query);
final ControllerActivityCounter activityCounter =
app.getBatteryStatsUid().getBluetoothControllerActivity();
final long durationMs = calculateDuration(activityCounter);
- final double powerMah = calculatePowerMah(measuredChargeUC, activityCounter);
+ final double powerMah = calculatePowerMah(powerModel, measuredChargeUC, activityCounter);
app.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_BLUETOOTH, durationMs)
- .setConsumedPower(BatteryConsumer.POWER_COMPONENT_BLUETOOTH, powerMah);
+ .setConsumedPower(BatteryConsumer.POWER_COMPONENT_BLUETOOTH, powerMah, powerModel);
total.durationMs += durationMs;
total.powerMah += powerMah;
@@ -132,10 +130,12 @@ public class BluetoothPowerCalculator extends PowerCalculator {
BatterySipper bs = new BatterySipper(BatterySipper.DrainType.BLUETOOTH, null, 0);
final long measuredChargeUC = batteryStats.getBluetoothMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(measuredChargeUC);
final ControllerActivityCounter activityCounter =
batteryStats.getBluetoothControllerActivity();
final long systemDurationMs = calculateDuration(activityCounter);
- final double systemPowerMah = calculatePowerMah(measuredChargeUC, activityCounter);
+ final double systemPowerMah =
+ calculatePowerMah(powerModel, measuredChargeUC, activityCounter);
// Subtract what the apps used, but clamp to 0.
final double powerMah = Math.max(0, systemPowerMah - total.powerMah);
@@ -165,9 +165,10 @@ public class BluetoothPowerCalculator extends PowerCalculator {
PowerAndDuration total) {
final long measuredChargeUC = u.getBluetoothMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(measuredChargeUC);
final ControllerActivityCounter activityCounter = u.getBluetoothControllerActivity();
final long durationMs = calculateDuration(activityCounter);
- final double powerMah = calculatePowerMah(measuredChargeUC, activityCounter);
+ final double powerMah = calculatePowerMah(powerModel, measuredChargeUC, activityCounter);
app.bluetoothRunningTimeMs = durationMs;
app.bluetoothPowerMah = powerMah;
@@ -189,10 +190,12 @@ public class BluetoothPowerCalculator extends PowerCalculator {
}
/** Returns bluetooth power usage based on the best data available. */
- private double calculatePowerMah(long measuredChargeUC, ControllerActivityCounter counter) {
- if (measuredChargeUC != POWER_DATA_UNAVAILABLE) {
+ private double calculatePowerMah(@BatteryConsumer.PowerModel int powerModel,
+ long measuredChargeUC, ControllerActivityCounter counter) {
+ if (powerModel == BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) {
return uCtoMah(measuredChargeUC);
}
+
if (counter == null) {
return 0;
}
diff --git a/core/java/com/android/internal/os/CpuPowerCalculator.java b/core/java/com/android/internal/os/CpuPowerCalculator.java
index b15543a26b4c..4aafec555182 100644
--- a/core/java/com/android/internal/os/CpuPowerCalculator.java
+++ b/core/java/com/android/internal/os/CpuPowerCalculator.java
@@ -91,10 +91,12 @@ public class CpuPowerCalculator extends PowerCalculator {
private void calculateApp(UidBatteryConsumer.Builder app, BatteryStats.Uid u,
BatteryUsageStatsQuery query, Result result) {
- calculatePowerAndDuration(u, BatteryStats.STATS_SINCE_CHARGED,
- query.shouldForceUsePowerProfileModel(), result);
+ final long consumptionUC = u.getCpuMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC, query);
+ calculatePowerAndDuration(u, powerModel, consumptionUC, BatteryStats.STATS_SINCE_CHARGED,
+ result);
- app.setConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU, result.powerMah)
+ app.setConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU, result.powerMah, powerModel)
.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_CPU, result.durationMs)
.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_CPU_FOREGROUND,
result.durationFgMs)
@@ -114,7 +116,9 @@ public class CpuPowerCalculator extends PowerCalculator {
}
private void calculateApp(BatterySipper app, BatteryStats.Uid u, int statsType, Result result) {
- calculatePowerAndDuration(u, statsType, false, result);
+ final long consumptionUC = u.getCpuMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC);
+ calculatePowerAndDuration(u, powerModel, consumptionUC, statsType, result);
app.cpuPowerMah = result.powerMah;
app.cpuTimeMs = result.durationMs;
@@ -122,16 +126,20 @@ public class CpuPowerCalculator extends PowerCalculator {
app.packageWithHighestDrain = result.packageWithHighestDrain;
}
- private void calculatePowerAndDuration(BatteryStats.Uid u, int statsType,
- boolean forceUsePowerProfileModel, Result result) {
+ private void calculatePowerAndDuration(BatteryStats.Uid u,
+ @BatteryConsumer.PowerModel int powerModel, long consumptionUC, int statsType,
+ Result result) {
long durationMs = (u.getUserCpuTimeUs(statsType) + u.getSystemCpuTimeUs(statsType)) / 1000;
final double powerMah;
- final long consumptionUC = u.getCpuMeasuredBatteryConsumptionUC();
- if (forceUsePowerProfileModel || consumptionUC == BatteryStats.POWER_DATA_UNAVAILABLE) {
- powerMah = calculateUidModeledPowerMah(u, statsType);
- } else {
- powerMah = uCtoMah(consumptionUC);
+ switch(powerModel) {
+ case BatteryConsumer.POWER_MODEL_MEASURED_ENERGY:
+ powerMah = uCtoMah(consumptionUC);
+ break;
+ case BatteryConsumer.POWER_MODEL_POWER_PROFILE:
+ default:
+ powerMah = calculateUidModeledPowerMah(u, statsType);
+ break;
}
if (DEBUG && (durationMs != 0 || powerMah != 0)) {
diff --git a/core/java/com/android/internal/os/GnssPowerCalculator.java b/core/java/com/android/internal/os/GnssPowerCalculator.java
index 97c4fd8b7b7a..0e0870de4f5f 100644
--- a/core/java/com/android/internal/os/GnssPowerCalculator.java
+++ b/core/java/com/android/internal/os/GnssPowerCalculator.java
@@ -52,28 +52,30 @@ public class GnssPowerCalculator extends PowerCalculator {
builder.getUidBatteryConsumerBuilders();
for (int i = uidBatteryConsumerBuilders.size() - 1; i >= 0; i--) {
final UidBatteryConsumer.Builder app = uidBatteryConsumerBuilders.valueAt(i);
- calculateApp(app, app.getBatteryStatsUid(), rawRealtimeUs, rawUptimeUs, query,
- averageGnssPowerMa);
+ final long consumptionUC =
+ app.getBatteryStatsUid().getGnssMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC, query);
+ calculateApp(app, app.getBatteryStatsUid(), powerModel, rawRealtimeUs,
+ averageGnssPowerMa, consumptionUC);
}
}
private void calculateApp(UidBatteryConsumer.Builder app, BatteryStats.Uid u,
- long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query,
- double averageGnssPowerMa) {
+ @BatteryConsumer.PowerModel int powerModel, long rawRealtimeUs,
+ double averageGnssPowerMa, long measuredChargeUC) {
final long durationMs = computeDuration(u, rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED);
-
- final long measuredChargeUC = u.getGnssMeasuredBatteryConsumptionUC();
- final boolean isMeasuredPowerAvailable = !query.shouldForceUsePowerProfileModel()
- && measuredChargeUC != BatteryStats.POWER_DATA_UNAVAILABLE;
-
final double powerMah;
- if (isMeasuredPowerAvailable) {
- powerMah = uCtoMah(measuredChargeUC);
- } else {
- powerMah = computePower(durationMs, averageGnssPowerMa);
+ switch (powerModel) {
+ case BatteryConsumer.POWER_MODEL_MEASURED_ENERGY:
+ powerMah = uCtoMah(measuredChargeUC);
+ break;
+ case BatteryConsumer.POWER_MODEL_POWER_PROFILE:
+ default:
+ powerMah = computePower(durationMs, averageGnssPowerMa);
}
+
app.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_GNSS, durationMs)
- .setConsumedPower(BatteryConsumer.POWER_COMPONENT_GNSS, powerMah);
+ .setConsumedPower(BatteryConsumer.POWER_COMPONENT_GNSS, powerMah, powerModel);
}
@Override
@@ -83,24 +85,28 @@ public class GnssPowerCalculator extends PowerCalculator {
for (int i = sippers.size() - 1; i >= 0; i--) {
final BatterySipper app = sippers.get(i);
if (app.drainType == BatterySipper.DrainType.APP) {
- calculateApp(app, app.uidObj, rawRealtimeUs, statsType, averageGnssPowerMa, false);
+ final long consumptionUC =
+ app.uidObj.getGnssMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC);
+ calculateApp(app, app.uidObj, powerModel, rawRealtimeUs, averageGnssPowerMa,
+ consumptionUC);
}
}
}
- protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs,
- int statsType, double averageGnssPowerMa, boolean shouldForceUsePowerProfileModel) {
+ private void calculateApp(BatterySipper app, BatteryStats.Uid u,
+ @BatteryConsumer.PowerModel int powerModel, long rawRealtimeUs,
+ double averageGnssPowerMa, long measuredChargeUC) {
final long durationMs = computeDuration(u, rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED);
- final long measuredChargeUC = u.getGnssMeasuredBatteryConsumptionUC();
- final boolean isMeasuredPowerAvailable = shouldForceUsePowerProfileModel
- && measuredChargeUC != BatteryStats.POWER_DATA_UNAVAILABLE;
-
final double powerMah;
- if (isMeasuredPowerAvailable) {
- powerMah = uCtoMah(measuredChargeUC);
- } else {
- powerMah = computePower(durationMs, averageGnssPowerMa);
+ switch (powerModel) {
+ case BatteryConsumer.POWER_MODEL_MEASURED_ENERGY:
+ powerMah = uCtoMah(measuredChargeUC);
+ break;
+ case BatteryConsumer.POWER_MODEL_POWER_PROFILE:
+ default:
+ powerMah = computePower(durationMs, averageGnssPowerMa);
}
app.gpsTimeMs = durationMs;
diff --git a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java
index f6ef30cba369..d441d4529aca 100644
--- a/core/java/com/android/internal/os/MobileRadioPowerCalculator.java
+++ b/core/java/com/android/internal/os/MobileRadioPowerCalculator.java
@@ -97,37 +97,41 @@ public class MobileRadioPowerCalculator extends PowerCalculator {
for (int i = uidBatteryConsumerBuilders.size() - 1; i >= 0; i--) {
final UidBatteryConsumer.Builder app = uidBatteryConsumerBuilders.valueAt(i);
final BatteryStats.Uid uid = app.getBatteryStatsUid();
- calculateApp(app, uid, powerPerPacketMah, total,
- query.shouldForceUsePowerProfileModel());
+ calculateApp(app, uid, powerPerPacketMah, total, query);
}
- calculateRemaining(total, batteryStats, rawRealtimeUs,
- query.shouldForceUsePowerProfileModel());
+ final long consumptionUC = batteryStats.getMobileRadioMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC, query);
+ calculateRemaining(total, powerModel, batteryStats, rawRealtimeUs, consumptionUC);
if (total.remainingPowerMah != 0 || total.totalAppPowerMah != 0) {
builder.getOrCreateSystemBatteryConsumerBuilder(
- SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO)
+ SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO)
.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_MOBILE_RADIO,
total.durationMs)
.setConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
- total.remainingPowerMah + total.totalAppPowerMah)
+ total.remainingPowerMah + total.totalAppPowerMah,
+ powerModel)
.setPowerConsumedByApps(total.totalAppPowerMah);
}
}
private void calculateApp(UidBatteryConsumer.Builder app, BatteryStats.Uid u,
double powerPerPacketMah, PowerAndDuration total,
- boolean shouldForceUsePowerProfileModel) {
+ BatteryUsageStatsQuery query) {
final long radioActiveDurationMs = calculateDuration(u, BatteryStats.STATS_SINCE_CHARGED);
total.totalAppDurationMs += radioActiveDurationMs;
- final double powerMah = calculatePower(u, powerPerPacketMah, radioActiveDurationMs,
- shouldForceUsePowerProfileModel);
+ final long consumptionUC = u.getMobileRadioMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC, query);
+ final double powerMah = calculatePower(u, powerModel, powerPerPacketMah,
+ radioActiveDurationMs, consumptionUC);
total.totalAppPowerMah += powerMah;
app.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_MOBILE_RADIO,
- radioActiveDurationMs)
- .setConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, powerMah);
+ radioActiveDurationMs)
+ .setConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, powerMah,
+ powerModel);
}
@Override
@@ -140,12 +144,14 @@ public class MobileRadioPowerCalculator extends PowerCalculator {
final BatterySipper app = sippers.get(i);
if (app.drainType == BatterySipper.DrainType.APP) {
final BatteryStats.Uid u = app.uidObj;
- calculateApp(app, u, statsType, mobilePowerPerPacket, total, false);
+ calculateApp(app, u, statsType, mobilePowerPerPacket, total);
}
}
BatterySipper radio = new BatterySipper(BatterySipper.DrainType.CELL, null, 0);
- calculateRemaining(total, batteryStats, rawRealtimeUs, false);
+ final long consumptionUC = batteryStats.getMobileRadioMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC);
+ calculateRemaining(total, powerModel, batteryStats, rawRealtimeUs, consumptionUC);
if (total.remainingPowerMah != 0) {
if (total.signalDurationMs != 0) {
radio.noCoveragePercent =
@@ -162,12 +168,13 @@ public class MobileRadioPowerCalculator extends PowerCalculator {
}
private void calculateApp(BatterySipper app, BatteryStats.Uid u, int statsType,
- double powerPerPacketMah, PowerAndDuration total,
- boolean shouldForceUsePowerProfileModel) {
+ double powerPerPacketMah, PowerAndDuration total) {
app.mobileActive = calculateDuration(u, statsType);
- app.mobileRadioPowerMah = calculatePower(u, powerPerPacketMah, app.mobileActive,
- shouldForceUsePowerProfileModel);
+ final long consumptionUC = u.getMobileRadioMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC);
+ app.mobileRadioPowerMah = calculatePower(u, powerModel, powerPerPacketMah, app.mobileActive,
+ consumptionUC);
total.totalAppDurationMs += app.mobileActive;
// Add cost of mobile traffic.
@@ -193,13 +200,9 @@ public class MobileRadioPowerCalculator extends PowerCalculator {
return u.getMobileRadioActiveTime(statsType) / 1000;
}
- private double calculatePower(BatteryStats.Uid u, double powerPerPacketMah,
- long radioActiveDurationMs, boolean shouldForceUsePowerProfileModel) {
-
- final long measuredChargeUC = u.getMobileRadioMeasuredBatteryConsumptionUC();
- final boolean isMeasuredPowerAvailable = !shouldForceUsePowerProfileModel
- && measuredChargeUC != BatteryStats.POWER_DATA_UNAVAILABLE;
- if (isMeasuredPowerAvailable) {
+ private double calculatePower(BatteryStats.Uid u, @BatteryConsumer.PowerModel int powerModel,
+ double powerPerPacketMah, long radioActiveDurationMs, long measuredChargeUC) {
+ if (powerModel == BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) {
return uCtoMah(measuredChargeUC);
}
@@ -220,23 +223,20 @@ public class MobileRadioPowerCalculator extends PowerCalculator {
}
}
- private void calculateRemaining(MobileRadioPowerCalculator.PowerAndDuration total,
- BatteryStats batteryStats, long rawRealtimeUs,
- boolean shouldForceUsePowerProfileModel) {
+ private void calculateRemaining(PowerAndDuration total,
+ @BatteryConsumer.PowerModel int powerModel, BatteryStats batteryStats,
+ long rawRealtimeUs, long consumptionUC) {
long signalTimeMs = 0;
double powerMah = 0;
- final long measuredChargeUC = batteryStats.getMobileRadioMeasuredBatteryConsumptionUC();
- final boolean isMeasuredPowerAvailable = !shouldForceUsePowerProfileModel
- && measuredChargeUC != BatteryStats.POWER_DATA_UNAVAILABLE;
- if (isMeasuredPowerAvailable) {
- powerMah = uCtoMah(measuredChargeUC);
+ if (powerModel == BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) {
+ powerMah = uCtoMah(consumptionUC);
}
for (int i = 0; i < NUM_SIGNAL_STRENGTH_LEVELS; i++) {
long strengthTimeMs = batteryStats.getPhoneSignalStrengthTime(i, rawRealtimeUs,
BatteryStats.STATS_SINCE_CHARGED) / 1000;
- if (!isMeasuredPowerAvailable) {
+ if (powerModel == BatteryConsumer.POWER_MODEL_POWER_PROFILE) {
final double p = calcIdlePowerAtSignalStrengthMah(strengthTimeMs, i);
if (DEBUG && p != 0) {
Log.d(TAG, "Cell strength #" + i + ": time=" + strengthTimeMs + " power="
@@ -256,7 +256,7 @@ public class MobileRadioPowerCalculator extends PowerCalculator {
BatteryStats.STATS_SINCE_CHARGED) / 1000;
long remainingActiveTimeMs = radioActiveTimeMs - total.totalAppDurationMs;
- if (!isMeasuredPowerAvailable) {
+ if (powerModel == BatteryConsumer.POWER_MODEL_POWER_PROFILE) {
final double p = calcScanTimePowerMah(scanningTimeMs);
if (DEBUG && p != 0) {
Log.d(TAG, "Cell radio scanning: time=" + scanningTimeMs + " power=" + formatCharge(
diff --git a/core/java/com/android/internal/os/PowerCalculator.java b/core/java/com/android/internal/os/PowerCalculator.java
index 72385e273cf0..d139b4f0aa9a 100644
--- a/core/java/com/android/internal/os/PowerCalculator.java
+++ b/core/java/com/android/internal/os/PowerCalculator.java
@@ -15,6 +15,8 @@
*/
package com.android.internal.os;
+import android.annotation.NonNull;
+import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
@@ -114,19 +116,48 @@ public abstract class PowerCalculator {
public void reset() {
}
+ protected static @BatteryConsumer.PowerModel int getPowerModel(
+ long measuredEnergyUC, @NonNull BatteryUsageStatsQuery query) {
+ if (measuredEnergyUC != BatteryStats.POWER_DATA_UNAVAILABLE
+ && !query.shouldForceUsePowerProfileModel()) {
+ return BatteryConsumer.POWER_MODEL_MEASURED_ENERGY;
+ }
+ return BatteryConsumer.POWER_MODEL_POWER_PROFILE;
+ }
+
+ protected static @BatteryConsumer.PowerModel int getPowerModel(long measuredEnergyUC) {
+ return measuredEnergyUC != BatteryStats.POWER_DATA_UNAVAILABLE
+ ? BatteryConsumer.POWER_MODEL_MEASURED_ENERGY
+ : BatteryConsumer.POWER_MODEL_POWER_PROFILE;
+ }
+
/**
* Returns either the measured energy converted to mAh or a usage-based estimate.
*/
- protected static double getMeasuredOrEstimatedPower(long measuredEnergyUC,
- UsageBasedPowerEstimator powerEstimator, long durationMs,
- boolean forceUsePowerProfileModel) {
- if (measuredEnergyUC != BatteryStats.POWER_DATA_UNAVAILABLE
- && !forceUsePowerProfileModel) {
+ protected static double getMeasuredOrEstimatedPower(@BatteryConsumer.PowerModel int powerModel,
+ long measuredEnergyUC, UsageBasedPowerEstimator powerEstimator, long durationMs) {
+ switch (powerModel) {
+ case BatteryConsumer.POWER_MODEL_MEASURED_ENERGY:
+ return uCtoMah(measuredEnergyUC);
+ case BatteryConsumer.POWER_MODEL_POWER_PROFILE:
+ default:
+ return powerEstimator.calculatePower(durationMs);
+ }
+ }
+
+ /**
+ * Returns either the measured energy converted to mAh or a usage-based estimate.
+ */
+ protected static double getMeasuredOrEstimatedPower(
+ long measuredEnergyUC, UsageBasedPowerEstimator powerEstimator, long durationMs) {
+ if (measuredEnergyUC != BatteryStats.POWER_DATA_UNAVAILABLE) {
return uCtoMah(measuredEnergyUC);
+ } else {
+ return powerEstimator.calculatePower(durationMs);
}
- return powerEstimator.calculatePower(durationMs);
}
+
/**
* Converts charge in mAh to string.
*/
diff --git a/core/java/com/android/internal/os/ScreenPowerCalculator.java b/core/java/com/android/internal/os/ScreenPowerCalculator.java
index ad574440f216..0267def918c2 100644
--- a/core/java/com/android/internal/os/ScreenPowerCalculator.java
+++ b/core/java/com/android/internal/os/ScreenPowerCalculator.java
@@ -62,9 +62,10 @@ public class ScreenPowerCalculator extends PowerCalculator {
long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) {
final PowerAndDuration totalPowerAndDuration = new PowerAndDuration();
- final boolean useEnergyData = calculateTotalDurationAndPower(totalPowerAndDuration,
- batteryStats, rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED,
- query.shouldForceUsePowerProfileModel());
+ final long consumptionUC = batteryStats.getScreenOnMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC, query);
+ calculateTotalDurationAndPower(totalPowerAndDuration, powerModel, batteryStats,
+ rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED, consumptionUC);
double totalAppPower = 0;
@@ -73,29 +74,32 @@ public class ScreenPowerCalculator extends PowerCalculator {
// but the method depends on the data source.
final SparseArray<UidBatteryConsumer.Builder> uidBatteryConsumerBuilders =
builder.getUidBatteryConsumerBuilders();
- if (useEnergyData) {
- final PowerAndDuration appPowerAndDuration = new PowerAndDuration();
- for (int i = uidBatteryConsumerBuilders.size() - 1; i >= 0; i--) {
- final UidBatteryConsumer.Builder app = uidBatteryConsumerBuilders.valueAt(i);
- calculateAppUsingMeasuredEnergy(appPowerAndDuration, app.getBatteryStatsUid(),
+ switch (powerModel) {
+ case BatteryConsumer.POWER_MODEL_MEASURED_ENERGY:
+ final PowerAndDuration appPowerAndDuration = new PowerAndDuration();
+ for (int i = uidBatteryConsumerBuilders.size() - 1; i >= 0; i--) {
+ final UidBatteryConsumer.Builder app = uidBatteryConsumerBuilders.valueAt(i);
+ calculateAppUsingMeasuredEnergy(appPowerAndDuration, app.getBatteryStatsUid(),
+ rawRealtimeUs);
+ app.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_SCREEN,
+ appPowerAndDuration.durationMs)
+ .setConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN,
+ appPowerAndDuration.powerMah, powerModel);
+ totalAppPower += appPowerAndDuration.powerMah;
+ }
+ break;
+ case BatteryConsumer.POWER_MODEL_POWER_PROFILE:
+ default:
+ smearScreenBatteryDrain(uidBatteryConsumerBuilders, totalPowerAndDuration,
rawRealtimeUs);
- app.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_SCREEN,
- appPowerAndDuration.durationMs)
- .setConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN,
- appPowerAndDuration.powerMah);
- totalAppPower += appPowerAndDuration.powerMah;
- }
- } else {
- smearScreenBatteryDrain(uidBatteryConsumerBuilders, totalPowerAndDuration,
- rawRealtimeUs);
- totalAppPower = totalPowerAndDuration.powerMah;
+ totalAppPower = totalPowerAndDuration.powerMah;
}
builder.getOrCreateSystemBatteryConsumerBuilder(SystemBatteryConsumer.DRAIN_TYPE_SCREEN)
.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_USAGE,
totalPowerAndDuration.durationMs)
.setConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE,
- Math.max(totalPowerAndDuration.powerMah, totalAppPower))
+ Math.max(totalPowerAndDuration.powerMah, totalAppPower), powerModel)
.setPowerConsumedByApps(totalAppPower);
}
@@ -106,8 +110,10 @@ public class ScreenPowerCalculator extends PowerCalculator {
public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats,
long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) {
final PowerAndDuration totalPowerAndDuration = new PowerAndDuration();
- final boolean useEnergyData = calculateTotalDurationAndPower(totalPowerAndDuration,
- batteryStats, rawRealtimeUs, statsType, false);
+ final long consumptionUC = batteryStats.getScreenOnMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC);
+ calculateTotalDurationAndPower(totalPowerAndDuration, powerModel, batteryStats,
+ rawRealtimeUs, statsType, consumptionUC);
if (totalPowerAndDuration.powerMah == 0) {
return;
}
@@ -121,41 +127,42 @@ public class ScreenPowerCalculator extends PowerCalculator {
// Now deal with each app's BatterySipper. The results are stored in the screenPowerMah
// field, which is considered smeared, but the method depends on the data source.
- if (useEnergyData) {
- final PowerAndDuration appPowerAndDuration = new PowerAndDuration();
- for (int i = sippers.size() - 1; i >= 0; i--) {
- final BatterySipper app = sippers.get(i);
- if (app.drainType == BatterySipper.DrainType.APP) {
- calculateAppUsingMeasuredEnergy(appPowerAndDuration, app.uidObj, rawRealtimeUs);
- app.screenPowerMah = appPowerAndDuration.powerMah;
+ switch (powerModel) {
+ case BatteryConsumer.POWER_MODEL_MEASURED_ENERGY:
+ final PowerAndDuration appPowerAndDuration = new PowerAndDuration();
+ for (int i = sippers.size() - 1; i >= 0; i--) {
+ final BatterySipper app = sippers.get(i);
+ if (app.drainType == BatterySipper.DrainType.APP) {
+ calculateAppUsingMeasuredEnergy(appPowerAndDuration, app.uidObj,
+ rawRealtimeUs);
+ app.screenPowerMah = appPowerAndDuration.powerMah;
+ }
}
- }
- } else {
- smearScreenBatterySipper(sippers, bs, rawRealtimeUs);
+ break;
+ case BatteryConsumer.POWER_MODEL_POWER_PROFILE:
+ default:
+ smearScreenBatterySipper(sippers, bs, rawRealtimeUs);
}
}
/**
- * Stores duration and power information in totalPowerAndDuration and returns true if measured
- * energy data is available and should be used by the model.
+ * Stores duration and power information in totalPowerAndDuration.
*/
- private boolean calculateTotalDurationAndPower(PowerAndDuration totalPowerAndDuration,
- BatteryStats batteryStats, long rawRealtimeUs, int statsType,
- boolean forceUsePowerProfileModel) {
+ private void calculateTotalDurationAndPower(PowerAndDuration totalPowerAndDuration,
+ @BatteryConsumer.PowerModel int powerModel, BatteryStats batteryStats,
+ long rawRealtimeUs, int statsType, long consumptionUC) {
totalPowerAndDuration.durationMs = calculateDuration(batteryStats, rawRealtimeUs,
statsType);
- if (!forceUsePowerProfileModel) {
- final long chargeUC = batteryStats.getScreenOnMeasuredBatteryConsumptionUC();
- if (chargeUC != BatteryStats.POWER_DATA_UNAVAILABLE) {
- totalPowerAndDuration.powerMah = uCtoMah(chargeUC);
- return true;
- }
+ switch (powerModel) {
+ case BatteryConsumer.POWER_MODEL_MEASURED_ENERGY:
+ totalPowerAndDuration.powerMah = uCtoMah(consumptionUC);
+ break;
+ case BatteryConsumer.POWER_MODEL_POWER_PROFILE:
+ default:
+ totalPowerAndDuration.powerMah = calculateTotalPowerFromBrightness(batteryStats,
+ rawRealtimeUs, statsType, totalPowerAndDuration.durationMs);
}
-
- totalPowerAndDuration.powerMah = calculateTotalPowerFromBrightness(batteryStats,
- rawRealtimeUs, statsType, totalPowerAndDuration.durationMs);
- return false;
}
private void calculateAppUsingMeasuredEnergy(PowerAndDuration appPowerAndDuration,
@@ -245,7 +252,8 @@ public class ScreenPowerCalculator extends PowerCalculator {
final long durationMs = activityTimeArray.get(app.getUid(), 0);
final double powerMah = totalScreenPowerMah * durationMs / totalActivityTimeMs;
app.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_SCREEN, durationMs)
- .setConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN, powerMah);
+ .setConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN, powerMah,
+ BatteryConsumer.POWER_MODEL_POWER_PROFILE);
}
}
}
diff --git a/core/java/com/android/internal/os/WifiPowerCalculator.java b/core/java/com/android/internal/os/WifiPowerCalculator.java
index d95506b00677..11219eccddad 100644
--- a/core/java/com/android/internal/os/WifiPowerCalculator.java
+++ b/core/java/com/android/internal/os/WifiPowerCalculator.java
@@ -15,8 +15,6 @@
*/
package com.android.internal.os;
-import static android.os.BatteryStats.POWER_DATA_UNAVAILABLE;
-
import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
@@ -92,10 +90,12 @@ public class WifiPowerCalculator extends PowerCalculator {
builder.getUidBatteryConsumerBuilders();
for (int i = uidBatteryConsumerBuilders.size() - 1; i >= 0; i--) {
final UidBatteryConsumer.Builder app = uidBatteryConsumerBuilders.valueAt(i);
- calculateApp(powerDurationAndTraffic, app.getBatteryStatsUid(), rawRealtimeUs,
- BatteryStats.STATS_SINCE_CHARGED,
- batteryStats.hasWifiActivityReporting(),
- query.shouldForceUsePowerProfileModel());
+ final long consumptionUC =
+ app.getBatteryStatsUid().getWifiMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC, query);
+ calculateApp(powerDurationAndTraffic, app.getBatteryStatsUid(), powerModel,
+ rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED,
+ batteryStats.hasWifiActivityReporting(), consumptionUC);
totalAppDurationMs += powerDurationAndTraffic.durationMs;
totalAppPowerMah += powerDurationAndTraffic.powerMah;
@@ -103,7 +103,7 @@ public class WifiPowerCalculator extends PowerCalculator {
app.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_WIFI,
powerDurationAndTraffic.durationMs);
app.setConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI,
- powerDurationAndTraffic.powerMah);
+ powerDurationAndTraffic.powerMah, powerModel);
if (app.getUid() == Process.WIFI_UID) {
systemBatteryConsumerBuilder.addUidBatteryConsumer(app);
@@ -111,17 +111,17 @@ public class WifiPowerCalculator extends PowerCalculator {
}
}
- calculateRemaining(powerDurationAndTraffic, batteryStats, rawRealtimeUs,
- BatteryStats.STATS_SINCE_CHARGED,
- batteryStats.hasWifiActivityReporting(),
- query.shouldForceUsePowerProfileModel(),
- totalAppDurationMs, totalAppPowerMah);
+ final long consumptionUC = batteryStats.getWifiMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC, query);
+ calculateRemaining(powerDurationAndTraffic, powerModel, batteryStats, rawRealtimeUs,
+ BatteryStats.STATS_SINCE_CHARGED, batteryStats.hasWifiActivityReporting(),
+ totalAppDurationMs, totalAppPowerMah, consumptionUC);
systemBatteryConsumerBuilder
.setUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_WIFI,
powerDurationAndTraffic.durationMs)
.setConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI,
- totalAppPowerMah + powerDurationAndTraffic.powerMah)
+ totalAppPowerMah + powerDurationAndTraffic.powerMah, powerModel)
.setPowerConsumedByApps(totalAppPowerMah);
}
@@ -144,8 +144,11 @@ public class WifiPowerCalculator extends PowerCalculator {
for (int i = sippers.size() - 1; i >= 0; i--) {
final BatterySipper app = sippers.get(i);
if (app.drainType == BatterySipper.DrainType.APP) {
- calculateApp(powerDurationAndTraffic, app.uidObj, rawRealtimeUs, statsType,
- batteryStats.hasWifiActivityReporting(), /* force use power model*/ false);
+ final long consumptionUC =
+ app.uidObj.getWifiMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC);
+ calculateApp(powerDurationAndTraffic, app.uidObj, powerModel, rawRealtimeUs,
+ statsType, batteryStats.hasWifiActivityReporting(), consumptionUC);
totalAppDurationMs += powerDurationAndTraffic.durationMs;
totalAppPowerMah += powerDurationAndTraffic.powerMah;
@@ -164,9 +167,11 @@ public class WifiPowerCalculator extends PowerCalculator {
}
}
- calculateRemaining(powerDurationAndTraffic, batteryStats, rawRealtimeUs, statsType,
- batteryStats.hasWifiActivityReporting(), /* force use power model*/ false,
- totalAppDurationMs, totalAppPowerMah);
+ final long consumptionUC = batteryStats.getWifiMeasuredBatteryConsumptionUC();
+ final int powerModel = getPowerModel(consumptionUC);
+ calculateRemaining(powerDurationAndTraffic, powerModel, batteryStats, rawRealtimeUs,
+ statsType, batteryStats.hasWifiActivityReporting(), totalAppDurationMs,
+ totalAppPowerMah, consumptionUC);
bs.wifiRunningTimeMs += powerDurationAndTraffic.durationMs;
bs.wifiPowerMah += powerDurationAndTraffic.powerMah;
@@ -176,9 +181,10 @@ public class WifiPowerCalculator extends PowerCalculator {
}
}
- private void calculateApp(PowerDurationAndTraffic powerDurationAndTraffic, BatteryStats.Uid u,
- long rawRealtimeUs, int statsType,
- boolean hasWifiActivityReporting, boolean shouldForceUsePowerProfileModel) {
+ private void calculateApp(PowerDurationAndTraffic powerDurationAndTraffic,
+ BatteryStats.Uid u, @BatteryConsumer.PowerModel int powerModel,
+ long rawRealtimeUs, int statsType, boolean hasWifiActivityReporting,
+ long consumptionUC) {
powerDurationAndTraffic.wifiRxPackets = u.getNetworkActivityPackets(
BatteryStats.NETWORK_WIFI_RX_DATA,
@@ -193,11 +199,8 @@ public class WifiPowerCalculator extends PowerCalculator {
BatteryStats.NETWORK_WIFI_TX_DATA,
statsType);
- final long measuredChargeUC = u.getWifiMeasuredBatteryConsumptionUC();
- final boolean isMeasuredPowerAvailable
- = !shouldForceUsePowerProfileModel && measuredChargeUC != POWER_DATA_UNAVAILABLE;
- if (isMeasuredPowerAvailable) {
- powerDurationAndTraffic.powerMah = uCtoMah(measuredChargeUC);
+ if (powerModel == BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) {
+ powerDurationAndTraffic.powerMah = uCtoMah(consumptionUC);
}
if (hasWifiActivityReporting && mHasWifiPowerController) {
@@ -208,7 +211,7 @@ public class WifiPowerCalculator extends PowerCalculator {
final long rxTime = counter.getRxTimeCounter().getCountLocked(statsType);
powerDurationAndTraffic.durationMs = idleTime + rxTime + txTime;
- if (!isMeasuredPowerAvailable) {
+ if (powerModel == BatteryConsumer.POWER_MODEL_POWER_PROFILE) {
powerDurationAndTraffic.powerMah
= calcPowerFromControllerDataMah(rxTime, txTime, idleTime);
}
@@ -223,7 +226,7 @@ public class WifiPowerCalculator extends PowerCalculator {
final long wifiRunningTime = u.getWifiRunningTime(rawRealtimeUs, statsType) / 1000;
powerDurationAndTraffic.durationMs = wifiRunningTime;
- if (!isMeasuredPowerAvailable) {
+ if (powerModel == BatteryConsumer.POWER_MODEL_POWER_PROFILE) {
final long wifiScanTimeMs = u.getWifiScanTime(rawRealtimeUs, statsType) / 1000;
long batchTimeMs = 0;
for (int bin = 0; bin < BatteryStats.Uid.NUM_WIFI_BATCHED_SCAN_BINS; bin++) {
@@ -243,19 +246,17 @@ public class WifiPowerCalculator extends PowerCalculator {
}
private void calculateRemaining(PowerDurationAndTraffic powerDurationAndTraffic,
- BatteryStats stats, long rawRealtimeUs, int statsType,
- boolean hasWifiActivityReporting, boolean shouldForceUsePowerProfileModel,
- long totalAppDurationMs, double totalAppPowerMah) {
+ @BatteryConsumer.PowerModel int powerModel, BatteryStats stats, long rawRealtimeUs,
+ int statsType, boolean hasWifiActivityReporting, long totalAppDurationMs,
+ double totalAppPowerMah, long consumptionUC) {
long totalDurationMs;
double totalPowerMah = 0;
- final long measuredChargeUC = stats.getWifiMeasuredBatteryConsumptionUC();
- final boolean isMeasuredPowerAvailable
- = !shouldForceUsePowerProfileModel && measuredChargeUC != POWER_DATA_UNAVAILABLE;
- if (isMeasuredPowerAvailable) {
- totalPowerMah = uCtoMah(measuredChargeUC);
+ if (powerModel == BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) {
+ totalPowerMah = uCtoMah(consumptionUC);
}
+
if (hasWifiActivityReporting && mHasWifiPowerController) {
final BatteryStats.ControllerActivityCounter counter =
stats.getWifiControllerActivity();
@@ -266,7 +267,7 @@ public class WifiPowerCalculator extends PowerCalculator {
totalDurationMs = idleTimeMs + rxTimeMs + txTimeMs;
- if (!isMeasuredPowerAvailable) {
+ if (powerModel == BatteryConsumer.POWER_MODEL_POWER_PROFILE) {
totalPowerMah = counter.getPowerCounter().getCountLocked(statsType)
/ (double) (1000 * 60 * 60);
if (totalPowerMah == 0) {
@@ -276,7 +277,7 @@ public class WifiPowerCalculator extends PowerCalculator {
}
} else {
totalDurationMs = stats.getGlobalWifiRunningTime(rawRealtimeUs, statsType) / 1000;
- if (!isMeasuredPowerAvailable) {
+ if (powerModel == BatteryConsumer.POWER_MODEL_POWER_PROFILE) {
totalPowerMah = calcGlobalPowerWithoutControllerDataMah(totalDurationMs);
}
}
diff --git a/core/java/com/android/internal/os/ZygoteServer.java b/core/java/com/android/internal/os/ZygoteServer.java
index f71b31493035..4d2266b2eba5 100644
--- a/core/java/com/android/internal/os/ZygoteServer.java
+++ b/core/java/com/android/internal/os/ZygoteServer.java
@@ -547,7 +547,7 @@ class ZygoteServer {
try {
ZygoteConnection connection = peers.get(pollIndex);
boolean multipleForksOK = !isUsapPoolEnabled()
- && ZygoteHooks.indefiniteThreadSuspensionOK();
+ && ZygoteHooks.isIndefiniteThreadSuspensionSafe();
final Runnable command =
connection.processCommand(this, multipleForksOK);
diff --git a/core/java/com/android/internal/widget/RecyclerView.java b/core/java/com/android/internal/widget/RecyclerView.java
index 17ce75e63b6f..9ed5eb1d144e 100644
--- a/core/java/com/android/internal/widget/RecyclerView.java
+++ b/core/java/com/android/internal/widget/RecyclerView.java
@@ -2049,17 +2049,19 @@ public class RecyclerView extends ViewGroup implements ScrollingView, NestedScro
}
if (!dispatchNestedPreFling(velocityX, velocityY)) {
- final View firstChild = mLayout.getChildAt(0);
- final View lastChild = mLayout.getChildAt(mLayout.getChildCount() - 1);
boolean consumed = false;
- if (velocityY < 0) {
- consumed = getChildAdapterPosition(firstChild) > 0
- || firstChild.getTop() < getPaddingTop();
- }
+ if (mLayout.getChildCount() > 0) {
+ final View firstChild = mLayout.getChildAt(0);
+ final View lastChild = mLayout.getChildAt(mLayout.getChildCount() - 1);
+ if (velocityY < 0) {
+ consumed = getChildAdapterPosition(firstChild) > 0
+ || firstChild.getTop() < getPaddingTop();
+ }
- if (velocityY > 0) {
- consumed = getChildAdapterPosition(lastChild) < mAdapter.getItemCount() - 1
- || lastChild.getBottom() > getHeight() - getPaddingBottom();
+ if (velocityY > 0) {
+ consumed = getChildAdapterPosition(lastChild) < mAdapter.getItemCount() - 1
+ || lastChild.getBottom() > getHeight() - getPaddingBottom();
+ }
}
dispatchNestedFling(velocityX, velocityY, consumed);
diff --git a/core/jni/Android.bp b/core/jni/Android.bp
index de85ff93ccb2..1f805c94d51c 100644
--- a/core/jni/Android.bp
+++ b/core/jni/Android.bp
@@ -70,7 +70,10 @@ cc_library_shared {
"libz",
],
- static_libs: ["libnativehelper_lazy", "libziparchive_for_incfs", ],
+ static_libs: [
+ "libnativehelper_lazy",
+ "libziparchive_for_incfs",
+ ],
export_include_dirs: [
".",
@@ -121,6 +124,7 @@ cc_library_shared {
"android_view_Surface.cpp",
"android_view_SurfaceControl.cpp",
"android_view_SurfaceControlFpsListener.cpp",
+ "android_view_SurfaceControlHdrLayerInfoListener.cpp",
"android_graphics_BLASTBufferQueue.cpp",
"android_view_SurfaceSession.cpp",
"android_view_TextureView.cpp",
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 6636b1f6327b..916ecd6bb3d2 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -122,6 +122,7 @@ extern int register_android_view_InputWindowHandle(JNIEnv* env);
extern int register_android_view_Surface(JNIEnv* env);
extern int register_android_view_SurfaceControl(JNIEnv* env);
extern int register_android_view_SurfaceControlFpsListener(JNIEnv* env);
+extern int register_android_view_SurfaceControlHdrLayerInfoListener(JNIEnv* env);
extern int register_android_view_SurfaceSession(JNIEnv* env);
extern int register_android_view_CompositionSamplingListener(JNIEnv* env);
extern int register_android_view_TextureView(JNIEnv* env);
@@ -1515,6 +1516,7 @@ static const RegJNIRec gRegJNI[] = {
REG_JNI(register_android_view_Surface),
REG_JNI(register_android_view_SurfaceControl),
REG_JNI(register_android_view_SurfaceControlFpsListener),
+ REG_JNI(register_android_view_SurfaceControlHdrLayerInfoListener),
REG_JNI(register_android_view_SurfaceSession),
REG_JNI(register_android_view_CompositionSamplingListener),
REG_JNI(register_android_view_TextureView),
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index 6f9a3815a302..7c4c97036bd8 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -26,6 +26,7 @@
#include <nativehelper/JNIHelp.h>
#include "core_jni_helpers.h"
+#include <android/media/AudioVibratorInfo.h>
#include <audiomanager/AudioManager.h>
#include <media/AudioPolicy.h>
#include <media/AudioSystem.h>
@@ -176,10 +177,15 @@ static struct {
jmethodID postRoutingUpdatedFromNative;
} gAudioPolicyEventHandlerMethods;
-static struct { jmethodID add; } gListMethods;
+jclass gListClass;
+static struct {
+ jmethodID add;
+ jmethodID get;
+ jmethodID size;
+} gListMethods;
static jclass gAudioDescriptorClass;
-static jmethodID gAudiODescriptorCstor;
+static jmethodID gAudioDescriptorCstor;
//
// JNI Initialization for OpenSLES routing
@@ -195,6 +201,13 @@ jclass gClsAudioRecordRoutingProxy;
jclass gAudioProfileClass;
jmethodID gAudioProfileCstor;
+jclass gVibratorClass;
+static struct {
+ jmethodID getId;
+ jmethodID getResonantFrequency;
+ jmethodID getQFactor;
+} gVibratorMethods;
+
static Mutex gLock;
enum AudioError {
@@ -1351,7 +1364,7 @@ static jint convertAudioPortFromNative(JNIEnv *env, jobject *jAudioPort,
reinterpret_cast<const jbyte *>(extraAudioDescriptor.descriptor));
jAudioDescriptor =
ScopedLocalRef<jobject>(env,
- env->NewObject(gAudioDescriptorClass, gAudiODescriptorCstor,
+ env->NewObject(gAudioDescriptorClass, gAudioDescriptorCstor,
standard, encapsulationType,
jDescriptor.get()));
env->CallBooleanMethod(jAudioDescriptors, gArrayListMethods.add, jAudioDescriptor.get());
@@ -2627,6 +2640,29 @@ android_media_AudioSystem_getDevicesForAttributes(JNIEnv *env, jobject thiz,
return jStatus;
}
+static jint android_media_AudioSystem_setVibratorInfos(JNIEnv *env, jobject thiz,
+ jobject jVibrators) {
+ if (!env->IsInstanceOf(jVibrators, gListClass)) {
+ return (jint)AUDIO_JAVA_BAD_VALUE;
+ }
+ const jint size = env->CallIntMethod(jVibrators, gListMethods.size);
+ std::vector<media::AudioVibratorInfo> vibratorInfos;
+ for (jint i = 0; i < size; ++i) {
+ ScopedLocalRef<jobject> jVibrator(env,
+ env->CallObjectMethod(jVibrators, gListMethods.get, i));
+ if (!env->IsInstanceOf(jVibrator.get(), gVibratorClass)) {
+ return (jint)AUDIO_JAVA_BAD_VALUE;
+ }
+ media::AudioVibratorInfo vibratorInfo;
+ vibratorInfo.id = env->CallIntMethod(jVibrator.get(), gVibratorMethods.getId);
+ vibratorInfo.resonantFrequency =
+ env->CallFloatMethod(jVibrator.get(), gVibratorMethods.getResonantFrequency);
+ vibratorInfo.qFactor = env->CallFloatMethod(jVibrator.get(), gVibratorMethods.getQFactor);
+ vibratorInfos.push_back(vibratorInfo);
+ }
+ return (jint)check_AudioSystem_Command(AudioSystem::setVibratorInfos(vibratorInfos));
+}
+
// ----------------------------------------------------------------------------
static const JNINativeMethod gMethods[] =
@@ -2757,7 +2793,9 @@ static const JNINativeMethod gMethods[] =
(void *)android_media_AudioSystem_setUserIdDeviceAffinities},
{"removeUserIdDeviceAffinities", "(I)I",
(void *)android_media_AudioSystem_removeUserIdDeviceAffinities},
- {"setCurrentImeUid", "(I)I", (void *)android_media_AudioSystem_setCurrentImeUid}};
+ {"setCurrentImeUid", "(I)I", (void *)android_media_AudioSystem_setCurrentImeUid},
+ {"setVibratorInfos", "(Ljava/util/List;)I",
+ (void *)android_media_AudioSystem_setVibratorInfos}};
static const JNINativeMethod gEventHandlerMethods[] = {
{"native_setup",
@@ -2959,7 +2997,10 @@ int register_android_media_AudioSystem(JNIEnv *env)
android::GetMethodIDOrDie(env, gClsAudioRecordRoutingProxy, "native_release", "()V");
jclass listClass = FindClassOrDie(env, "java/util/List");
+ gListClass = MakeGlobalRefOrDie(env, listClass);
gListMethods.add = GetMethodIDOrDie(env, listClass, "add", "(Ljava/lang/Object;)Z");
+ gListMethods.get = GetMethodIDOrDie(env, listClass, "get", "(I)Ljava/lang/Object;");
+ gListMethods.size = GetMethodIDOrDie(env, listClass, "size", "()I");
jclass audioProfileClass = FindClassOrDie(env, "android/media/AudioProfile");
gAudioProfileClass = MakeGlobalRefOrDie(env, audioProfileClass);
@@ -2967,7 +3008,14 @@ int register_android_media_AudioSystem(JNIEnv *env)
jclass audioDescriptorClass = FindClassOrDie(env, "android/media/AudioDescriptor");
gAudioDescriptorClass = MakeGlobalRefOrDie(env, audioDescriptorClass);
- gAudiODescriptorCstor = GetMethodIDOrDie(env, audioDescriptorClass, "<init>", "(II[B)V");
+ gAudioDescriptorCstor = GetMethodIDOrDie(env, audioDescriptorClass, "<init>", "(II[B)V");
+
+ jclass vibratorClass = FindClassOrDie(env, "android/os/Vibrator");
+ gVibratorClass = MakeGlobalRefOrDie(env, vibratorClass);
+ gVibratorMethods.getId = GetMethodIDOrDie(env, vibratorClass, "getId", "()I");
+ gVibratorMethods.getResonantFrequency =
+ GetMethodIDOrDie(env, vibratorClass, "getResonantFrequency", "()F");
+ gVibratorMethods.getQFactor = GetMethodIDOrDie(env, vibratorClass, "getQFactor", "()F");
AudioSystem::addErrorCallback(android_media_AudioSystem_error_callback);
diff --git a/core/jni/android_view_SurfaceControlHdrLayerInfoListener.cpp b/core/jni/android_view_SurfaceControlHdrLayerInfoListener.cpp
new file mode 100644
index 000000000000..adbd7916a3f4
--- /dev/null
+++ b/core/jni/android_view_SurfaceControlHdrLayerInfoListener.cpp
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define LOG_TAG "SurfaceControlHdrLayerInfoListener"
+
+#include <android/gui/BnHdrLayerInfoListener.h>
+#include <android_runtime/Log.h>
+#include <gui/ISurfaceComposer.h>
+#include <gui/SurfaceComposerClient.h>
+#include <log/log.h>
+#include <nativehelper/JNIHelp.h>
+#include <utils/RefBase.h>
+
+#include "android_util_Binder.h"
+#include "core_jni_helpers.h"
+
+namespace android {
+
+namespace {
+
+struct {
+ jclass mClass;
+ jmethodID mOnHdrInfoChanged;
+} gListenerClassInfo;
+
+struct SurfaceControlHdrLayerInfoListener : public gui::BnHdrLayerInfoListener {
+ SurfaceControlHdrLayerInfoListener(JNIEnv* env, jobject listener, jobject displayToken)
+ : mListener(env->NewGlobalRef(listener)), mDisplayToken(env->NewGlobalRef(displayToken)) {
+ LOG_ALWAYS_FATAL_IF(env->GetJavaVM(&mVm) != JNI_OK, "Failed to GetJavaVm");
+ }
+
+ binder::Status onHdrLayerInfoChanged(int numberOfHdrLayers, int maxW, int maxH,
+ int flags) override {
+ JNIEnv* env = requireEnv();
+
+ env->CallVoidMethod(mListener, gListenerClassInfo.mOnHdrInfoChanged, mDisplayToken,
+ numberOfHdrLayers, maxW, maxH, flags);
+
+ if (env->ExceptionCheck()) {
+ ALOGE("SurfaceControlHdrLayerInfoListener.onHdrInfoChanged() failed.");
+ LOGE_EX(env);
+ env->ExceptionClear();
+ }
+ return binder::Status::ok();
+ }
+
+ status_t startListening() {
+ auto token = ibinderForJavaObject(requireEnv(), mDisplayToken);
+ return SurfaceComposerClient::addHdrLayerInfoListener(token, this);
+ }
+
+ status_t stopListening() {
+ auto token = ibinderForJavaObject(requireEnv(), mDisplayToken);
+ return SurfaceComposerClient::removeHdrLayerInfoListener(token, this);
+ }
+
+protected:
+ virtual ~SurfaceControlHdrLayerInfoListener() {
+ JNIEnv* env = requireEnv();
+ env->DeleteGlobalRef(mListener);
+ env->DeleteGlobalRef(mDisplayToken);
+ }
+
+ JNIEnv* requireEnv() {
+ JNIEnv* env = nullptr;
+ if (mVm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+ if (mVm->AttachCurrentThreadAsDaemon(&env, nullptr) != JNI_OK) {
+ LOG_ALWAYS_FATAL("Failed to AttachCurrentThread!");
+ }
+ }
+ return env;
+ }
+
+private:
+ jobject mListener;
+ jobject mDisplayToken;
+ JavaVM* mVm;
+};
+
+jlong nRegister(JNIEnv* env, jobject jthis, jobject jbinderToken) {
+ auto callback = sp<SurfaceControlHdrLayerInfoListener>::make(env, jthis, jbinderToken);
+ status_t err = callback->startListening();
+ if (err != OK) {
+ auto errStr = statusToString(err);
+ jniThrowExceptionFmt(env, "java/lang/IllegalStateException",
+ "Failed to register HdrLayerInfoListener, err = %d (%s)", err,
+ errStr.c_str());
+ return 0;
+ }
+ SurfaceControlHdrLayerInfoListener* ret = callback.get();
+ ret->incStrong(0);
+ return static_cast<jlong>(reinterpret_cast<intptr_t>(ret));
+}
+
+static void destroy(SurfaceControlHdrLayerInfoListener* listener) {
+ listener->stopListening();
+ listener->decStrong(0);
+}
+
+static jlong nGetDestructor(JNIEnv* env, jobject clazz) {
+ return static_cast<jlong>(reinterpret_cast<intptr_t>(&destroy));
+}
+
+const JNINativeMethod gMethods[] = {
+ /* name, signature, funcPtr */
+ {"nGetDestructor", "()J", (void*)nGetDestructor},
+ {"nRegister", "(Landroid/os/IBinder;)J", (void*)nRegister}};
+
+} // namespace
+
+int register_android_view_SurfaceControlHdrLayerInfoListener(JNIEnv* env) {
+ int res = jniRegisterNativeMethods(env, "android/view/SurfaceControlHdrLayerInfoListener",
+ gMethods, NELEM(gMethods));
+ LOG_ALWAYS_FATAL_IF(res < 0, "Unable to register native methods.");
+
+ jclass clazz = env->FindClass("android/view/SurfaceControlHdrLayerInfoListener");
+ gListenerClassInfo.mClass = MakeGlobalRefOrDie(env, clazz);
+ gListenerClassInfo.mOnHdrInfoChanged =
+ env->GetMethodID(clazz, "onHdrInfoChanged", "(Landroid/os/IBinder;IIII)V");
+ return 0;
+}
+
+} // namespace android
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index fc264f313d70..c67bfedb9174 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -660,7 +660,6 @@
<protected-broadcast android:name="android.app.action.PROFILE_OWNER_CHANGED" />
<protected-broadcast android:name="android.app.action.TRANSFER_OWNERSHIP_COMPLETE" />
<protected-broadcast android:name="android.app.action.AFFILIATED_PROFILE_TRANSFER_OWNERSHIP_COMPLETE" />
- <protected-broadcast android:name="android.app.action.DATA_SHARING_RESTRICTION_CHANGED" />
<protected-broadcast android:name="android.app.action.STATSD_STARTED" />
<protected-broadcast android:name="com.android.server.biometrics.fingerprint.ACTION_LOCKOUT_RESET" />
<protected-broadcast android:name="com.android.server.biometrics.face.ACTION_LOCKOUT_RESET" />
@@ -1955,6 +1954,14 @@
android:label="@string/permlab_bluetooth_connect"
android:protectionLevel="dangerous" />
+ <!-- Required to be able to range to devices using uwb.
+ <p>Protection level: dangerous -->
+ <permission android:name="android.permission.UWB_RANGING"
+ android:permissionGroup="android.permission-group.UNDEFINED"
+ android:description="@string/permdesc_uwb_ranging"
+ android:label="@string/permlab_uwb_ranging"
+ android:protectionLevel="dangerous" />
+
<!-- @SystemApi @TestApi Allows an application to suspend other apps, which will prevent the
user from using them until they are unsuspended.
@hide
@@ -2759,8 +2766,12 @@
<permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"
android:protectionLevel="signature|privileged|vendorPrivileged|oem|verifier" />
- <!-- Allows an application to start foreground services from background, can only be granted to
- privileged apps or app that is SMS/EMERGENCY/SYSTEM GALLERY roles. -->
+ <!-- Allows an application to start foreground services from the background at any time.
+ <em>This permission is not for use by third-party applications</em>,
+ with the only exception being if the app is the default SMS app.
+ Otherwise, it's only usable by privileged apps, app verifier app, and apps with
+ any of the EMERGENCY or SYSTEM GALLERY roles.
+ -->
<permission android:name="android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND"
android:protectionLevel="signature|privileged|vendorPrivileged|oem|verifier|role"/>
@@ -5581,7 +5592,6 @@
@hide <p>Not for use by third-party applications.</p> -->
<permission android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG"
android:protectionLevel="signature|privileged" />
- <uses-permission android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG"/>
<!-- @SystemApi Allows an app to override compat change config on release builds.
Only ChangeIds that are annotated as @Overridable can be overridden on release builds.
@hide -->
diff --git a/core/res/res/drawable/perm_group_camera.xml b/core/res/res/drawable/perm_group_camera.xml
index e65501c4efcc..c47d8540c76e 100644
--- a/core/res/res/drawable/perm_group_camera.xml
+++ b/core/res/res/drawable/perm_group_camera.xml
@@ -20,11 +20,6 @@
android:tint="?android:attr/colorControlNormal"
android:viewportWidth="24"
android:viewportHeight="24">
-
- <path
- android:fillColor="#000000"
- android:pathData="M20,5h-3.17L15,3H9L7.17,5H4C2.9,5 2,5.9 2,7v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V7C22,5.9 21.1,5 20,5zM20,19H4V7h16V19z"/>
- <path
- android:fillColor="#000000"
- android:pathData="M12,9c-2.21,0 -4,1.79 -4,4c0,2.21 1.79,4 4,4s4,-1.79 4,-4C16,10.79 14.21,9 12,9z"/>
+ <path android:fillColor="@android:color/white"
+ android:pathData="M18,10.48L18,6c0,-1.1 -0.9,-2 -2,-2L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2v-4.48l4,3.98v-11l-4,3.98zM16,9.69L16,18L4,18L4,6h12v3.69z"/>
</vector>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index eb179911b1c9..26ac8c154f75 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Geen PIN, patroon of wagwoord is gestel nie"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Kon nie staaf nie"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Gebruik skermslot"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Voer jou toesteleiebewys in om voort te gaan."</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Kon nie vingerafdruk verwerk nie. Probeer asseblief weer."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Gesigslot"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Skryf jou gesig weer in"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Skryf asseblief jou gesig weer in om herkenning te verbeter"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Stel gesigslot op"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Ontsluit jou foon deur daarna te kyk"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Stel meer maniere op om te ontsluit"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Tik om \'n vingerafdruk by te voeg"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Kon nie gesigdata akkuraat vasvang nie. Probeer weer."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Te helder. Probeer sagter beligting."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Te donker. Probeer helderder beligting."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Gesig <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Gebruik gesigslot"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Gebruik gesig- of skermslot"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Gebruik gesigslot om voort te gaan"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Gebruik jou gesig of skermslot om voort te gaan"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Gekopieer"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> het uit <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> geplak"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> het uit knipbord geplak"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> het teks geplak wat jy gekopieer het"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> het \'n prent geplak wat jy gekopieer het"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> het inhoud geplak wat jy gekopieer het"</string>
<string name="more_item_label" msgid="7419249600215749115">"Meer"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Kieslys+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Werk"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Persoonlike aansig"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Werkaansig"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Deur jou IT-admin geblokkeer"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Hierdie inhoud kan nie met werkprogramme gedeel word nie"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Hierdie inhoud kan nie met werkprogramme oopgemaak word nie"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Hierdie inhoud kan nie met persoonlike programme gedeel word nie"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Hierdie inhoud kan nie met persoonlike programme oopgemaak word nie"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Werkprofiel is onderbreek"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Tik om aan te skakel"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Geen werkprogramme nie"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Geen persoonlike programme nie"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Maak in persoonlike profiel in <xliff:g id="APP">%s</xliff:g> oop?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Maak in werkprofiel in <xliff:g id="APP">%s</xliff:g> oop?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gebruik persoonlike blaaier"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gebruik werkblaaier"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM se netwerkontsluiting-PIN"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM se netwerksubstelontsluiting-PIN"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM se korporatiewe ontsluiting-PIN"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nuwe vergrotinginstellings"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Jy kan nou \'n deel van jou skerm vergroot"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Skakel aan in Instellings"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Maak toe"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Om voort te gaan, moet &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; toegang tot jou toestel se mikrofoon hê."</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 9dd9814e266d..bad2d4364c6b 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ምንም ፒን፣ ሥርዓተ ጥለት ወይም የይለፍ ቃል አልተቀናበረም"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"ማረጋገጥ ላይ ስህተት"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"የማያ ገጽ መቆለፊን ይጠቀሙ"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"ለመቀጠል የመሣሪያዎን የመግቢያ ማስረጃ ያስገቡ"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ጣት አሻራን መስራት አልተቻለም። እባክዎ እንደገና ይሞክሩ።"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"በመልክ መክፈት"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"የእርስዎን ፊት ዳግመኛ ያስመዝግቡ"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"ማንነትን ለይቶ ማወቅን ለማሻሻል፣ እባክዎ የእርስዎን ፊት ዳግም ያስመዝግቡ"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"በመልክ መክፈቻን ያቀናብሩ"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"ስልክዎን በመመልከት ያስከፍቱት"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"የሚከፍቱባቸው ተጨማሪ መንገዶችን ያቀናብሩ"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"የጣት አሻራን ለማከል መታ ያድርጉ"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"ትክክለኛ የፊት ውሂብ ማንሳት አልተቻለም። እንደገና ይሞክሩ።"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ከልክ በላይ ፈካ ያለ። ይበልጥ ረጋ ያለ ብርሃን አጠቃቀምን ይሞክሩ።"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"ከልክ በላይ ጨለማ ነው። ከዚህ ፈካ ያለ ብርሃን አጠቃቀምን ይሞክሩ።"</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"ፊት <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"በመልክ መክፈትን ይጠቀሙ"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"የመልክ ወይም የማያ ገጽ መቆለፊያን ይጠቀሙ"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"ለመቀጠል በመልክ መክፈትን ይጠቀሙ"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ለመቀጠል መልክዎን ወይም የማያ ገጽዎን መቆለፊያ ይጠቀሙ"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"ተቀድቷል"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ከ <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> ተለጥፏል"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ከቅንጣብ ሰሌዳ ተለጥፏል"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> እርስዎ የቀዱትን ጽሑፍ ለጥፏል"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> እርስዎ የቀዱትን ምስል ለጥፏል"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> እርስዎ የቀዱትን ይዘት ለጥፏል"</string>
<string name="more_item_label" msgid="7419249600215749115">"ተጨማሪ"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"ምናሌ+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"ሥራ"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"የግል እይታ"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"የስራ እይታ"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"በእርስዎ የአይቲ አስተዳዳሪ ታግዷል"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"ይህ ይዘት በሥራ መተግበሪያዎች መጋራት አይችልም"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ይህ ይዘት በሥራ መተግበሪያዎች መከፈት አይችልም"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ይህ ይዘት በግል መተግበሪያዎች መጋራት አይችልም"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ይህ ይዘት በግል መተግበሪያዎች መከፈት አይችልም"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"የሥራ መገለጫ ባለበት ቆሟል"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"ለማብራት መታ ያድርጉ"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ምንም የሥራ መተግበሪያዎች የሉም"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ምንም የግል መተግበሪያዎች የሉም"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"<xliff:g id="APP">%s</xliff:g> በግል መገለጫ ውስጥ ይከፈት?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"<xliff:g id="APP">%s</xliff:g> በስራ መገለጫ ውስጥ ይከፈት?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"የግል አሳሽ ተጠቀም"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"የስራ አሳሽ ተጠቀም"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"የሲም አውታረ መረብ መክፈቻ ፒን"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"የሲም አውታረ መረብ ንኡስ ስብስብ መክፈቻ ፒን"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"የሲም ኮርፖሬት መክፈቻ ፒን"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"አዲስ የማጉላት ቅንብሮች"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"አሁን የማያ ገጽዎን ክፍል ማጉላት ይችላሉ"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"በቅንብሮች ውስጥ ያብሩ"</string>
<string name="dismiss_action" msgid="1728820550388704784">"አሰናብት"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"ለመቀጠል፣ &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ወደ መሳሪያዎ ማይክሮፎን መድረስ ይፈልጋል።"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index b2f83b7511bb..564f1368bd0b 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -585,7 +585,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"لم يتم ضبط رقم تعريف شخصي أو نقش أو كلمة مرور."</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"خطأ في المصادقة"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"استخدام قفل الشاشة"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"إدخال بيانات اعتماد الجهاز للمتابعة"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"تعذرت معالجة بصمة الإصبع. يُرجى إعادة المحاولة."</string>
@@ -676,7 +677,8 @@
<string name="face_name_template" msgid="3877037340223318119">"الوجه <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"استخدام \"فتح القفل بالوجه\""</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"استخدام ميزة \"فتح القفل بالوجه\" أو ميزة \"قفل الشاشة\""</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"استخدام ميزة \"فتح القفل بالوجه\" للمتابعة"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"استخدام ميزة \"فتح القفل بالوجه\" أو ميزة \"قفل الشاشة\" للمتابعة"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2416,8 +2418,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"يمكنك الآن تكبير جزء من الشاشة."</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"التفعيل من خلال \"الإعدادات\""</string>
<string name="dismiss_action" msgid="1728820550388704784">"إغلاق"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"‏للمتابعة، يحتاج &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; إلى الوصول إلى ميكروفون الجهاز."</string>
diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml
index 3c7e37204c83..890410998072 100644
--- a/core/res/res/values-as/strings.xml
+++ b/core/res/res/values-as/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"কোনো পিন, আৰ্হি বা পাছৱৰ্ড ছেট কৰা নাই"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"আসোঁৱাহৰ বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰি থকা হৈছে"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"স্ক্ৰীন ল\'ক ব্যৱহাৰ কৰক"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"অব্যাহত ৰাখিবলৈ আপোনাৰ ডিভাইচৰ ক্ৰেডেনশ্বিয়েল দিয়ক"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ফিগাৰপ্ৰিণ্টৰ প্ৰক্ৰিয়া সম্পাদন কৰিবপৰা নগ\'ল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক৷"</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"মুখমণ্ডল <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"মুখাৱয়বৰে আনলক কৰা ব্যৱহাৰ কৰক"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"মুখাৱয়বৰে আনলক কৰা অথবা স্ক্ৰীন লক ব্যৱহাৰ কৰক"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"অব্যাহত ৰাখিবলৈ মুখাৱয়বৰে আনলক কৰা ব্যৱহাৰ কৰক"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"অব্যাহত ৰাখিবলৈ আপোনাৰ মুখাৱয়ব অথবা স্ক্ৰীন লক ব্যৱহাৰ কৰক"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"আপুনি এতিয়া আপোনাৰ স্ক্ৰীনখনৰ কিছু অংশ বিবৰ্ধন কৰিব পাৰে"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"ছেটিঙত অন কৰক"</string>
<string name="dismiss_action" msgid="1728820550388704784">"অগ্ৰাহ্য কৰক"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"অব্যাহত ৰাখিবলৈ &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt;এ আপোনাৰ ডিভাইচৰ মাইক্ৰ’ফ’ন এক্সেছ কৰাৰ আৱশ্যক।"</string>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
index 48e83b2d961a..a753fd891a4e 100644
--- a/core/res/res/values-az/strings.xml
+++ b/core/res/res/values-az/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Pin, nümunə və ya parol ayarlanmayıb"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Doğrulama zamanı xəta baş verdi"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekran kilidindən istifadə edin"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Davam etmək üçün cihazın giriş məlumatlarını daxil edin"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Barmaq izi tanınmadı. Lütfən, yenidən cəhd edin."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Üz <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Üz ilə kiliddən çıxarmadan istifadə edin"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Üz və ya ekran kilidindən istifadə edin"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Davam etmək üçün üz ilə kiliddən çıxarmadan istifadə edin"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Davam etmək üçün üz və ya ekran kilidinizdən istifadə edin"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"İndi ekranınızın bir hissəsini böyüdə bilərsiniz"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Ayarlarda aktiv edin"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Qapadın"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Davam etmək üçün &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; tətbiqi cihazın mikrofonuna giriş tələb edir."</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index 78fce43f1ec9..9d913a265cb9 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -576,7 +576,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Niste podesili ni PIN, ni šablon, ni lozinku"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Greška pri potvrdi identiteta"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Koristite zaključavanje ekrana"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Unesite akreditiv za uređaj da biste nastavili"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nije uspela obrada otiska prsta. Probajte ponovo."</string>
@@ -623,14 +624,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Otključavanje licem"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Ponovo registrujte lice"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Da biste poboljšali prepoznavanje, ponovo registrujte lice"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Podesite otključavanje licem"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Otključajte telefon tako što ćete ga pogledati"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Podesite još načina za otključavanje"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Dodirnite da biste dodali otisak prsta"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Snimanje lica nije uspelo. Probajte ponovo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Previše je svetlo. Probajte sa slabijim osvetljenjem."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Pretamno je. Probajte sa jačim osvetljenjem."</string>
@@ -667,7 +664,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Lice <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Koristite otključavanje licem"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Koristite zaključavanje licem ili zaključavanje ekrana"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Koristite otključavanje licem da biste nastavili"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Koristite lice ili zaključavanje ekrana da biste nastavili"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1034,12 +1032,9 @@
<string name="copied" msgid="4675902854553014676">"Kopirano je"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Aplikacija<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> je nalepila podatke iz aplikacije <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Aplikacija<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> nalepila podatke iz privremene memorije"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"Aplikacija<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> je nalepila tekst koji ste kopirali"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"Aplikacija<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> je nalepila sliku koju ste kopirali"</string>
+ <string name="pasted_content" msgid="646276353060777131">"Aplikacija<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> je nalepila sadržaj koji ste kopirali"</string>
<string name="more_item_label" msgid="7419249600215749115">"Još"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Meni+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2175,31 +2170,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Poslovno"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Lični prikaz"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Prikaz za posao"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokira IT administrator"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Ovaj sadržaj ne može da se deli pomoću poslovnih aplikacija"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ovaj sadržaj ne može da se otvara pomoću poslovnih aplikacija"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ovaj sadržaj ne može da se deli pomoću ličnih aplikacija"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ovaj sadržaj ne može da se otvara pomoću ličnih aplikacija"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Poslovni profil je pauziran"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da biste uključili"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nema poslovnih aplikacija"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nema ličnih aplikacija"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Želite da otvorite na ličnom profilu u: <xliff:g id="APP">%s</xliff:g>?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Želite da otvorite na poslovnom profilu u: <xliff:g id="APP">%s</xliff:g>?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Koristi lični pregledač"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Koristi poslovni pregledač"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN za otključavanje SIM mreže"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN za otključavanje podskupa SIM mreže"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN za otključavanje poslovne SIM kartice"</string>
@@ -2312,10 +2295,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nova podešavanja uvećanja"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Sada možete da uvećate deo ekrana"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Uključite u Podešavanjima"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Odbaci"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"&lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; zahteva pristup mikrofonu uređaja radi nastavljanja."</string>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
index 12a9b42958aa..eb30d2d5fa13 100644
--- a/core/res/res/values-be/strings.xml
+++ b/core/res/res/values-be/strings.xml
@@ -326,10 +326,8 @@
<string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"доступ да даных фізічнай актыўнасці"</string>
<string name="permgrouplab_camera" msgid="9090413408963547706">"Камера"</string>
<string name="permgroupdesc_camera" msgid="7585150538459320326">"рабіць фатаздымкі і запісваць відэа"</string>
- <!-- no translation found for permgrouplab_nearby_devices (14428105203684587) -->
- <skip />
- <!-- no translation found for permgroupdesc_nearby_devices (1146639974734121820) -->
- <skip />
+ <string name="permgrouplab_nearby_devices" msgid="14428105203684587">"Прылады з Bluetooth паблізу"</string>
+ <string name="permgroupdesc_nearby_devices" msgid="1146639974734121820">"выяўляць прылады з Bluetooth, якія знаходзяцца паблізу, і падключацца да іх"</string>
<string name="permgrouplab_calllog" msgid="7926834372073550288">"Журналы выклікаў"</string>
<string name="permgroupdesc_calllog" msgid="2026996642917801803">"Чытанне і запіс журнала тэлефонных выклікаў"</string>
<string name="permgrouplab_phone" msgid="570318944091926620">"Тэлефон"</string>
@@ -543,14 +541,10 @@
<string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"Дазваляе прыкладанню праглядаць канфігурацыю Bluetooth на планшэце , а таксама здзяйсняць і прымаць злучэнні са спалучанымі прыладамі."</string>
<string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"Дазваляе праграме праглядаць канфігурацыю Bluetooth на прыладзе Android TV, а таксама выконваць і дазваляць злучэнні са спалучанымі прыладамі."</string>
<string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"Дазваляе прыкладанню праглядаць канфігурацыю Bluetooth на тэлефоне , а таксама здзяйсняць і прымаць злучэнні са спалучанымі прыладамі."</string>
- <!-- no translation found for permlab_bluetooth_scan (5402587142833124594) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_scan (6540723536925289276) -->
- <skip />
- <!-- no translation found for permlab_bluetooth_connect (6657463246355003528) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_connect (4546016548795544617) -->
- <skip />
+ <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"выяўляць прылады з Bluetooth і спалучацца з імі"</string>
+ <string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"Дазваляе праграме выяўляць прылады з Bluetooth і спалучацца з імі"</string>
+ <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"падключацца да спалучаных прылад з Bluetooth"</string>
+ <string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"Дазваляе праграме падключацца да спалучаных прылад з Bluetooth"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"Інфармацыя пра прыярытэтны сэрвіс аплаты NFC"</string>
<string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"Дазваляе праграме атрымаць доступ да інфармацыі пра прыярытэтны сэрвіс аплаты NFC, напрыклад зарэгістраваныя ідэнтыфікатары праграм і маршруты адпраўкі даных."</string>
<string name="permlab_nfc" msgid="1904455246837674977">"кантроль Near Field Communication"</string>
@@ -585,7 +579,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Не заданы PIN-код, узор разблакіроўкі або пароль"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Памылка аўтэнтыфікацыі"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ужываць блакіроўку экрана"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Каб працягнуць, увядзіце ўліковыя даныя вашай прылады"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Не атрымалася апрацаваць адбітак пальца. Паспрабуйце яшчэ раз."</string>
@@ -632,14 +627,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Распазнаванне твару"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Паўтарыце рэгістрацыю твару"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Каб палепшыць распазнавальнасць, яшчэ раз выканайце рэгістрацыю твару"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Наладзьце распазнаванне твару"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Разблакіруйце свой тэлефон, паглядзеўшы на яго"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Наладзьце дадатковыя спосабы разблакіроўкі"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Націсніце, каб дадаць адбітак пальца"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Не атрымалася распазнаць твар. Паўтарыце спробу."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Занадта светла. Прыглушыце асвятленне."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Занадта цёмна. Павялічце асвятленне."</string>
@@ -676,7 +667,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Твар <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Ужываць распазнаванне твару"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Выкарыстоўваць распазнаванне твару ці блакіроўку экрана"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Каб працягнуць, скарыстайце распазнаванне твару"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Каб працягнуць, скарыстайце распазнаванне твару ці сродак разблакіроўкі экрана"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1043,12 +1035,9 @@
<string name="copied" msgid="4675902854553014676">"Скапіравана"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Праграма \"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>\" была ўстаўлена з праграмы \"<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>\""</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Праграма \"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>\" была ўстаўлена з буфера абмену"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"Скапіраваны вамі тэкст устаўлены праграмай \"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="pasted_image" msgid="4729097394781491022">"Скапіраваны вамі відарыс устаўлены праграмай \"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="pasted_content" msgid="646276353060777131">"Скапіраванае вамі змесціва ўстаўлена праграмай \"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>\""</string>
<string name="more_item_label" msgid="7419249600215749115">"Больш"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Меню+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta +"</string>
@@ -2215,31 +2204,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Працоўныя"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Прагляд асабістага змесціва"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Прагляд працоўнага змесціва"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Заблакіравана вашым ІТ-адміністратарам"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Не ўдалося абагуліць гэта змесціва з працоўнымі праграмамі"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Не ўдалося адкрыць гэта змесціва з дапамогай працоўных праграм"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Не ўдалося абагуліць гэта змесціва з асабістымі праграмамі"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Не ўдалося адкрыць гэта змесціва з дапамогай асабістых праграм"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Працоўны профіль прыпынены"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Націсніце, каб уключыць"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Няма працоўных праграм"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Няма асабістых праграм"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Адкрыць у праграме \"<xliff:g id="APP">%s</xliff:g>\" з асабістага профілю?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Адкрыць у праграме \"<xliff:g id="APP">%s</xliff:g>\" з працоўнага профілю?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Скарыстаць асабісты браўзер"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Скарыстаць працоўны браўзер"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-код разблакіроўкі сеткі для SIM-карты"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN-код разблакіроўкі падмноства сеткі для SIM-карты"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN-код разблакіроўкі карпаратыўнай SIM-карты"</string>
@@ -2352,10 +2329,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Новыя налады павелічэння"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Цяпер можна павялічваць частку экрана"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Уключыць у Наладах"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Адхіліць"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Каб працягнуць, дайце праграме &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; доступ да мікрафона прылады."</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 258dad5e01a5..317ad7ab46c8 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Няма зададен ПИН код, фигура или парола"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Грешка при удостоверяването"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ползване на заключв. на екрана"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Въведете идентификационните данни на устройството, за да продължите"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Отпечатъкът не бе обработен. Моля, опитайте отново."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Отключване с лице"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Регистрирайте отново лицето си"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"С цел подобряване на разпознаването регистрирайте отново лицето си"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Настройване на отключването с лице"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Отключвайте телефона си, като го погледнете"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Настройване на още начини за отключване на телефона"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Докоснете, за да добавите отпечатък"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Лицето не бе заснето точно. Опитайте отново."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Твърде светло е. Опитайте при по-слабо осветление."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Твърде тъмно е. Опитайте при по-силно осветление."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Лице <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Използване на отключв. с лице"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Използване на отключването с лице или опцията за заключване на екрана"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Използвайте функцията за отключване с лице, за да продължите"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Използвайте лицето си или опцията за заключване на екрана, за да продължите"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Копирано"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> постави данни от <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> постави данни от буферната памет"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> постави копиран от вас текст"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> постави копирано от вас изображение"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> постави копирано от вас съдържание"</string>
<string name="more_item_label" msgid="7419249600215749115">"Още"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Меню+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Служебни"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Личен изглед"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Служебен изглед"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Блокирано от системния ви администратор"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Това съдържание не може да се споделя със служебни приложения"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Това съдържание не може да се отваря със служебни приложения"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Това съдържание не може да се споделя с лични приложения"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Това съдържание не може да се отваря с лични приложения"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Служебният потребителски профил е поставен на пауза"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Докоснете за включване"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Няма подходящи служебни приложения"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Няма подходящи лични приложения"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Да се отвори ли в личния потребителски профил чрез <xliff:g id="APP">%s</xliff:g>?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Да се отвори ли в служебния потребителски профил чрез <xliff:g id="APP">%s</xliff:g>?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Използване на личния браузър"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Използване на служебния браузър"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ПИН за отключване на мрежата за SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"ПИН за отключване на подмножеството от мрежи за SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"ПИН за отключване на корпоративната SIM карта"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Нови настройки за увеличението"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Вече можете да увеличите част от екрана"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Включете от настройките"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Отхвърляне"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"За да продължите, &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; се нуждае от достъп до микрофона на устройството ви."</string>
diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml
index 55823300d316..52fc66649d4b 100644
--- a/core/res/res/values-bn/strings.xml
+++ b/core/res/res/values-bn/strings.xml
@@ -320,10 +320,8 @@
<string name="permgroupdesc_activityRecognition" msgid="4725624819457670704">"শারীরিক অ্যাক্টিভিটি অ্যাক্সেস করা"</string>
<string name="permgrouplab_camera" msgid="9090413408963547706">"ক্যামেরা"</string>
<string name="permgroupdesc_camera" msgid="7585150538459320326">"ছবি তোলা এবং ভিডিও রেকর্ড"</string>
- <!-- no translation found for permgrouplab_nearby_devices (14428105203684587) -->
- <skip />
- <!-- no translation found for permgroupdesc_nearby_devices (1146639974734121820) -->
- <skip />
+ <string name="permgrouplab_nearby_devices" msgid="14428105203684587">"কাছাকাছি ব্লুটুথ ডিভাইস"</string>
+ <string name="permgroupdesc_nearby_devices" msgid="1146639974734121820">"কাছাকাছি ব্লুটুথ ডিভাইস খুঁজে দেখুন এবং তার সাথে কানেক্ট করুন"</string>
<string name="permgrouplab_calllog" msgid="7926834372073550288">"কল লগ"</string>
<string name="permgroupdesc_calllog" msgid="2026996642917801803">"ফোন কল লগ পড়ে এবং দেখে"</string>
<string name="permgrouplab_phone" msgid="570318944091926620">"ফোন"</string>
@@ -537,14 +535,10 @@
<string name="permdesc_bluetooth" product="tablet" msgid="3053222571491402635">"ট্যাবলেটের ব্লুটুথ কনফিগারেশন দেখতে, এবং যুক্ত ডিভাইসগুলির সাথে সংযোগ স্থাপন এবং সংযোগের অনুরোধ স্বীকার করতে অ্যাপ্লিকেশানটিকে মঞ্জুর করে৷"</string>
<string name="permdesc_bluetooth" product="tv" msgid="8851534496561034998">"আপনার Android TV ডিভাইসের ব্লুটুথের কনফিগারেশন দেখার এবং পেয়ার করা ডিভাইসের সাথে কানেক্ট করার বা কানেকশন গ্রহণ করার অনুমতি দেয়।"</string>
<string name="permdesc_bluetooth" product="default" msgid="2779606714091276746">"ফোনের ব্লুটুথ কনফিগারেশন দেখতে, এবং যুক্ত ডিভাইসগুলির সাথে সংযোগ স্থাপন এবং সংযোগের অনুরোধ স্বীকার করতে অ্যাপ্লিকেশানটিকে মঞ্জুর করে৷"</string>
- <!-- no translation found for permlab_bluetooth_scan (5402587142833124594) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_scan (6540723536925289276) -->
- <skip />
- <!-- no translation found for permlab_bluetooth_connect (6657463246355003528) -->
- <skip />
- <!-- no translation found for permdesc_bluetooth_connect (4546016548795544617) -->
- <skip />
+ <string name="permlab_bluetooth_scan" msgid="5402587142833124594">"কাছাকাছি ব্লুটুথ ডিভাইস খুঁজে দেখুন এবং তার সাথে পেয়ার করুন"</string>
+ <string name="permdesc_bluetooth_scan" product="default" msgid="6540723536925289276">"অ্যাপটিকে কাছাকাছি ব্লুটুথ ডিভাইস খুঁজে দেখতে এবং তার সাথে পেয়ার করার অনুমতি দেয়"</string>
+ <string name="permlab_bluetooth_connect" msgid="6657463246355003528">"পেয়ার করা ব্লুটুথ ডিভাইসের সাথে কানেক্ট করুন"</string>
+ <string name="permdesc_bluetooth_connect" product="default" msgid="4546016548795544617">"অ্যাপটিকে পেয়ার করা ব্লুটুথ ডিভাইসের সাথে কানেক্ট করতে অনুমতি দেয়"</string>
<string name="permlab_preferredPaymentInfo" msgid="5274423844767445054">"পছন্দের NFC পেমেন্ট পরিষেবার তথ্য"</string>
<string name="permdesc_preferredPaymentInfo" msgid="8583552469807294967">"অ্যাপের মাধ্যমে পছন্দসই এনএফসি পেমেন্ট পরিষেবার তথ্য, যেমন রেজিস্ট্রার করার সহায়তা এবং রুট ডেস্টিনেশন সম্পর্কিত তথ্য অ্যাক্সেস করার অনুমতি দেয়।"</string>
<string name="permlab_nfc" msgid="1904455246837674977">"নিয়ার ফিল্ড কমিউনিকেশন নিয়ন্ত্রণ করে"</string>
@@ -579,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"পিন, প্যাটার্ন অথবা পাসওয়ার্ড সেট করা নেই"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"যাচাইকরণে সমস্যা হয়েছে"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"স্ক্রিন লক ব্যবহার করুন"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"চালিয়ে যেতে আপনার ডিভাইসের ক্রেডেনশিয়াল ব্যবহার করুন"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"আঙ্গুলের ছাপ প্রক্রিয়া করা যায়নি৷ অনুগ্রহ করে আবার চেষ্টা করুন৷"</string>
@@ -670,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> ফেস"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"মুখের সাহায্যে আনলক ব্যবহার করুন"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"মুখ অথবা স্ক্রিন লক ব্যবহার করুন"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"চালিয়ে যেতে মুখের সাহায্যে আনলক ব্যবহার করুন"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"চালিয়ে যেতে আপনার ফেস বা স্ক্রিন লক ব্যবহার করুন"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2286,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"আপনার স্ক্রিনের অংশ এখন আপনি বড় করে দেখতে পারবেন"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"সেটিংস থেকে চালু করুন"</string>
<string name="dismiss_action" msgid="1728820550388704784">"বাতিল করুন"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"চালিয়ে যেতে, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; আপনার ডিভাইসের মাইক্রোফোন অ্যাক্সেস করতে চায়।"</string>
diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml
index b6d478fecd1b..0921e5f6a077 100644
--- a/core/res/res/values-bs/strings.xml
+++ b/core/res/res/values-bs/strings.xml
@@ -576,7 +576,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nije postavljen PIN, uzorak niti lozinka"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Greška pri autentifikaciji"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Koristi zaključavanje ekrana"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Unesite akreditiv uređaja da nastavite"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Obrada otiska prsta nije uspjela. Pokušajte ponovo."</string>
@@ -623,14 +624,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Otključavanje licem"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Ponovo registrirajte lice"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Ponovo registrirajte lice da poboljšate prepoznavanje"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Postavite otključavanje licem"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Otključajte telefon gledajući u njega"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Postavite više načina otključavanja"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Dodirnite da dodate otisak prsta"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Lice nije snimljeno precizno. Pokušajte ponovo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Previše svijetlo. Probajte s blažim osvjetljenjem."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Previše je tamno. Pokušajte s jačim osvjetljenjem."</string>
@@ -667,7 +664,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Lice <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Koristi otključavanje licem"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Koristi otključavanje licem ili zaključavanje ekrana"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Koristite otključavanje licem da nastavite"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Koristite lice ili zaključavanje ekrana da nastavite"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1034,12 +1032,9 @@
<string name="copied" msgid="4675902854553014676">"Kopirano"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Aplikacija <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> je zalijepljena iz aplikacije <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Aplikacija <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> je zalijepljena iz međumemorije"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"Aplikacija <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> je zalijepila kopirani tekst"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"Aplikacija <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> je zalijepila kopiranu sliku"</string>
+ <string name="pasted_content" msgid="646276353060777131">"Aplikacija <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> je zalijepila kopirani sadržaj"</string>
<string name="more_item_label" msgid="7419249600215749115">"Više"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Meni+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2175,31 +2170,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Posao"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Prikaz ličnog sadržaja"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Prikaz poslovnog sadržaja"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokirao je vaš IT administrator"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Ovaj sadržaj nije moguće dijeliti pomoću poslovnih aplikacija"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ovaj sadržaj nije moguće otvoriti pomoću poslovnih aplikacija"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ovaj sadržaj nije moguće dijeliti pomoću ličnih aplikacija"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ovaj sadržaj nije moguće otvoriti pomoću ličnih aplikacija"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Radni profil je pauziran"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da uključite"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nema poslovnih aplikacija"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nema ličnih aplikacija"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Otvoriti aplikaciju <xliff:g id="APP">%s</xliff:g> u ličnom profilu?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Otvoriti aplikaciju <xliff:g id="APP">%s</xliff:g> u radnom profilu?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Koristi lični preglednik"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Koristi poslovni preglednik"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN za otključavanje mreže na SIM-u"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN za otključavanje mrežne podgrupe na SIM-u"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN za otključavanje korporativnog SIM-a"</string>
@@ -2312,10 +2295,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nove postavke uvećavanja"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Sada možete uvećati dio ekrana"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Uključite u Postavkama"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Odbaci"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Da nastavite, aplikaciji &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; je potreban pristup mikrofonu vašeg uređaja."</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 023ec099fd2b..35ae1debed14 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No s\'ha definit cap PIN, patró o contrasenya"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Error en l\'autenticació"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Utilitza el bloqueig de pantalla"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Utilitza les credencials del teu dispositiu per continuar"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No s\'ha pogut processar l\'empremta digital. Torna-ho a provar."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Desbloqueig facial"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Torna a registrar la cara"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Per millorar el reconeixement, torna a registrar la cara"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Configura el desbloqueig facial"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Mira el telèfon per desbloquejar-lo"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Configura més maneres de desbloquejar el dispositiu"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Toca per afegir una empremta digital"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"No es reconeix la teva cara. Torna-ho a provar."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Massa brillant Prova una il·luminació més suau."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Massa fosc. Prova una il·luminació més brillant."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Cara <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Utilitza el desbloqueig facial"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Utilitza el desbloqueig facial o de pantalla"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Utilitza el desbloqueig facial per continuar"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Utilitza la cara o el bloqueig de pantalla per continuar"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"S\'ha copiat"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha enganxat dades de: <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha enganxat dades del porta-retalls"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha enganxat text que has copiat"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha enganxat una imatge que has copiat"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha enganxat contingut que has copiat"</string>
<string name="more_item_label" msgid="7419249600215749115">"Més"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menú+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -1327,7 +1322,7 @@
<item msgid="1616528372438698248">"Ethernet"</item>
<item msgid="9177085807664964627">"VPN"</item>
</string-array>
- <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"una tipus de xarxa desconegut"</string>
+ <string name="network_switch_type_name_unknown" msgid="3665696841646851068">"un tipus de xarxa desconegut"</string>
<string name="accept" msgid="5447154347815825107">"Accepta"</string>
<string name="decline" msgid="6490507610282145874">"Rebutja"</string>
<string name="select_character" msgid="3352797107930786979">"Insereix un caràcter"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Feina"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Visualització personal"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Visualització de treball"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"L\'administrador de TI ha bloquejat la compartició"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"No es pot compartir aquest contingut amb aplicacions de treball"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"No es pot obrir aquest contingut amb aplicacions de treball"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"No es pot compartir aquest contingut amb aplicacions personals"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"No es pot obrir aquest contingut amb aplicacions personals"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"El perfil de treball està en pausa"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Toca per activar"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Cap aplicació de treball"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Cap aplicació personal"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Vols obrir-ho a <xliff:g id="APP">%s</xliff:g> amb el perfil personal?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Vols obrir-ho a <xliff:g id="APP">%s</xliff:g> amb el perfil de treball?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utilitza el navegador personal"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utilitza el navegador de treball"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueig de la xarxa SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN de desbloqueig de subconjunt de la xarxa SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN de desbloqueig de la SIM corporativa"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nova configuració d\'ampliació"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Ara pots ampliar una part de la pantalla"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activa a Configuració"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Ignora"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Per continuar, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; necessita accedir al micròfon del dispositiu."</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 34846ec04272..36e130ec0b9e 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -579,7 +579,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Není nastaven žádný PIN, gesto ani heslo"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Při ověřování došlo k chybě"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Použít zámek obrazovky"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Pokračujte zadáním identifikačních úřadů svého zařízení"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Zpracování otisku prstu se nezdařilo. Zkuste to znovu."</string>
@@ -626,14 +627,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Odemknutí obličejem"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Zaznamenejte obličej znovu"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Chcete-li rozpoznání zdokonalit, zaznamenejte obličej znovu"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Nastavte odemknutí obličejem"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Telefon odemknete pohledem"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Nastavte si více způsobů odemykání"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Klepnutím přidáte otisk prstu"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Obličej se nepodařilo zachytit. Zkuste to znovu."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Je příliš světlo. Zmírněte osvětlení."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Je moc velká tma. Přejděte na světlo."</string>
@@ -670,7 +667,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Obličej <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Použít odemknutí obličejem"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Použít odemknutí obličejem nebo zámek obrazovky"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Pokračujte odemknutím obličejem"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Pokračujte ověřením pomocí obličeje nebo zámku obrazovky"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1037,12 +1035,9 @@
<string name="copied" msgid="4675902854553014676">"Zkopírováno"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Aplikace <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> vložila data z aplikace <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Aplikace <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> vložila data ze schránky"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"Aplikace <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> vložila zkopírovaný text"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"Aplikace <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> vložila zkopírovaný obrázek"</string>
+ <string name="pasted_content" msgid="646276353060777131">"Aplikace <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> vložila zkopírovaný obsah"</string>
<string name="more_item_label" msgid="7419249600215749115">"Více"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2209,31 +2204,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Pracovní"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Osobní zobrazení"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Pracovní zobrazení"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokováno administrátorem IT"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Tento obsah nelze sdílet pomocí pracovních aplikací"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tento obsah nelze otevřít pomocí pracovních aplikací"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tento obsah nelze sdílet pomocí osobních aplikací"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tento obsah nelze otevřít pomocí osobních aplikací"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Pracovní profil je pozastaven"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Klepnutím zapnete"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Žádné pracovní aplikace"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Žádné osobní aplikace"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Otevřít v aplikaci <xliff:g id="APP">%s</xliff:g> v osobním profilu?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Otevřít v aplikaci <xliff:g id="APP">%s</xliff:g> v pracovním profilu?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Použít osobní prohlížeč"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Použít pracovní prohlížeč"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Kód PIN odblokování sítě pro SIM kartu"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN pro odblokování podskupiny sítí pro SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Kód PIN odblokování podnikové sítě pro SIM kartu"</string>
@@ -2346,10 +2329,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nové nastavení zvětšování"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Nově můžete zvětšit část obrazovky"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Zapnout v Nastavení"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Zavřít"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Než budete pokračovat, udělte aplikaci &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; přístup k mikrofonu na zařízení."</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 475b274f3166..0e00d3e3bb37 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -575,7 +575,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Der er ikke angivet pinkode, mønster eller adgangskode"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Der opstod fejl i forbindelse med godkendelse"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Brug skærmlås"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Angiv dine loginoplysninger for enheden for at fortsætte"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Fingeraftrykket kunne ikke behandles. Prøv igen."</string>
@@ -622,14 +623,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Ansigtslås"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Registrer dit ansigt igen"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Registrer dit ansigt igen for at forbedre genkendelsen af det"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Konfigurer ansigtslås"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Lås din telefon op ved at kigge på den"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Konfigurer flere måder at låse op på"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Tryk for at tilføje et fingeraftryk"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Der blev ikke registreret ansigtsdata. Prøv igen."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Der er for lyst. Prøv en mere dæmpet belysning."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"For mørkt. Prøv med mere belysning."</string>
@@ -666,7 +663,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Ansigt <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Brug ansigtslås"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Brug ansigts- eller skærmlås"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Brug ansigtslås for at fortsætte"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Brug din ansigts- eller skærmlås for at fortsætte"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1033,12 +1031,9 @@
<string name="copied" msgid="4675902854553014676">"Kopieret"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> indsatte indhold fra <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> indsatte indhold fra udklipsholderen"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> indsatte tekst, som du har kopieret"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> indsatte et billede, som du har kopieret"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> indsatte indhold, som du har kopieret"</string>
<string name="more_item_label" msgid="7419249600215749115">"Mere"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2143,31 +2138,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Arbejde"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Visningen Personligt"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Visningen Arbejde"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokeret af din it-administrator"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Dette indhold kan ikke deles med arbejdsapps"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Dette indhold kan ikke åbnes med arbejdsapps"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Dette indhold kan ikke deles med personlige apps"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Dette indhold kan ikke åbnes med personlige apps"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Arbejdsprofilen er sat på pause"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Tryk for at aktivere"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Der er ingen arbejdsapps"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Der er ingen personlige apps"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Skal det åbnes i <xliff:g id="APP">%s</xliff:g> på den personlige profil?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Skal det åbnes i <xliff:g id="APP">%s</xliff:g> på arbejdsprofilen?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Brug personlig browser"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Brug arbejdsbrowser"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Pinkode til oplåsning af SIM-netværket"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Pinkode til oplåsning af delmængde for SIM-netværket"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Pinkode til oplåsning af virksomhedens SIM"</string>
@@ -2280,10 +2263,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nye indstillinger for forstørrelse"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Du kan nu forstørre noget af skærmen"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Aktivér i Indstillinger"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Luk"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"&lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; skal have adgang til din enheds mikrofon, før den kan fortsætte."</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index f8cb56041b3d..0a516453d329 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Keine PIN, kein Muster und kein Passwort festgelegt"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Fehler bei der Authentifizierung"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Displaysperre verwenden"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Zum Fortfahren Anmeldedaten des Geräts eingeben"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Fingerabdruck konnte nicht verarbeitet werden. Bitte versuche es noch einmal."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Gesicht <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Face Unlock verwenden"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Face Unlock oder Displaysperre verwenden"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Zum Fortfahren Face Unlock verwenden"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Verwende die Gesichtserkennung oder deine Display-Entsperrmethode, um fortzufahren"</string>
<string-array name="face_error_vendor">
</string-array>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 727963405d39..ddefff5fab92 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Δεν έχει οριστεί PIN, μοτίβο ή κωδικός πρόσβασης"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Σφάλμα κατά τον έλεγχο ταυτότητας"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Χρήση κλειδώματος οθόνης"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Εισαγάγετε το διαπιστευτήριο της συσκευής σας για να συνεχίσετε"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Δεν ήταν δυνατή η επεξεργασία του δακτυλικού αποτυπώματος. Δοκιμάστε ξανά."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Πρόσωπο <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Χρήση Face Unlock"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Χρήση προσώπου ή κλειδώματος οθόνης"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Χρησιμοποιήστε το Face Unlock για να συνεχίσετε"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Χρησιμοποιήστε το πρόσωπό σας ή το κλείδωμα οθόνης για συνέχεια"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Μπορείτε πλέον να μεγεθύνετε μέρος της οθόνης σας"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Ενεργοποίηση στις Ρυθμίσεις"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Παράβλεψη"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Για να συνεχίσετε, η εφαρμογή &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; χρειάζεται πρόσβαση στο μικρόφωνο της συσκευής σας."</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 9fdd65b230ee..ff07433cb2ce 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No pin, pattern or password set"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Error while authenticating"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Use screen lock"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Enter your device credential to continue"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Couldn\'t process fingerprint. Please try again."</string>
@@ -660,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Face <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Use face unlock"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Use face or screen lock"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Use face unlock to continue"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Use your face or screen lock to continue"</string>
<string-array name="face_error_vendor">
</string-array>
diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml
index 2f0a4d23da00..9e314c17e686 100644
--- a/core/res/res/values-en-rCA/strings.xml
+++ b/core/res/res/values-en-rCA/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No pin, pattern or password set"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Error while authenticating"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Use screen lock"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Enter your device credential to continue"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Couldn\'t process fingerprint. Please try again."</string>
@@ -660,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Face <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Use face unlock"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Use face or screen lock"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Use face unlock to continue"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Use your face or screen lock to continue"</string>
<string-array name="face_error_vendor">
</string-array>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index e52ff7d28044..1e3bbdeebb68 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No pin, pattern or password set"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Error while authenticating"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Use screen lock"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Enter your device credential to continue"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Couldn\'t process fingerprint. Please try again."</string>
@@ -660,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Face <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Use face unlock"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Use face or screen lock"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Use face unlock to continue"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Use your face or screen lock to continue"</string>
<string-array name="face_error_vendor">
</string-array>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index a73db0038c30..b4c6c851afba 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No pin, pattern or password set"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Error while authenticating"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Use screen lock"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Enter your device credential to continue"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Couldn\'t process fingerprint. Please try again."</string>
@@ -660,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Face <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Use face unlock"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Use face or screen lock"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Use face unlock to continue"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Use your face or screen lock to continue"</string>
<string-array name="face_error_vendor">
</string-array>
diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml
index 12bc97832a58..9e9025cae05e 100644
--- a/core/res/res/values-en-rXC/strings.xml
+++ b/core/res/res/values-en-rXC/strings.xml
@@ -294,8 +294,7 @@
<string name="notification_channel_heavy_weight_app" msgid="17455756500828043">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎App running‎‏‎‎‏‎"</string>
<string name="notification_channel_foreground_service" msgid="7102189948158885178">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‏‎‎Apps consuming battery‎‏‎‎‏‎"</string>
<string name="notification_channel_accessibility_magnification" msgid="1707913872219798098">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎Magnification‎‏‎‎‏‎"</string>
- <!-- no translation found for notification_channel_accessibility_security_policy (1727787021725251912) -->
- <skip />
+ <string name="notification_channel_accessibility_security_policy" msgid="1727787021725251912">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‎‎Accessibility usage‎‏‎‎‏‎"</string>
<string name="foreground_service_app_in_background" msgid="1439289699671273555">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎<xliff:g id="APP_NAME">%1$s</xliff:g>‎‏‎‎‏‏‏‎ is using battery‎‏‎‎‏‎"</string>
<string name="foreground_service_apps_in_background" msgid="7340037176412387863">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎<xliff:g id="NUMBER">%1$d</xliff:g>‎‏‎‎‏‏‏‎ apps are using battery‎‏‎‎‏‎"</string>
<string name="foreground_service_tap_for_details" msgid="9078123626015586751">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎Tap for details on battery and data usage‎‏‎‎‏‎"</string>
@@ -573,29 +572,23 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‎No pin, pattern, or password set‎‏‎‎‏‎"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‎‎‏‏‏‎Error authenticating‎‏‎‎‏‎"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‏‏‎‎‎Use screen lock‎‏‎‎‏‎"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎Enter your device credential to continue‎‏‎‎‏‎"</string>
- <!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
<skip />
+ <string name="fingerprint_acquired_partial" msgid="694598777291084823">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‎Partial fingerprint detected‎‏‎‎‏‎"</string>
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎Couldn\'t process fingerprint. Please try again.‎‏‎‎‏‎"</string>
- <!-- no translation found for fingerprint_acquired_imager_dirty (5236744087471419479) -->
- <skip />
- <!-- no translation found for fingerprint_acquired_too_fast (1254724478300787385) -->
- <skip />
+ <string name="fingerprint_acquired_imager_dirty" msgid="5236744087471419479">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‏‏‎Clean the sensor‎‏‎‎‏‎"</string>
+ <string name="fingerprint_acquired_too_fast" msgid="1254724478300787385">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‎Finger moved too fast‎‏‎‎‏‎"</string>
<string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‎‏‏‎‎‎Finger moved too slow. Please try again.‎‏‎‎‏‎"</string>
- <!-- no translation found for fingerprint_acquired_already_enrolled (2285166003936206785) -->
- <skip />
- <!-- no translation found for fingerprint_acquired_too_bright (3863560181670915607) -->
- <skip />
- <!-- no translation found for fingerprint_acquired_try_adjusting (3667006071003809364) -->
- <skip />
+ <string name="fingerprint_acquired_already_enrolled" msgid="2285166003936206785">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎Try another fingerprint‎‏‎‎‏‎"</string>
+ <string name="fingerprint_acquired_too_bright" msgid="3863560181670915607">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎Too bright‎‏‎‎‏‎"</string>
+ <string name="fingerprint_acquired_try_adjusting" msgid="3667006071003809364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‏‎‏‎‏‎‎‎Try adjusting‎‏‎‎‏‎"</string>
<string-array name="fingerprint_acquired_vendor">
</string-array>
<string name="fingerprint_authenticated" msgid="2024862866860283100">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‏‎‎‎‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‎‎Fingerprint authenticated‎‏‎‎‏‎"</string>
<string name="face_authenticated_no_confirmation_required" msgid="8867889115112348167">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‎‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‏‏‎Face authenticated‎‏‎‎‏‎"</string>
<string name="face_authenticated_confirmation_required" msgid="6872632732508013755">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‏‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎Face authenticated, please press confirm‎‏‎‎‏‎"</string>
<string name="fingerprint_error_hw_not_available" msgid="4571700896929561202">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎Fingerprint hardware not available.‎‏‎‎‏‎"</string>
- <!-- no translation found for fingerprint_error_no_space (7285481581905967580) -->
- <skip />
+ <string name="fingerprint_error_no_space" msgid="7285481581905967580">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‎‎‎Can’t set up fingerprint‎‏‎‎‏‎"</string>
<string name="fingerprint_error_timeout" msgid="2946635815726054226">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎Fingerprint time out reached. Try again.‎‏‎‎‏‎"</string>
<string name="fingerprint_error_canceled" msgid="540026881380070750">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‎Fingerprint operation canceled.‎‏‎‎‏‎"</string>
<string name="fingerprint_error_user_canceled" msgid="7685676229281231614">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‎‏‏‏‏‏‏‏‎‎Fingerprint operation canceled by user.‎‏‎‎‏‎"</string>
@@ -660,7 +653,8 @@
<string name="face_name_template" msgid="3877037340223318119">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‏‎Face ‎‏‎‎‏‏‎<xliff:g id="FACEID">%d</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎Use face unlock‎‏‎‎‏‎"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎Use face or screen lock‎‏‎‎‏‎"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎Use face unlock to continue‎‏‎‎‏‎"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎Use your face or screen lock to continue‎‏‎‎‏‎"</string>
<string-array name="face_error_vendor">
</string-array>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 475fe5f04592..55850e3c58b2 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No se estableció ningún PIN, patrón ni contraseña"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Error de autenticación"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueo de pantalla"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Ingresa las credenciales de tu dispositivo para continuar"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No se pudo procesar la huella dactilar. Vuelve a intentarlo."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Rostro <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Usar desbloqueo facial"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Usar bloqueo facial o de pantalla"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Usa el desbloqueo facial para continuar"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Usa tu rostro o bloqueo de pantalla para continuar"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Ahora puedes ampliar parte de la pantalla"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activar en Configuración"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Descartar"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Para continuar, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&amp;gt necesita acceso al micrófono del dispositivo."</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index 3aefd2bd3d81..8276269555e1 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"No se ha definido el PIN, el patrón o la contraseña"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"No se ha podido autenticar"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueo de pantalla"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Introduce las credenciales del dispositivo para continuar"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"No se ha podido procesar la huella digital. Vuelve a intentarlo."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Desbloqueo facial"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Volver a registrar la cara"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Para mejorar el reconocimiento, vuelve a registrar tu cara"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Configura el desbloqueo facial"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Desbloquea el teléfono con solo mirarlo"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Configura más formas de desbloqueo"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Toca para añadir una huella digital"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Datos faciales no reconocidos. Vuelve a intentarlo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Hay demasiada luz. Busca un sitio menos iluminado."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Demasiado oscuro. Prueba en un lugar con más luz."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Cara <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Usar desbloqueo facial"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Usar desbloqueo facial o bloqueo de pantalla"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Usa el desbloqueo facial para continuar"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Usa tu cara o tu bloqueo de pantalla para continuar"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Copiado"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha pegado contenido de <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha pegado contenido del portapapeles"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha pegado texto que has copiado"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha pegado una imagen que has copiado"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha pegado contenido que has copiado"</string>
<string name="more_item_label" msgid="7419249600215749115">"Más"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"MENU+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta +"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Trabajo"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Ver contenido personal"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Ver contenido de trabajo"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Bloqueado por tu administrador de TI"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Este contenido no se puede compartir con aplicaciones de trabajo"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Este contenido no se puede abrir con aplicaciones de trabajo"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Este contenido no se puede compartir con aplicaciones personales"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Este contenido no se puede abrir con aplicaciones personales"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"El perfil de trabajo está en pausa"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Toca para activar"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ninguna aplicación de trabajo"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ninguna aplicación personal"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"¿Abrir en <xliff:g id="APP">%s</xliff:g> en el perfil personal?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"¿Abrir en <xliff:g id="APP">%s</xliff:g> en el perfil de trabajo?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usar el navegador personal"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usar el navegador del trabajo"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueo de red de tarjeta SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN de desbloqueo de subconjunto de red SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN de desbloqueo corporativo de SIM"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nuevos ajustes de ampliación"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Ahora puedes ampliar una parte de la pantalla"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activar en Ajustes"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Cerrar"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Para continuar, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; necesita tener acceso al micrófono del dispositivo."</string>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
index d45e91796e33..264fa4172edd 100644
--- a/core/res/res/values-et/strings.xml
+++ b/core/res/res/values-et/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN-koodi, mustrit ega parooli pole määratud"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Viga autentimisel"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekraaniluku kasutamine"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Jätkamiseks sisestage seadme mandaat"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Sõrmejälge ei õnnestunud töödelda. Proovige uuesti."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Face Unlock"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Registreerige oma nägu uuesti"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Tuvastamise parandamiseks registreerige oma nägu uuesti"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Seadistage Face Unlock"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Avage telefon seda vaadates"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Seadistage rohkem viise avamiseks"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Puudutage sõrmejälje lisamiseks"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Näoandmeid ei saanud jäädvustada. Proovige uuesti."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Liiga ere. Proovige hämaramat valgust."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Liiga pime. Proovige parema valgustusega kohas."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Nägu <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Face Unlocki kasutamine"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Face Unlocki või ekraaniluku kasutamine"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Jätkamiseks kasutage Face Unlocki"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Jätkamiseks kasutage oma nägu või ekraanilukku"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Kopeeritud"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> kleepis rakendusest <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> kleepis lõikelaualt"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> kleepis teie kopeeritud teksti"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> kleepis teie kopeeritud pildi"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> kleepis teie kopeeritud sisu"</string>
<string name="more_item_label" msgid="7419249600215749115">"Rohkem"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menüü+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta +"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Töö"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Isiklik vaade"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Töövaade"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokeeris teie IT-administraator"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Seda sisu ei saa töörakendustega jagada"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Seda sisu ei saa töörakendustega avada"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Seda sisu ei saa isiklike rakendustega jagada"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Seda sisu ei saa isiklike rakendustega avada"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Tööprofiil on peatatud"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Puudutage sisselülitamiseks"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Töörakendusi pole"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Isiklikke rakendusi pole"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Kas avada rakendus <xliff:g id="APP">%s</xliff:g> isiklikul profiilil?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Kas avada rakendus <xliff:g id="APP">%s</xliff:g> tööprofiilil?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Kasuta isiklikku brauserit"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Kasuta tööbrauserit"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM-kaardi võrgu avamise PIN-kood"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM-kaardi võrgu alamhulga avamise PIN-kood"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM-kaardi ettevõtte avamise PIN-kood"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Uued suurendamise seaded"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Saate nüüd suurendada osa oma ekraanikuvast"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Lülitage sisse menüüs Seaded"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Loobu"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Jätkamiseks vajab rakendus &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; juurdepääsu teie seadme mikrofonile."</string>
diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml
index a4dad808db12..2a6b107a2599 100644
--- a/core/res/res/values-eu/strings.xml
+++ b/core/res/res/values-eu/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ez da ezarri PIN koderik, eredurik edo pasahitzik"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Errorea autentifikatzean"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Erabili pantailaren blokeoa"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Aurrera egiteko, idatzi gailuaren kredentzialak"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Ezin izan da prozesatu hatz-marka. Saiatu berriro."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Aurpegiaren bidez desblokeatzeko eginbidea"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Erregistratu aurpegia berriro"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Ezagutzea hobetzeko, erregistratu aurpegia berriro"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Konfiguratu aurpegiaren bidez desblokeatzeko eginbidea"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Telefonoa desblokeatzeko, begira iezaiozu"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Konfiguratu telefonoa desblokeatzeko modu gehiago"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Sakatu hau hatz-marka bat gehitzeko"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Ezin izan dira bildu argazkiaren datu zehatzak. Saiatu berriro."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Argi gehiegi dago. Joan toki ilunago batera."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Ilunegi dago. Erabili argi gehiago."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> aurpegia"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Erabili aurpegiaren bidez desblokeatzeko eginbidea"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Erabili aurpegia edo pantailaren blokeoa"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Aurrera egiteko, erabili aurpegiaren bidez desblokeatzeko eginbidea"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Aurrera egiteko, erabili aurpegia edo pantailaren blokeoa"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Kopiatu da"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> aplikaziotik itsatsi da <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Arbeletik itsatsi da <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> aplikazioak kopiatu duzun testua itsatsi du"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> aplikazioak kopiatu duzun irudia itsatsi du"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> aplikazioak kopiatu duzun edukia itsatsi du"</string>
<string name="more_item_label" msgid="7419249600215749115">"Gehiago"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menua+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta +"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Lanekoa"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Ikuspegi pertsonala"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Laneko ikuspegia"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"IKT saileko administratzaileak blokeatu egin du"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Eduki hau ezin da laneko aplikazioekin partekatu"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Eduki hau ezin da laneko aplikazioekin ireki"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Eduki hau ezin da aplikazio pertsonalekin partekatu"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Eduki hau ezin da aplikazio pertsonalekin ireki"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Laneko profila pausatuta dago"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Sakatu aktibatzeko"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ez dago laneko aplikaziorik"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ez dago aplikazio pertsonalik"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Profil pertsonaleko <xliff:g id="APP">%s</xliff:g> aplikazioan ireki nahi duzu?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Laneko profileko <xliff:g id="APP">%s</xliff:g> aplikazioan ireki nahi duzu?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Erabili arakatzaile pertsonala"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Erabili laneko arakatzailea"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIMaren sarearen bidez desblokeatzeko PIN kodea"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIMaren sareko azpimultzoaren bidez desblokeatzeko PIN kodea"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Enpresaren SIMaren bidez desblokeatzeko PIN kodea"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Luparen ezarpen berriak"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Orain, pantailaren zati bat handi dezakezu"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Aktibatu ezarpenetan"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Baztertu"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Aurrera egiteko, gailuaren mikrofonoa atzitzeko baimena behar du &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; aplikazioak."</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 7ce6cf013718..80f0870866a8 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"پین، الگو یا گذرواژه‌ای تنظیم نشده است"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"خطا هنگام اصالت‌سنجی"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"از قفل صفحه استفاده کنید"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"برای ادامه، اطلاعات کاربری دستگاهتان را وارد کنید"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"اثرانگشت پردازش نشد. لطفاً دوباره امتحان کنید."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"بازگشایی با چهره"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"ثبت مجدد چهره"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"برای بهبود تشخیص، لطفاً چهره‌تان را دوباره ثبت کنید"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"راه‌اندازی «بازگشایی با چهره»"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"برای باز کردن قفل تلفن خود به آن نگاه کنید"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"راه‌اندازی روش‌های بیشتر برای باز کردن قفل"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"برای افزودن اثر انگشت، ضربه بزنید"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"داده‌های دقیق چهره ضبط نشد. دوباره امتحان کنید."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"خیلی روشن است. روشنایی‌اش را ملایم‌تر کنید."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"خیلی تاریک است. تصویر را روشن‌تر کنید."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"چهره <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"استفاده از «بازگشایی با چهره»"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"استفاده از قفل صفحه یا چهره"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"برای ادامه، از «بازگشایی با چهره» استفاده کنید"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"برای ادامه، از تشخیص چهره یا قفل صفحه استفاده کنید"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"کپی شد"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> از <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> جای‌گذاری کرد"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> از بریده‌دان جای‌گذاری کرد"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> نوشتاری را که کپی کردید جای‌گذاری کرد"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> تصویری را که کپی کردید جای‌گذاری کرد"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> محتوایی را که کپی کردید جای‌گذاری کرد"</string>
<string name="more_item_label" msgid="7419249600215749115">"بیشتر"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"منو+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"‎Meta+‎"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"کاری"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"نمای شخصی"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"نمای کاری"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"سرپرست سیستم آن را مسدود کرده است"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"نمی‌توان این محتوا را با برنامه‌های کاری هم‌رسانی کرد"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"نمی‌توان این محتوا را با برنامه‌های کاری باز کرد"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"نمی‌توان این محتوا را با برنامه‌های شخصی هم‌رسانی کرد"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"نمی‌توان این محتوا را با برنامه‌های شخصی باز کرد"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"نمایه کاری موقتاً متوقف شده است"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"برای روشن کردن، ضربه بزنید"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"برنامه کاری‌ای وجود ندارد"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"برنامه شخصی‌ای وجود ندارد"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"در <xliff:g id="APP">%s</xliff:g> در نمایه شخصی باز شود؟"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"در <xliff:g id="APP">%s</xliff:g> در نمایه کاری باز شود؟"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"استفاده از مرورگر شخصی"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"استفاده از مرورگر کاری"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"پین باز کردن قفل شبکه سیم‌کارت"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"پین باز کردن قفل زیرمجموعه شبکه سیم‌کارت"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"پین باز کردن قفل شرکت سیم‌کارت"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"تنظیمات درشت‌نمایی جدید"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"اکنون می‌توانید بخشی از صفحه را درشت‌نمایی کنید"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"روشن کردن در «تنظیمات»"</string>
<string name="dismiss_action" msgid="1728820550388704784">"رد شدن"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"‏برای ادامه دادن، &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; باید به میکروفون دستگاه دسترسی داشته باشد."</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 7320df7ec0b1..95951dde74ea 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN-koodia, kuviota tai salasanaa ei ole asetettu"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Virhe todennuksessa"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Käytä näytön lukitusta"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Jatka lisäämällä laitteesi kirjautumistiedot"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Sormenjäljen prosessointi epäonnistui. Yritä uudelleen."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Kasvot <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Käytä Face Unlockia"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Käytä Face Unlockia tai näytön lukitusta"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Jatka käyttämällä Face Unlockia"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Jatka kasvojentunnistuksen tai näytön lukituksen avulla"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Voit nyt suurentaa näytön osan"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Laita päälle asetuksista"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Hylkää"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Jotta voit jatkaa, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; tarvitsee pääsyn laitteesi mikrofoniin."</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index a6c8195fa1c9..8a1ddd531f86 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Aucun NIP, schéma ou mot de passe défini"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Erreur d\'authentification"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Utiliser le verrouillage de l\'écran"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Entrez votre authentifiant d\'appareil pour continuer"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Impossible de reconnaître l\'empreinte digitale. Veuillez réessayer."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Visage <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Utiliser le déverrouillage par reconnaissance faciale"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Utiliser la reconnaissance faciale ou le verrouillage de l\'écran"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Utilisez le déverrouillage par reconnaissance faciale pour continuer"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Utilisez votre visage ou le verrouillage de l\'écran pour continuer"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Vous pouvez agrandir une partie votre écran."</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activer dans les paramètres"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Fermer"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Pour continuer, vous devez accorder l\'accès au microphone de votre appareil à l\'application &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt;."</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 48b3f260fb5b..479adf1422a1 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Aucun code, schéma ni mot de passe n\'est défini"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Erreur d\'authentification"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Utiliser verrouillage écran"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Saisissez l\'identifiant de l\'appareil pour continuer"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Impossible de reconnaître l\'empreinte digitale. Veuillez réessayer."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Face Unlock"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Enregistrer à nouveau votre visage"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Pour améliorer la reconnaissance, veuillez enregistrer à nouveau votre visage"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Configurer Face Unlock"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Déverrouillez votre téléphone en le regardant"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Configurer d\'autres méthodes de déverrouillage"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Appuyez pour ajouter une empreinte digitale"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Capture du visage impossible. Réessayez."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Trop lumineux. Essayez de baisser la lumière."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Trop sombre. Essayez une éclairage plus lumineux."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Visage <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Utiliser Face Unlock"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Utiliser Face Lock ou le verrouillage de l\'écran"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Utilisez Face Unlock pour continuer"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Utilisez la reconnaissance faciale ou le verrouillage de l\'écran pour continuer"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Copie effectuée"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> collé depuis <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> collé depuis le presse-papiers"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> a collé du texte que vous avez copié"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> a collé une image que vous avez copiée"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> a collé le contenu que vous avez copié"</string>
<string name="more_item_label" msgid="7419249600215749115">"Plus"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Méta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Professionnel"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Vue personnelle"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Vue professionnelle"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Bloqué par votre administrateur informatique"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Impossible de partager ce contenu avec des applis professionnelles"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Impossible d\'ouvrir ce contenu avec des applis professionnelles"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Impossible de partager ce contenu avec des applis personnelles"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Impossible d\'ouvrir ce contenu avec des applis personnelles"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profil professionnel en pause"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Appuyer pour activer"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Aucune appli professionnelle"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Aucune appli personnelle"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Ouvrir dans <xliff:g id="APP">%s</xliff:g> avec le profil personnel ?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Ouvrir dans <xliff:g id="APP">%s</xliff:g> avec le profil professionnel ?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utiliser le navigateur personnel"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utiliser le navigateur professionnel"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Code PIN de déblocage du réseau SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Code PIN de déblocage du sous-ensemble du réseau SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Code PIN de déblocage de la carte SIM d\'entreprise"</string>
@@ -2278,8 +2261,7 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nouveaux paramètres d\'agrandissement"</string>
<!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
<skip />
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activer dans les paramètres"</string>
diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml
index 69ab060de820..2e252e51da6c 100644
--- a/core/res/res/values-gl/strings.xml
+++ b/core/res/res/values-gl/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Non se estableceu ningún PIN, padrón ou contrasinal"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Produciuse un erro ao realizar a autenticación"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar credencial do dispositivo"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Para continuar, mete a credencial do dispositivo"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Non se puido procesar a impresión dixital. Téntao de novo."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Desbloqueo facial"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Volve inscribir a túa cara"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Para mellorar o recoñecemento, inscribe de novo a túa cara"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Configura o desbloqueo facial"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Mira o teléfono para desbloquealo"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Configura máis maneiras de desbloquear o dispositivo"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Toca para engadir unha impresión dixital"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Sen datos faciais exactos. Téntao de novo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Hai demasiada iluminación. Proba cunha máis suave."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Hai demasiada escuridade. Proba con máis luz."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Cara <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Utilizar desbloqueo facial"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Utilizar desbloqueo facial ou credencial do dispositivo"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Para continuar, utiliza o desbloqueo facial"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Para continuar, utiliza o desbloqueo facial ou a credencial do dispositivo"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Copiuse"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> pegou contido procedente de <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> pegou contido procedente do portapapeis"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> pegou texto que copiaches"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> pegou unha imaxe que copiaches"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> pegou contido que copiaches"</string>
<string name="more_item_label" msgid="7419249600215749115">"Máis"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menú+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta +"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Traballo"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Vista persoal"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Vista de traballo"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"O teu administrador de TI bloqueou a instalación"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Este contido non pode compartirse con aplicacións do traballo"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Este contido non pode abrirse con aplicacións do traballo"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Este contido non pode compartirse con aplicacións persoais"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Este contido non pode abrirse con aplicacións persoais"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"O perfil de traballo está en pausa"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Tocar para activar o perfil"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Non hai ningunha aplicación do traballo compatible"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Non hai ningunha aplicación persoal compatible"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Queres abrir o contido en <xliff:g id="APP">%s</xliff:g> co perfil persoal?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Queres abrir o contido en <xliff:g id="APP">%s</xliff:g> co perfil de traballo?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utilizar navegador persoal"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utilizar navegador de traballo"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN de desbloqueo da rede SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN de desbloqueo do subconxunto da rede SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN de desbloqueo corporativo da SIM"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Novas opcións de configuración de ampliación"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Xa podes ampliar parte da pantalla"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activar en Configuración"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Ignorar"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Para continuar, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; precisa acceder ao micrófono do dispositivo."</string>
diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml
index 60d95a395655..fe918d847f38 100644
--- a/core/res/res/values-gu/strings.xml
+++ b/core/res/res/values-gu/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"કોઈ પિન, પૅટર્ન અથવા પાસવર્ડ સેટ કરેલો નથી"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"પ્રમાણિત કરવામાં ભૂલ આવી"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"સ્ક્રીન લૉકનો ઉપયોગ કરો"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"ચાલુ રાખવા માટે તમારા ડિવાઇસની લૉગ ઇન વિગત દાખલ કરો"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ફિંગરપ્રિન્ટ પ્રક્રિયા કરી શકાઈ નથી. કૃપા કરીને ફરી પ્રયાસ કરો."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"ચહેરાનું <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"ફેસ અનલૉકનો ઉપયોગ કરો"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"ફેસ લૉક અથવા સ્ક્રીન લૉકનો ઉપયોગ કરો"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"આગળ વધવા માટે ફેસ અનલૉકનો ઉપયોગ કરો"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ચાલુ રાખવા માટે તમારા ફેસ લૉક અથવા સ્ક્રીન લૉકનો ઉપયોગ કરો"</string>
<string-array name="face_error_vendor">
</string-array>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index ba237ce2e1cf..4994da950e02 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"पिन, पैटर्न या पासवर्ड सेट नहीं है"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"गड़बड़ी की पुष्टि की जा रही है"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"स्क्रीन लॉक का क्रेडेंशियल इस्तेमाल करें"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"जारी रखने के लिए, अपने डिवाइस का क्रेडेंशियल डालें"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"फ़िंगरप्रिंट प्रोसेस नहीं हो सका. कृपया दोबारा कोशिश करें."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"चेहरा <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"\'फ़ेस अनलॉक\' इस्तेमाल करें"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"\'फ़ेस अनलॉक\' या स्क्रीन लॉक का क्रेडेंशियल इस्तेमाल करें"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"जारी रखने के लिए, \'फ़ेस अनलॉक\' इस्तेमाल करें"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"जारी रखने के लिए, अपना चेहरा दिखाकर या स्क्रीन लॉक क्रेडेंशियल डालकर पुष्टि करें"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"अब आप अपनी स्क्रीन के किसी हिस्से को ज़ूम करके देख सकते हैं"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"सेटिंग में जाकर, इस सुविधा को चालू करें"</string>
<string name="dismiss_action" msgid="1728820550388704784">"खारिज करें"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"जारी रखने के लिए, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; को आपके डिवाइस का माइक्रोफ़ोन ऐक्सेस करने की ज़रूरत है."</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index b7db3080b6a6..3d774ee5dac7 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -576,7 +576,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nisu postavljeni PIN, uzorak ni zaporka"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Pogreška prilikom autentifikacije"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Upotreba zaključavanja zaslona"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Unesite vjerodajnicu uređaja da biste nastavili"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Obrada otiska prsta nije uspjela. Pokušajte ponovo."</string>
@@ -623,14 +624,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Otključavanje licem"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Ponovo registrirajte svoje lice"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Za poboljšanje prepoznavanja ponovo registrirajte svoje lice"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Postavite otključavanje licem"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Otključajte telefon gledajući u njega"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Postavite više načina otključavanja"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Dodirnite da biste dodali otisak prsta"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Podaci o licu nisu točni. Pokušajte ponovo."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Presvijetlo je. Pokušajte sa slabijim svjetlom."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Pretamno je. Pokušajte s jačim osvjetljenjem."</string>
@@ -667,7 +664,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Lice <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Upotreba otključavanja licem"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Upotreba lica ili zaključavanja zaslona"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Upotrijebite otključavanje licem da biste nastavili"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Za nastavak se identificirajte licem ili vjerodajnicom zaključavanja zaslona"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1034,12 +1032,9 @@
<string name="copied" msgid="4675902854553014676">"Kopirano"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"U aplikaciji <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> zalijepljen je sadržaj aplikacije <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"U aplikaciji <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> zalijepljen je sadržaj međuspremnika"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"Aplikacija <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> zalijepila je tekst koji ste kopirali"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"Aplikacija <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> zalijepila je sliku koju ste kopirali"</string>
+ <string name="pasted_content" msgid="646276353060777131">"Aplikacija <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> zalijepila je ono što ste kopirali"</string>
<string name="more_item_label" msgid="7419249600215749115">"Više"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Izbornik+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2175,31 +2170,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Posao"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Osobni prikaz"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Poslovni prikaz"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokirao vaš IT administrator"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Taj se sadržaj ne može dijeliti pomoću poslovnih aplikacija"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Taj se sadržaj ne može otvoriti pomoću poslovnih aplikacija"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Taj se sadržaj ne može dijeliti pomoću osobnih aplikacija"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Taj se sadržaj ne može otvoriti pomoću osobnih aplikacija"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Poslovni je profil pauziran"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Dodirnite da biste uključili"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Poslovne aplikacije nisu dostupne"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Osobne aplikacije nisu dostupne"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Otvoriti u aplikaciji <xliff:g id="APP">%s</xliff:g> na osobnom profilu?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Otvoriti u aplikaciji <xliff:g id="APP">%s</xliff:g> na poslovnom profilu?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Koristi osobni preglednik"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Koristi poslovni preglednik"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN za otključavanje SIM mreže."</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN za otključavanje podskupa SIM mreže"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN za otključavanje poslovnog SIM-a"</string>
@@ -2312,10 +2295,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nove postavke povećavanja"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Sad možete povećati dio zaslona"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Uključite u Postavkama"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Odbaci"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Da bi nastavila s radom, aplikacija &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; treba pristupiti mikrofonu vašeg uređaja."</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index ceefe4fc7a0c..4ef186461e5e 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nem állított be PIN-kódot, mintát vagy jelszót."</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Hiba történt a hitelesítés közben"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Képernyőzár használata"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"A folytatáshoz adja meg az eszköz hitelesítési adatait"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nem sikerült feldolgozni az ujjlenyomatot. Próbálkozzon újra."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Arcalapú feloldás"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Rögzítsen újra képet az arcáról"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"A felismerés javítása érdekében rögzítsen újra az arcáról készített képet"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Az arcalapú feloldás beállítása"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Feloldhatja a zárolást úgy, hogy ránéz a telefonra"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"További feloldási módszerek beállítása"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Koppintson ide ujjlenyomat hozzáadásához"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Sikertelen az arc pontos rögzítése. Próbálja újra."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Túl világos. Próbálja kevésbé erős világítással."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Túl sötét. Próbálja jobb megvilágítás mellett."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> arc"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Arcalapú feloldás használata"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"A folytatás arcalapú feloldással vagy képernyőzárral lehetséges"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"A folytatás arcalapú feloldással lehetséges"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"A folytatás arcalapú feloldással vagy a képernyőzár feloldásával lehetséges"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Átmásolva"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"A(z) <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> tartalmat másolt vágólapra a(z) <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> appból"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"A(z) <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> beillesztette a vágólapon lévő tartalmat"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"A(z) <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> beillesztette a másolt szöveget"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"A(z) <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> beillesztette a másolt képet"</string>
+ <string name="pasted_content" msgid="646276353060777131">"A(z) <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> beillesztette a másolt tartalmat"</string>
<string name="more_item_label" msgid="7419249600215749115">"Egyebek"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menü+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Munka"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Személyes nézet"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Munkanézet"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Rendszergazda által letiltva"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Ez a tartalom nem osztható meg munkahelyi alkalmazásokkal"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ez a tartalom nem nyitható meg munkahelyi alkalmazásokkal"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ez a tartalom nem osztható meg személyes alkalmazásokkal"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ez a tartalom nem nyitható meg személyes alkalmazásokkal"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"A munkaprofil használata szünetel"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Koppintson a bekapcsoláshoz"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nincs munkahelyi alkalmazás"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nincs személyes alkalmazás"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Megnyitja a(z) <xliff:g id="APP">%s</xliff:g> alkalmazásban a személyes profilja használatával?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Megnyitja a(z) <xliff:g id="APP">%s</xliff:g> alkalmazásban a munkaprofilja használatával?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Személyes böngésző használata"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Munkahelyi böngésző használata"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Hálózati SIM feloldó PIN-kódja"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Hálózati SIM alkészletének feloldó PIN-kódja"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Vállalati SIM feloldó PIN-kódja"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Új nagyítási beállítások"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Mostantól kinagyíthatja a képernyő egy részét"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Bekapcsolás a Beállításokban"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Elvetés"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"A folytatáshoz a(z) &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; alkalmazásnak hozzáférésre van szüksége az eszköze mikrofonjához."</string>
diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml
index 0ac8e92db377..980f1afb60f7 100644
--- a/core/res/res/values-hy/strings.xml
+++ b/core/res/res/values-hy/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ավելացրեք PIN կոդ, նախշ կամ գաղտնաբառ։"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Չհաջողվեց նույնականացնել"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Էկրանի կողպում"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Շարունակելու համար մուտքագրեք սարքի նույնականացման տվյալները"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Չհաջողվեց մշակել մատնահետքը: Նորից փորձեք:"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Դեմքով ապակողպում"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Նորից գրանցեք ձեր դեմքը"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Ճանաչումը լավացնելու համար նորից գրանցեք ձեր դեմքը"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Կարգավորեք դեմքով ապակողպումը"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Ապակողպելու համար պարզապես նայեք հեռախոսին"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Կարգավորեք ապակողպելու այլ եղանակներ"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Հպեք՝ մատնահետք ավելացնելու համար"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Չհաջողվեց գրանցել դեմքի ճշգրիտ տվյալները։ Կրկնեք։"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Շատ լուսավոր է։ Փորձեք ավելի թեթև լուսավորություն։"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Շատ մութ է։ Փորձեք ավելի պայծառ լուսավորություն։"</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Դեմք <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Օգտագործել դեմքով ապակողպում"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Օգտագործել դեմքով ապակողպում կամ էկրանի կողպում"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Շարունակելու համար օգտագործեք դեմքով ապակողպում"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Շարունակելու համար օգտագործեք ձեր դեմքը կամ էկրանի կողպումը"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Պատճենվեց"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> հավելվածը տվյալներ տեղադրեց <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> հավելվածից"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> հավելվածը տվյալներ տեղադրեց սեղմատախտակից"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> հավելվածը տեղադրեց ձեր պատճենած տեքստը"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> հավելվածը տեղադրեց ձեր պատճենած պատկերը"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> հավելվածը տեղադրեց ձեր պատճենած բովանդակությունը"</string>
<string name="more_item_label" msgid="7419249600215749115">"Ավելին"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Ցանկ+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Աշխատանքային"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Անձնական"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Աշխատանքային"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Արգելափակվել է ձեր ՏՏ ադմինիստրատորի կողմից"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Այս բովանդակությունը հնարավոր չէ ուղարկել աշխատանքային հավելվածներով"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Այս բովանդակությունը հնարավոր չէ բացել աշխատանքային հավելվածներով"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Այս բովանդակությունը հնարավոր չէ ուղարկել անձնական հավելվածներով"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Այս բովանդակությունը հնարավոր չէ բացել անձնական հավելվածներով"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Աշխատանքային պրոֆիլի ծառայությունը դադարեցված է"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Հպեք՝ միացնելու համար"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Աշխատանքային հավելվածներ չկան"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Անձնական հավելվածներ չկան"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Բացե՞լ <xliff:g id="APP">%s</xliff:g> հավելվածում անձնական պրոֆիլով"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Բացե՞լ <xliff:g id="APP">%s</xliff:g> հավելվածում աշխատանքային պրոֆիլով"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Օգտագործել անձնական դիտարկիչը"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Օգտագործել աշխատանքային դիտարկիչը"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM Network քարտի ապակողպման PIN"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM Network Subset քարտի ապակողպման PIN"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM Corporate քարտի ապակողպման PIN"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Խոշորացման նոր կարգավորումներ"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Դուք կարող եք խոշորացնել ձեր էկրանի մի մասը"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Միացնել կարգավորումներում"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Փակել"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Շարունակելու համար &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; հավելվածին անհրաժեշտ է սարքի խոսափողի օգտագործման թույլտվություն։"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 0b8bae6fdaaa..82a193de3947 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Tidak ada PIN, pola, atau sandi yang disetel"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Error saat mengautentikasi"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Gunakan kunci layar"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Masukkan kredensial perangkat untuk melanjutkan"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Tidak dapat memproses sidik jari. Coba lagi."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Face unlock"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Daftarkan kembali wajah Anda"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Untuk menyempurnakan pengenalan wajah, daftarkan kembali wajah Anda"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Siapkan face unlock"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Buka kunci ponsel dengan melihat ke ponsel"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Siapkan lebih banyak cara untuk membuka kunci"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Ketuk untuk menambahkan sidik jari"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Tidak bisa mengambil data wajah akurat. Coba lagi."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Terlalu terang. Coba cahaya yang lebih lembut."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Terlalu gelap. Coba pencahayaan yang lebih cerah."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> wajah"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Gunakan face unlock"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Gunakan face lock atau kunci layar"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Gunakan face unlock untuk melanjutkan"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Gunakan face lock atau kunci layar untuk melanjutkan"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Disalin"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ditempelkan dari <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ditempelkan dari papan klip"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> menempelkan teks yang Anda salin"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> menempelkan gambar yang Anda salin"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> menempelkan konten yang Anda salin"</string>
<string name="more_item_label" msgid="7419249600215749115">"Lainnya"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -1270,7 +1265,7 @@
<string name="android_preparing_apk" msgid="589736917792300956">"Menyiapkan <xliff:g id="APPNAME">%1$s</xliff:g>."</string>
<string name="android_upgrading_starting_apps" msgid="6206161195076057075">"Memulai aplikasi."</string>
<string name="android_upgrading_complete" msgid="409800058018374746">"Menyelesaikan boot."</string>
- <string name="heavy_weight_notification" msgid="8382784283600329576">"<xliff:g id="APP">%1$s</xliff:g> berjalan"</string>
+ <string name="heavy_weight_notification" msgid="8382784283600329576">"<xliff:g id="APP">%1$s</xliff:g> sedang berjalan"</string>
<string name="heavy_weight_notification_detail" msgid="6802247239468404078">"Ketuk untuk kembali ke game"</string>
<string name="heavy_weight_switcher_title" msgid="3861984210040100886">"Pilih game"</string>
<string name="heavy_weight_switcher_text" msgid="6814316627367160126">"Agar performa tetap maksimal, hanya 1 game yang dapat dibuka sekaligus."</string>
@@ -1365,7 +1360,7 @@
<string name="no_permissions" msgid="5729199278862516390">"Tidak perlu izin"</string>
<string name="perm_costs_money" msgid="749054595022779685">"ini mungkin tidak gratis"</string>
<string name="dlg_ok" msgid="5103447663504839312">"Oke"</string>
- <string name="usb_charging_notification_title" msgid="1674124518282666955">"Mengisi daya perangkat ini via USB"</string>
+ <string name="usb_charging_notification_title" msgid="1674124518282666955">"Daya perangkat sedang diisi via USB"</string>
<string name="usb_supplying_notification_title" msgid="5378546632408101811">"Mengisi daya perangkat yang terhubung via USB"</string>
<string name="usb_mtp_notification_title" msgid="1065989144124499810">"Transfer file USB diaktifkan"</string>
<string name="usb_ptp_notification_title" msgid="5043437571863443281">"PTP via USB diaktifkan"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Kerja"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Tampilan pribadi"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Tampilan kerja"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Diblokir oleh admin IT Anda"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Konten ini tidak dapat dibagikan dengan aplikasi kerja"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Konten ini tidak dapat dibuka dengan aplikasi kerja"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Konten ini tidak dapat dibagikan dengan aplikasi pribadi"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Konten ini tidak dapat dibuka dengan aplikasi pribadi"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profil kerja dijeda"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Ketuk untuk mengaktifkan"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Tidak ada aplikasi kerja"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Tidak ada aplikasi pribadi"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Buka di <xliff:g id="APP">%s</xliff:g> dengan profil pribadi?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Buka di <xliff:g id="APP">%s</xliff:g> dengan profil kerja?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gunakan browser pribadi"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gunakan browser kerja"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN pembuka kunci SIM network"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN pembuka kunci SIM network subset"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN pembuka kunci SIM corporate"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Setelan pembesaran baru"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Sekarang Anda dapat memperbesar sebagian layar"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Aktifkan di Setelan"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Tutup"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Untuk melanjutkan, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; memerlukan akses ke mikrofon perangkat."</string>
diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml
index c37c52cf34c7..8e7c9ec1e751 100644
--- a/core/res/res/values-is/strings.xml
+++ b/core/res/res/values-is/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ekkert PIN-númer, mynstur eða aðgangsorð stillt"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Villa við auðkenningu"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Nota skjálás"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Færðu inn skilríki tækisins til að halda áfram"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Ekki var hægt að vinna úr fingrafarinu. Reyndu aftur."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Andlitsopnun"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Skráðu andlitið þitt aftur"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Skráðu andlitið þitt til að bæta kennsl"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Setja upp andlitsopnun"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Taktu símann úr lás með því að horfa á hann"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Settu upp fleiri leiðir til að taka úr lás"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Ýttu til að bæta við fingrafari"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Nákvæm andlitsgögn fengust ekki. Reyndu aftur."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Of bjart. Prófaðu mýkri lýsingu."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Of dimmt. Prófaðu sterkari lýsingu."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Andlit <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Nota andlitsopnun"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Nota andlit eða skjálás"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Notaðu andlitsopnun til að halda áfram"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Notaðu andlitið eða skjálás til að halda áfram"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Afritað"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> límt úr <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> límt af klippiborði."</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> límdi texta sem þú afritaðir"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> límdi mynd sem þú afritaðir"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> límdi efni sem þú afritaðir"</string>
<string name="more_item_label" msgid="7419249600215749115">"Meira"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Valmynd+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Vinna"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Persónulegt yfirlit"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Vinnuyfirlit"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Útilokað af kerfisstjóra"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Ekki er hægt að deila þessu efni með vinnuforritum"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Ekki er hægt að opna þetta efni með vinnuforritum"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Ekki er hægt að deila þessu efni með forritum til einkanota"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Ekki er hægt að opna þetta efni með forritum til einkanota"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Hlé gert á vinnusniði"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Ýttu til að kveikja"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Engin vinnuforrit"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Engin forrit til einkanota"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Opna <xliff:g id="APP">%s</xliff:g> á eigin sniði?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Opna <xliff:g id="APP">%s</xliff:g> á vinnusniði?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Nota einkavafra"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Nota vinnuvafra"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-númer fyrir opnun á SIM-korti netkerfis"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN-númer fyrir opnun á SIM-korti netkerfishlutmengis"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN-númer fyrir opnun á SIM-korti fyrirtækis"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nýjar stækkunarstillingar"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Nú geturðu stækkað hluta skjásins"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Kveikja á í stillingum"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Hunsa"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Til að halda áfram þarf &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; aðgang að hljóðnema tækisins."</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 27ee7ceae6ed..c34defc721e2 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Non hai impostato PIN, sequenza o password"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Errore durante l\'autenticazione"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usa il blocco schermo"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Inserisci la credenziale del dispositivo per continuare"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Impossibile elaborare l\'impronta. Riprova."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Sblocco con il volto"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Registra di nuovo il volto"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Per migliorare il riconoscimento, registra di nuovo il tuo volto"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Configura Sblocco con il volto"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Sblocca il telefono guardandolo"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Configura altri modi per sbloccare"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Tocca per aggiungere un\'impronta"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Impossibile acquisire dati viso accurati. Riprova."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Troppa luce. Prova con una luce più soft."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Troppo buio. Prova con più luce."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Volto <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Usa Sblocco con il volto"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Usa Sblocco con il volto o il blocco schermo"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Usa Sblocco con il volto per continuare"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Per continuare devi usare il tuo volto o il tuo blocco schermo"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Copia eseguita"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Dati dell\'app <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> incollati dall\'app <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Dati dell\'app <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> incollati dagli appunti"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha incollato il testo che hai copiato"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha incollato un\'immagine che hai copiato"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ha incollato i contenuti che hai copiato"</string>
<string name="more_item_label" msgid="7419249600215749115">"Altro"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"META +"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Lavoro"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Visualizzazione personale"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Visualizzazione di lavoro"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Bloccati dall\'amministratore IT"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Questi contenuti non possono essere condivisi con app di lavoro"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Questi contenuti non possono essere aperti con app di lavoro"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Questi contenuti non possono essere condivisi con app personali"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Questi contenuti non possono essere aperti con app personali"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profilo di lavoro in pausa"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Tocca per attivare"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nessuna app di lavoro"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nessuna app personale"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Aprire <xliff:g id="APP">%s</xliff:g> nel profilo personale?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Aprire <xliff:g id="APP">%s</xliff:g> nel profilo di lavoro?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Usa il browser personale"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Usa il browser di lavoro"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN di sblocco rete SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN di sblocco sottoinsieme rete SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN sblocco aziendale SIM"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nuove impostazioni per l\'ingrandimento"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Ora puoi ingrandire parte dello schermo"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Attiva nelle Impostazioni"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Ignora"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Per continuare, l\'app &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; deve accedere al microfono del dispositivo."</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 7e4b8adce9fc..7dda7ce3278f 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -42,7 +42,7 @@
<string name="serviceErased" msgid="997354043770513494">"המחיקה בוצעה בהצלחה."</string>
<string name="passwordIncorrect" msgid="917087532676155877">"סיסמה שגויה."</string>
<string name="mmiComplete" msgid="6341884570892520140">"‏MMI הושלם."</string>
- <string name="badPin" msgid="888372071306274355">"קוד הגישה הישן שהקלדת שגוי."</string>
+ <string name="badPin" msgid="888372071306274355">"קוד האימות הישן שהקלדת שגוי."</string>
<string name="badPuk" msgid="4232069163733147376">"‏ה-PUK שהקלדת שגוי."</string>
<string name="mismatchPin" msgid="2929611853228707473">"קודי הגישה שהקלדת לא תואמים."</string>
<string name="invalidPin" msgid="7542498253319440408">"יש להקליד קוד אימות שאורכו 4 עד 8 ספרות."</string>
@@ -238,7 +238,7 @@
<string name="shutdown_confirm" product="tablet" msgid="2872769463279602432">"הטאבלט שלך ייכבה."</string>
<string name="shutdown_confirm" product="tv" msgid="7975942887313518330">"‏מכשיר ה-Android TV יכבה."</string>
<string name="shutdown_confirm" product="watch" msgid="2977299851200240146">"השעון יכבה."</string>
- <string name="shutdown_confirm" product="default" msgid="136816458966692315">"הטלפון שלך יכובה."</string>
+ <string name="shutdown_confirm" product="default" msgid="136816458966692315">"הטלפון שלך ייכבה."</string>
<string name="shutdown_confirm_question" msgid="796151167261608447">"האם ברצונך לבצע כיבוי?"</string>
<string name="reboot_safemode_title" msgid="5853949122655346734">"אתחול למצב בטוח"</string>
<string name="reboot_safemode_confirm" msgid="1658357874737219624">"האם לבצע אתחול ולעבור למצב בטוח? הפעולה הזו תשבית את כל האפליקציות של צד שלישי שהתקנת. הן ישוחזרו לאחר הפעלה מחדש של המכשיר."</string>
@@ -247,7 +247,7 @@
<string name="global_actions" product="tablet" msgid="4412132498517933867">"אפשרויות טאבלט"</string>
<string name="global_actions" product="tv" msgid="3871763739487450369">"‏אפשרויות Android TV"</string>
<string name="global_actions" product="default" msgid="6410072189971495460">"אפשרויות טלפון"</string>
- <string name="global_action_lock" msgid="6949357274257655383">"נעילת מסך"</string>
+ <string name="global_action_lock" msgid="6949357274257655383">"נעילת המסך"</string>
<string name="global_action_power_off" msgid="4404936470711393203">"כיבוי"</string>
<string name="global_action_power_options" msgid="1185286119330160073">"הפעלה"</string>
<string name="global_action_restart" msgid="4678451019561687074">"הפעלה מחדש"</string>
@@ -302,7 +302,7 @@
<string name="notification_channel_accessibility_magnification" msgid="1707913872219798098">"הגדלה"</string>
<!-- no translation found for notification_channel_accessibility_security_policy (1727787021725251912) -->
<skip />
- <string name="foreground_service_app_in_background" msgid="1439289699671273555">"<xliff:g id="APP_NAME">%1$s</xliff:g> משתמשת בסוללה"</string>
+ <string name="foreground_service_app_in_background" msgid="1439289699671273555">"האפליקציה <xliff:g id="APP_NAME">%1$s</xliff:g> משתמשת בסוללה"</string>
<string name="foreground_service_apps_in_background" msgid="7340037176412387863">"<xliff:g id="NUMBER">%1$d</xliff:g> אפליקציות משתמשות בסוללה"</string>
<string name="foreground_service_tap_for_details" msgid="9078123626015586751">"הקש לקבלת פרטים על צריכה של נתונים וסוללה"</string>
<string name="foreground_service_multiple_separator" msgid="5002287361849863168">"<xliff:g id="RIGHT_SIDE">%2$s</xliff:g>, <xliff:g id="LEFT_SIDE">%1$s</xliff:g>"</string>
@@ -387,7 +387,7 @@
<string name="permlab_getTasks" msgid="7460048811831750262">"אחזור אפליקציות פעילות"</string>
<string name="permdesc_getTasks" msgid="7388138607018233726">"מאפשרת לאפליקציה לאחזר מידע לגבי משימות הפועלות כרגע וכאלו שפעלו לאחרונה. ייתכן שההרשאה הזו תתיר לאפליקציה לגלות מידע לגבי האפליקציות שבהן נעשה שימוש במכשיר."</string>
<string name="permlab_manageProfileAndDeviceOwners" msgid="639849495253987493">"ניהול בעלים של פרופיל ומכשיר"</string>
- <string name="permdesc_manageProfileAndDeviceOwners" msgid="7304240671781989283">"מאפשרת לאפליקציות להגדיר את הבעלים של הפרופיל ואת בעל המכשיר."</string>
+ <string name="permdesc_manageProfileAndDeviceOwners" msgid="7304240671781989283">"מאפשרת לאפליקציות להגדיר את הבעלים של הפרופיל ושל המכשיר."</string>
<string name="permlab_reorderTasks" msgid="7598562301992923804">"סידור מחדש של אפליקציות פעילות"</string>
<string name="permdesc_reorderTasks" msgid="8796089937352344183">"מאפשר לאפליקציה להעביר משימות לחזית ולרקע. האפליקציה עשוי לעשות זאת ללא התערבותך."</string>
<string name="permlab_enableCarMode" msgid="893019409519325311">"הפוך מצב מכונית לפעיל"</string>
@@ -579,7 +579,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"עוד לא הוגדרו קוד אימות, קו ביטול נעילה או סיסמה"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"שגיאה באימות"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"שימוש בנעילת מסך"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"יש להזין את פרטי הכניסה של המכשיר כדי להמשיך"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"לא ניתן היה לעבד את טביעת האצבע. נסה שוב."</string>
@@ -587,7 +588,7 @@
<skip />
<!-- no translation found for fingerprint_acquired_too_fast (1254724478300787385) -->
<skip />
- <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"הזזת את האצבע לאט מדי. נסה שוב."</string>
+ <string name="fingerprint_acquired_too_slow" msgid="6683510291554497580">"הזזת את האצבע לאט מדי. יש לנסות שוב."</string>
<!-- no translation found for fingerprint_acquired_already_enrolled (2285166003936206785) -->
<skip />
<!-- no translation found for fingerprint_acquired_too_bright (3863560181670915607) -->
@@ -609,7 +610,7 @@
<string name="fingerprint_error_lockout_permanent" msgid="3895478283943513746">"יותר מדי ניסיונות. חיישן טביעות האצבע הושבת."</string>
<string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"כדאי לנסות שוב."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"לא נסרקו טביעות אצבע."</string>
- <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"במכשיר זה אין חיישן טביעות אצבע."</string>
+ <string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"במכשיר הזה אין חיישן טביעות אצבע."</string>
<string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"החיישן מושבת באופן זמני."</string>
<string name="fingerprint_name_template" msgid="8941662088160289778">"אצבע <xliff:g id="FINGERID">%d</xliff:g>"</string>
<string name="fingerprint_app_setting_name" msgid="4253767877095495844">"שימוש בטביעת אצבע"</string>
@@ -670,7 +671,8 @@
<string name="face_name_template" msgid="3877037340223318119">"פנים <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"שחרור נעילה על ידי זיהוי פנים"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"שימוש בזיהוי פנים או בנעילת מסך"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"יש להשתמש בשחרור נעילה על ידי זיהוי פנים כדי להמשיך"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"יש להשתמש בזיהוי הפנים או בנעילת המסך כדי להמשיך"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -914,9 +916,9 @@
<string name="lockscreen_transport_next_description" msgid="2931509904881099919">"הטראק הבא"</string>
<string name="lockscreen_transport_pause_description" msgid="6705284702135372494">"השהה"</string>
<string name="lockscreen_transport_play_description" msgid="106868788691652733">"הפעלה"</string>
- <string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"הפסק"</string>
+ <string name="lockscreen_transport_stop_description" msgid="1449552232598355348">"הפסקה"</string>
<string name="lockscreen_transport_rew_description" msgid="7680106856221622779">"הרץ אחורה"</string>
- <string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"הרץ קדימה"</string>
+ <string name="lockscreen_transport_ffw_description" msgid="4763794746640196772">"הרצה קדימה"</string>
<string name="emergency_calls_only" msgid="3057351206678279851">"שיחות חירום בלבד"</string>
<string name="lockscreen_network_locked_message" msgid="2814046965899249635">"רשת נעולה"</string>
<string name="lockscreen_sim_puk_locked_message" msgid="6618356415831082174">"‏כרטיס SIM נעול באמצעות PUK."</string>
@@ -924,7 +926,7 @@
<string name="lockscreen_sim_locked_message" msgid="3160196135801185938">"‏כרטיס ה-SIM נעול."</string>
<string name="lockscreen_sim_unlock_progress_dialog_message" msgid="2286497117428409709">"‏מבטל נעילה של כרטיס SIM…"</string>
<string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6458790975898594240">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. \n\nיש לנסות שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
- <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים.\n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
+ <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="3118353451602377380">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים.\n\nיש לנסות שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
<string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="2874278239714821984">"הקלדת קוד גישה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים.\n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="3069635524964070596">"‏שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, יהיה צורך לבטל את נעילת הטאבלט באמצעות פרטי הכניסה שלך ל-Google.\n\nיש לנסות שוב בעוד <xliff:g id="NUMBER_2">%3$d</xliff:g> שניות."</string>
<string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="6399092175942158529">"‏שרטטת קו ביטול נעילה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את הנעילה של מכשיר ה-Android TV באמצעות כניסה לחשבון Google שלך.\n\n נסה שוב בעוד <xliff:g id="NUMBER_2">%3$d</xliff:g> שניות."</string>
@@ -956,11 +958,11 @@
<string name="lockscreen_access_pattern_detected" msgid="3931150554035194012">"הקו לביטול נעילה הושלם"</string>
<string name="lockscreen_access_pattern_area" msgid="1288780416685002841">"אזור לשרטוט של קו ביטול הנעילה"</string>
<string name="keyguard_accessibility_widget_changed" msgid="7298011259508200234">"‏%1$s. Widget %2$d מתוך %3$d."</string>
- <string name="keyguard_accessibility_add_widget" msgid="8245795023551343672">"‏הוסף Widget."</string>
+ <string name="keyguard_accessibility_add_widget" msgid="8245795023551343672">"הוספת ווידג\'ט."</string>
<string name="keyguard_accessibility_widget_empty_slot" msgid="544239307077644480">"ריק"</string>
<string name="keyguard_accessibility_unlock_area_expanded" msgid="7768634718706488951">"אזור ביטול הנעילה הורחב."</string>
<string name="keyguard_accessibility_unlock_area_collapsed" msgid="4729922043778400434">"אזור ביטול הנעילה כווץ."</string>
- <string name="keyguard_accessibility_widget" msgid="6776892679715699875">"‏Widget ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
+ <string name="keyguard_accessibility_widget" msgid="6776892679715699875">"ווידג\'ט ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
<string name="keyguard_accessibility_user_selector" msgid="1466067610235696600">"בוחר משתמשים"</string>
<string name="keyguard_accessibility_status" msgid="6792745049712397237">"סטטוס"</string>
<string name="keyguard_accessibility_camera" msgid="7862557559464986528">"מצלמה"</string>
@@ -971,7 +973,7 @@
<string name="keyguard_accessibility_expand_lock_area" msgid="4215280881346033434">"הרחבה של אזור ביטול הנעילה."</string>
<string name="keyguard_accessibility_slide_unlock" msgid="2968195219692413046">"ביטול נעילה באמצעות הסטה."</string>
<string name="keyguard_accessibility_pattern_unlock" msgid="8669128146589233293">"ביטול נעילה על ידי שרטוט קו."</string>
- <string name="keyguard_accessibility_face_unlock" msgid="632407612842329815">"ביטול נעילה באמצעות זיהוי פנים."</string>
+ <string name="keyguard_accessibility_face_unlock" msgid="632407612842329815">"שחרור נעילה על ידי זיהוי פנים."</string>
<string name="keyguard_accessibility_pin_unlock" msgid="4020864007967340068">"ביטול נעילה באמצעות קוד גישה."</string>
<string name="keyguard_accessibility_sim_pin_unlock" msgid="4895939120871890557">"‏ביטול הנעילה של קוד האימות ל-SIM."</string>
<string name="keyguard_accessibility_sim_puk_unlock" msgid="3459003464041899101">"‏ביטול נעילה של PUK ל-SIM."</string>
@@ -1160,7 +1162,7 @@
<item quantity="two">לפני <xliff:g id="COUNT_1">%d</xliff:g> שנים</item>
<item quantity="many">לפני <xliff:g id="COUNT_1">%d</xliff:g> שנים</item>
<item quantity="other">לפני <xliff:g id="COUNT_1">%d</xliff:g> שנים</item>
- <item quantity="one">לפני <xliff:g id="COUNT_0">%d</xliff:g> שנה</item>
+ <item quantity="one">לפני שנה אחת (<xliff:g id="COUNT_0">%d</xliff:g>)</item>
</plurals>
<plurals name="duration_minutes_relative_future" formatted="false" msgid="5759885720917567723">
<item quantity="two">בעוד <xliff:g id="COUNT_1">%d</xliff:g> דקות</item>
@@ -1172,7 +1174,7 @@
<item quantity="two">בעוד <xliff:g id="COUNT_1">%d</xliff:g> שעות</item>
<item quantity="many">בעוד <xliff:g id="COUNT_1">%d</xliff:g> שעות</item>
<item quantity="other">בעוד <xliff:g id="COUNT_1">%d</xliff:g> שעות</item>
- <item quantity="one">בעוד <xliff:g id="COUNT_0">%d</xliff:g> שעה</item>
+ <item quantity="one">בעוד שעה אחת (<xliff:g id="COUNT_0">%d</xliff:g>)</item>
</plurals>
<plurals name="duration_days_relative_future" formatted="false" msgid="1964709470979250702">
<item quantity="two">בעוד <xliff:g id="COUNT_1">%d</xliff:g> ימים</item>
@@ -1248,13 +1250,13 @@
<string name="whichEditApplicationLabel" msgid="1463288652070140285">"עריכה"</string>
<string name="whichSendApplication" msgid="4143847974460792029">"שיתוף"</string>
<string name="whichSendApplicationNamed" msgid="4470386782693183461">"‏שיתוף באמצעות %1$s"</string>
- <string name="whichSendApplicationLabel" msgid="7467813004769188515">"שתף"</string>
+ <string name="whichSendApplicationLabel" msgid="7467813004769188515">"שיתוף"</string>
<string name="whichSendToApplication" msgid="77101541959464018">"שליחה באמצעות"</string>
<string name="whichSendToApplicationNamed" msgid="3385686512014670003">"‏שליחה באמצעות %1$s"</string>
<string name="whichSendToApplicationLabel" msgid="3543240188816513303">"שליחה"</string>
<string name="whichHomeApplication" msgid="8276350727038396616">"בחר אפליקציה שתשמש כדף הבית"</string>
<string name="whichHomeApplicationNamed" msgid="5855990024847433794">"‏השתמש ב-%1$s כדף הבית"</string>
- <string name="whichHomeApplicationLabel" msgid="8907334282202933959">"צלם תמונה"</string>
+ <string name="whichHomeApplicationLabel" msgid="8907334282202933959">"צילום תמונה"</string>
<string name="whichImageCaptureApplication" msgid="2737413019463215284">"צלם תמונה באמצעות"</string>
<string name="whichImageCaptureApplicationNamed" msgid="8820702441847612202">"‏צילום תמונה באמצעות %1$s"</string>
<string name="whichImageCaptureApplicationLabel" msgid="6505433734824988277">"צלם תמונה"</string>
@@ -1275,7 +1277,7 @@
<string name="aerr_wait" msgid="3198677780474548217">"להמתין"</string>
<string name="aerr_close_app" msgid="8318883106083050970">"סגור את האפליקציה"</string>
<string name="anr_title" msgid="7290329487067300120"></string>
- <string name="anr_activity_application" msgid="8121716632960340680">"האפליקציה <xliff:g id="APPLICATION">%2$s</xliff:g> אינה מגיבה"</string>
+ <string name="anr_activity_application" msgid="8121716632960340680">"האפליקציה <xliff:g id="APPLICATION">%2$s</xliff:g> לא מגיבה"</string>
<string name="anr_activity_process" msgid="3477362583767128667">"האפליקציה <xliff:g id="ACTIVITY">%1$s</xliff:g> אינה מגיבה"</string>
<string name="anr_application_process" msgid="4978772139461676184">"האפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> אינה מגיבה"</string>
<string name="anr_process" msgid="1664277165911816067">"התהליך <xliff:g id="PROCESS">%1$s</xliff:g> אינו מגיב."</string>
@@ -1292,7 +1294,7 @@
<string name="unsupported_display_size_message" msgid="7265211375269394699">"<xliff:g id="APP_NAME">%1$s</xliff:g> אינו תומך בהגדרת הגודל הנוכחית של התצוגה, והתנהגותו עשויה להיות בלתי צפויה."</string>
<string name="unsupported_display_size_show" msgid="980129850974919375">"הצג תמיד"</string>
<string name="unsupported_compile_sdk_message" msgid="7326293500707890537">"‏<xliff:g id="APP_NAME">%1$s</xliff:g> נבנתה לגרסה לא תואמת של מערכת ההפעלה של Android ועלולה להתנהג באופן לא צפוי. ייתכן שקיימת גרסה מעודכנת של האפליקציה."</string>
- <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"הצג תמיד"</string>
+ <string name="unsupported_compile_sdk_show" msgid="1601210057960312248">"להציג תמיד"</string>
<string name="unsupported_compile_sdk_check_update" msgid="1103639989147664456">"האם יש עדכון חדש?"</string>
<string name="smv_application" msgid="3775183542777792638">"‏האפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> (תהליך <xliff:g id="PROCESS">%2$s</xliff:g>) הפר את מדיניות StrictMode באכיפה עצמית שלו."</string>
<string name="smv_process" msgid="1398801497130695446">"‏התהליך <xliff:g id="PROCESS">%1$s</xliff:g> הפר את מדיניות StrictMode באכיפה עצמית."</string>
@@ -1321,7 +1323,7 @@
<string name="dump_heap_ready_notification" msgid="2302452262927390268">"‏Dump של ערימה בשביל <xliff:g id="PROC">%1$s</xliff:g> מוכן"</string>
<string name="dump_heap_notification_detail" msgid="8431586843001054050">"‏Dump של ערימה נאסף. יש להקיש כדי לשתף."</string>
<string name="dump_heap_title" msgid="4367128917229233901">"‏האם לשתף את נתוני ה-Dump של הערימה?"</string>
- <string name="dump_heap_text" msgid="1692649033835719336">"‏התהליך<xliff:g id="PROC">%1$s</xliff:g> חרג ממגבלת הזיכרון בגודל <xliff:g id="SIZE">%2$s</xliff:g>. Dump של ערימה זמין לשיתוף עם המפתח. חשוב לנקוט זהירות: ה-Dump של הערימה עשוי לכלול מידע אישי שאליו יש לאפליקציה גישה."</string>
+ <string name="dump_heap_text" msgid="1692649033835719336">"התהליך <xliff:g id="PROC">%1$s</xliff:g> חרג ממגבלת הזיכרון בגודל <xliff:g id="SIZE">%2$s</xliff:g>‏. תמונת מצב של הזיכרון זמינה לשיתוף עם המפתח. חשוב לנקוט זהירות: תמונת המצב של הזיכרון עשויה לכלול מידע אישי שאליו יש לאפליקציה גישה."</string>
<string name="dump_heap_system_text" msgid="6805155514925350849">"‏התהליך <xliff:g id="PROC">%1$s</xliff:g> חרג ממגבלת הזיכרון בגודל <xliff:g id="SIZE">%2$s</xliff:g>. יש Dump של ערימה זמין לשיתוף. חשוב לנקוט זהירות: ה-Dump של הערימה עשוי לכלול מידע אישי רגיש שאליו יש לתהליך גישה. ייתכן שמידע זה כולל נתונים שהקלדת."</string>
<string name="dump_heap_ready_text" msgid="5849618132123045516">"‏Dump של ערימה עבור התהליך <xliff:g id="PROC">%1$s</xliff:g> זמין לשיתוף. חשוב לנקוט זהירות: ה-Dump של הערימה עשוי לכלול מידע אישי רגיש שאליו יש לתהליך גישה. ייתכן שמידע זה כולל נתונים שהקלדת."</string>
<string name="sendText" msgid="493003724401350724">"בחירת פעולה לביצוע עם טקסט"</string>
@@ -1510,7 +1512,7 @@
<string name="permdesc_requestIgnoreBatteryOptimizations" msgid="634260656917874356">"מאפשרת לאפליקציה לבקש רשות להתעלם מאופטימיזציות של הסוללה לאפליקציה הזו."</string>
<string name="tutorial_double_tap_to_zoom_message_short" msgid="1842872462124648678">"הקש פעמיים לבקרת מרחק מתצוגה"</string>
<string name="gadget_host_error_inflating" msgid="2449961590495198720">"‏לא ניתן להוסיף widget."</string>
- <string name="ime_action_go" msgid="5536744546326495436">"התחל"</string>
+ <string name="ime_action_go" msgid="5536744546326495436">"התחלה"</string>
<string name="ime_action_search" msgid="4501435960587287668">"חיפוש"</string>
<string name="ime_action_send" msgid="8456843745664334138">"שליחה"</string>
<string name="ime_action_next" msgid="4169702997635728543">"הבא"</string>
@@ -1549,7 +1551,7 @@
<string name="upload_file" msgid="8651942222301634271">"בחירת קובץ"</string>
<string name="no_file_chosen" msgid="4146295695162318057">"לא נבחר קובץ"</string>
<string name="reset" msgid="3865826612628171429">"איפוס"</string>
- <string name="submit" msgid="862795280643405865">"שלח"</string>
+ <string name="submit" msgid="862795280643405865">"שליחה"</string>
<string name="car_mode_disable_notification_title" msgid="8450693275833142896">"אפליקציית הנהיגה פועלת"</string>
<string name="car_mode_disable_notification_message" msgid="8954550232288567515">"יש להקיש כדי לצאת מאפליקציית הנהיגה."</string>
<string name="back_button_label" msgid="4078224038025043387">"הקודם"</string>
@@ -1610,7 +1612,7 @@
<string name="keyboardview_keycode_enter" msgid="168054869339091055">"Enter"</string>
<string name="activitychooserview_choose_application" msgid="3500574466367891463">"בחר אפליקציה"</string>
<string name="activitychooserview_choose_application_error" msgid="6937782107559241734">"לא ניתן היה להפעיל את <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
- <string name="shareactionprovider_share_with" msgid="2753089758467748982">"שתף עם"</string>
+ <string name="shareactionprovider_share_with" msgid="2753089758467748982">"שיתוף עם"</string>
<string name="shareactionprovider_share_with_application" msgid="4902832247173666973">"שיתוף עם <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="content_description_sliding_handle" msgid="982510275422590757">"נקודת אחיזה להחלקה. לחיצה ארוכה."</string>
<string name="description_target_unlock_tablet" msgid="7431571180065859551">"החלק לביטול נעילה."</string>
@@ -1655,7 +1657,7 @@
<string name="sha1_fingerprint" msgid="2339915142825390774">"‏טביעת אצבע SHA-1:"</string>
<string name="activity_chooser_view_see_all" msgid="3917045206812726099">"הצג הכל"</string>
<string name="activity_chooser_view_dialog_title_default" msgid="8880731437191978314">"בחירת פעילות"</string>
- <string name="share_action_provider_share_with" msgid="1904096863622941880">"שתף עם"</string>
+ <string name="share_action_provider_share_with" msgid="1904096863622941880">"שיתוף עם"</string>
<string name="sending" msgid="206925243621664438">"שולח…"</string>
<string name="launchBrowserDefault" msgid="6328349989932924119">"להפעיל את הדפדפן?"</string>
<string name="SetupCallDefault" msgid="5581740063237175247">"האם לקבל את השיחה?"</string>
@@ -1677,7 +1679,7 @@
<string name="media_route_chooser_title_for_remote_display" msgid="3105906508794326446">"העברת מסך אל מכשיר"</string>
<string name="media_route_chooser_searching" msgid="6119673534251329535">"המערכת מחפשת מכשירים…"</string>
<string name="media_route_chooser_extended_settings" msgid="2506352159381327741">"הגדרות"</string>
- <string name="media_route_controller_disconnect" msgid="7362617572732576959">"נתק"</string>
+ <string name="media_route_controller_disconnect" msgid="7362617572732576959">"ניתוק"</string>
<string name="media_route_status_scanning" msgid="8045156315309594482">"סורק..."</string>
<string name="media_route_status_connecting" msgid="5845597961412010540">"מתבצע חיבור..."</string>
<string name="media_route_status_available" msgid="1477537663492007608">"זמין"</string>
@@ -1691,7 +1693,7 @@
<string name="kg_forgot_pattern_button_text" msgid="406145459223122537">"שכחת את קו ביטול הנעילה?"</string>
<string name="kg_wrong_pattern" msgid="1342812634464179931">"קו ביטול נעילה שגוי"</string>
<string name="kg_wrong_password" msgid="2384677900494439426">"סיסמה שגויה"</string>
- <string name="kg_wrong_pin" msgid="3680925703673166482">"קוד גישה שגוי"</string>
+ <string name="kg_wrong_pin" msgid="3680925703673166482">"קוד אימות שגוי"</string>
<plurals name="kg_too_many_failed_attempts_countdown" formatted="false" msgid="236717428673283568">
<item quantity="two">אפשר יהיה לנסות שוב בעוד <xliff:g id="NUMBER">%d</xliff:g> שניות.</item>
<item quantity="many">אפשר יהיה לנסות שוב בעוד <xliff:g id="NUMBER">%d</xliff:g> שניות.</item>
@@ -1721,7 +1723,7 @@
<string name="kg_login_checking_password" msgid="4676010303243317253">"מתבצעת בדיקה של החשבון…"</string>
<string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="23741434207544038">"הקלדת קוד גישה שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
<string name="kg_too_many_failed_password_attempts_dialog_message" msgid="3328686432962224215">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים.\n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
- <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="7357404233979139075">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
+ <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="7357404233979139075">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. \n\nיש לנסות שוב בעוד <xliff:g id="NUMBER_1">%2$d</xliff:g> שניות."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="3479940221343361587">"ביצעת <xliff:g id="NUMBER_0">%1$d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, הטאבלט יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="9064457748587850217">"‏ניסית לבטל בצורה שגויה את הנעילה של מכשיר ה-Android TV‏ <xliff:g id="NUMBER_0">%1$d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, מכשיר ה-Android TV יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="5955398963754432548">"ביצעת <xliff:g id="NUMBER_0">%1$d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. לאחר <xliff:g id="NUMBER_1">%2$d</xliff:g> ניסיונות כושלים נוספים, הטלפון יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string>
@@ -1875,7 +1877,7 @@
<string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"יש להזין את קוד האימות של מנהל המכשיר"</string>
<string name="restr_pin_enter_pin" msgid="373139384161304555">"הזן קוד גישה"</string>
<string name="restr_pin_incorrect" msgid="3861383632940852496">"שגוי"</string>
- <string name="restr_pin_enter_old_pin" msgid="7537079094090650967">"קוד גישה נוכחי"</string>
+ <string name="restr_pin_enter_old_pin" msgid="7537079094090650967">"קוד אימות נוכחי"</string>
<string name="restr_pin_enter_new_pin" msgid="3267614461844565431">"קוד אימות חדש"</string>
<string name="restr_pin_confirm_pin" msgid="7143161971614944989">"אשר את קוד הגישה החדש"</string>
<string name="restr_pin_create_pin" msgid="917067613896366033">"צור קוד גישה לשינוי הגבלות"</string>
@@ -2018,7 +2020,7 @@
<string name="importance_from_person" msgid="4235804979664465383">"ההודעה חשובה בשל האנשים המעורבים."</string>
<string name="notification_history_title_placeholder" msgid="7748630986182249599">"התראות אפליקציה בהתאמה אישית"</string>
<string name="user_creation_account_exists" msgid="2239146360099708035">"האם לאפשר לאפליקציה <xliff:g id="APP">%1$s</xliff:g> ליצור משתמש חדש באמצעות <xliff:g id="ACCOUNT">%2$s</xliff:g> (כבר קיים משתמש לחשבון הזה)?"</string>
- <string name="user_creation_adding" msgid="7305185499667958364">"האם לאפשר לאפליקציה <xliff:g id="APP">%1$s</xliff:g> ליצור משתמש חדש באמצעות <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string>
+ <string name="user_creation_adding" msgid="7305185499667958364">"לאפשר לאפליקציה <xliff:g id="APP">%1$s</xliff:g> ליצור משתמש חדש באמצעות <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string>
<string name="language_selection_title" msgid="52674936078683285">"הוספת שפה"</string>
<string name="country_selection_title" msgid="5221495687299014379">"העדפת אזור"</string>
<string name="search_language_hint" msgid="7004225294308793583">"הקלד שם שפה"</string>
@@ -2120,7 +2122,7 @@
<string name="mmcc_illegal_ms_msim_template" msgid="832644375774599327">"‏SIM‏ <xliff:g id="SIMNUMBER">%d</xliff:g> אינו מאושר לשימוש ברשת"</string>
<string name="mmcc_illegal_me_msim_template" msgid="4802735138861422802">"‏SIM <xliff:g id="SIMNUMBER">%d</xliff:g> אינו מאושר לשימוש ברשת"</string>
<string name="popup_window_default_title" msgid="6907717596694826919">"חלון קופץ"</string>
- <string name="slice_more_content" msgid="3377367737876888459">"+ <xliff:g id="NUMBER">%1$d</xliff:g>"</string>
+ <string name="slice_more_content" msgid="3377367737876888459">"ועוד <xliff:g id="NUMBER">%1$d</xliff:g>"</string>
<string name="shortcut_restored_on_lower_version" msgid="9206301954024286063">"גרסת האפליקציה שודרגה לאחור או שאינה תואמת לקיצור דרך זה"</string>
<string name="shortcut_restore_not_supported" msgid="4763198938588468400">"לא ניתן היה לשחזר את קיצור הדרך מפני שהאפליקציה אינה תומכת בגיבוי ובשחזור"</string>
<string name="shortcut_restore_signature_mismatch" msgid="579345304221605479">"לא ניתן היה לשחזר את קיצור הדרך עקב חוסר התאמה בחתימה על האפליקציות"</string>
@@ -2348,8 +2350,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"עכשיו אפשר להגדיל חלק מהמסך"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"הפעלה בהגדרות"</string>
<string name="dismiss_action" msgid="1728820550388704784">"סגירה"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"‏כדי להמשיך, האפליקציה &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; צריכה גישה למיקרופון של המכשיר שלך."</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index aa98621df113..6be065139e3d 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN、パターン、パスワードが設定されていません"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"エラー認証"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"画面ロックの使用"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"続行するにはデバイスの認証情報を入力してください"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"指紋を処理できませんでした。もう一度お試しください。"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"顔認証"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"顔の再登録"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"認識を改善するには、顔を再登録してください"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"顔認証の設定"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"スマートフォンに顔を向けるとロックが解除されます"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"その他のロック解除方法の設定"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"タップすると指紋が追加されます"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"顔を認識できませんでした。もう一度お試しください。"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"明るすぎます。もっと暗い場所でお試しください。"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"暗すぎます。もっと明るい場所でお試しください。"</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"顔 <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"顔認証の使用"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"顔認証または画面ロックの使用"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"続行するには顔認証を使用してください"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"続行するには、顔認証または画面ロックを使用してください"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"コピーしました"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> から <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> に貼り付けました"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"クリップボードから <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> に貼り付けました"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> がクリップボード内のテキストを貼り付けました"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> がクリップボード内の画像を貼り付けました"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> がクリップボード内のコンテンツを貼り付けました"</string>
<string name="more_item_label" msgid="7419249600215749115">"その他"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"MENU+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"仕事用"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"個人用ビュー"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"仕事用ビュー"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"IT 管理者によりブロックされました"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"このコンテンツを仕事用アプリと共有することはできません"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"このコンテンツを仕事用アプリで開くことはできません"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"このコンテンツを個人用アプリと共有することはできません"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"このコンテンツを個人用アプリで開くことはできません"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"仕事用プロファイルが一時停止しています"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"タップすると有効になります"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"仕事用アプリはありません"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"個人用アプリはありません"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"個人用プロファイルで <xliff:g id="APP">%s</xliff:g> を開きますか?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"仕事用プロファイルで <xliff:g id="APP">%s</xliff:g> を開きますか?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"個人用ブラウザを使用"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"仕事用ブラウザを使用"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM のネットワーク ロック解除 PIN"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM のネットワーク サブネットのロック解除 PIN"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM の企業ロック解除 PIN"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"新しい拡大機能の設定"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"画面の一部を拡大できるようになりました"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"[設定] で ON にする"</string>
<string name="dismiss_action" msgid="1728820550388704784">"閉じる"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"続行するには、&lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; にデバイスのマイクへのアクセスを許可する必要があります。"</string>
diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml
index 5d851e01549c..2c1a016c629e 100644
--- a/core/res/res/values-ka/strings.xml
+++ b/core/res/res/values-ka/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN-კოდი, ნიმუში ან პაროლი დაყენებული არ არის"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"შეცდომა ავთენტიკაციისას"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"გამოიყენეთ ეკრანის დაბლოკვა"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"გასაგრძელებლად შეიყვანეთ თქვენი მოწყობილობის ავტორიზაციის მონაცემი"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"თითის ანაბეჭდის დამუშავება ვერ მოხერხდა. გთხოვთ, ცადოთ ხელახლა."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"განბლოკვა სახით"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"დაარეგისტრირეთ თქვენი სახე ხელახლა"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"ამოცნობის გასაუმჯობესებლად, გთხოვთ, ხელახლა დაარეგისტრიროთ თქვენი სახე"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"სახით განბლოკვის დაყენება"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"განბლოკეთ თქვენი ტელეფონი შეხედვით"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"დააყენეთ განბლოკვის სხვა ხერხები"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"შეეხეთ თითის ანაბეჭდის დასამატებლად"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"სახის ზუსტი მონაცემები არ აღიბეჭდა. ცადეთ ხელახლა."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"მეტისმეტად ნათელია. ცადეთ უფრო სუსტი განათება."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"მეტისმეტად ბნელია. ცადეთ უფრო ძლიერი განათება."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"სახე <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"გამოიყენეთ სახით განბლოკვა"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"გამოიყენეთ სახე ან ეკრანის დაბლოკვა"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"გასაგრძელებლად გამოიყენეთ სახით განბლოკვა"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"გასაგრძელებლად გამოიყენეთ თქვენი სახე ან ეკრანის განბლოკვის ნიმუში"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"დაკოპირდა"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>-დან <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>-ში ჩასმული"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>-მა ჩასვა გაცვლის ბუფერიდან"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>-მ(ა) ჩასვა თქვენ მიერ დაკოპირებული ტექსტი"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>-მ(ა) ჩასვა თქვენ მიერ დაკოპირებული სურათი"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>-მ(ა) ჩასვა თქვენ მიერ დაკოპირებული კონტენტი"</string>
<string name="more_item_label" msgid="7419249600215749115">"დამატებით"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"მენიუ+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"სამსახური"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"პირადი ხედი"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"სამსახურის ხედი"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"დაბლოკილია თქვენი IT-ადმინისტრატორის მიერ"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"ამ კონტენტის სამსახურის აპებისთვის გაზიარება შეუძლებელია"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ამ კონტენტის სამსახურის აპებით გახსნა შეუძლებელია"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ამ კონტენტის პირადი აპებისთვის გაზიარება შეუძლებელია"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ამ კონტენტის პირადი აპებით გახსნა შეუძლებელია"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"სამსახურის პროფილი დაპაუზებულია"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"შეეხეთ ჩასართავად"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"სამსახურის აპები არ არის"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"პირადი აპები არ არის"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"გაიხსნას <xliff:g id="APP">%s</xliff:g>-ის პირად პროფილში?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"გაიხსნას <xliff:g id="APP">%s</xliff:g>-ის სამსახურის პროფილში?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"პირადი ბრაუზერის გამოყენება"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"სამსახურის ბრაუზერის გამოყენება"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ქსელის განბლოკვის PIN-კოდი"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM ქსელის ქვედანაყოფის განბლოკვის PIN-კოდი"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM-ის კორპორატიული განბლოკვის PIN-კოდი"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"გადიდების ახალი პარამეტრები"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"ახლა უკვე შეგიძლიათ ეკრანის ნაწილის გადიდება"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"ჩართვა პარამეტრებში"</string>
<string name="dismiss_action" msgid="1728820550388704784">"უარყოფა"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"გასაგრძელებლად &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt;-ს თქვენი მოწყობილობის მიკროფონზე წვდომა სჭირდება."</string>
diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml
index 0f82f8434c0a..4a6548238db1 100644
--- a/core/res/res/values-kk/strings.xml
+++ b/core/res/res/values-kk/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ешқандай PIN коды, өрнек немесе құпия сөз орнатылмаған."</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Аутентификациялауда қате шықты."</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Экран құлпын пайдалану"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Жалғастыру үшін құрылғының тіркелу деректерін енгізіңіз."</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Саусақ ізін өңдеу мүмкін емес. Әрекетті қайталаңыз."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Face Unlock"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Бетті қайта тіркеу"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Құрылғы жүзіңізді жақсырақ тануы үшін, бетіңізді қайта тіркеңіз."</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Face Unlock функциясын реттеу"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Телефоныңызға қарап, оның құлпын ашыңыз."</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Құлыпты ашудың басқа тәсілдерін реттеу"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Саусақ ізін қосу үшін түртіңіз."</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Бет деректері дұрыс алынбады. Әрекетті қайталаңыз."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Тым ашық. Күңгірттеу жарық керек."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Тым қараңғы. Молырақ жарық керек."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> беті"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Face Unlock функциясын пайдалану"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Face Lock функциясын немесе экран құлпын пайдалану"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Жалғастыру үшін Face Unlock функциясын пайдаланыңыз."</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Жалғастыру үшін бетті анықтау функциясын немесе экран құлпын пайдаланыңыз."</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Көшірілді"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> қолданбасынан <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> қолданбасына қойылды."</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Буферден <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> қолданбасына қойылды."</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> сіз көшірген мәтінді қойды."</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> сіз көшірген суретті қойды."</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> сіз көшірген мазмұнды қойды."</string>
<string name="more_item_label" msgid="7419249600215749115">"Көбірек"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Mәзір+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Жұмыс"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Жеке көру"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Жұмыс деректерін көру"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Әкімшіңіз тарабынан бөгелген"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Бұл мазмұнды жұмыс қолданбаларымен бөлісу мүмкін емес."</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Бұл мазмұнды жұмыс қолданбаларымен ашу мүмкін емес."</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Бұл мазмұнды жеке қолданбалармен бөлісу мүмкін емес."</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Бұл мазмұнды жеке қолданбалармен ашу мүмкін емес."</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Жұмыс профилі кідіртілді."</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Қосу үшін түрту"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Жұмыс қолданбалары жоқ."</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Жеке қолданбалар жоқ."</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"<xliff:g id="APP">%s</xliff:g> қолданбасында жеке профильде ашу керек пе?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"<xliff:g id="APP">%s</xliff:g> қолданбасында жұмыс профилінде ашу керек пе?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Жеке браузерді пайдалану"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Жұмыс браузерін пайдалану"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM желісінің құлпын ашатын PIN коды"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM желісі ішкі жиынтығының құлпын ашатын PIN коды"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Корпоративтік SIM картасының құлпын ашатын PIN коды"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Жаңа ұлғайту параметрлері"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Енді экранның бір бөлігін ұлғайтуға болады."</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Параметрлер бөлімінен қосу"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Қабылдамау"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Жалғастыру үшін &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; қолданбасы құрылғыңыздың микрофонына рұқсат алу керек."</string>
diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml
index 852811829c26..c8e183882a0b 100644
--- a/core/res/res/values-km/strings.xml
+++ b/core/res/res/values-km/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"គ្មាន​ការកំណត់​កូដ pin លំនាំ ឬពាក្យសម្ងាត់​ទេ"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"មានបញ្ហាក្នុង​ការផ្ទៀងផ្ទាត់"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ប្រើ​ការ​ចាក់​សោ​អេក្រង់"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"បញ្ចូល​ព័ត៌មានផ្ទៀងផ្ទាត់​ឧបករណ៍​របស់អ្នក ដើម្បីបន្ត"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"មិនអាចដំណើរការស្នាមម្រាមដៃបានទេ។ សូមព្យាយាមម្តងទៀត។"</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"ផ្ទៃមុខទី <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"ប្រើការដោះសោ​តាមទម្រង់មុខ"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"ប្រើមុខ ឬ​ការចាក់សោអេក្រង់"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"ប្រើការដោះសោ​តាមទម្រង់មុខ ដើម្បីបន្ត"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ប្រើការចាក់សោអេក្រង់ ឬមុខរបស់អ្នក ដើម្បីបន្ត"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"ឥឡូវនេះ អ្នកអាចពង្រីក​ផ្នែកនៃអេក្រង់​របស់អ្នកបានហើយ"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"បើកនៅក្នុងការកំណត់"</string>
<string name="dismiss_action" msgid="1728820550388704784">"ច្រានចោល"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"ដើម្បីបន្ត &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ត្រូវការសិទ្ធិចូលប្រើ​មីក្រូហ្វូន​របស់ឧបករណ៍អ្នក។"</string>
diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml
index f0ed6faa5ecd..1a450add12f6 100644
--- a/core/res/res/values-kn/strings.xml
+++ b/core/res/res/values-kn/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ಪಿನ್, ಪ್ಯಾಟರ್ನ್ ಅಥವಾ ಪಾಸ್‌ವರ್ಡ್ ಸೆಟ್ ಮಾಡಿಲ್ಲ"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"ದೃಢೀಕರಿಸುವಾಗ ದೋಷ ಎದುರಾಗಿದೆ"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಬಳಸಿ"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"ಮುಂದುವರಿಸಲು ನಿಮ್ಮ ಸಾಧನದ ರುಜುವಾತನ್ನು‌ ನಮೂದಿಸಿ"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ದಯವಿಟ್ಟು ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"ಮುಖದ <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಬಳಸಿ‌‌"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"ಫೇಸ್ ಅಥವಾ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ಬಳಸಿ"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"ಮುಂದುವರಿಸಲು ಫೇಸ್ ಅನ್‌ಲಾಕ್ ಅನ್ನು ಬಳಸಿ"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ಮುಂದುವರಿಸಲು ನಿಮ್ಮ ಮುಖ ಅಥವಾ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ಬಳಸಿ"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"ನೀವು ಇದೀಗ ನಿಮ್ಮ ಸ್ಕ್ರೀನ್‌ನ ಭಾಗವನ್ನು ಹಿಗ್ಗಿಸಬಹುದು"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಆನ್ ಮಾಡಿ"</string>
<string name="dismiss_action" msgid="1728820550388704784">"ವಜಾಗೊಳಿಸಿ"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"ಮುಂದುವರಿಯಲು, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ಗೆ ನಿಮ್ಮ ಸಾಧನದ ಮೈಕ್ರೋಫೋನ್‌ನ ಪ್ರವೇಶದ ಅಗತ್ಯವಿದೆ."</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index bbac5e8b20fb..dc59a700dcfc 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN, 패턴, 비밀번호가 설정되지 않음"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"인증 오류"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"화면 잠금 사용"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"계속하려면 기기의 사용자 인증 정보를 입력하세요"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"지문을 인식할 수 없습니다. 다시 시도해 주세요."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"얼굴인식 잠금해제"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"얼굴 재등록 필요"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"인식률을 개선하려면 얼굴을 다시 등록하세요."</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"얼굴인식 잠금해제 설정"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"휴대전화의 화면을 응시하여 잠금 해제할 수 있습니다."</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"다른 잠금 해제 방법 설정"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"지문을 추가하려면 탭하세요."</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"정확한 얼굴 데이터를 캡처하지 못했습니다. 다시 시도하세요."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"너무 밝습니다. 조명 밝기를 조금 낮춰보세요."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"너무 어둡습니다. 조명을 밝게 해 보세요."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"얼굴 <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"얼굴인식 잠금해제 사용"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"얼굴 또는 화면 잠금 사용"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"얼굴인식 잠금해제를 사용하여 계속하세요"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"계속하려면 얼굴 또는 화면 잠금을 사용하세요"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"복사 완료"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> 앱이 <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> 앱에서 복사하여 붙여넣음"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> 앱이 클립보드에서 복사하여 붙여넣음"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>에서 복사한 텍스트를 붙여넣음"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>에서 복사한 이미지를 붙여넣음"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>에서 복사한 콘텐츠를 붙여넣음"</string>
<string name="more_item_label" msgid="7419249600215749115">"더보기"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"직장"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"개인 뷰"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"직장 뷰"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"IT 관리자에 의해 차단됨"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"이 콘텐츠는 직장 앱으로 공유할 수 없습니다."</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"이 콘텐츠는 직장 앱으로 열 수 없습니다."</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"이 콘텐츠는 개인 앱으로 공유할 수 없습니다."</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"이 콘텐츠는 개인 앱으로 열 수 없습니다."</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"직장 프로필이 일시중지됨"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"탭하여 사용"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"직장 앱 없음"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"개인 앱 없음"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"개인 프로필의 <xliff:g id="APP">%s</xliff:g>에서 여시겠습니까?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"직장 프로필의 <xliff:g id="APP">%s</xliff:g>에서 여시겠습니까?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"개인 브라우저 사용"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"직장 브라우저 사용"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 네트워크 잠금 해제 PIN"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM 네트워크 하위 집합 잠금 해제 PIN"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM 회사 잠금 해제 PIN"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"새 확대 설정"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"이제 화면 일부를 확대할 수 있습니다."</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"설정에서 사용 설정"</string>
<string name="dismiss_action" msgid="1728820550388704784">"닫기"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"계속하려면 &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt;에서 기기 마이크에 액세스해야 합니다."</string>
diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml
index 89d23988ddde..40940b059a0a 100644
--- a/core/res/res/values-ky/strings.xml
+++ b/core/res/res/values-ky/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN код, графикалык ачкыч же сырсөз коюлган жок"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Аутентификация катасы"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Экран кулпусун колдонуу"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Улантуу үчүн түзмөгүңүздүн эсептик дайындарын киргизиңиз"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Манжа изи иштелбей койду. Кайталап көрүңүз."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Жүз <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Жүзүнөн таанып ачууну колдонуу"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Жүзүнөн таанып ачууну же экрандын кулпусун колдонуу"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Улантуу үчүн жүзүнөн таанып ачууну колдонуу"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Улантуу үчүн жүзүңүздү же экрандын кулпусун колдонуңуз"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Эми экрандын бир бөлүгүн чоңойто аласыз"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Жөндөөлөрдөн күйгүзүү"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Жабуу"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Улантуу үчүн &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; колдонмосуна түзмөгүңүздүн микрофонун пайдаланууга уруксат беришиңиз керек."</string>
diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml
index 8baca0869896..5b0208bb64ce 100644
--- a/core/res/res/values-lo/strings.xml
+++ b/core/res/res/values-lo/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ບໍ່ໄດ້ຕັ້ງ PIN, ຮູບແບບປົດລັອກ ຫຼື ລະຫັດຜ່ານ"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"ເກີດຄວາມຜິດພາດໃນການພິສູດຢືນຢັນ"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ໃຊ້ການລັອກໜ້າຈໍ"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"ລະບຸຂໍ້ມູນການເຂົ້າສູ່ລະບົບອຸປະກອນຂອງທ່ານເພື່ອດຳເນີນການຕໍ່"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ບໍ່​ສາ​ມາດ​ດຳ​ເນີນ​ການ​ລາຍ​ນີ້ວ​ມື​ໄດ້. ກະ​ລຸ​ນາ​ລອງ​ໃໝ່​ອີກ."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"ໃບໜ້າ <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"ໃຊ້ການປົດລັອກດ້ວຍໜ້າ"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"ໃຊ້ໃບໜ້າ ຫຼື ການລັອກໜ້າຈໍ"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"ໃຊ້ການປົດລັອກດ້ວຍໜ້າເພື່ອດຳເນີນການຕໍ່"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ໃຊ້ໃບໜ້າ ຫຼື ການລັອກໜ້າຈໍຂອງທ່ານເພື່ອດຳເນີນການຕໍ່"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"ຕອນນີ້ທ່ານສາມາດຂະຫຍາຍບາງສ່ວນຂອງໜ້າຈໍໄດ້ແລ້ວ"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"ເປີດໃຊ້ໃນການຕັ້ງຄ່າ"</string>
<string name="dismiss_action" msgid="1728820550388704784">"ປິດໄວ້"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"ເພື່ອດຳເນີນການຕໍ່, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ຕ້ອງການສິດເຂົ້າເຖິງໄມໂຄຣໂຟນອຸປະກອນທ່ານ."</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index aac2dc668ffd..07438b5d0d6d 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -579,7 +579,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nenustatytas PIN kodas, atrakinimo piešinys arba slaptažodis"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Autentifikuojant įvyko klaida"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Naudoti ekrano užraktą"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Jei norite tęsti, įveskite įrenginio prisijungimo duomenis"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nepavyko apdoroti piršto antspaudo. Bandykite dar kartą."</string>
@@ -626,14 +627,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Atrakinimas pagal veidą"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Pakartotinis veido registravimas"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Kad patobulintumėte atpažinimą, iš naujo užregistruokite veidą"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Atrakinimo pagal veidą nustatymas"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Atrakinkite telefoną pažiūrėję į jį"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Daugiau atrakinimo metodų nustatymas"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Palieskite, kad pridėtumėte kontrolinį kodą"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Neužfiks. tikslūs veido duom. Bandykite dar kartą."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Per šviesu. Išbandykite mažesnį apšvietimą."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Per tamsu. Išbandykite šviesesnį apšvietimą."</string>
@@ -670,7 +667,8 @@
<string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g> veidas"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Naudoti atrakinimą pagal veidą"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Naudoti atrakinimą pagal veidą arba ekrano užraktą"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Norėdami tęsti, naudokite atrakinimą pagal veidą"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Jei norite tęsti, naudokite veido atpažinimo funkciją arba ekrano užraktą"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1037,12 +1035,9 @@
<string name="copied" msgid="4675902854553014676">"Nukopijuota"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"„<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>“ įklijuota iš „<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>“"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"„<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>“ įklijuota iš iškarpinės"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"„<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>“ įklijavo jūsų nukopijuotą tekstą"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"„<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>“ įklijavo jūsų nukopijuotą vaizdą"</string>
+ <string name="pasted_content" msgid="646276353060777131">"„<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>“ įklijavo jūsų nukopijuotą turinį"</string>
<string name="more_item_label" msgid="7419249600215749115">"Daugiau"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Meniu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"„Meta“ +"</string>
@@ -2209,31 +2204,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Darbo"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Asmeninė peržiūra"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Darbo peržiūra"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Užblokavo jūsų IT administratorius"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Šio turinio negalima bendrinti su darbo programomis"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Šio turinio negalima atidaryti naudojant darbo programas"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Šio turinio negalima bendrinti su asmeninėmis programomis"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Šio turinio negalima atidaryti naudojant asmenines programas"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Darbo profilis pristabdytas"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Paliesti, norint įjungti"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nėra darbo programų"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nėra asmeninių programų"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Atidaryti programoje „<xliff:g id="APP">%s</xliff:g>“ asmeniniame profilyje?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Atidaryti programoje „<xliff:g id="APP">%s</xliff:g>“ darbo profilyje?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Naudoti asmeninę naršyklę"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Naudoti darbo naršyklę"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM tinklo operatoriaus pasirinkimo ribojimo panaikinimo PIN kodas"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM tinklo poaibio operatoriaus pasirinkimo ribojimo panaikinimo PIN kodas"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM bendrojo operatoriaus pasirinkimo ribojimo panaikinimo PIN kodas"</string>
@@ -2346,10 +2329,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nauji didinimo nustatymai"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Dabar galite padidinti dalį ekrano"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Įjungti nustatymuose"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Atmesti"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Kad būtų galima tęsti, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; reikalinga prieiga prie įrenginio mikrofono."</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index d4b2f7e85f87..e8dceb9677f7 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -576,7 +576,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN, kombinācija vai parole nav iestatīta"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Autentifikācijas kļūda"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekrāna bloķēšanas metodes izmantošana"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Lai turpinātu, ievadiet savas ierīces akreditācijas datus"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nevarēja apstrādāt pirksta nospiedumu. Lūdzu, mēģiniet vēlreiz."</string>
@@ -623,14 +624,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Autorizācija pēc sejas"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Atkārtoti reģistrējiet seju"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Lai uzlabotu atpazīšanu, lūdzu, atkārtoti reģistrējiet savu seju"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Autorizācijas pēc sejas iestatīšana"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Atbloķējiet tālruni, skatoties uz to"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Citi atbloķēšanas veidi"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Pieskarieties, lai pievienotu pirksta nospiedumu"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Neizdevās tvert sejas datus. Mēģiniet vēlreiz."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Pārāk spilgts. Izmēģiniet maigāku apgaismojumu."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Pārāk tumšs. Izmēģiniet spožāku apgaismojumu."</string>
@@ -667,7 +664,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Seja <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Autorizācija pēc sejas"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Autorizācijas pēc sejas vai ekrāna bloķēšanas metodes izmantošana"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Lai turpinātu, izmantojiet autorizāciju pēc sejas"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Izmantojiet autorizāciju pēc sejas vai ekrāna bloķēšanas opciju, lai turpinātu"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1034,12 +1032,9 @@
<string name="copied" msgid="4675902854553014676">"Nokopēts"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Lietotnē <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> tika ielīmēti dati no lietotnes <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>."</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Lietotnē <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> tika ielīmēti dati no starpliktuves."</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ielīmēja jūsu nokopēto tekstu"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ielīmēja jūsu nokopēto attēlu"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ielīmēja jūsu nokopēto saturu"</string>
<string name="more_item_label" msgid="7419249600215749115">"Vairāk"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Izvēlne+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta taustiņš +"</string>
@@ -2175,31 +2170,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Darba profils"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Personisks skats"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Darba skats"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Bloķējis jūsu IT administrators"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Šo saturu nevar kopīgot ar darba lietotnēm"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Šo saturu nevar atvērt darba lietotnēs"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Šo saturu nevar kopīgot ar personīgajām lietotnēm"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Šo saturu nevar atvērt personīgajās lietotnēs"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Darba profila darbība ir apturēta."</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Lai ieslēgtu, pieskarieties"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nav darba lietotņu"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nav personīgu lietotņu"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Vai atvērt lietotnē <xliff:g id="APP">%s</xliff:g>, izmantojot personīgo profilu?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Vai atvērt lietotnē <xliff:g id="APP">%s</xliff:g>, izmantojot darba profilu?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Izmantot personīgo pārlūku"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Izmantot darba pārlūku"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM tīkla atbloķēšanas PIN"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM tīkla apakškopas atbloķēšanas PIN"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM Corporate atbloķēšanas PIN"</string>
@@ -2312,10 +2295,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Jauni palielinājuma iestatījumi"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Tagad varat palielināt ekrāna daļu."</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Ieslēgt sadaļā Iestatījumi"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Nerādīt"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Lai turpinātu, lietotnei &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; nepieciešama piekļuve jūsu ierīces mikrofonam."</string>
diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml
index 99a888d01134..2f1954a430e8 100644
--- a/core/res/res/values-mk/strings.xml
+++ b/core/res/res/values-mk/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Не е поставен PIN, шема или лозинка"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Грешка при проверката"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Користи заклучување екран"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Внесете го акредитивот на уредот за да продолжите"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Отпечатокот не може да се обработи. Обидете се повторно."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Отклучување со лик"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Повторно регистрирајте го ликот"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"За да се подобри препознавањето, повторно регистрирајте го ликот"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Поставете „Отклучување со лик“"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Отклучете го телефонот со гледање во него"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Поставете уште начини за отклучување"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Допрете за да додадете отпечаток"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Не се сними прецизна слика. Обидете се повторно."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Премногу светла. Пробајте со послабо осветлување."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Премногу темна. Пробајте со посилно осветлување."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Лице <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Користи отклучување со лик"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Користи лик или заклучување екран"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Користете отклучување со лик за да продолжите"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Користете отклучување со лик или заклучување екран за да продолжите"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Копирано"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> залепи од <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> залепи од привремената меморија"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> го залепи текстот што го копиравте"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ја залепи сликата што ја копиравте"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ги залепи содржините што ги копиравте"</string>
<string name="more_item_label" msgid="7419249600215749115">"Повеќе"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Мени+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"копче Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Службени"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Личен приказ"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Работен приказ"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Блокирано од вашиот IT-администратор"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Овие содржини не може да се споделуваат со работни апликации"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Овие содржини не може да се отвораат со работни апликации"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Овие содржини не може да се споделуваат со лични апликации"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Овие содржини не може да се отвораат со лични апликации"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Работниот профил е паузиран"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Допрете за да вклучите"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Нема работни апликации"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Нема лични апликации"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Да се отвори во <xliff:g id="APP">%s</xliff:g> во личниот профил?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Да се отвори во <xliff:g id="APP">%s</xliff:g> во работниот профил?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Користи личен прелистувач"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Користи работен прелистувач"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN за отклучување на мрежата на SIM-картичката"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN за отклучување на подмножество на мрежата на SIM-картичката"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN за отклучување на корпоративната SIM-картичка"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Нови поставки за зголемување"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Сега може да зголемувате дел од екранот"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Вклучи во „Поставки“"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Отфрли"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"За да продолжи, на &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ѝ е потребен пристап до микрофонот на уредот."</string>
diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml
index 45a99f1cf555..1143e22c119d 100644
--- a/core/res/res/values-ml/strings.xml
+++ b/core/res/res/values-ml/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"പിന്നോ പാറ്റേണോ പാസ്‌വേഡോ സജ്ജീകരിച്ചിട്ടില്ല"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"പിശക് പരിശോധിച്ചുറപ്പിക്കുന്നു"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"തുടരാൻ നിങ്ങളുടെ ഉപകരണ ക്രെഡൻഷ്യലുകൾ നൽകുക"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ഫിംഗർപ്രിന്റ് പ്രോസസ് ചെയ്യാനായില്ല. വീണ്ടും ശ്രമിക്കുക."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"മുഖം തിരിച്ചറിഞ്ഞുള്ള അൺലോക്ക്"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"നിങ്ങളുടെ മുഖം വീണ്ടും എൻറോൾ ചെയ്യൂ"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"തിരിച്ചറിയൽ മെച്ചപ്പെടുത്താൻ, നിങ്ങളുടെ മുഖം ദയവായി വീണ്ടും എൻറോൾ ചെയ്യൂ"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"മുഖം തിരിച്ചറിഞ്ഞുള്ള അൺലോക്ക് സജ്ജീകരിക്കുക"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"ഫോണിലേക്ക് നോക്കി അത് അൺലോക്ക് ചെയ്യുക"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"അൺലോക്ക് ചെയ്യുന്നതിനുള്ള കൂടുതൽ വഴികൾ സജ്ജീകരിക്കുക"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"ഫിംഗർപ്രിന്റ് ചേർക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"കൃത്യ മുഖ ഡാറ്റ എടുക്കാനായില്ല. വീണ്ടും ശ്രമിക്കൂ."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"വളരെയധികം തെളിച്ചം. സൗമ്യതയേറിയ പ്രകാശം ശ്രമിക്കൂ."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"വളരെ ഇരുണ്ടത്. തിളക്കമേറിയ ലൈറ്റിംഗ് പരീക്ഷിക്കുക."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"മുഖം <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"മുഖം തിരിച്ചറിഞ്ഞുള്ള അൺലോക്ക് ഉപയോഗിക്കുക"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"മുഖം അല്ലെങ്കിൽ സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"തുടരാൻ മുഖം തിരിച്ചറിഞ്ഞുള്ള അൺലോക്ക് ഉപയോഗിക്കുക"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"തുടരാൻ നിങ്ങളുടെ മുഖം‌ അല്ലെങ്കിൽ സ്‌ക്രീൻ ലോക്ക് ഉപയോഗിക്കുക"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"പകർത്തി"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> എന്നതിൽ നിന്ന് <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ഒട്ടിച്ചു"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"ക്ലിപ്‌ബോർഡിൽ നിന്ന് <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ഒട്ടിച്ചു"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> നിങ്ങൾ പകർത്തിയ ടെക്സ്റ്റ് ഒട്ടിച്ചു"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> നിങ്ങൾ പകർത്തിയ ഒരു ചിത്രം ഒട്ടിച്ചു"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> നിങ്ങൾ പകർത്തിയ ഉള്ളടക്കം ഒട്ടിച്ചു"</string>
<string name="more_item_label" msgid="7419249600215749115">"കൂടുതൽ"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"മെനു+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"മെറ്റ+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"ഔദ്യോഗികം"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"വ്യക്തിപര കാഴ്‌ച"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"ഔദ്യോഗിക കാഴ്‌ച"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"നിങ്ങളുടെ ഐടി അഡ്‌മിൻ ബ്ലോക്ക് ചെയ്‌തു"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"ഔദ്യോഗിക ആപ്പുകൾ ഉപയോഗിച്ച് ഈ ഉള്ളടക്കം പങ്കിടാനാകില്ല"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ഔദ്യോഗിക ആപ്പുകൾ ഉപയോഗിച്ച് ഈ ഉള്ളടക്കം തുറക്കാനാകില്ല"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"വ്യക്തിപര ആപ്പുകൾ ഉപയോഗിച്ച് ഈ ഉള്ളടക്കം പങ്കിടാനാകില്ല"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"വ്യക്തിപര ആപ്പുകൾ ഉപയോഗിച്ച് ഈ ഉള്ളടക്കം തുറക്കാനാകില്ല"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"ഔദ്യോഗിക പ്രൊഫൈൽ തൽക്കാലം നിർത്തിയിരിക്കുന്നു"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"ഓണാക്കാൻ ടാപ്പ് ചെയ്യുക"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ഔദ്യോഗിക ആപ്പുകൾ ഇല്ല"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"വ്യക്തിപര ആപ്പുകൾ ഇല്ല"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"വ്യക്തിപരമായ പ്രൊഫൈലിൽ <xliff:g id="APP">%s</xliff:g> എന്നതിൽ തുറക്കണോ?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"ഔദ്യോഗിക പ്രൊഫൈലിൽ <xliff:g id="APP">%s</xliff:g> എന്നതിൽ തുറക്കണോ?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"വ്യക്തിപരമായ ബ്രൗസർ ഉപയോഗിക്കുക"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ഔദ്യോഗിക ബ്രൗസർ ഉപയോഗിക്കുക"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"സിം നെറ്റ്‌വർക്ക് അൺലോക്ക് ചെയ്യാനുള്ള പിൻ"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"സിം നെറ്റ്‌വർക്ക് സബ്സെറ്റ് അൺലോക്ക് ചെയ്യാനുള്ള പിൻ"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"സിം കോർപ്പറേറ്റ് അൺലോക്ക് ചെയ്യാനുള്ള പിൻ"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"പുതിയ മാഗ്നിഫിക്കേഷൻ ക്രമീകരണം"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"നിങ്ങളുടെ സ്ക്രീനിന്റെ ഒരു ഭാഗം ഇപ്പോൾ മാഗ്നിഫൈ ചെയ്യാനാകും"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"ക്രമീകരണത്തിൽ ഓണാക്കുക"</string>
<string name="dismiss_action" msgid="1728820550388704784">"ഡിസ്‌മിസ് ചെയ്യുക"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"തുടരാൻ, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ആപ്പിന് നിങ്ങളുടെ ഉപകരണത്തിന്റെ മൈക്രോഫോണിലേക്ക് ആക്‌സസ് നൽകേണ്ടതുണ്ട്."</string>
diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml
index bc0789030d22..30c664f4ab92 100644
--- a/core/res/res/values-mn/strings.xml
+++ b/core/res/res/values-mn/strings.xml
@@ -445,7 +445,7 @@
<string name="permlab_accessBackgroundLocation" msgid="1721164702777366138">"байршилд ард хандах"</string>
<string name="permdesc_accessBackgroundLocation" msgid="8264885066095638105">"Энэ апп нь дурын үед, түүнийг ашиглаагүй байх үед ч байршилд хандах боломжтой."</string>
<string name="permlab_modifyAudioSettings" msgid="6129039778010031815">"Аудио тохиргоо солих"</string>
- <string name="permdesc_modifyAudioSettings" msgid="8687227609663124921">"Апп нь дууны хэмжээ, спикерын гаралтад ашиглагдах глобал аудио тохиргоог өөрчлөх боломжтой."</string>
+ <string name="permdesc_modifyAudioSettings" msgid="8687227609663124921">"Апп нь дууны түвшин, спикерын гаралтад ашиглагдах глобал аудио тохиргоог өөрчлөх боломжтой."</string>
<string name="permlab_recordAudio" msgid="1208457423054219147">"аудио бичих"</string>
<string name="permdesc_recordAudio" msgid="5857246765327514062">"Энэ аппыг ашиглаж байх үед энэ нь микрофон ашиглан аудио бичих боломжтой."</string>
<string name="permlab_recordBackgroundAudio" msgid="5891032812308878254">"ард видео бичих"</string>
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Тохируулсан пин, хээ эсвэл нууц үг алга"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Баталгаажуулахад алдаа гарлаа"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Дэлгэцийн түгжээг ашиглах"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Үргэлжлүүлэхийн тулд төхөөрөмжийнхөө мандат үнэмлэхийг оруулна уу"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Хурууны хээ боловсруулж чадахгүй байна. Дахин оролдоно уу."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Царайгаар тайлах"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Царайгаа дахин бүртгүүлнэ үү"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Танилтыг сайжруулахын тулд царайгаа дахин бүртгүүлнэ үү"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Царайгаар тайлах онцлогийг тохируулна уу"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Утас руугаа харж түгжээг нь тайлна уу"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Түгжээ тайлах илүү олон арга тохируулна уу"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Хурууны хээ нэмэхийн тулд товшино уу"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Царайн өгөгдлийг зөв авч чадсангүй. Дахин оролдоно уу."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Хэт цайвар байна. Гэрэл багатай газар оролдоно уу."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Хэт харанхуй байна. Гэрэлтэй орчинд туршина уу."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Царай <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Царайгаар тайлахыг ашиглах"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Царай эсвэл дэлгэцийн түгжээ ашиглах"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Үргэлжлүүлэхийн тулд царайгаар тайлахыг ашиглана уу"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Үргэлжлүүлэхийн тулд царай эсвэл дэлгэцийн түгжээгээ ашиглана уу"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Хуулсан"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>-с буулгасан <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Түр санах ойгоос буулгасан <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> таны хуулсан текстийг буулгасан"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> таны хуулсан зургийг буулгасан"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> таны хуулсан контентыг буулгасан"</string>
<string name="more_item_label" msgid="7419249600215749115">"Илүү"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Цэс+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Мета+"</string>
@@ -1285,20 +1280,20 @@
<string name="dump_heap_system_text" msgid="6805155514925350849">"<xliff:g id="PROC">%1$s</xliff:g>-н боловсруулалт санах ойн багтаамжийнхаа хязгаар болох <xliff:g id="SIZE">%2$s</xliff:g>-с хэтэрсэн байна. Та санах ойн агшин зургийг (heap dump) хуваалцах боломжтой. Сануулга: энэ санах ойн агшин зураг таны бичсэн зүйл зэрэг тухайн боловсруулалтын хандах эрхтэй аливаа мэдрэг хувийн мэдээллийг агуулж болно."</string>
<string name="dump_heap_ready_text" msgid="5849618132123045516">"Та <xliff:g id="PROC">%1$s</xliff:g>-н боловсруулалтын санах ойн агшин зургийг хуваалцах боломжтой. Сануулга: энэ санах ойн агшин зураг таны бичсэн зүйл зэрэг тухайн боловсруулалтын хандах эрхтэй аливаа мэдрэг хувийн мэдээллийг агуулж болзошгүй."</string>
<string name="sendText" msgid="493003724401350724">"Текст илгээх үйлдлийг сонгох"</string>
- <string name="volume_ringtone" msgid="134784084629229029">"Хонхны аяны хэмжээ"</string>
+ <string name="volume_ringtone" msgid="134784084629229029">"Хонхны аяны түвшин"</string>
<string name="volume_music" msgid="7727274216734955095">"Медиа дууны түвшин"</string>
<string name="volume_music_hint_playing_through_bluetooth" msgid="2614142915948898228">"Блютүүтээр тоглож байна"</string>
<string name="volume_music_hint_silent_ringtone_selected" msgid="1514829655029062233">"Хонхны дууг чимээгүй болгов"</string>
- <string name="volume_call" msgid="7625321655265747433">"Ирсэн дуудлагын дууны хэмжээ"</string>
- <string name="volume_bluetooth_call" msgid="2930204618610115061">"Bluetooth ирсэн дуудлагын дууны хэмжээ"</string>
+ <string name="volume_call" msgid="7625321655265747433">"Ирсэн дуудлагын дууны түвшин"</string>
+ <string name="volume_bluetooth_call" msgid="2930204618610115061">"Bluetooth ирсэн дуудлагын дууны түвшин"</string>
<string name="volume_alarm" msgid="4486241060751798448">"Сэрүүлгийн дууны түвшин"</string>
- <string name="volume_notification" msgid="6864412249031660057">"Мэдэгдлийн дууны хэмжээ"</string>
- <string name="volume_unknown" msgid="4041914008166576293">"Дууны хэмжээ"</string>
+ <string name="volume_notification" msgid="6864412249031660057">"Мэдэгдлийн дууны түвшин"</string>
+ <string name="volume_unknown" msgid="4041914008166576293">"Дууны түвшин"</string>
<string name="volume_icon_description_bluetooth" msgid="7540388479345558400">"Блютүүтын хэмжээ"</string>
- <string name="volume_icon_description_ringer" msgid="2187800636867423459">"Хонхны дууны хэмжээ"</string>
- <string name="volume_icon_description_incall" msgid="4491255105381227919">"Дуудлагын дууны хэмжээ"</string>
+ <string name="volume_icon_description_ringer" msgid="2187800636867423459">"Хонхны дууны түвшин"</string>
+ <string name="volume_icon_description_incall" msgid="4491255105381227919">"Дуудлагын дууны түвшин"</string>
<string name="volume_icon_description_media" msgid="4997633254078171233">"Медиа дууны түвшин"</string>
- <string name="volume_icon_description_notification" msgid="579091344110747279">"Мэдэгдлийн дууны хэмжээ"</string>
+ <string name="volume_icon_description_notification" msgid="579091344110747279">"Мэдэгдлийн дууны түвшин"</string>
<string name="ringtone_default" msgid="9118299121288174597">"Үндсэн хонхны ая"</string>
<string name="ringtone_default_with_actual" msgid="2709686194556159773">"Үндсэн (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
<string name="ringtone_silent" msgid="397111123930141876">"Алийг нь ч биш"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Ажил"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Хувийн харагдах байдал"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Ажлын харагдах байдал"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Таны IT админ блоклосон"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Энэ контентыг ажлын аппуудаар хуваалцах боломжгүй"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Энэ контентыг ажлын аппуудаар нээх боломжгүй"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Энэ контентыг хувийн аппуудаар хуваалцах боломжгүй"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Энэ контентыг хувийн аппуудаар нээх боломжгүй"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Ажлын профайлыг түр зогсоосон"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Асаахын тулд товших"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ямар ч ажлын апп байхгүй байна"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ямар ч хувийн апп байхгүй байна"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Хувийн профайлд <xliff:g id="APP">%s</xliff:g>-д нээх үү?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Ажлын профайлд <xliff:g id="APP">%s</xliff:g>-д нээх үү?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Хувийн хөтөч ашиглах"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Ажлын хөтөч ашиглах"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Сүлжээний SIM-н түгжээг тайлах ПИН"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Сүлжээний дэд олонлогийн SIM-н түгжээг тайлах ПИН"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Байгууллагын SIM-н түгжээг тайлах ПИН"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Томруулах онцлогийн шинэ тохиргоо"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Та одоо дэлгэцийнхээ хэсгийг томруулах боломжтой"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Тохиргоонд асаана уу"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Үл хэрэгсэх"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Үргэлжлүүлэхийн тулд, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; таны төхөөрөмжийн микрофонд хандах шаардлагатай."</string>
diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml
index b63d6a7d241a..ddc001f472e9 100644
--- a/core/res/res/values-mr/strings.xml
+++ b/core/res/res/values-mr/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"कोणताही पिन, पॅटर्न किंवा पासवर्ड सेट केलेला नाही"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"एरर ऑथेंटिकेट करत आहे"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"स्क्रीन लॉक वापरा"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"पुढे सुरू ठेवण्यासाठी तुमच्या डिव्हाइसचे क्रेडेंशियल एंटर करा"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"फिंगरप्रिंटवर प्रक्रिया करणे शक्य झाले नाही. कृपया पुन्हा प्रयत्न करा."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"फेस अनलॉक"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"तुमच्या चेहऱ्याची पुन्हा नोंदणी करा"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"ओळखण्यामध्ये सुधारणा करण्यासाठी, कृपया तुमच्या चेहऱ्याची पुन्हा नोंदणी करा"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"फेस अनलॉक सेट करा"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"तुमच्या फोनकडे पाहून तो अनलॉक करा"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"अनलॉक करण्याच्या आणखी पद्धती सेट करा"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"फिंगरप्रिंट जोडण्यासाठी टॅप करा"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"अचूक फेस डेटा कॅप्चर करता आला नाही. पुन्हा करा."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"खूप प्रखर. आणखी सौम्य प्रकाश वापरून पहा."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"खूप गडद. आणखी प्रखर प्रकाश वापरून पहा."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"चेहरा <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"फेस अनलॉक वापरा"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"फेस किंवा स्क्रीन लॉक वापरा"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"पुढे सुरू ठेवण्यासाठी फेस अनलॉक वापरा"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"पुढे सुरू ठेवण्यासाठी तुमचा चेहरा किंवा स्क्रीन लॉक वापरा"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"कॉपी केले"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> वरून <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> पेस्ट केले"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"क्लिपबोर्डवरून <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> पेस्ट केले"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"तुम्ही कॉपी केलेला मजकूर <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ने पेस्ट केला"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"तुम्ही कॉपी केलेली इमेज <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ने पेस्ट केली"</string>
+ <string name="pasted_content" msgid="646276353060777131">"तुम्ही कॉपी केलेला आशय <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ने पेस्ट केला"</string>
<string name="more_item_label" msgid="7419249600215749115">"अधिक"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"मेनू+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"कार्य"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"वैयक्तिक दृश्य"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"कार्य दृश्य"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"तुमच्या IT ॲडमिनने ब्लॉक केले"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"हा आशय कार्य ॲप्ससह शेअर केला जाऊ शकत नाही"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"हा आशय कार्य ॲप्स वापरून उघडला जाऊ शकत नाही"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"हा आशय वैयक्तिक ॲप्ससह शेअर केला जाऊ शकत नाही"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"हा आशय वैयक्तिक ॲप्स वापरून उघडला जाऊ शकत नाही"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"कार्य प्रोफाइल थांबवली आहे"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"सुरू करण्यासाठी टॅप करा"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"कोणतीही कार्य ॲप्स सपोर्ट करत नाहीत"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"कोणतीही वैयक्तिक ॲप्स सपोर्ट करत नाहीत"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"<xliff:g id="APP">%s</xliff:g> च्या वैयक्तिक प्रोफाइलमध्ये उघडायचे आहे का?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"<xliff:g id="APP">%s</xliff:g> च्या कार्य प्रोफाइलमध्ये उघडायचे आहे का?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"वैयक्तिक ब्राउझर वापरा"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"कार्य ब्राउझर वापरा"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"सिम नेटवर्क अनलॉक पिन"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM नेटवर्क सबसेट अनलॉक पिन"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM कॉर्पोरेट अनलॉक पिन"</string>
@@ -2278,8 +2261,7 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"नवीन मॅग्निफिकेशन सेटिंग्ज"</string>
<!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
<skip />
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"सेटिंग्ज मध्ये सुरू करा"</string>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
index 1a047418a5dd..4d8726701009 100644
--- a/core/res/res/values-ms/strings.xml
+++ b/core/res/res/values-ms/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Pin, corak atau kata laluan tidak ditetapkan"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Ralat semasa membuat pengesahan"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Gunakan kunci skrin"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Masukkan bukti kelayakan peranti anda untuk meneruskan"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Tidak dapat memproses cap jari. Sila cuba lagi."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Wajah buka kunci"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Daftarkan semula wajah anda"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Untuk meningkatkan pengecaman, sila daftarkan semula wajah anda"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Sediakan wajah buka kunci"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Buka kunci telefon anda dengan melihat telefon anda"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Sediakan lebih banyak cara untuk membuka kunci"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Ketik untuk menambah cap jari"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Gagal menangkap data wajah dgn tepat. Cuba lagi."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Terlalu terang. Cuba pencahayaan yang lebih lembut."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Terlalu gelap. Cuba pencahayaan yang lebih cerah."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Wajah <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Gunakan wajah buka kunci"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Gunakan kunci wajah atau skrin"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Gunakan wajah buka kunci untuk meneruskan"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Gunakan wajah atau kunci skrin anda untuk meneruskan"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Disalin"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ditampalkan daripada <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ditampalkan daripada papan keratan"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> telah menampal teks yang anda salin"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> telah menampal imej yang anda salin"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> telah menampal kandungan yang anda salin"</string>
<string name="more_item_label" msgid="7419249600215749115">"Lagi"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Kerja"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Paparan peribadi"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Paparan kerja"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Disekat oleh pentadbir IT anda"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Kandungan ini tidak boleh dikongsi dengan apl kerja"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Kandungan ini tidak boleh dibuka dengan apl kerja"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Kandungan ini tidak boleh dikongsi dengan apl peribadi"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Kandungan ini tidak boleh dibuka dengan apl peribadi"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profil kerja dijeda"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Ketik untuk menghidupkan"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Tiada apl kerja"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Tiada apl peribadi"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Buka dalam <xliff:g id="APP">%s</xliff:g> pada profil peribadi?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Buka dalam <xliff:g id="APP">%s</xliff:g> pada profil kerja?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gunakan penyemak imbas peribadi"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gunakan penyemak imbas kerja"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN buka kunci rangkaian SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN buka kunci subset rangkaian SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN buka kunci korporat SIM"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Tetapan pembesaran baharu"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Kini anda boleh membesarkan sebahagian skrin anda"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Hidupkan dalam Tetapan"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Tolak"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Untuk meneruskan proses, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; memerlukan akses kepada mikrofon peranti anda."</string>
diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml
index 9e41ccd33505..f2e813c90b9c 100644
--- a/core/res/res/values-my/strings.xml
+++ b/core/res/res/values-my/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ပင်နံပါတ်၊ လော့ခ်ပုံစံ သို့မဟုတ် စကားဝှက် သတ်မှတ်မထားပါ"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"အထောက်အထားစိစစ်ရာတွင် အမှားအယွင်းရှိနေသည်"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ဖန်သားပြင်လော့ခ်ချခြင်းကို သုံးခြင်း"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"ရှေ့ဆက်ရန် သင့်စက်ပစ္စည်း၏ အထောက်အထားကို ထည့်သွင်းပါ"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"လက်ဗွေယူ၍ မရပါ။ ထပ်စမ်းကြည့်ပါ။"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"မျက်နှာမှတ် သော့ဖွင့်ခြင်း"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"သင့်မျက်နှာကို စာရင်းပြန်သွင်းပါ"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"ပိုမှတ်မိစေရန် သင့်မျက်နှာကို စာရင်းပြန်သွင်းပါ"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"မျက်နှာမှတ်သော့ဖွင့်ခြင်းကို စနစ်ထည့်သွင်းပါ"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"သင့်ဖုန်းကိုကြည့်၍ သော့ဖွင့်ပါ"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"သော့ဖွင့်ရန် နောက်ထပ်နည်းလမ်းများကို စနစ်ထည့်သွင်းပါ"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"လက်ဗွေထည့်ရန် တို့ပါ"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"မျက်နှာဒေတာ အမှန် မရိုက်ယူနိုင်ပါ၊ ထပ်စမ်းကြည့်ပါ။"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"အလွန် လင်းသည်။ အလင်းလျှော့ကြည့်ပါ။"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"အလွန်မှောင်သည်။ ပိုလင်းအောင် လုပ်ကြည့်ပါ။"</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"မျက်နှာ <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"မျက်နှာမှတ်သော့ဖွင့်ခြင်းကို သုံးခြင်း"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"မျက်နှာမှတ်သော့ဖွင့်ခြင်း (သို့) ဖန်သားပြင်လော့ခ်ချခြင်းကို သုံးခြင်း"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"ရှေ့ဆက်ရန် မျက်နှာမှတ်သော့ဖွင့်ခြင်းကို သုံးပါ"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ရှေ့ဆက်ရန် သင်၏ မျက်နှာ (သို့) ဖန်သားပြင်လော့ခ်ကို သုံးပါ"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"မိတ္တူကူးပြီးပါပြီ"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> မှ <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> သို့ ကူးထည့်ထားသည်"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"ကလစ်ဘုတ်မှ <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> သို့ ကူးထည့်ထားသည်"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> က သင်မိတ္တူကူးထားသော စာသားကို ကူးထည့်ထားသည်"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> က သင်မိတ္တူကူးထားသော ပုံကို ကူးထည့်ထားသည်"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> က သင်မိတ္တူကူးထားသော အကြောင်းအရာကို ကူးထည့်ထားသည်"</string>
<string name="more_item_label" msgid="7419249600215749115">"နောက်ထပ်"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"အလုပ်"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"ပုဂ္ဂိုလ်ရေးဆိုင်ရာ မြင်ကွင်း"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"အလုပ် မြင်ကွင်း"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"သင်၏ IT စီမံခန့်ခွဲသူက ပိတ်ထားသည်"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"ဤအကြောင်းအရာကို အလုပ်သုံးအက်ပ်များဖြင့် မမျှဝေနိုင်ပါ"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ဤအကြောင်းအရာကို အလုပ်သုံးအက်ပ်များဖြင့် မဖွင့်နိုင်ပါ"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ဤအကြောင်းအရာကို ကိုယ်ပိုင်အက်ပ်များဖြင့် မမျှဝေနိုင်ပါ"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ဤအကြောင်းအရာကို ကိုယ်ပိုင်အက်ပ်များဖြင့် မဖွင့်နိုင်ပါ"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"အလုပ်ပရိုဖိုင် ခဏရပ်ထားသည်"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"ဖွင့်ရန်တို့ပါ"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"အလုပ်သုံးအက်ပ်များ မရှိပါ"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ကိုယ်ပိုင်အက်ပ်များ မရှိပါ"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"ကိုယ်ပိုင်ပရိုဖိုင်ရှိ <xliff:g id="APP">%s</xliff:g> တွင် ဖွင့်မလား။"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"အလုပ်ပရိုဖိုင်ရှိ <xliff:g id="APP">%s</xliff:g> တွင် ဖွင့်မလား။"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ကိုယ်ပိုင်ဘရောင်ဇာ သုံးရန်"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"အလုပ်သုံးဘရောင်ဇာ သုံးရန်"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"ဆင်းမ်ကွန်ရက် လော့ခ်ဖွင့်ရန် ပင်နံပါတ်"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"ဆင်းမ်ကွန်ရက်ခွဲ လော့ခ်ဖွင့်ရန် ပင်နံပါတ်"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"ဆင်းမ်ကော်ပိုရိတ် လော့ခ်ဖွင့်ရန် ပင်နံပါတ်"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"ချဲ့ခြင်းဆိုင်ရာ ဆက်တင်အသစ်များ"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"ဖန်သားပြင်တစ်စိတ်တစ်ပိုင်းကို ယခုချဲ့နိုင်ပါပြီ"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"\'ဆက်တင်များ\' တွင် ဖွင့်ရန်"</string>
<string name="dismiss_action" msgid="1728820550388704784">"ပယ်ရန်"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"ဆက်လက်လုပ်ဆောင်ရန် &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; က သင့်စက်၏ မိုက်ခရိုဖုန်းကို အသုံးပြုခွင့်ရရန် လိုအပ်သည်။"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 0ca8b91d9b67..9921422185e8 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN-kode, mønster eller passord er ikke angitt"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Feil under autentiseringen"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Bruk skjermlås"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Skriv inn enhetslegitimasjonen din for å fortsette"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Kunne ikke registrere fingeravtrykket. Prøv på nytt."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Ansiktslås"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Registrer ansiktet ditt på nytt"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"For å forbedre gjenkjennelse, registrer ansiktet ditt på nytt"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Konfigurer ansiktslås"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Lås opp telefonen ved å se på den"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Konfigurer flere måter å låse opp på"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Trykk for å legge til et fingeravtrykk"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Kunne ikke ta opp nøyaktige ansiktsdata Prøv igjen"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"For lyst. Prøv svakere belysning."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"For mørkt. Prøv sterkere belysning."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Ansikt <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Bruk ansiktslås"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Bruk ansikts- eller skjermlås"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Bruk ansiktslås for å fortsette"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Bruk ansikts- eller skjermlåsen for å fortsette"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Kopiert"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> limte inn fra <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> limte inn fra utklippstavlen"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> limte inn tekst du kopierte"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> limte inn et bilde du kopierte"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> limte inn innhold du kopierte"</string>
<string name="more_item_label" msgid="7419249600215749115">"Mer"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"menyknapp+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Jobb"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Personlig visning"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Jobbvisning"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokkert av IT-administratoren din"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Dette innholdet kan ikke deles med jobbapper"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Dette innholdet kan ikke åpnes med jobbapper"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Dette innholdet kan ikke deles med personlige apper"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Dette innholdet kan ikke åpnes med personlige apper"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Jobbprofilen er satt på pause"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Trykk for å slå på"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ingen jobbapper"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Ingen personlige apper"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Vil du åpne i <xliff:g id="APP">%s</xliff:g> i den personlige profilen?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Vil du åpne i <xliff:g id="APP">%s</xliff:g> i jobbprofilen?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Bruk den personlige nettleseren"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Bruk jobbnettleseren"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-kode for å fjerne operatørlåser"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN-kode for å fjerne bestemte operatørlåser"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN-kode for å låse opp SIM-kort for bedrifter"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nye forstørringsinnstillinger"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Nå kan du forstørre en del av skjermen"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Slå på i innstillingene"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Avvis"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"For å fortsette må &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ha tilgang til enhetsmikrofonen."</string>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
index 6a0ba3bd75cd..8d11114e78bb 100644
--- a/core/res/res/values-ne/strings.xml
+++ b/core/res/res/values-ne/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"कुनै पनि PIN, ढाँचा वा पासवर्ड सेट गरिएको छैन"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"प्रमाणित गर्ने क्रममा त्रुटि भयो"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"स्क्रिन लक प्रयोग गर्नुहोस्"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"जारी राख्न आफ्नो यन्त्रको PIN, प्याटर्न वा पासवर्ड हाल्नुहोस्"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"फिंगरप्रिन्ट प्रशोधन गर्न सकिएन। कृपया फेरि प्रयास गर्नुहोस्।"</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"अनुहार <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"फेस अनलक प्रयोग गर्नुहोस्"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"फेस अनलक वा स्क्रिन लक प्रयोग गर्नुहोस्"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"जारी राख्न फेस अनलक प्रयोग गर्नुहोस्"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"जारी राख्न आफ्नो फेस वा स्क्रिन लक प्रयोग गरी पुष्टि गर्नुहोस्"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"तपाईं अब स्क्रिनको जुनसुकै भाग जुम इन गर्न सक्नुहुन्छ"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"सेटिङमा गई यो सुविधा अन गर्नुहोस्"</string>
<string name="dismiss_action" msgid="1728820550388704784">"हटाउनुहोस्"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"जारी राख्न &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; लाई तपाईंको यन्त्रको माइक्रोफोन प्रयोग गर्ने अनुमति दिनु पर्ने हुन्छ।"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 92cd82b431d7..d8507f3bf7ed 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -49,7 +49,7 @@
<string name="invalidPuk" msgid="8831151490931907083">"Typ een pukcode die 8 cijfers of langer is."</string>
<string name="needPuk" msgid="7321876090152422918">"Je simkaart is vergrendeld met de pukcode. Typ de pukcode om te ontgrendelen."</string>
<string name="needPuk2" msgid="7032612093451537186">"Voer de PUK2-code in om de simkaart te ontgrendelen."</string>
- <string name="enablePin" msgid="2543771964137091212">"Mislukt. Schakel SIM/RUIM-vergrendeling in."</string>
+ <string name="enablePin" msgid="2543771964137091212">"Mislukt. Zet SIM/RUIM-vergrendeling aan."</string>
<plurals name="pinpuk_attempts" formatted="false" msgid="1619867269012213584">
<item quantity="other">Je hebt nog <xliff:g id="NUMBER_1">%d</xliff:g> pogingen over voordat de simkaart wordt vergrendeld.</item>
<item quantity="one">Je hebt nog <xliff:g id="NUMBER_0">%d</xliff:g> poging over voordat de simkaart wordt vergrendeld.</item>
@@ -124,7 +124,7 @@
<string name="roamingTextSearching" msgid="5323235489657753486">"Service zoeken"</string>
<string name="wfcRegErrorTitle" msgid="3193072971584858020">"Bellen via wifi kan niet worden ingesteld"</string>
<string-array name="wfcOperatorErrorAlertMessages">
- <item msgid="468830943567116703">"Als je wilt bellen en berichten wilt verzenden via wifi, moet je eerst je provider vragen deze service in te stellen. Schakel bellen via wifi vervolgens opnieuw in via Instellingen. (Foutcode: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
+ <item msgid="468830943567116703">"Als je wilt bellen en berichten wilt sturen via wifi, moet je eerst je provider vragen deze service in te stellen. Zet bellen via wifi dan opnieuw aan via Instellingen. (Foutcode: <xliff:g id="CODE">%1$s</xliff:g>)"</item>
</string-array>
<string-array name="wfcOperatorErrorNotificationMessages">
<item msgid="4795145070505729156">"Probleem bij registratie van Bellen via wifi bij je provider: <xliff:g id="CODE">%1$s</xliff:g>"</item>
@@ -208,8 +208,8 @@
<string name="factory_reset_warning" msgid="6858705527798047809">"Je apparaat wordt gewist"</string>
<string name="factory_reset_message" msgid="2657049595153992213">"De beheer-app kan niet worden gebruikt. Je apparaat wordt nu gewist.\n\nNeem contact op met de beheerder van je organisatie als je vragen hebt."</string>
<string name="printing_disabled_by" msgid="3517499806528864633">"Afdrukken uitgezet door <xliff:g id="OWNER_APP">%s</xliff:g>."</string>
- <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Schakel je werkprofiel in"</string>
- <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Je persoonlijke apps zijn geblokkeerd totdat je je werkprofiel inschakelt"</string>
+ <string name="personal_apps_suspension_title" msgid="7561416677884286600">"Zet je werkprofiel aan"</string>
+ <string name="personal_apps_suspension_text" msgid="6115455688932935597">"Je persoonlijke apps zijn geblokkeerd totdat je je werkprofiel aanzet"</string>
<string name="personal_apps_suspension_soon_text" msgid="8123898693479590">"Apps die worden gebruikt voor persoonlijke doeleinden, worden geblokkeerd op <xliff:g id="DATE">%1$s</xliff:g> om <xliff:g id="TIME">%2$s</xliff:g>. Je IT-beheerder staat niet toe dat je werkprofiel langer dan <xliff:g id="NUMBER">%3$d</xliff:g> dagen uitstaat."</string>
<string name="personal_apps_suspended_turn_profile_on" msgid="2758012869627513689">"Aanzetten"</string>
<string name="me" msgid="6207584824693813140">"Ik"</string>
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Geen pincode, patroon of wachtwoord ingesteld"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Fout bij verificatie"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Schermvergrendeling gebruiken"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Geef de inloggegevens van je apparaat op om door te gaan"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Kan vingerafdruk niet verwerken. Probeer het opnieuw."</string>
@@ -604,7 +605,7 @@
<string name="fingerprint_error_unable_to_process" msgid="1148553603490048742">"Probeer het opnieuw."</string>
<string name="fingerprint_error_no_fingerprints" msgid="8671811719699072411">"Geen vingerafdrukken geregistreerd."</string>
<string name="fingerprint_error_hw_not_present" msgid="578914350967423382">"Dit apparaat heeft geen vingerafdruksensor."</string>
- <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor tijdelijk uitgeschakeld."</string>
+ <string name="fingerprint_error_security_update_required" msgid="7750187320640856433">"Sensor staat tijdelijk uit."</string>
<string name="fingerprint_name_template" msgid="8941662088160289778">"Vinger <xliff:g id="FINGERID">%d</xliff:g>"</string>
<string name="fingerprint_app_setting_name" msgid="4253767877095495844">"Vingerafdruk gebruiken"</string>
<string name="fingerprint_or_screen_lock_app_setting_name" msgid="3501743523487644907">"Vingerafdruk of schermvergrendeling gebruiken"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Ontgrendelen via gezichtsherkenning"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Je gezicht opnieuw registreren"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Registreer je gezicht opnieuw om de herkenning te verbeteren"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Stel ontgrendelen via gezichtsherkenning in"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Ontgrendel je telefoon door ernaar te kijken"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Stel meer manieren in om te ontgrendelen"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Tik om een vingerafdruk toe te voegen"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Geen accurate gegevens. Probeer het nog eens."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Overbelicht. Probeer een minder felle belichting."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Te donker. Probeer een fellere verlichting."</string>
@@ -660,11 +657,12 @@
<string name="face_error_unable_to_process" msgid="5723292697366130070">"Kan gezicht niet verifiëren. Probeer het nog eens."</string>
<string name="face_error_not_enrolled" msgid="7369928733504691611">"Je hebt ontgrendelen via gezichtsherkenning niet ingesteld."</string>
<string name="face_error_hw_not_present" msgid="1070600921591729944">"Ontgrendelen via gezichtsherkenning wordt niet ondersteund op dit apparaat."</string>
- <string name="face_error_security_update_required" msgid="5076017208528750161">"Sensor tijdelijk uitgeschakeld."</string>
+ <string name="face_error_security_update_required" msgid="5076017208528750161">"Sensor staat tijdelijk uit."</string>
<string name="face_name_template" msgid="3877037340223318119">"Gezicht <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Ontgrendelen via gezichtsherkenning gebruiken"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Gezicht of schermgrendeling gebruiken"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Gebruik ontgrendelen via gezichtsherkenning om door te gaan"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Gebruik je gezicht of schermvergrendeling om door te gaan"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -672,7 +670,7 @@
<string name="permlab_readSyncSettings" msgid="6250532864893156277">"synchronisatie-instellingen lezen"</string>
<string name="permdesc_readSyncSettings" msgid="1325658466358779298">"Hiermee kan de app de synchronisatie-instellingen voor een account lezen. Dit kan bijvoorbeeld bepalen of de app Personen wordt gesynchroniseerd met een account."</string>
<string name="permlab_writeSyncSettings" msgid="6583154300780427399">"synchronisatie aan- of uitzetten"</string>
- <string name="permdesc_writeSyncSettings" msgid="6029151549667182687">"Hiermee kan een app de synchronisatie-instellingen aanpassen voor een account. Deze toestemming kan bijvoorbeeld worden gebruikt om synchronisatie van de app Personen in te schakelen voor een account."</string>
+ <string name="permdesc_writeSyncSettings" msgid="6029151549667182687">"Hiermee kan een app de synchronisatie-instellingen aanpassen voor een account. Deze toestemming kan bijvoorbeeld worden gebruikt om de synchronisatie van de app Personen aan te zetten voor een account."</string>
<string name="permlab_readSyncStats" msgid="3747407238320105332">"synchronisatiestatistieken lezen"</string>
<string name="permdesc_readSyncStats" msgid="3867809926567379434">"Hiermee kan een app de synchronisatiestatistieken voor een account lezen, inclusief de geschiedenis van synchronisatie-activiteiten en hoeveel gegevens zijn gesynchroniseerd."</string>
<string name="permlab_sdcardRead" msgid="5791467020950064920">"de content van je gedeelde opslag lezen"</string>
@@ -903,7 +901,7 @@
<string name="lockscreen_missing_sim_instructions" msgid="8473601862688263903">"Plaats een simkaart."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3664999892038416334">"De simkaart ontbreekt of kan niet worden gelezen. Plaats een simkaart."</string>
<string name="lockscreen_permanent_disabled_sim_message_short" msgid="3812893366715730539">"Onbruikbare simkaart."</string>
- <string name="lockscreen_permanent_disabled_sim_instructions" msgid="4358929052509450807">"Je simkaart is permanent uitgeschakeld.\n Neem contact op met je mobiele serviceprovider voor een nieuwe simkaart."</string>
+ <string name="lockscreen_permanent_disabled_sim_instructions" msgid="4358929052509450807">"Je simkaart is definitief uitgezet.\n Neem contact op met je mobiele serviceprovider voor een nieuwe simkaart."</string>
<string name="lockscreen_transport_prev_description" msgid="2879469521751181478">"Vorig nummer"</string>
<string name="lockscreen_transport_next_description" msgid="2931509904881099919">"Volgend nummer"</string>
<string name="lockscreen_transport_pause_description" msgid="6705284702135372494">"Onderbreken"</string>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Gekopieerd"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> geplakt vanuit <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> geplakt vanaf het klembord"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> heeft door jou gekopieerde tekst geplakt"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> heeft een door jou gekopieerde afbeelding geplakt"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> heeft door jou gekopieerde content geplakt"</string>
<string name="more_item_label" msgid="7419249600215749115">"Meer"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta +"</string>
@@ -1377,15 +1372,15 @@
<string name="usb_unsupported_audio_accessory_title" msgid="2335775548086533065">"Analoog audioaccessoire gedetecteerd"</string>
<string name="usb_unsupported_audio_accessory_message" msgid="1300168007129796621">"Het aangesloten apparaat werkt niet met deze telefoon. Tik voor meer informatie."</string>
<string name="adb_active_notification_title" msgid="408390247354560331">"USB-foutopsporing verbonden"</string>
- <string name="adb_active_notification_message" msgid="5617264033476778211">"Tik om USB-foutopsporing uit te schakelen."</string>
- <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Selecteer deze optie om USB-foutopsporing uit te schakelen."</string>
+ <string name="adb_active_notification_message" msgid="5617264033476778211">"Tik om USB-foutopsporing uit te zetten."</string>
+ <string name="adb_active_notification_message" product="tv" msgid="6624498401272780855">"Selecteer deze optie om USB-foutopsporing uit te zetten."</string>
<string name="adbwifi_active_notification_title" msgid="6147343659168302473">"Draadloze foutopsporing verbonden"</string>
- <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Tik om draadloze foutopsporing uit te schakelen"</string>
- <string name="adbwifi_active_notification_message" product="tv" msgid="8633421848366915478">"Selecteer deze optie om draadloze foutopsporing uit te schakelen."</string>
+ <string name="adbwifi_active_notification_message" msgid="930987922852867972">"Tik om draadloze foutopsporing uit te zetten"</string>
+ <string name="adbwifi_active_notification_message" product="tv" msgid="8633421848366915478">"Selecteer deze optie om draadloze foutopsporing uit te zetten."</string>
<string name="test_harness_mode_notification_title" msgid="2282785860014142511">"Test harness-modus staat aan"</string>
- <string name="test_harness_mode_notification_message" msgid="3039123743127958420">"Reset de fabrieksinstellingen om de test harness-modus uit te schakelen."</string>
+ <string name="test_harness_mode_notification_message" msgid="3039123743127958420">"Reset de fabrieksinstellingen om de test harness-modus uit te zetten."</string>
<string name="console_running_notification_title" msgid="6087888939261635904">"Seriële console staat aan"</string>
- <string name="console_running_notification_message" msgid="7892751888125174039">"Dit is van invloed op de prestaties. Controleer de bootloader om dit uit te schakelen."</string>
+ <string name="console_running_notification_message" msgid="7892751888125174039">"Dit is van invloed op de prestaties. Controleer de bootloader om dit uit te zetten."</string>
<string name="usb_contaminant_detected_title" msgid="4359048603069159678">"Vloeistof of vuil in USB-poort"</string>
<string name="usb_contaminant_detected_message" msgid="7346100585390795743">"USB-poort is automatisch uitgezet. Tik voor meer informatie."</string>
<string name="usb_contaminant_not_detected_title" msgid="2651167729563264053">"USB-poort kan worden gebruikt"</string>
@@ -1406,7 +1401,7 @@
<string name="alert_windows_notification_channel_group_name" msgid="6063891141815714246">"Weergeven vóór andere apps"</string>
<string name="alert_windows_notification_channel_name" msgid="3437528564303192620">"<xliff:g id="NAME">%s</xliff:g> wordt weergegeven over andere apps"</string>
<string name="alert_windows_notification_title" msgid="6331662751095228536">"<xliff:g id="NAME">%s</xliff:g> wordt weergegeven vóór andere apps"</string>
- <string name="alert_windows_notification_message" msgid="6538171456970725333">"Als je niet wilt dat <xliff:g id="NAME">%s</xliff:g> deze functie gebruikt, tik je om de instellingen te openen en schakel je de functie uit."</string>
+ <string name="alert_windows_notification_message" msgid="6538171456970725333">"Als je niet wilt dat <xliff:g id="NAME">%s</xliff:g> deze functie gebruikt, tik je om de instellingen te openen en zet je de functie uit."</string>
<string name="alert_windows_notification_turn_off_action" msgid="7805857234839123780">"Uitzetten"</string>
<string name="ext_media_checking_notification_title" msgid="8299199995416510094">"<xliff:g id="NAME">%s</xliff:g> controleren…"</string>
<string name="ext_media_checking_notification_message" msgid="2231566971425375542">"Huidige content controleren"</string>
@@ -1658,7 +1653,7 @@
<string name="kg_sim_pin_instructions" msgid="6479401489471690359">"Geef de pincode van de simkaart op"</string>
<string name="kg_pin_instructions" msgid="7355933174673539021">"Pincode opgeven"</string>
<string name="kg_password_instructions" msgid="7179782578809398050">"Wachtwoord invoeren"</string>
- <string name="kg_puk_enter_puk_hint" msgid="6696187482616360994">"De simkaart is nu uitgeschakeld. Geef de pukcode op om door te gaan. Neem contact op met de provider voor informatie."</string>
+ <string name="kg_puk_enter_puk_hint" msgid="6696187482616360994">"De simkaart is nu uitgezet. Geef de pukcode op om door te gaan. Neem contact op met de provider voor informatie."</string>
<string name="kg_puk_enter_pin_hint" msgid="8190982314659429770">"Gewenste pincode opgeven"</string>
<string name="kg_enter_confirm_pin_hint" msgid="6372557107414074580">"Gewenste pincode bevestigen"</string>
<string name="kg_sim_unlock_progress_dialog_message" msgid="8871937892678885545">"Simkaart ontgrendelen..."</string>
@@ -1693,7 +1688,7 @@
<string name="accessibility_shortcut_warning_dialog_title" msgid="4017995837692622933">"Snelkoppeling toegankelijkheid gebruiken?"</string>
<string name="accessibility_shortcut_toogle_warning" msgid="4161716521310929544">"Als de snelkoppeling aanstaat, houd je beide volumeknoppen 3 seconden ingedrukt om een toegankelijkheidsfunctie te starten."</string>
<string name="accessibility_shortcut_multiple_service_warning_title" msgid="3135860819356676426">"Snelkoppeling voor toegankelijkheidsfuncties aanzetten?"</string>
- <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"Als je beide volumetoetsen een paar seconden ingedrukt houdt, schakel je de toegankelijkheidsfuncties in. Hierdoor kan de manier veranderen waarop je apparaat werkt.\n\nHuidige functies:\n<xliff:g id="SERVICE">%1$s</xliff:g>\nJe kunt de geselecteerde functies wijzigen via Instellingen &gt; Toegankelijkheid."</string>
+ <string name="accessibility_shortcut_multiple_service_warning" msgid="3740723309483706911">"Als je beide volumetoetsen een paar seconden ingedrukt houdt, zet je de toegankelijkheidsfuncties aan. Hierdoor kan de manier veranderen waarop je apparaat werkt.\n\nHuidige functies:\n<xliff:g id="SERVICE">%1$s</xliff:g>\nJe kunt de geselecteerde functies wijzigen via Instellingen &gt; Toegankelijkheid."</string>
<string name="accessibility_shortcut_multiple_service_list" msgid="6935581470716541531">" • <xliff:g id="SERVICE">%1$s</xliff:g>\n"</string>
<string name="accessibility_shortcut_single_service_warning_title" msgid="1909518473488345266">"Snelkoppeling voor <xliff:g id="SERVICE">%1$s</xliff:g> aanzetten?"</string>
<string name="accessibility_shortcut_single_service_warning" msgid="6363127705112844257">"Als je beide volumetoetsen een paar seconden ingedrukt houdt, wordt de toegankelijkheidsfunctie <xliff:g id="SERVICE">%1$s</xliff:g> aangezet. Hierdoor kan de manier veranderen waarop je apparaat werkt.\n\nJe kunt deze sneltoets op een andere functie instellen via Instellingen &gt; Toegankelijkheid."</string>
@@ -1702,7 +1697,7 @@
<string name="accessibility_shortcut_menu_item_status_on" msgid="6608392117189732543">"AAN"</string>
<string name="accessibility_shortcut_menu_item_status_off" msgid="5531598275559472393">"UIT"</string>
<string name="accessibility_enable_service_title" msgid="3931558336268541484">"Toestaan dat <xliff:g id="SERVICE">%1$s</xliff:g> volledige controle over je apparaat heeft?"</string>
- <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Als je <xliff:g id="SERVICE">%1$s</xliff:g> inschakelt, maakt je apparaat geen gebruik van schermvergrendeling om de gegevensversleuteling te verbeteren."</string>
+ <string name="accessibility_enable_service_encryption_warning" msgid="8603532708618236909">"Als je <xliff:g id="SERVICE">%1$s</xliff:g> aanzet, gebruikt je apparaat geen schermvergrendeling om de gegevensversleuteling te verbeteren."</string>
<string name="accessibility_service_warning_description" msgid="291674995220940133">"Volledige controle is gepast voor apps die je helpen met toegankelijkheid, maar voor de meeste apps is het ongepast."</string>
<string name="accessibility_service_screen_control_title" msgid="190017412626919776">"Scherm bekijken en bedienen"</string>
<string name="accessibility_service_screen_control_description" msgid="6946315917771791525">"De functie kan alle content op het scherm lezen en content via andere apps weergeven."</string>
@@ -1827,7 +1822,7 @@
<string name="reason_unknown" msgid="5599739807581133337">"onbekend"</string>
<string name="reason_service_unavailable" msgid="5288405248063804713">"Afdrukservice staat niet aan"</string>
<string name="print_service_installed_title" msgid="6134880817336942482">"<xliff:g id="NAME">%s</xliff:g>-service geïnstalleerd"</string>
- <string name="print_service_installed_message" msgid="7005672469916968131">"Tik om in te schakelen"</string>
+ <string name="print_service_installed_message" msgid="7005672469916968131">"Tik om aan te zetten"</string>
<string name="restr_pin_enter_admin_pin" msgid="1199419462726962697">"Beheerderspincode invoeren"</string>
<string name="restr_pin_enter_pin" msgid="373139384161304555">"Geef de pincode op"</string>
<string name="restr_pin_incorrect" msgid="3861383632940852496">"Onjuist"</string>
@@ -1864,7 +1859,7 @@
<string name="package_deleted_device_owner" msgid="2292335928930293023">"Verwijderd door je beheerder"</string>
<string name="confirm_battery_saver" msgid="5247976246208245754">"OK"</string>
<string name="battery_saver_description_with_learn_more" msgid="4424488535318105801">"Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n• Donkere thema aanzetten\n• Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken\n\n"<annotation id="url">"Meer informatie"</annotation></string>
- <string name="battery_saver_description" msgid="6794188153647295212">"Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n• Donker thema aanzetten.\n• Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken."</string>
+ <string name="battery_saver_description" msgid="6794188153647295212">"Batterijbesparing doet het volgende om de batterijduur te verlengen:\n\n• Het donkere thema aanzetten.\n• Achtergrondactiviteit, bepaalde visuele effecten en andere functies (zoals \'Hey Google\') uitzetten of beperken."</string>
<string name="data_saver_description" msgid="4995164271550590517">"Databesparing beperkt het datagebruik door te voorkomen dat sommige apps gegevens sturen of ontvangen op de achtergrond. De apps die je open hebt, kunnen nog steeds data verbruiken, maar doen dit minder vaak. Afbeeldingen worden dan bijvoorbeeld niet weergegeven totdat je erop tikt."</string>
<string name="data_saver_enable_title" msgid="7080620065745260137">"Databesparing aanzetten?"</string>
<string name="data_saver_enable_button" msgid="4399405762586419726">"Aanzetten"</string>
@@ -1903,8 +1898,8 @@
<string name="zen_mode_until_next_day" msgid="1403042784161725038">"Tot <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_until" msgid="2250286190237669079">"Tot <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_alarm" msgid="7046911727540499275">"Tot <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> (volgende wekker)"</string>
- <string name="zen_mode_forever" msgid="740585666364912448">"Totdat je uitschakelt"</string>
- <string name="zen_mode_forever_dnd" msgid="3423201955704180067">"Totdat u \'Niet storen\' uitschakelt"</string>
+ <string name="zen_mode_forever" msgid="740585666364912448">"Totdat je uitzet"</string>
+ <string name="zen_mode_forever_dnd" msgid="3423201955704180067">"Totdat je Niet storen uitzet"</string>
<string name="zen_mode_rule_name_combination" msgid="7174598364351313725">"<xliff:g id="FIRST">%1$s</xliff:g>/<xliff:g id="REST">%2$s</xliff:g>"</string>
<string name="toolbar_collapse_description" msgid="8009920446193610996">"Samenvouwen"</string>
<string name="zen_mode_feature_name" msgid="3785547207263754500">"Niet storen"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Werk"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Persoonlijke weergave"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Werkweergave"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Geblokkeerd door je IT-beheerder"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Deze content kan niet worden gedeeld met werk-apps"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Deze content kan niet worden geopend met werk-apps"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Deze content kan niet worden gedeeld met persoonlijke apps"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Deze content kan niet worden geopend met persoonlijke apps"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Werkprofiel is onderbroken"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Tik om aan te zetten"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Geen werk-apps"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Geen persoonlijke apps"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Openen in <xliff:g id="APP">%s</xliff:g> in persoonlijk profiel?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Openen in <xliff:g id="APP">%s</xliff:g> in werkprofiel?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Persoonlijke browser gebruiken"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Werkbrowser gebruiken"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Ontgrendelingspincode voor SIM-netwerk"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Ontgrendelingspincode voor subset van SIM-netwerk"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Ontgrendelingspincode voor zakelijke simkaart"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nieuwe vergrotingsinstellingen"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Je kunt nu een deel van je scherm vergroten"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Aanzetten in Instellingen"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Sluiten"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"&lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; heeft toegang tot de microfoon van je apparaat nodig om door te gaan."</string>
diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml
index e392f64233c4..44831e304227 100644
--- a/core/res/res/values-or/strings.xml
+++ b/core/res/res/values-or/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"କୌଣସି ପିନ୍, ପେଟେର୍ନ ବା ପାସ୍‍ୱର୍ଡ ସେଟ୍ ନାହିଁ"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"ପ୍ରାମାଣିକରଣ କରିବା ସମୟରେ ତ୍ରୁଟି"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ସ୍କ୍ରିନ୍ ଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ଡିଭାଇସର କ୍ରେଡେନ୍ସିଆଲ୍ ଲେଖନ୍ତୁ"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ଟିପଚିହ୍ନ ପ୍ରୋସେସ୍‍ କରାଯାଇପାରିଲା ନାହିଁ। ଦୟାକରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"ଫେସ୍ ଅନ୍‌ଲକ୍"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"ଆପଣଙ୍କର ମୁହଁ ପୁଣି-ଏନ୍‍ରୋଲ୍ କରନ୍ତୁ"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"ଚିହ୍ନଟକରଣକୁ ଉନ୍ନତ କରିବା ପାଇଁ, ଦୟାକରି ଆପଣଙ୍କର ମୁହଁ ପୁଣି-ଏନ୍‍ରୋଲ୍ କରନ୍ତୁ।"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"ଫେସ୍ ଅନଲକ୍ ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"ଫୋନକୁ ଦେଖି ଏହାକୁ ଅନଲକ୍ କରନ୍ତୁ"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"ଅନଲକ୍ କରିବା ପାଇଁ ଆହୁରି ଅଧିକ ଉପାୟ ସେଟ୍ ଅପ୍ କରନ୍ତୁ"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"ଏକ ଟିପଚିହ୍ନ ଯୋଗ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"ମୁହଁର ଡାଟା କ୍ୟାପଚର୍ ହେଲାନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"ଅତ୍ୟଧିକ ଉଜ୍ଵଳ। କମ୍ ଉଜ୍ବଳକରଣରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"ଅତ୍ୟଧିକ ଅନ୍ଧକାର। ଉଜ୍ବଳ ଲାଇଟ୍ ବ୍ୟବହାର କରନ୍ତୁ।"</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"<xliff:g id="FACEID">%d</xliff:g>ଙ୍କ ଫେସ୍‍"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"ଫେସ୍ ଅନଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"ଫେସ୍ ବା ସ୍କ୍ରିନ୍ ଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"ଜାରି ରଖିବାକୁ ଫେସ୍ ଅନଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ଜାରି ରଖିବାକୁ ଆପଣଙ୍କ ଚେହେରା କିମ୍ବା ସ୍କ୍ରିନ୍ ଲକ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"କପି କରାଗଲା"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>ରୁ ପେଷ୍ଟ କରିଛି"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> କ୍ଲିପବୋର୍ଡରୁ ପେଷ୍ଟ କରିଛି"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"ଆପଣ କପି କରିଥିବା ଟେକ୍ସଟକୁ <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ପେଷ୍ଟ କରିଛି"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"ଆପଣ କପି କରିଥିବା ଏକ ଛବିକୁ <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ପେଷ୍ଟ କରିଛି"</string>
+ <string name="pasted_content" msgid="646276353060777131">"ଆପଣ କପି କରିଥିବା ବିଷୟବସ୍ତୁକୁ <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ପେଷ୍ଟ କରିଛି"</string>
<string name="more_item_label" msgid="7419249600215749115">"ଅଧିକ"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"ମେନୁ"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"ୱାର୍କ"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"ବ୍ୟକ୍ତିଗତ ଭ୍ୟୁ"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"କାର୍ଯ୍ୟସ୍ଥଳୀ ସମ୍ବନ୍ଧିତ ଭ୍ୟୁ"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"ଆପଣଙ୍କ IT ଆଡମିନଙ୍କ ଦ୍ୱାରା ବ୍ଲକ୍ କରାଯାଇଛି"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"ଏହି ବିଷୟବସ୍ତୁ ୱାର୍କ ଆପଗୁଡ଼ିକରେ ସେୟାର୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"ଏହି ବିଷୟବସ୍ତୁ ୱାର୍କ ଆପଗୁଡ଼ିକରେ ଖୋଲାଯାଇପାରିବ ନାହିଁ"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"ଏହି ବିଷୟବସ୍ତୁ ବ୍ୟକ୍ତିଗତ ଆପଗୁଡ଼ିକରେ ସେୟାର୍ କରାଯାଇପାରିବ ନାହିଁ"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"ଏହି ବିଷୟବସ୍ତୁ ବ୍ୟକ୍ତିଗତ ଆପଗୁଡ଼ିକରେ ଖୋଲାଯାଇପାରିବ ନାହିଁ"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"ୱାର୍କ ପ୍ରୋଫାଇଲକୁ ବିରତ କରାଯାଇଛି"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"ଚାଲୁ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"କୌଣସି ୱାର୍କ ଆପ୍ ନାହିଁ"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"କୌଣସି ବ୍ୟକ୍ତିଗତ ଆପ୍ ନାହିଁ"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲରେ <xliff:g id="APP">%s</xliff:g>ରେ ଖୋଲିବେ?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"ୱାର୍କ ପ୍ରୋଫାଇଲରେ <xliff:g id="APP">%s</xliff:g>ରେ ଖୋଲିବେ?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ବ୍ୟକ୍ତିଗତ ବ୍ରାଉଜର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ୱାର୍କ ବ୍ରାଉଜର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ନେଟୱାର୍କ ଅନଲକ୍ PIN"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM ନେଟୱାର୍କର ସବସେଟ୍ ଅନଲକ୍ PIN"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM କର୍ପୋରେଟ୍ ଅନଲକ୍ PIN"</string>
@@ -2278,8 +2261,7 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"ନୂଆ ମ୍ୟାଗ୍ନିଫିକେସନ୍ ସେଟିଂସ୍"</string>
<!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
<skip />
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"ସେଟିଂସରେ ଚାଲୁ କରନ୍ତୁ"</string>
diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml
index 5daf8c88e073..918753a05105 100644
--- a/core/res/res/values-pa/strings.xml
+++ b/core/res/res/values-pa/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ਕੋਈ ਪਿੰਨ, ਪੈਟਰਨ ਜਾਂ ਪਾਸਵਰਡ ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"ਗੜਬੜ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣੇ ਡੀਵਾਈਸ ਦੇ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਨੂੰ ਦਾਖਲ ਕਰੋ"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ਫਿੰਗਰਪ੍ਰਿੰਟ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਨਹੀਂ ਹੋ ਸਕੀ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"ਚਿਹਰਾ <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"ਚਿਹਰਾ ਅਣਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"ਚਿਹਰਾ ਜਾਂ ਸਕ੍ਰੀਨ ਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਚਿਹਰਾ ਅਣਲਾਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ਜਾਰੀ ਰੱਖਣ ਲਈ ਆਪਣਾ ਚਿਹਰਾ ਜਾਂ ਸਕ੍ਰੀਨ ਲਾਕ ਵਰਤੋ"</string>
<string-array name="face_error_vendor">
</string-array>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index c07b40fcd434..60f395d2d8e5 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -579,7 +579,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nie ustawiono kodu PIN, wzoru ani hasła"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Podczas uwierzytelniania wystąpił błąd"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Używaj blokady ekranu"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Podaj dane logowania do urządzenia, aby kontynuować"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Nie udało się przetworzyć odcisku palca. Spróbuj ponownie."</string>
@@ -670,7 +671,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Twarz <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Używaj rozpoznawania twarzy"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Używaj rozpoznawania twarzy lub blokady ekranu"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Użyj rozpoznawania twarzy, aby kontynuować"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Aby kontynuować, użyj rozpoznawania twarzy lub blokady ekranu"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2348,8 +2350,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Możesz teraz powiększyć część ekranu"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Włącz w Ustawieniach"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Odrzuć"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Aby kontynuować, musisz przyznać aplikacji „<xliff:g id="APP">%s</xliff:g>” dostęp do mikrofonu urządzenia."</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index c286e23f9fb2..a65056de43b2 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nenhum PIN, padrão ou senha configurado"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Erro na autenticação"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueio de tela"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Insira as credenciais do dispositivo para continuar"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Não foi possível processar a impressão digital. Tente novamente."</string>
@@ -660,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Rosto <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Usar desbloqueio facial"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Usar reconhecimento facial ou bloqueio de tela"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Use o desbloqueio facial para continuar"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Use seu rosto ou o bloqueio de tela para continuar"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2260,8 +2262,7 @@
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<string name="window_magnification_prompt_title" msgid="2876703640772778215">"Novas configurações de ampliação"</string>
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Agora você pode ampliar parte da tela"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Ativar nas Configurações"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Dispensar"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Para continuar, o app &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; precisa acessar o microfone do dispositivo."</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index 80b0f0360b1c..f92481c25e88 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nenhum PIN, padrão ou palavra-passe definidos."</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Erro ao autenticar."</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Utilizar o bloqueio de ecrã"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Introduza a credencial do dispositivo para continuar."</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Não foi possível processar a impressão digital. Tente novamente."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Desbloqueio facial"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Volte a inscrever o seu rosto"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Para melhorar o reconhecimento, volte a inscrever o seu rosto."</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Configure o desbloqueio facial"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Desbloqueie o telemóvel ao olhar para ele"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Configure mais formas de desbloquear"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Toque para adicionar uma impressão digital"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Imp. capt. dados rosto precisos. Tente novamente."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Demasiado clara. Experimente uma luz mais suave."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Demasiado escura. Experimente local com mais luz."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Rosto <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Utilizar o desbloqueio facial"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Utilizar o bloqueio através do rosto ou de ecrã"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Utilize o desbloqueio facial para continuar."</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Utilize o rosto ou o bloqueio de ecrã para continuar"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Copiado"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"A app <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> colou da app <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"A app <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> colou da área de transferência"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"A app <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> colou o texto que copiou"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"A app <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> colou uma imagem que copiou"</string>
+ <string name="pasted_content" msgid="646276353060777131">"A app <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> colou o conteúdo que copiou"</string>
<string name="more_item_label" msgid="7419249600215749115">"Mais"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta +"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Trabalho"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Vista pessoal"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Vista de trabalho"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Bloqueado pelo administrador de TI"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Não é possível partilhar este conteúdo com apps de trabalho"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Não é possível abrir este conteúdo com apps de trabalho"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Não é possível partilhar este conteúdo com apps pessoais"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Não é possível abrir este conteúdo com apps pessoais"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Perfil de trabalho em pausa"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Tocar para ativar"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Sem apps de trabalho"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Sem apps pessoais"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Pretende abrir no perfil pessoal da app <xliff:g id="APP">%s</xliff:g>?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Abrir no perfil de trabalho da app <xliff:g id="APP">%s</xliff:g>?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Utilizar navegador pessoal"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Utilizar navegador de trabalho"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para desbloqueio de rede do cartão SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN para desbloqueio do subconjunto da rede do cartão SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN para desbloqueio empresarial do cartão SIM"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Novas definições de ampliação"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Já pode ampliar o ecrã parcialmente"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Ativar nas Definições"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Ignorar"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Para continuar, a app &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; precisa de acesso ao microfone do dispositivo."</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index c286e23f9fb2..a65056de43b2 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nenhum PIN, padrão ou senha configurado"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Erro na autenticação"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Usar bloqueio de tela"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Insira as credenciais do dispositivo para continuar"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Não foi possível processar a impressão digital. Tente novamente."</string>
@@ -660,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Rosto <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Usar desbloqueio facial"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Usar reconhecimento facial ou bloqueio de tela"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Use o desbloqueio facial para continuar"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Use seu rosto ou o bloqueio de tela para continuar"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2260,8 +2262,7 @@
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<string name="window_magnification_prompt_title" msgid="2876703640772778215">"Novas configurações de ampliação"</string>
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Agora você pode ampliar parte da tela"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Ativar nas Configurações"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Dispensar"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Para continuar, o app &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; precisa acessar o microfone do dispositivo."</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index a3435a3f456c..0f4005abb478 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -576,7 +576,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nu este setat niciun cod PIN, model sau parolă"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Eroare la autentificare"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Folosiți blocarea ecranului"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Introduceți datele de conectare ale dispozitivului pentru a continua"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Amprenta nu a putut fi procesată. Încercați din nou."</string>
@@ -667,7 +668,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Chip <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Folosiți deblocarea facială"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Folosiți blocarea ecranului sau blocarea facială"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Folosiți deblocarea facială pentru a continua"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Folosiți-vă chipul sau blocarea ecranului pentru a continua"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2314,8 +2316,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Acum puteți mări o parte a ecranului"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Activați din Setări"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Respingeți"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Pentru a continua, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; necesită acces la microfonul dispozitivului."</string>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 58e86a76463e..d015f3089787 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -579,7 +579,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Укажите PIN-код, пароль или графический ключ"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Ошибка аутентификации."</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Использовать блокировку экрана"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Чтобы продолжить, введите учетные данные устройства."</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Не удалось распознать отпечаток. Повторите попытку."</string>
@@ -670,7 +671,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Лицо <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Использовать фейсконтроль"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Использовать фейсконтроль или блокировку экрана"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Чтобы продолжить, используйте фейсконтроль."</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Чтобы продолжить, посмотрите на экран или используйте данные для разблокировки."</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2348,8 +2350,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Теперь можно увеличивать часть экрана."</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Включить в настройках"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Закрыть"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Чтобы продолжить, предоставьте приложению &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; доступ к микрофону устройства."</string>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
index 97da7bd6c658..0f54b2020a11 100644
--- a/core/res/res/values-si/strings.xml
+++ b/core/res/res/values-si/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"රහස් අංක, රටා, හෝ මුරපද කිසිවක් සකසා නැත"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"සත්‍යාපනය කිරීමේ දෝෂයකි"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"තිර අගුල භාවිත කරන්න"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"ඉදිරියට යාමට ඔබගේ උපාංග අක්තපත්‍ර ඇතුළු කරන්න"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ඇඟිලි සලකුණ පිරිසැකසීමට නොහැකි විය. කරුණාකර නැවත උත්සාහ කරන්න."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"මුහුණු අඟුලු ඇරීම"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"ඔබේ මුහුණ යළි ලියාපදිංචි කරන්න"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"හඳුනා ගැනීම වැඩිදියුණු කිරීමට, ඔබේ මුහුණ යළි-ලියාපදිංචි කරන්න"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"මුහුණු අඟුලු හැරීම පිහිටුවන්න"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"ඔබගේ දුරකථනය දෙස බැලීමෙන් එහි අගුලු හරින්න"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"අගුලු හැරීමට තවත් ක්‍රම සකසන්න"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"ඇඟිලි සලකුණක් එක් කිරීමට තට්ටු කරන්න"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"නිරවද්‍ය මුහුණු දත්ත ගත නොහැකි විය. නැවත උත්සාහ කරන්න."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"දීප්තිය වැඩියි. තවත් මඳ ආලෝකය උත්සාහ කරන්න."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"ඉතා අඳුරුයි. තවත් දීප්තිමත් ආලෝකය උත්සාහ කරන්න."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"මුහුණු <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"මුහුණු අගුලු හැරීම භාවිත කරන්න"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"මුහුණු අගුලු හැරීම හෝ තිර අගුල භාවිත කරන්න"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"ඉදිරියට යාමට මුහුණු අගුලු හැරීම භාවිත කරන්න"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ඉදිරියට යාමට ඔබගේ මුහුණු හෝ තිර අගුල භාවිත කරන්න"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"පිටපත් කළා"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> වෙතින් අලවන ලදි"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> පසුරු පුවරුව වෙතින් අලවන ලදි"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ඔබ පිටපත් කළ පෙළ ඇලවීය"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ඔබ පිටපත් කළ රූපයක් ඇලවීය"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ඔබ පිටපත් කළ අන්තර්ගතය ඇලවීය"</string>
<string name="more_item_label" msgid="7419249600215749115">"තව"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"මෙනුව+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"කාර්යාල"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"පෞද්ගලික දසුන"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"කාර්යාල දසුන"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"ඔබගේ IT පරිපාලක විසින් අවහිර කර ඇත"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"මෙම අන්තර්ගතය කාර්යාල යෙදුම් සමඟ බෙදා ගත නොහැකිය"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"මෙම අන්තර්ගතය කාර්යාල යෙදුම් සමඟ විවෘත කළ නොහැකිය"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"මෙම අන්තර්ගතය පුද්ගලික යෙදුම් සමඟ බෙදා ගත නොහැකිය"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"මෙම අන්තර්ගතය පුද්ගලික යෙදුම් සමඟ විවෘත කළ නොහැකිය"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"කාර්යාල පැතිකඩ විරාම කර ඇත"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"ක්‍රියාත්මක කිරීමට තට්ටු කරන්න"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"කාර්යාල යෙදුම් නැත"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"පුද්ගලික යෙදුම් නැත"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"<xliff:g id="APP">%s</xliff:g> පුද්ගලික පැතිකඩ තුළ විවෘත කරන්නද?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"<xliff:g id="APP">%s</xliff:g> කාර්යාල පැතිකඩ තුළ විවෘත කරන්නද?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"පුද්ගලික බ්‍රව්සරය භාවිත කරන්න"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"කාර්යාල බ්‍රව්සරය භාවිත කරන්න"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ජාල අගුලු හැරීමේ PIN"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM ජාල උප කට්ටල අගුලු හැරීමේ PIN"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM සමාගම් අගුලු හැරීමේ PIN"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"නව විශාලන සැකසීම්"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"ඔබට දැන් ඔබගේ තිරයේ කොටසක් විශාලනය කළ හැකිය"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"සැකසීම් තුළ ක්‍රියාත්මක කරන්න"</string>
<string name="dismiss_action" msgid="1728820550388704784">"ඉවත ලන්න"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"දිගටම කර ගෙන යාමට, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; හට ඔබගේ උපාංගයෙහි මයික්‍රෆෝනයට ප්‍රවේශය අවශ්‍යයි."</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index ca71551ad65b..af1566e90ec9 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -579,7 +579,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nie je nastavený PIN, vzor ani heslo"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Chyba overenia"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Použiť zámku obrazovky"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Ak chcete pokračovať, zadajte prihlasovacie údaje zariadenia"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Odtlačok prsta sa nepodarilo spracovať. Skúste to znova."</string>
@@ -626,14 +627,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Odomknutie tvárou"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Znova zaregistrujte svoju tvár"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Znova zaregistrujte svoju tvár, aby sa zlepšilo rozpoznávanie"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Nastavte odomknutie tvárou"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Odomykajte telefón tak, že sa naň pozriete"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Nastavte viac spôsobov odomknutia"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Klepnutím pridajte odtlačok prsta"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Nepodarilo sa nasnímať presné údaje o tvári. Skúste to znova."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Príliš veľa svetla. Skúste jemnejšie osvetlenie."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Príliš veľká tma. Skúste lepšie osvetlenie."</string>
@@ -670,7 +667,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Tvár <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Použiť odomknutie tvárou"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Použiť tvár alebo zámku obrazovky"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Ak chcete pokračovať, použite odomknutie tvárou"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Pokračujte použitím tváre alebo zámky obrazovky"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1037,12 +1035,9 @@
<string name="copied" msgid="4675902854553014676">"Skopírované"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Aplikácia <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> prilepila údaje z aplikácie <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Aplikácia <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> prilepila údaje zo schránky"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"Aplikácia <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> prilepila text, ktorý ste skopírovali"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"Aplik. <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> prilepila obrázok, ktorý ste skopírovali"</string>
+ <string name="pasted_content" msgid="646276353060777131">"Aplikácia <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> prilepila obsah, ktorý ste skopírovali"</string>
<string name="more_item_label" msgid="7419249600215749115">"Viac"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2209,31 +2204,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Práca"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Osobné zobrazenie"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Pracovné zobrazenie"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blokované vaším správcom IT"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Tento obsah sa nedá zdieľať pomocou pracovných aplikácií"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Tento obsah sa nedá otvoriť pomocou pracovných aplikácií"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Tento obsah sa nedá zdieľať pomocou osobných aplikácií"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Tento obsah sa nedá otvoriť pomocou osobných aplikácií"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Pracovný profil je pozastavený"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Zapnúť klepnutím"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Žiadne pracovné aplikácie"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Žiadne osobné aplikácie"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Chcete otvoriť <xliff:g id="APP">%s</xliff:g> v osobnom profile?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Chcete otvoriť <xliff:g id="APP">%s</xliff:g> v pracovnom profile?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Použiť osobný prehliadač"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Použiť pracovný prehliadač"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN na odomknutie siete pre SIM kartu"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN na odomknutie podmnožiny siete pre SIM kartu"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN na odomknutie podnikovej SIM karty"</string>
@@ -2346,10 +2329,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nové nastavenia zväčšenia"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Teraz môžete zväčšiť časť obrazovky"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Zapnúť v Nastaveniach"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Zavrieť"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Ak chcete pokračovať, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; požaduje prístup k mikrofónu zariadenia."</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 0da1ec669a14..4752a7467566 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -579,7 +579,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nastavljena ni nobena koda PIN, vzorec ali geslo"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Napaka pri preverjanju pristnosti"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Uporaba odklepanja s poverilnico"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Za nadaljevanje vnesite poverilnico za napravo."</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Prstnega odtisa ni bilo mogoče obdelati. Poskusite znova."</string>
@@ -670,7 +671,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Obraz <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Uporaba odklepanja z obrazom"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Uporaba odklepanja z obrazom ali s poverilnico"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Za nadaljevanje uporabite odklepanje z obrazom."</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Za nadaljevanje uporabite obraz ali odklepanje s poverilnico."</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2348,8 +2350,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Zdaj lahko povečate samo del zaslona."</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Vklopite v nastavitvah"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Opusti"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Za nadaljevanje potrebuje aplikacija &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; dostop do mikrofona v napravi."</string>
diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml
index 07be4eec80d4..1044f21b7e0f 100644
--- a/core/res/res/values-sq/strings.xml
+++ b/core/res/res/values-sq/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Nuk është vendosur kod PIN, motiv ose fjalëkalim"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Gabim gjatë vërtetimit"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Përdor kyçjen e ekranit"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Fut kredencialet e pajisjes për të vazhduar"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Gjurma e gishtit nuk mund të përpunohej. Provo përsëri."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Shkyçja me fytyrë"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Regjistro përsëri fytyrën tënde"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Për të përmirësuar njohjen, regjistro përsëri fytyrën tënde"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Konfiguro shkyçjen me fytyrë"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Shkyçe telefonin duke parë tek ai"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Konfiguri më shumë mënyra për të shkyçur"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Trokit për të shtuar një gjurmë gishti"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"S\'mund të regjistroheshin të dhëna të sakta të fytyrës. Provo përsëri."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Me shumë ndriçim. Provo një ndriçim më të butë."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Shumë i errët. Provo një ndriçim më të fortë."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Fytyra <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Përdor shkyçjen me fytyrë"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Përdor kyçjen me fytyrë ose kyçjen e ekranit"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Përdor shkyçjen me fytyrë për të vazhduar"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Përdor fytyrën tënde ose kyçjen e ekranit për të vazhduar"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"U kopjua"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> u ngjit nga <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> u ngjit nga kujtesa e fragmenteve"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ngjiti një tekst që kopjove"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ngjiti një imazh që kopjove"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ngjiti një përmbajtje që kopjove"</string>
<string name="more_item_label" msgid="7419249600215749115">"Më shumë"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menyja+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Puna"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Pamja personale"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Pamja e punës"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Bllokuar nga administratori yt i teknologjisë së informacionit"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Kjo përmbajtje nuk mund të shpërndahet me aplikacione pune"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Kjo përmbajtje nuk mund të hapet me aplikacione pune"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Kjo përmbajtje nuk mund të shpërndahet me aplikacione personale"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Kjo përmbajtje nuk mund të hapet me aplikacione personale"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Profili i punës është në pauzë"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Trokit për ta aktivizuar"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Nuk ka aplikacione pune"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Nuk ka aplikacione personale"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Të hapet në <xliff:g id="APP">%s</xliff:g> te profili personal?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Të hapet në <xliff:g id="APP">%s</xliff:g> te profili i punës?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Përdor shfletuesin personal"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Përdor shfletuesin e punës"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Kodi PIN i shkyçjes së rrjetit të kartës SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Kodi PIN i shkyçjes së nënrenditjes së rrjetit të kartës SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Kodi PIN i shkyçjes së kartës SIM të korporatës"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Cilësimet e reja të zmadhimit"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Tani mund të zmadhosh pjesë të ekranit tënd"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Aktivizo te \"Cilësimet\""</string>
<string name="dismiss_action" msgid="1728820550388704784">"Hiq"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Për të vazhduar, &lt;b&gt;<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ka nevojë të qaset në mikrofonin e pajisjes sate."</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 27ffe44c20df..99e909c76aa2 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -576,7 +576,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Нисте подесили ни PIN, ни шаблон, ни лозинку"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Грешка при потврди идентитета"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Користите закључавање екрана"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Унесите акредитив за уређај да бисте наставили"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Није успела обрада отиска прста. Пробајте поново."</string>
@@ -623,14 +624,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Откључавање лицем"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Поново региструјте лице"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Да бисте побољшали препознавање, поново региструјте лице"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Подесите откључавање лицем"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Откључајте телефон тако што ћете га погледати"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Подесите још начина за откључавање"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Додирните да бисте додали отисак прста"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Снимање лица није успело. Пробајте поново."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Превише је светло. Пробајте са слабијим осветљењем."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Претамно је. Пробајте са јачим осветљењем."</string>
@@ -667,7 +664,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Лице <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Користите откључавање лицем"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Користите закључавање лицем или закључавање екрана"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Користите откључавање лицем да бисте наставили"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Користите лице или закључавање екрана да бисте наставили"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1034,12 +1032,9 @@
<string name="copied" msgid="4675902854553014676">"Копирано је"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Апликација<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> је налепила податке из апликације <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Апликација<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> налепила податке из привремене меморије"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"Апликација<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> је налепила текст који сте копирали"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"Апликација<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> је налепила слику коју сте копирали"</string>
+ <string name="pasted_content" msgid="646276353060777131">"Апликација<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> је налепила садржај који сте копирали"</string>
<string name="more_item_label" msgid="7419249600215749115">"Још"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Мени+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2175,31 +2170,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Пословно"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Лични приказ"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Приказ за посао"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Блокира ИТ администратор"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Овај садржај не може да се дели помоћу пословних апликација"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Овај садржај не може да се отвара помоћу пословних апликација"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Овај садржај не може да се дели помоћу личних апликација"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Овај садржај не може да се отвара помоћу личних апликација"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Пословни профил је паузиран"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Додирните да бисте укључили"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Нема пословних апликација"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Нема личних апликација"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Желите да отворите на личном профилу у: <xliff:g id="APP">%s</xliff:g>?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Желите да отворите на пословном профилу у: <xliff:g id="APP">%s</xliff:g>?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Користи лични прегледач"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Користи пословни прегледач"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN за откључавање SIM мреже"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN за откључавање подскупа SIM мреже"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN за откључавање пословне SIM картице"</string>
@@ -2312,10 +2295,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Нова подешавања увећања"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Сада можете да увећате део екрана"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Укључите у Подешавањима"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Одбаци"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"&lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; захтева приступ микрофону уређаја ради настављања."</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index ed5b7462929d..c7a91f7dfa40 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Pinkod, grafiskt lösenord eller lösenord har inte angetts"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Ett fel uppstod vid autentiseringen"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Använd skärmlåset"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Fortsätt genom att ange enhetens autentiseringsuppgifter"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Det gick inte att bearbeta fingeravtrycket. Försök igen."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Ansiktslås"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Registrera ansiktet på nytt"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Gör om registreringen av ansiktet så att ansiktsigenkänningen ska fungera bättre"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Konfigurera ansiktslås"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Lås upp telefonen genom att titta på den"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Konfigurera fler sätt att låsa upp"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Tryck för att lägga till ett fingeravtryck"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Det gick inte att fånga ansiktsdata. Försök igen."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Det är för ljust. Testa lägre belysning."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Det är för mörkt. Testa med bättre belysning."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Ansikte <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Använd ansiktslåset"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Använd ansiktslåset eller skärmlåset"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Fortsätt med hjälp av ansiktslåset"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Fortsätt med hjälp av ditt ansikte eller skärmlåset"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Kopierat"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> klistrade in från <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> klistrade in från urklipp"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> klistrade in text som du kopierade"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> klistrade in en bild som du kopierade"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> klistrade in innehåll som du kopierade"</string>
<string name="more_item_label" msgid="7419249600215749115">"Mer"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta + "</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Jobb"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Personlig vy"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Jobbvy"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Blockeras av IT-administratören"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Det här innehållet kan inte delas med jobbappar"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Det här innehållet kan inte öppnas med jobbappar"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Det här innehållet kan inte delas med privata appar"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Det här innehållet kan inte öppnas med privata appar"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Jobbprofilen är pausad"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Tryck för att aktivera"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Inga jobbappar"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Inga privata appar"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Vill du öppna detta i <xliff:g id="APP">%s</xliff:g> i den privata profilen?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Vill du öppna detta i <xliff:g id="APP">%s</xliff:g> i jobbprofilen?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Använd privat webbläsare"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Använd jobbwebbläsare"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Pinkod för upplåsning av nätverk för SIM-kort"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Pinkod för upplåsning av delnätverk för SIM-kort"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Pinkod för upplåsning av företag för SIM-kort"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Nya inställningar för förstoring"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Nu kan du förstora delar av skärmen"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Aktivera i inställningarna"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Stäng"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"&lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; behöver behörighet till enhetens mikrofon för att fortsätta."</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 21998ed2be92..728c4a604d9a 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Hujaweka pin, mchoro au nenosiri"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Hitilafu imetokea wakati wa uthibitishaji"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Tumia mbinu ya kufunga skrini"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Weka kitambulisho cha kifaa chako ili uendelee."</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Imeshindwa kuchakata alama ya kidole. Tafadhali jaribu tena."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Kufungua kwa uso"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Sajili uso wako tena"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Ili kuimarisha utambuzi, tafadhali sajili uso wako tena"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Weka mipangilio ya kufungua kwa uso"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Fungua simu yako kwa kuiangalia"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Weka mipangilio ya mbinu zaidi za kufungua"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Gusa ili uweke alama ya kidole"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Imeshindwa kunasa data sahihi ya uso. Jaribu tena."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Inang\'aa mno. Jaribu mwangaza hafifu"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Hakuna mwangaza wa kutosha. Jaribu kuongeza mwangaza."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Uso wa <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Tumia kipengele cha kufungua kwa uso"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Tumia uso au mbinu ya kufunga skrini"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Tumia kipengele cha kufungua kwa uso ili uendelee"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Tumia uso au mbinu yako ya kufunga skrini ili uendelee"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Umenakili"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> imebandika kutoka <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> imebandika kutoka ubao wa kunakili"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> imebandika maandishi uliyonakili"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> imebandika picha uliyonakili"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> imebandika maudhui uliyonakili"</string>
<string name="more_item_label" msgid="7419249600215749115">"Zaidi"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menyu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Kazini"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Mwonekano wa binafsi"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Mwonekano wa kazini"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Imezuiwa na msimamizi wako wa Tehama"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Huwezi kushiriki maudhui haya na programu za kazini"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Huwezi kufungua maudhui haya ukitumia programu za kazini"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Huwezi kushiriki maudhui haya na programu za binafsi"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Huwezi kufungua maudhui haya ukitumia programu za binafsi"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Wasifu wa kazini umesimamishwa"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Gusa ili uwashe"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Hakuna programu za kazini"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Hakuna programu za binafsi"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Ungependa kufungua katika <xliff:g id="APP">%s</xliff:g> kwenye wasifu wa binafsi?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Ungependa kufungua katika <xliff:g id="APP">%s</xliff:g> kwenye wasifu wa kazini?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Tumia kivinjari cha binafsi"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Tumia kivinjari cha kazini"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ya kufungua mtandao wa SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN ya kufungua SIM iliyofungwa na mtoa huduma za simu"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN ya kufungua SIM ya shirika"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Mipangilio mipya ya ukuzaji"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Sasa unaweza kukuza sehemu ya skrini yako"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Washa katika Mipangilio"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Ondoa"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Ili uendelee, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; inahitaji ruhusa ya kufikia maikrofoni ya kifaa chako."</string>
diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml
index c27d4956fa53..d0e2b34c7021 100644
--- a/core/res/res/values-ta/strings.xml
+++ b/core/res/res/values-ta/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"பின்னோ, பேட்டர்னோ, கடவுச்சொல்லோ அமைக்கப்படவில்லை"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"அங்கீகரிப்பதில் பிழை"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"திரைப் பூட்டைப் பயன்படுத்து"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"தொடர, சாதன அனுமதிச் சான்றை உள்ளிடுங்கள்"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"கைரேகையைச் செயலாக்க முடியவில்லை. மீண்டும் முயலவும்."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"முகம் <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"முகம் காட்டித் திறத்தலை உபயோகி"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"முகத்தையோ திரைப் பூட்டையோ பயன்படுத்து"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"தொடர, \'முகம் காட்டித் திறத்தல்\' அம்சத்தை உபயோகியுங்கள்"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"தொடர, உங்கள் முகத்தையோ திரைப் பூட்டையோ பயன்படுத்துங்கள்"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"இப்போது உங்கள் திரையின் ஒரு பகுதியைப் பெரிதாக்கலாம்"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"அமைப்புகளில் ஆன் செய்க"</string>
<string name="dismiss_action" msgid="1728820550388704784">"மூடுக"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"தொடர, உங்கள் சாதனத்தின் மைக்ரோஃபோனை அணுகுவதற்கு &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ஆப்ஸுக்கு அனுமதி வேண்டும்."</string>
diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml
index e1d4cfb5193d..91f766e61769 100644
--- a/core/res/res/values-te/strings.xml
+++ b/core/res/res/values-te/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"పిన్, ఆకృతి లేదా పాస్‌వర్డ్‌ సెట్ చేయబడలేదు"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"ప్రామాణీకరిస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"స్క్రీన్ లాక్‌ను ఉపయోగించండి"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"కొనసాగడానికి, మీ పరికర ఆధారాలను ఎంటర్ చేయండి"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"వేలిముద్రను ప్రాసెస్ చేయడం సాధ్యపడలేదు. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"ముఖ <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"ఫేస్ అన్‌లాక్‌ను ఉపయోగించండి"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"ముఖం లేదా స్క్రీన్ లాక్‌ను ఉపయోగించండి"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"కొనసాగించడానికి, మీ ఫేస్ అన్‌లాక్‌ను ఉపయోగించండి"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"కొనసాగించడానికి మీ ముఖం లేదా స్క్రీన్ లాక్‌ను ఉపయోగించండి"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -2280,8 +2282,7 @@
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
<!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
<skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"మీరు ఇప్పుడు మీ స్క్రీన్ కొంత భాగాన్ని మాగ్నిఫై చేయవచ్చు"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"సెట్టింగ్‌లలో ఆన్ చేయండి"</string>
<string name="dismiss_action" msgid="1728820550388704784">"విస్మరించు"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"కొనసాగించడానికి, &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt;కు మీ పరికరం యొక్క మైక్రోఫోన్ యాక్సెస్ అవసరం."</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index c46c43bf5dc1..583f00c07c4e 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"ไม่ได้ตั้ง PIN, รูปแบบ หรือรหัสผ่าน"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"การตรวจสอบข้อผิดพลาด"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"ใช้การล็อกหน้าจอ"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"ป้อนข้อมูลเข้าสู่ระบบอุปกรณ์เพื่อดำเนินการต่อ"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"ประมวลผลลายนิ้วมือไม่ได้ โปรดลองอีกครั้ง"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"ปลดล็อกด้วยใบหน้า"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"ลงทะเบียนใบหน้าอีกครั้ง"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"โปรดลงทะเบียนใบหน้าอีกครั้งเพื่อปรับปรุงการจดจำ"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"ตั้งค่าการปลดล็อกด้วยใบหน้า"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"ปลดล็อกโทรศัพท์โดยมองไปที่โทรศัพท์"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"ตั้งค่าการปลดล็อกด้วยวิธีอื่น"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"แตะเพื่อเพิ่มลายนิ้วมือ"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"บันทึกข้อมูลใบหน้าที่ถูกต้องไม่ได้ ลองอีกครั้ง"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"สว่างเกินไป ลองหาตำแหน่งที่แสงน้อยกว่านี้"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"มืดเกินไป ลองหาตำแหน่งที่สว่างขึ้น"</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"ใบหน้า <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"ใช้การปลดล็อกด้วยใบหน้า"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"ใช้การล็อกด้วยใบหน้าหรือการล็อกหน้าจอ"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"ใช้การปลดล็อกด้วยใบหน้าเพื่อดำเนินการต่อ"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"ใช้ใบหน้าหรือการล็อกหน้าจอเพื่อดำเนินการต่อ"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"คัดลอกแล้ว"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"วาง <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> จาก <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> แล้ว"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"วาง <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> จากคลิปบอร์ดแล้ว"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> วางข้อความที่คุณคัดลอก"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> วางรูปภาพที่คุณคัดลอก"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> วางเนื้อหาที่คุณคัดลอก"</string>
<string name="more_item_label" msgid="7419249600215749115">"เพิ่มเติม"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"เมนู+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"งาน"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"มุมมองส่วนตัว"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"ดูงาน"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"ผู้ดูแลระบบไอทีบล็อกไว้"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"แชร์เนื้อหานี้โดยใช้แอปงานไม่ได้"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"เปิดเนื้อหานี้โดยใช้แอปงานไม่ได้"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"แชร์เนื้อหานี้โดยใช้แอปส่วนตัวไม่ได้"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"เปิดเนื้อหานี้โดยใช้แอปส่วนตัวไม่ได้"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"โปรไฟล์งานหยุดชั่วคราว"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"แตะเพื่อเปิด"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"ไม่มีแอปงาน"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"ไม่มีแอปส่วนตัว"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"เปิดใน <xliff:g id="APP">%s</xliff:g> ในโปรไฟล์ส่วนตัวไหม"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"เปิดใน <xliff:g id="APP">%s</xliff:g> ในโปรไฟล์งานไหม"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"ใช้เบราว์เซอร์ส่วนตัว"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"ใช้เบราว์เซอร์งาน"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN ปลดล็อกเครือข่ายที่ใช้กับ SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN ปลดล็อกเครือข่ายย่อยที่ใช้กับ SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN ปลดล็อกองค์กรที่ใช้กับ SIM"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"การตั้งค่าการขยายใหม่"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"คุณขยายบางส่วนของหน้าจอได้แล้วตอนนี้"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"เปิดในการตั้งค่า"</string>
<string name="dismiss_action" msgid="1728820550388704784">"ปิด"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"&lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ต้องได้รับสิทธิ์เข้าถึงไมโครโฟนของอุปกรณ์เพื่อดำเนินการต่อ"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index 790c25e25109..0692c139cdec 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Walang itinakdang pin, pattern, o password"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Nagkaroon ng error sa pag-authenticate"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Gumamit ng lock ng screen"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Ilagay ang kredensyal ng device para magpatuloy"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Hindi maproseso ang fingerprint. Pakisubukan ulit."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Face unlock"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"I-enroll ulit ang iyong mukha"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Para mapahusay ang pagkilala, paki-enroll ulit ang iyong mukha"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"I-set up ang face unlock"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"I-unlock ang iyong telepono sa pamamagitan ng pagtingin dito"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Mag-set up ng higit pang paraan para mag-unlock"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"I-tap para magdagdag ng fingerprint"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Hindi makakuha ng tamang face data. Subukang muli."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Masyadong maliwanag. Subukang bawasan ang liwanag."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Masyadong madilim. Subukan sa mas maliwanag."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Mukha <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Gumamit ng face unlock"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Gumamit ng mukha o lock ng screen"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Gumamit ng face unlock para magpatuloy"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Gamitin ang iyong mukha o lock ng screen para magpatuloy"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Nakopya"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Na-paste ang <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> mula sa <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Na-paste ang <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> mula sa clipboard"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"Nag-paste ang <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ng text na nakopya mo"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"Nag-paste ang <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ng larawang nakopya mo"</string>
+ <string name="pasted_content" msgid="646276353060777131">"Nag-paste ang <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> ng content na nakopya mo"</string>
<string name="more_item_label" msgid="7419249600215749115">"Higit pa"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Trabaho"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Personal na view"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"View ng trabaho"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Na-block ng iyong IT admin"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Hindi puwedeng ibahagi sa mga app para sa trabaho ang content na ito"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Hindi puwedeng buksan sa mga app para sa trabaho ang content na ito"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Hindi puwedeng ibahagi sa mga personal na app ang content na ito"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Hindi puwedeng buksan sa mga personal na app ang content na ito"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Naka-pause ang profile sa trabaho"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"I-tap para i-on"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Walang app para sa trabaho"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Walang personal na app"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Buksan sa <xliff:g id="APP">%s</xliff:g> sa personal na profile?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Buksan sa <xliff:g id="APP">%s</xliff:g> sa profile sa trabaho?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Gamitin ang personal na browser"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Gamitin ang browser sa trabaho"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN para sa pag-unlock ng network ng SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN para sa pag-unlock ng subset ng network ng SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN para sa pangkumpanyang pag-unlock ng SIM"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Mga bagong setting ng pag-magnify"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Puwede mo na ngayong i-magnify ang isang bahagi ng iyong screen"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"I-on sa Mga Setting"</string>
<string name="dismiss_action" msgid="1728820550388704784">"I-dismiss"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Para magpatuloy, kailangan ng &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; ng access sa mikropono ng iyong device."</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index be54f7cc2f76..b16d02df6e44 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN, desen veya şifre seti yok"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Kimlik doğrulama sırasında hata oluştu"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekran kilidi kullan"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Devam etmek için cihaz kimlik bilginizi girin"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Parmak izi işlenemedi. Lütfen tekrar deneyin."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Yüz tanıma kilidi"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Yüzünüzü yeniden kaydedin"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Daha iyi tanınmasını sağlamak için lütfen yüzünüzü yeniden kaydedin"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Yüz tanıma kilidini kurun"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Telefonunuza bakarak kilidini açın"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Kilidi açmak için daha fazla yöntem ayarlayın"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Parmak izi eklemek için dokunun"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Doğru yüz verileri yakalanamadı. Tekrar deneyin."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Çok parlak. Parlaklığı daha az bir ışıklandırma deneyin."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Çok karanlık. Daha parlak ışıkta deneyin."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Yüz <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Yüz tanıma kilidi kullan"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Yüz tanıma veya ekran kilidi kullan"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Devam etmek için yüz tanıma kilidini kullanın"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Devam etmek için yüz veya ekran kilidinizi kullanın"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Kopyalandı"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> uygulaması <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> kaynağından yapıştırdı"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>, panodan yapıştırıldı."</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>, kopyaladığınız metni yapıştırdı"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>, kopyaladığınız resmi yapıştırdı"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>, kopyaladığınız içeriği yapıştırdı"</string>
<string name="more_item_label" msgid="7419249600215749115">"Diğer"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menü+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"İş"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Kişisel görünüm"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"İş görünümü"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"BT yöneticiniz tarafından engellendi"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Bu içerik, iş uygulamalarıyla paylaşılamaz"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bu içerik, iş uygulamalarıyla açılamaz"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bu içerik, kişisel uygulamalarla paylaşılamaz"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bu içerik, kişisel uygulamalarla açılamaz"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"İş profili duraklatıldı"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Açmak için dokunun"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"İş uygulaması yok"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Kişisel uygulama yok"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Kişisel profildeki <xliff:g id="APP">%s</xliff:g> uygulamasında açılsın mı?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"İş profilindeki <xliff:g id="APP">%s</xliff:g> uygulamasında açılsın mı?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Kişisel tarayıcıyı kullan"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"İş tarayıcısını kullan"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM ağ kilidi açma PIN kodu"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM ağ alt kümesi kilidini açma PIN kodu"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM kurumsal kilidi açma PIN kodu"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Yeni büyütme ayarları"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Artık ekranınızın bir bölümünü büyütebilirsiniz"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Ayarlar\'da aç"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Kapat"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Devam etmek için &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; uygulamasının cihazınızın mikrofonuna erişmesi gerekiyor."</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 2cb286f07d3e..95d63aa53abe 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -579,7 +579,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Не вказано PIN-код, ключ або пароль"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Помилка автентифікації"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Доступ розблокуванням екрана"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Щоб продовжити, введіть дані для розблокування екрана пристрою"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Не вдалось обробити відбиток пальця. Повторіть спробу."</string>
@@ -626,14 +627,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Фейсконтроль"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Повторно проскануйте обличчя"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Повторно проскануйте обличчя для ефективнішого розпізнавання"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Налаштуйте фейсконтроль"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Ви зможете розблоковувати телефон, подивившись на нього"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Налаштуйте більше способів розблокування"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Натисніть, щоб додати відбиток пальця"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Не вдалося чітко зняти обличчя. Повторіть спробу."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Занадто яскраво. Потрібно менше світла."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Занадто темно. Потрібно більше світла."</string>
@@ -670,7 +667,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Обличчя <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Доступ через фейсконтроль"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Використовувати фейсконтроль або дані для розблокування екрана"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Щоб продовжити, скористайтеся фейсконтролем"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Щоб продовжити, скористайтеся фейсконтролем або даними для розблокування екрана"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1037,12 +1035,9 @@
<string name="copied" msgid="4675902854553014676">"Скопійовано"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"Дані з додатка <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> вставлено в <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Дані з буфера обміну вставлено в <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"Скопійований текст вставлено в додатку <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"Скопійоване зображення вставлено в додатку <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>"</string>
+ <string name="pasted_content" msgid="646276353060777131">"Скопійований контент вставлено в додатку <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>"</string>
<string name="more_item_label" msgid="7419249600215749115">"Більше"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Меню+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2209,31 +2204,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Робоче"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Особистий перегляд"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Робочий перегляд"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Заблоковано адміністратором"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Цим контентом не можна ділитися в робочих додатках"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Цей контент не можна відкривати в робочих додатках"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Цим контентом не можна ділитися в особистих додатках"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Цей контент не можна відкривати в особистих додатках"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Робочий профіль призупинено"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Торкніться, щоб увімкнути"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Немає робочих додатків"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Немає особистих додатків"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Відкрити в додатку <xliff:g id="APP">%s</xliff:g> в особистому профілі?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Відкрити в додатку <xliff:g id="APP">%s</xliff:g> у робочому профілі?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Використовувати особистий веб-переглядач"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Використовувати робочий веб-переглядач"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"PIN-код розблокування мережі SIM-карти"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"PIN-код розблокування підгрупи мереж SIM-карти"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"PIN-код розблокування корпоративної SIM-карти"</string>
@@ -2346,10 +2329,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Нові налаштування збільшення"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Тепер можна збільшувати частину екрана"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Увімкнути в налаштуваннях"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Закрити"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Щоб продовжити, надайте додатку &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; доступ до мікрофона пристрою."</string>
diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml
index c0f21c420bc6..418b9ebc91e6 100644
--- a/core/res/res/values-ur/strings.xml
+++ b/core/res/res/values-ur/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"کوئی پن، پیٹرن، یا پاس ورڈ سیٹ نہیں ہے"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"خرابی کی توثیق ہو رہی ہے"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"اسکرین لاک استعمال کریں"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"جاری رکھنے کیلئے اپنے آلے کی سند درج کریں"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"فنگر پرنٹ پر کارروائی نہیں کی جا سکی۔ براہ کرم دوبارہ کوشش کریں۔"</string>
@@ -664,7 +665,8 @@
<string name="face_name_template" msgid="3877037340223318119">"چہرہ <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"چہرے کے ذریعے غیر مقفل کرنا استعمال کریں"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"چہرہ یا اسکرین لاک استعمال کریں"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"جاری رکھنے کیلئے چہرے کے ذریعے غیر مقفل کرنا استعمال کریں"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"جاری رکھنے کے لیے اپنے چہرے یا اسکرین لاک کا استعمال کریں"</string>
<string-array name="face_error_vendor">
</string-array>
diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml
index f7ed329baed4..048c3022a427 100644
--- a/core/res/res/values-uz/strings.xml
+++ b/core/res/res/values-uz/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"PIN kod, grafik kalit yoki parol sozlanmagan"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Autentifikatsiya amalga oshmadi"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Ekran qulfi"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Davom etish uchun qurilma kalitini kiritish"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Barmoq izi aniqlanmadi. Qaytadan urining."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Yuz bilan ochish"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Yuzingizni yana qayd qiling"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Yuzingiz yanada yaxshiroq aniqlanishi uchun uni yana bir marta qayd qiling"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Yuz bilan ochishni sozlash"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Telefoningizni yuz tekshiruvi yordamida qulfdan chiqaring"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Qulfdan chiqarishning boshqa usullarini sozlang"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Barmoq izi kiritish uchun bosing"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Yuz ravshan suratga olinmadi. Qaytadan urining."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Juda yorqin. Biroz soyaroq joy tanlang."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Juda qorongʻi. Atrofingizni yoriting."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Yuz <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Yuz bilan ochish"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Yuz bilan ochish yoki ekran qulfi"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Davom etish uchun yuz bilan oching"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Davom etish uchun yuz tekshiruvi yoki ekran qulfidan foydalaning"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Nusxalandi"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> ilovasidan <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> joylandi"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"Vaqtincha xotiradan <xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> joylandi"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> siz nusxa olgan matnni joyladi"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> siz nusxa olgan rasmni joyladi"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> siz nusxa olgan kontentni joyladi"</string>
<string name="more_item_label" msgid="7419249600215749115">"Yana"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Menyu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Ish"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Shaxsiy rejim"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Ishchi rejim"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"AT administratori tomonidan bloklangan"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Bu kontent ishga oid ilovalar bilan ulashilmaydi"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bu kontent ishga oid ilovalar bilan ochilmaydi"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bu kontent shaxsiy ilovalar bilan ulashilmaydi"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bu kontent shaxsiy ilovalar bilan ochilmaydi"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Ish profili pauzada"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Yoqish uchun bosing"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Ishga oid ilovalar topilmadi"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Shaxsiy ilovalar topilmadi"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"<xliff:g id="APP">%s</xliff:g> orqali shaxsiy profilda ochilsinmi?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"<xliff:g id="APP">%s</xliff:g> orqali ish profilida ochilsinmi?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Shaxsiy brauzerdan foydalanish"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Ishga oid brauzerdan foydalanish"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM kartaning tarmoqdagi qulfini ochish uchun PIN kod"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM karta tarmoq qismini qulfdan chiqarish uchun PIN kod"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Korporativ SIM kartalar qulfini ochish uchun PIN kod"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Yangi kattalashtirish sozlamalari"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Ekranni qisman kattalashtirish mumkin"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Sozlamalar orqali yoqish"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Yopish"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Davom etish uchun &lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; mikrofoningizdan foydalanishi kerak."</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index cabfdfa9118c..22714a8e7619 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Chưa đặt mã PIN, hình mở khóa hoặc mật khẩu"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Lỗi khi xác thực"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Dùng phương thức khóa màn hình"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Nhập thông tin xác thực thiết bị của bạn để tiếp tục"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Không thể xử lý vân tay. Vui lòng thử lại."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"Mở khóa bằng khuôn mặt"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Đăng ký lại khuôn mặt của bạn"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Để cải thiện khả năng nhận dạng, hãy đăng ký lại khuôn mặt của bạn"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Thiết lập tính năng mở khóa bằng khuôn mặt"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Mở khóa điện thoại bằng cách nhìn vào điện thoại"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Thiết lập thêm những cách mở khóa khác"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Nhấn để thêm vân tay"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Không thể ghi lại đúng dữ liệu mặt. Hãy thử lại."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Quá sáng. Hãy thử giảm độ sáng."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Quá tối. Hãy thử tăng độ sáng."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Khuôn mặt <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Dùng tính năng mở khóa bằng khuôn mặt"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Dùng khuôn mặt hoặc phương thức khóa màn hình"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Dùng tính năng mở khóa bằng khuôn mặt để tiếp tục"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Dùng khuôn mặt của bạn hoặc phương thức khóa màn hình để tiếp tục"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Đã sao chép"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> đã dán dữ liệu từ <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> đã dán dữ liệu từ bảng nhớ tạm"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> đã dán văn bản mà bạn sao chép"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> đã dán một hình ảnh mà bạn sao chép"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> đã dán nội dung mà bạn sao chép"</string>
<string name="more_item_label" msgid="7419249600215749115">"Thêm"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Trình đơn+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Công việc"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Chế độ xem cá nhân"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Chế độ xem công việc"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Bị quản trị viên CNTT chặn"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Bạn không thể chia sẻ nội dung này bằng ứng dụng công việc"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Bạn không thể mở nội dung này bằng ứng dụng công việc"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Bạn không thể chia sẻ nội dung này bằng ứng dụng cá nhân"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Bạn không thể mở nội dung này bằng ứng dụng cá nhân"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Hồ sơ công việc đã bị tạm dừng"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Nhấn để bật"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Không có ứng dụng công việc"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Không có ứng dụng cá nhân"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Mở trên <xliff:g id="APP">%s</xliff:g> trong hồ sơ cá nhân?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Mở trên <xliff:g id="APP">%s</xliff:g> trong hồ sơ công việc?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Dùng trình duyệt cá nhân"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Dùng trình duyệt công việc"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Mã PIN mở khóa mạng SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Mã PIN mở khóa tập con của mạng SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Mã PIN mở khóa SIM corporate"</string>
@@ -2278,8 +2261,7 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Chế độ cài đặt phóng to mới"</string>
<!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
<skip />
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Bật trong phần Cài đặt"</string>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index c8f035a60619..93fcf30beb07 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"未设置任何 PIN 码、图案和密码"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"进行身份验证时出错"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"使用屏幕锁定凭据"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"输入您的设备凭据才能继续"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"无法处理指纹,请重试。"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"人脸解锁"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"重新注册您的面孔"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"要提升识别精确度,请重新注册您的面孔"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"设置人脸解锁"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"脸部对准手机即可将其解锁"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"设置更多解锁方式"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"点按即可添加指纹"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"无法捕获准确的人脸数据,请重试。"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"亮度过高,请尝试使用较柔和的亮度。"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"亮度不足,请尝试将光线调亮。"</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"面孔 <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"使用人脸解锁"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"使用人脸解锁或屏幕锁定凭据"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"使用人脸解锁验证身份才能继续"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"使用人脸解锁或屏幕锁定凭据验证身份,才能继续操作"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"已复制"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>已粘贴从<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>复制的内容"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>已粘贴剪贴板中的内容"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>已粘贴您复制的文字"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>已粘贴您复制的图片"</string>
+ <string name="pasted_content" msgid="646276353060777131">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>已粘贴您复制的内容"</string>
<string name="more_item_label" msgid="7419249600215749115">"更多"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"MENU+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"工作"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"个人视图"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"工作视图"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"已被 IT 管理员禁止"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"无法使用工作应用分享该内容"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"无法使用工作应用打开该内容"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"无法使用个人应用分享该内容"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"无法使用个人应用打开该内容"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"工作资料已被暂停"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"点按即可开启"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"所有工作应用都不支持该内容"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"所有个人应用都不支持该内容"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"要使用个人资料打开<xliff:g id="APP">%s</xliff:g>吗?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"要使用工作资料打开<xliff:g id="APP">%s</xliff:g>吗?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"使用个人浏览器"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"使用工作浏览器"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 网络解锁 PIN 码"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM 网络子集解锁 PIN 码"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM 企业解锁 PIN 码"</string>
@@ -2278,8 +2261,7 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"推出了新的放大设置"</string>
<!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
<skip />
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"在“设置”中开启"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 68fef917f457..57423e14363c 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"未設定 PIN、圖案或密碼"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"驗證時發生錯誤"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"使用螢幕鎖定"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"如要繼續操作,請輸入裝置憑證"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"無法處理指紋。請再試一次。"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"臉孔解鎖"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"重新註冊臉孔"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"如要提高識別能力,請重新註冊您的臉孔"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"設定人臉解鎖功能"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"看著手機就能解鎖"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"設定更多解鎖方式"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"輕觸即可新增指紋"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"無法擷取準確的臉容資料。請再試一次。"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"影像太亮。請嘗試在更暗的環境下使用。"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"影像太暗。請嘗試在更明亮的環境下使用。"</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"臉孔 <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"使用臉孔解鎖"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"使用臉孔或螢幕鎖定"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"如要繼續操作,請使用臉孔解鎖驗證身分"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"請使用臉孔解鎖或螢幕鎖定功能驗證身分,才能繼續操作"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"已複製"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> 已貼上從 <xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g> 複製的資料"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> 已貼上剪貼簿中的資料"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"你複製的文字已貼到「<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>」"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"你複製的圖片已貼到「<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>」"</string>
+ <string name="pasted_content" msgid="646276353060777131">"你複製的內容已貼到「<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>」"</string>
<string name="more_item_label" msgid="7419249600215749115">"更多"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"選單鍵 +"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta +"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"公司"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"個人檢視模式"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"工作檢視模式"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"IT 管理員已封鎖這項操作"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"無法透過工作應用程式分享這項內容"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"無法使用工作應用程式開啟這項內容"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"無法透過個人應用程式分享這項內容"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"無法使用個人應用程式開啟這項內容"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"工作設定檔已暫停使用"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"輕觸即可啟用"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"沒有適用的工作應用程式"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"沒有適用的個人應用程式"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"要使用個人資料夾中的「<xliff:g id="APP">%s</xliff:g>」開啟嗎?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"要使用工作資料夾中的「<xliff:g id="APP">%s</xliff:g>」開啟嗎?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"使用個人瀏覽器"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"使用工作瀏覽器"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 網絡解鎖 PIN"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM 網絡子集解鎖 PIN"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM 公司解鎖 PIN"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"放大功能推出新設定"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"您現在可以放大部分畫面"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"在「設定」中開啟"</string>
<string name="dismiss_action" msgid="1728820550388704784">"關閉"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"如要繼續,&lt;b&gt;‎‏‎‎‏‏‎<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; 需要裝置的麥克風存取權。"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 1ab5024b26e7..74cbe3709268 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"未設定 PIN 碼、解鎖圖案或密碼"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"驗證時發生錯誤"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"使用螢幕鎖定功能"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"如要繼續操作,請輸入裝置憑證"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"無法處理指紋,請再試一次。"</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"人臉解鎖"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"請重新註冊你的臉孔"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"為提升辨識精準度,請重新註冊你的臉孔"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"設定人臉解鎖功能"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"看著手機就能解鎖"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"設定更多解鎖方式"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"輕觸即可新增指紋"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"無法擷取精準臉孔資料,請再試一次。"</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"亮度過高,請嘗試使用較柔和的照明方式。"</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"亮度不足,請嘗試使用較明亮的照明方式。"</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"臉孔 <xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"使用人臉解鎖功能"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"使用人臉解鎖或螢幕鎖定功能"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"如要繼續操作,請使用人臉解鎖功能驗證身分"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"請使用人臉解鎖或螢幕鎖定功能驗證身分,才能繼續操作"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"已複製"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"「<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>」已貼上從「<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>」複製的資料"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"「<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>」已貼上剪貼簿中的資料"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"你複製的文字已貼到「<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>」"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"你複製的圖片已貼到「<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>」"</string>
+ <string name="pasted_content" msgid="646276353060777131">"你複製的內容已貼到「<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g>」"</string>
<string name="more_item_label" msgid="7419249600215749115">"更多"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"[Menu] +"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta +"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"工作"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"個人檢視模式"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"工作檢視模式"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"IT 管理員已封鎖這項操作"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"無法透過工作應用程式分享這項內容"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"無法使用工作應用程式開啟這項內容"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"無法透過個人應用程式分享這項內容"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"無法使用個人應用程式開啟這項內容"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"工作資料夾已暫停使用"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"輕觸即可啟用"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"沒有適用的工作應用程式"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"沒有適用的個人應用程式"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"要使用個人資料夾中的「<xliff:g id="APP">%s</xliff:g>」開啟嗎?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"要使用工作資料夾中的「<xliff:g id="APP">%s</xliff:g>」開啟嗎?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"使用個人瀏覽器"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"使用工作瀏覽器"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"SIM 卡網路解鎖 PIN 碼"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"SIM 卡網路子集解鎖 PIN 碼"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"SIM 卡企業解鎖 PIN 碼"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"放大功能推出新設定"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"你現在可以放大局部畫面了"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"在「設定」中開啟"</string>
<string name="dismiss_action" msgid="1728820550388704784">"關閉"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"如要繼續操作,請將裝置的麥克風存取權授予「<xliff:g id="APP">%s</xliff:g>」&lt;b&gt;&lt;/b&gt;。"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index d6fcb0dd1969..0f0cf74bdaca 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -573,7 +573,8 @@
<string name="biometric_error_device_not_secured" msgid="3129845065043995924">"Ayikho iphinikhodi, iphethini, noma iphasiwedi esethiwe"</string>
<string name="biometric_error_generic" msgid="6784371929985434439">"Iphutha lokufakazela ubuqiniso"</string>
<string name="screen_lock_app_setting_name" msgid="6054944352976789228">"Sebenzisa isikhiya sesikrini"</string>
- <string name="screen_lock_dialog_default_subtitle" msgid="8638638125397857315">"Faka izifakazelo zedivayisi yakho ukuze uqhubeke"</string>
+ <!-- no translation found for screen_lock_dialog_default_subtitle (120359538048533695) -->
+ <skip />
<!-- no translation found for fingerprint_acquired_partial (694598777291084823) -->
<skip />
<string name="fingerprint_acquired_insufficient" msgid="2545149524031515411">"Ayikwazanga ukucubungula izigxivizo zeminwe. Sicela uzame futhi."</string>
@@ -620,14 +621,10 @@
<string name="face_recalibrate_notification_name" msgid="6006095897989257026">"I-Face unlock"</string>
<string name="face_recalibrate_notification_title" msgid="5944930528030496897">"Phinda ubhalise ubuso bakho"</string>
<string name="face_recalibrate_notification_content" msgid="892757485125249962">"Ukuze uthuthukise ukubonwa, sicela uphinde ubhalise ubuso bakho"</string>
- <!-- no translation found for face_setup_notification_title (550617822603450009) -->
- <skip />
- <!-- no translation found for face_setup_notification_content (5463999831057751676) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_title (2002630611398849495) -->
- <skip />
- <!-- no translation found for fingerprint_setup_notification_content (205578121848324852) -->
- <skip />
+ <string name="face_setup_notification_title" msgid="550617822603450009">"Setha i-face unlock"</string>
+ <string name="face_setup_notification_content" msgid="5463999831057751676">"Vula ifoni yakho ngokuyibheka"</string>
+ <string name="fingerprint_setup_notification_title" msgid="2002630611398849495">"Setha izindlela eziningi zokuvula"</string>
+ <string name="fingerprint_setup_notification_content" msgid="205578121848324852">"Thepha ukuze ungeze izigxivizo zomunwe"</string>
<string name="face_acquired_insufficient" msgid="2150805835949162453">"Ayikwazanga ukuthwebula idatha enembile yobuso. Zama futhi."</string>
<string name="face_acquired_too_bright" msgid="8070756048978079164">"Kukhanya kakhulu. Zama ukukhanya okuthambile."</string>
<string name="face_acquired_too_dark" msgid="252573548464426546">"Kumnyama kakhulu Zama ukukhanyisa okukhanyayo."</string>
@@ -664,7 +661,8 @@
<string name="face_name_template" msgid="3877037340223318119">"Ubuso be-<xliff:g id="FACEID">%d</xliff:g>"</string>
<string name="face_app_setting_name" msgid="8130135875458467243">"Sebenzisa i-face unlock"</string>
<string name="face_or_screen_lock_app_setting_name" msgid="1603149075605709106">"Sebenzisa i-face lock noma ukukhiya isikrini"</string>
- <string name="face_dialog_default_subtitle" msgid="4979205739418564856">"Sebenzisa i-face unlock ukuze uqhubeke"</string>
+ <!-- no translation found for face_dialog_default_subtitle (6620492813371195429) -->
+ <skip />
<string name="face_or_screen_lock_dialog_default_subtitle" msgid="5006381531158341844">"Sebenzisa ubuso bakho noma ukukhiya isikrini ukuze uqhubeke"</string>
<string-array name="face_error_vendor">
</string-array>
@@ -1031,12 +1029,9 @@
<string name="copied" msgid="4675902854553014676">"Kukopishiwe"</string>
<string name="pasted_from_app" msgid="5627698450808256545">"I-<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> inamathiselwe kusuka ku-<xliff:g id="SOURCE_APP_NAME">%2$s</xliff:g>"</string>
<string name="pasted_from_clipboard" msgid="6295556725844421812">"I-<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> inamathiselwe kusuka ebhodini yokunamathisela"</string>
- <!-- no translation found for pasted_text (4298871641549173733) -->
- <skip />
- <!-- no translation found for pasted_image (4729097394781491022) -->
- <skip />
- <!-- no translation found for pasted_content (646276353060777131) -->
- <skip />
+ <string name="pasted_text" msgid="4298871641549173733">"U-<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> unamathisele umbhalo owukopishile"</string>
+ <string name="pasted_image" msgid="4729097394781491022">"U-<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> unamathisele isithombe osikopishile"</string>
+ <string name="pasted_content" msgid="646276353060777131">"U-<xliff:g id="PASTING_APP_NAME">%1$s</xliff:g> unamathisele okuqukethwe okukopishile"</string>
<string name="more_item_label" msgid="7419249600215749115">"Okuningi"</string>
<string name="prepend_shortcut_label" msgid="1743716737502867951">"Imenyu+"</string>
<string name="menu_meta_shortcut_label" msgid="1623390163674762478">"Meta+"</string>
@@ -2141,31 +2136,19 @@
<string name="resolver_work_tab" msgid="2690019516263167035">"Umsebenzi"</string>
<string name="resolver_personal_tab_accessibility" msgid="5739524949153091224">"Ukubuka komuntu siqu"</string>
<string name="resolver_work_tab_accessibility" msgid="4753168230363802734">"Ukubuka komsebenzi"</string>
- <!-- no translation found for resolver_cross_profile_blocked (3014597376026044840) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_work_apps_explanation (9071442683080586643) -->
- <skip />
- <!-- no translation found for resolver_cant_access_work_apps_explanation (1129960195389373279) -->
- <skip />
- <!-- no translation found for resolver_cant_share_with_personal_apps_explanation (6349766201904601544) -->
- <skip />
- <!-- no translation found for resolver_cant_access_personal_apps_explanation (1679399548862724359) -->
- <skip />
+ <string name="resolver_cross_profile_blocked" msgid="3014597376026044840">"Kuvinjelwe umlawuli wakho we-IT"</string>
+ <string name="resolver_cant_share_with_work_apps_explanation" msgid="9071442683080586643">"Lokhu okuqukethwe akukwazi ukwabiwa nama-app womsebenzi"</string>
+ <string name="resolver_cant_access_work_apps_explanation" msgid="1129960195389373279">"Lokhu okuqukethwe akukwazi ukukopishwa ngama-app womsebenzi"</string>
+ <string name="resolver_cant_share_with_personal_apps_explanation" msgid="6349766201904601544">"Lokhu okuqukethwe akukwazi ukwabiwa nama-app womuntu siqu"</string>
+ <string name="resolver_cant_access_personal_apps_explanation" msgid="1679399548862724359">"Lokhu okuqukethwe akukwazi ukukopishwa ngama-app womuntu siqu"</string>
<string name="resolver_turn_on_work_apps" msgid="884910835250037247">"Iphrofayela yomsebenzi iphunyuziwe"</string>
- <!-- no translation found for resolver_switch_on_work (463709043650610420) -->
- <skip />
- <!-- no translation found for resolver_no_work_apps_available (3298291360133337270) -->
- <skip />
- <!-- no translation found for resolver_no_personal_apps_available (6284837227019594881) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_personal (2937599899213467617) -->
- <skip />
- <!-- no translation found for miniresolver_open_in_work (152208044699347924) -->
- <skip />
- <!-- no translation found for miniresolver_use_personal_browser (776072682871133308) -->
- <skip />
- <!-- no translation found for miniresolver_use_work_browser (543575306251952994) -->
- <skip />
+ <string name="resolver_switch_on_work" msgid="463709043650610420">"Thepha ukuze uvule"</string>
+ <string name="resolver_no_work_apps_available" msgid="3298291360133337270">"Awekho ama-app womsebenzi"</string>
+ <string name="resolver_no_personal_apps_available" msgid="6284837227019594881">"Awekho ama-app womuntu siqu"</string>
+ <string name="miniresolver_open_in_personal" msgid="2937599899213467617">"Vula ku-<xliff:g id="APP">%s</xliff:g> kuphrofayela yomuntu siqu?"</string>
+ <string name="miniresolver_open_in_work" msgid="152208044699347924">"Vula ku-<xliff:g id="APP">%s</xliff:g> kuphrofayela yomsebenzi?"</string>
+ <string name="miniresolver_use_personal_browser" msgid="776072682871133308">"Sebenzisa isiphequluli somuntu siqu"</string>
+ <string name="miniresolver_use_work_browser" msgid="543575306251952994">"Sebenzisa isiphequluli somsebenzi"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_ENTRY" msgid="8050953231914637819">"Iphinikhodi yokuvula inethiwekhi ye-SIM"</string>
<string name="PERSOSUBSTATE_SIM_NETWORK_SUBSET_ENTRY" msgid="7164399703751688214">"Iphinikhodi yokuvula yesethi engaphansi yenethiwekhi ye-SIM"</string>
<string name="PERSOSUBSTATE_SIM_CORPORATE_ENTRY" msgid="4447629474818217364">"Iphinikhodi yokuvula yenkampani ye-SIM"</string>
@@ -2278,10 +2261,8 @@
<string name="config_pdp_reject_user_authentication_failed" msgid="4531693033885744689"></string>
<string name="config_pdp_reject_service_not_subscribed" msgid="8190338397128671588"></string>
<string name="config_pdp_reject_multi_conn_to_same_pdn_not_allowed" msgid="6024904218067254186"></string>
- <!-- no translation found for window_magnification_prompt_title (2876703640772778215) -->
- <skip />
- <!-- no translation found for window_magnification_prompt_content (8159173903032344891) -->
- <skip />
+ <string name="window_magnification_prompt_title" msgid="2876703640772778215">"Amasethingi amasha wokukhuliswa"</string>
+ <string name="window_magnification_prompt_content" msgid="8159173903032344891">"Manje ungakhulisa ingxenye yesikrini sakho"</string>
<string name="turn_on_magnification_settings_action" msgid="8521433346684847700">"Vula Kumasethingi"</string>
<string name="dismiss_action" msgid="1728820550388704784">"Cashisa"</string>
<string name="sensor_privacy_start_use_mic_notification_content" msgid="8063355861118105607">"Ukuze uqhubeke, &lt;b&gt;‎‏‎‎‏‏‎i-<xliff:g id="APP">%s</xliff:g>&lt;/b&gt; idinga ukufinyelela imakrofoni yedivayisi yakho."</string>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index bf790fa5ff95..af595a43e0d1 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -59,7 +59,6 @@
<item><xliff:g id="id">@string/status_bar_mobile</xliff:g></item>
<item><xliff:g id="id">@string/status_bar_airplane</xliff:g></item>
<item><xliff:g id="id">@string/status_bar_no_calling</xliff:g></item>
- <item><xliff:g id="id">@string/status_bar_call_strength</xliff:g></item>
<item><xliff:g id="id">@string/status_bar_battery</xliff:g></item>
<item><xliff:g id="id">@string/status_bar_sensors_off</xliff:g></item>
</string-array>
@@ -97,7 +96,6 @@
<string translatable="false" name="status_bar_camera">camera</string>
<string translatable="false" name="status_bar_airplane">airplane</string>
<string translatable="false" name="status_bar_no_calling">no_calling</string>
- <string translatable="false" name="status_bar_call_strength">call_strength</string>
<string translatable="false" name="status_bar_sensors_off">sensors_off</string>
<string translatable="false" name="status_bar_screen_record">screen_record</string>
@@ -3939,10 +3937,6 @@
color supplied by the Notification.Builder if present. -->
<bool name="config_tintNotificationActionButtons">true</bool>
- <!-- Flag indicating that tinted items (actions, expander, etc) are to be tinted using the
- theme color, rather than the notification color. -->
- <bool name="config_tintNotificationsWithTheme">true</bool>
-
<!-- Show area update info settings in CellBroadcastReceiver and information in SIM status in Settings app -->
<bool name="config_showAreaUpdateInfoSettings">false</bool>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 9e159f9e511e..6cccdb5c3148 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -3030,12 +3030,12 @@
<!-- ===============================================================
Resources added in version S of the platform
- NOTE: add <public> elements within a <public-group> like so:
+ NOTE: add <public> elements within a <staging-public-group> like so:
- <public-group type="attr" first-id="0x01010531">
+ <staging-public-group type="attr" first-id="0x01010531">
<public name="exampleAttr1" />
<public name="exampleAttr2" />
- </public-group>
+ </staging-public-group>
To add a new public-group block, choose an id value that is 1 greater
than the last of that item above. For example, the last "attr" id
@@ -3044,7 +3044,7 @@
=============================================================== -->
<eat-comment />
- <public-group type="attr" first-id="0x01010617">
+ <staging-public-group type="attr" first-id="0x01010617">
<public name="rollbackDataPolicy" />
<public name="allowClickWhenDisabled" />
<public name="windowLayoutAffinity" />
@@ -3099,13 +3099,13 @@
<!-- @hide @SystemApi -->
<public name="throttleDurationMillis" />
<public name="showInInputMethodPicker" />
- </public-group>
+ </staging-public-group>
- <public-group type="drawable" first-id="0x010800b5">
+ <staging-public-group type="drawable" first-id="0x010800b5">
<!-- drawable definitions go here -->
- </public-group>
+ </staging-public-group>
- <public-group type="color" first-id="0x0106001d">
+ <staging-public-group type="color" first-id="0x0106001d">
<!-- color definitions go here -->
<!-- Material design dynamic system palette:-->
@@ -3171,26 +3171,26 @@
<public name="system_accent3_800" />
<public name="system_accent3_900" />
<public name="system_accent3_1000" />
- </public-group>
+ </staging-public-group>
- <public-group type="dimen" first-id="0x01050008">
+ <staging-public-group type="dimen" first-id="0x01050008">
<!-- dimension definitions go here -->
<!-- System-provided dimensions for app widgets. -->
<public name="system_app_widget_background_radius" />
<public name="system_app_widget_inner_radius" />
<public name="system_app_widget_internal_padding" />
- </public-group>
+ </staging-public-group>
- <public-group type="bool" first-id="0x01110007">
+ <staging-public-group type="bool" first-id="0x01110007">
<!-- boolean definitions go here -->
- </public-group>
+ </staging-public-group>
- <public-group type="style" first-id="0x010302e5">
+ <staging-public-group type="style" first-id="0x010302e5">
<!-- style definitions go here -->
- </public-group>
+ </staging-public-group>
- <public-group type="string" first-id="0x01040028">
+ <staging-public-group type="string" first-id="0x01040028">
<!-- @hide @SystemApi @TestApi -->
<public name="config_systemAutomotiveCluster" />
<!-- @hide @SystemApi @TestApi -->
@@ -3211,11 +3211,11 @@
<public name="config_systemWellbeing" />
<!-- @hide @SystemApi -->
<public name="config_systemTelevisionNotificationHandler" />
- </public-group>
+ </staging-public-group>
- <public-group type="id" first-id="0x01020055">
+ <staging-public-group type="id" first-id="0x01020055">
<!-- id definitions go here -->
- </public-group>
+ </staging-public-group>
<!-- ===============================================================
DO NOT ADD UN-GROUPED ITEMS HERE
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 58fa8de4970e..61e766e36de5 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -1485,6 +1485,11 @@
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=120]-->
<string name="permdesc_bluetooth_connect" product="default">Allows the app to connect to paired Bluetooth devices</string>
+ <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=50]-->
+ <string name="permlab_uwb_ranging">range to devices using ultra-wideband</string>
+ <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=120]-->
+ <string name="permdesc_uwb_ranging" product="default">Allows the app to range to devices using ultra-wideband</string>
+
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_preferredPaymentInfo">Preferred NFC Payment Service Information</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 1ab3c849cae7..92d857d07353 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -1889,7 +1889,6 @@
<java-symbol type="bool" name="config_notificationHeaderClickableForExpand" />
<java-symbol type="bool" name="config_enableNightMode" />
<java-symbol type="bool" name="config_tintNotificationActionButtons" />
- <java-symbol type="bool" name="config_tintNotificationsWithTheme" />
<java-symbol type="bool" name="config_dozeAfterScreenOffByDefault" />
<java-symbol type="bool" name="config_enableActivityRecognitionHardwareOverlay" />
<java-symbol type="bool" name="config_enableFusedLocationOverlay" />
@@ -2974,7 +2973,6 @@
<java-symbol type="string" name="status_bar_clock" />
<java-symbol type="string" name="status_bar_airplane" />
<java-symbol type="string" name="status_bar_no_calling" />
- <java-symbol type="string" name="status_bar_call_strength" />
<java-symbol type="string" name="status_bar_mobile" />
<java-symbol type="string" name="status_bar_ethernet" />
<java-symbol type="string" name="status_bar_vpn" />
diff --git a/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetrics.java b/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetrics.java
index dbe5773a3107..0f3bb1db6ed9 100644
--- a/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetrics.java
+++ b/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetrics.java
@@ -16,261 +16,99 @@
package com.android.frameworks.core.batterystatsloadtests;
-import android.os.Process;
-
-import com.android.internal.os.BatterySipper;
-import com.android.internal.os.BatteryStatsHelper;
+import android.os.BatteryConsumer;
+import android.os.BatteryUsageStats;
+import android.os.UidBatteryConsumer;
+import android.util.DebugUtils;
+import android.util.Range;
import java.util.ArrayList;
import java.util.List;
public class PowerMetrics {
- private static final String PACKAGE_CALENDAR_PROVIDER = "com.android.providers.calendar";
- private static final String PACKAGE_MEDIA_PROVIDER = "com.android.providers.media";
- private static final String PACKAGE_SYSTEMUI = "com.android.systemui";
- private static final String[] PACKAGES_SYSTEM = {PACKAGE_MEDIA_PROVIDER,
- PACKAGE_CALENDAR_PROVIDER, PACKAGE_SYSTEMUI};
enum MetricKind {
POWER,
DURATION,
}
- public static final String METRIC_APP_POWER = "appPower";
- public static final String METRIC_APP_POWER_EXCLUDE_SYSTEM_FROM_TOTAL = "appPowerExcludeSystem";
- public static final String METRIC_APP_POWER_EXCLUDE_SMEARED = "appPowerExcludeSmeared";
- public static final String METRIC_SCREEN_POWER = "screenPower";
- public static final String METRIC_WIFI_POWER = "wifiPower";
- public static final String METRIC_SYSTEM_SERVICE_CPU_POWER = "systemService";
- public static final String METRIC_OTHER_POWER = "otherPower";
- public static final String METRIC_CPU_POWER = "cpuPower";
- public static final String METRIC_RAM_POWER = "ramPower";
- public static final String METRIC_WAKELOCK_POWER = "wakelockPower";
- public static final String METRIC_MOBILE_RADIO_POWER = "mobileRadioPower";
- public static final String METRIC_BLUETOOTH_POWER = "bluetoothPower";
- public static final String METRIC_GPS_POWER = "gpsPower";
- public static final String METRIC_CAMERA_POWER = "cameraPower";
- public static final String METRIC_FLASHLIGHT_POWER = "flashlightPower";
- public static final String METRIC_SENSORS_POWER = "sensorsPower";
- public static final String METRIC_AUDIO_POWER = "audioPower";
- public static final String METRIC_VIDEO_POWER = "videoPower";
- public static final String METRIC_CPU_TIME = "cpuTime";
- public static final String METRIC_CPU_FOREGROUND_TIME = "cpuForegroundTime";
- public static final String METRIC_WAKELOCK_TIME = "wakelockTime";
- public static final String METRIC_WIFI_RUNNING_TIME = "wifiRunningTime";
- public static final String METRIC_BLUETOOTH_RUNNING_TIME = "bluetoothRunningTime";
- public static final String METRIC_GPS_TIME = "gpsTime";
- public static final String METRIC_CAMERA_TIME = "cameraTime";
- public static final String METRIC_FLASHLIGHT_TIME = "flashlightTime";
- public static final String METRIC_AUDIO_TIME = "audioTime";
- public static final String METRIC_VIDEO_TIME = "videoTime";
-
public static class Metric {
- public String metricType;
+ public String metricName;
public MetricKind metricKind;
- public String title;
+ public String statusKeyPrefix;
public double value;
public double total;
}
- private final double mMinDrainedPower;
- private final double mMaxDrainedPower;
+ private final double mDrainedPower;
private List<Metric> mMetrics = new ArrayList<>();
- public PowerMetrics(BatteryStatsHelper batteryStatsHelper, int uid) {
- mMinDrainedPower = batteryStatsHelper.getMinDrainedPower();
- mMaxDrainedPower = batteryStatsHelper.getMaxDrainedPower();
-
- List<BatterySipper> usageList = batteryStatsHelper.getUsageList();
+ public PowerMetrics(BatteryUsageStats batteryUsageStats, int uid) {
+ final Range<Double> dischargedPowerRange = batteryUsageStats.getDischargedPowerRange();
+ mDrainedPower = (dischargedPowerRange.getLower() + dischargedPowerRange.getUpper()) / 2;
+ double[] totalPowerPerComponentMah = new double[BatteryConsumer.POWER_COMPONENT_COUNT];
+ long[] totalDurationPerComponentMs = new long[BatteryConsumer.POWER_COMPONENT_COUNT];
- double totalPowerMah = 0;
- double totalSmearedPowerMah = 0;
- double totalPowerExcludeSystemMah = 0;
- double totalScreenPower = 0;
- double totalProportionalSmearMah = 0;
- double totalCpuPowerMah = 0;
- double totalSystemServiceCpuPowerMah = 0;
- double totalUsagePowerMah = 0;
- double totalWakeLockPowerMah = 0;
- double totalMobileRadioPowerMah = 0;
- double totalWifiPowerMah = 0;
- double totalBluetoothPowerMah = 0;
- double totalGpsPowerMah = 0;
- double totalCameraPowerMah = 0;
- double totalFlashlightPowerMah = 0;
- double totalSensorPowerMah = 0;
- double totalAudioPowerMah = 0;
- double totalVideoPowerMah = 0;
-
- long totalCpuTimeMs = 0;
- long totalCpuFgTimeMs = 0;
- long totalWakeLockTimeMs = 0;
- long totalWifiRunningTimeMs = 0;
- long totalBluetoothRunningTimeMs = 0;
- long totalGpsTimeMs = 0;
- long totalCameraTimeMs = 0;
- long totalFlashlightTimeMs = 0;
- long totalAudioTimeMs = 0;
- long totalVideoTimeMs = 0;
-
- BatterySipper uidSipper = null;
- for (BatterySipper sipper : usageList) {
- if (sipper.drainType == BatterySipper.DrainType.SCREEN) {
- totalScreenPower = sipper.sumPower();
+ UidBatteryConsumer selectedBatteryConsumer = null;
+ for (UidBatteryConsumer uidBatteryConsumer : batteryUsageStats.getUidBatteryConsumers()) {
+ if (uidBatteryConsumer.getUid() == uid) {
+ selectedBatteryConsumer = uidBatteryConsumer;
}
- if (isHiddenDrainType(sipper.drainType)) {
- continue;
+ for (int component = 0; component < BatteryConsumer.POWER_COMPONENT_COUNT;
+ component++) {
+ totalPowerPerComponentMah[component] += uidBatteryConsumer.getConsumedPower(
+ component);
}
- if (sipper.drainType == BatterySipper.DrainType.APP && sipper.getUid() == uid) {
- uidSipper = sipper;
+ for (int component = 0; component < BatteryConsumer.TIME_COMPONENT_COUNT; component++) {
+ totalDurationPerComponentMs[component] +=
+ uidBatteryConsumer.getUsageDurationMillis(component);
}
-
- totalPowerMah += sipper.sumPower();
- totalSmearedPowerMah += sipper.totalSmearedPowerMah;
- totalProportionalSmearMah += sipper.proportionalSmearMah;
-
- if (!isSystemSipper(sipper)) {
- totalPowerExcludeSystemMah += sipper.totalSmearedPowerMah;
- }
-
- totalCpuPowerMah += sipper.cpuPowerMah;
- totalSystemServiceCpuPowerMah += sipper.systemServiceCpuPowerMah;
- totalUsagePowerMah += sipper.usagePowerMah;
- totalWakeLockPowerMah += sipper.wakeLockPowerMah;
- totalMobileRadioPowerMah += sipper.mobileRadioPowerMah;
- totalWifiPowerMah += sipper.wifiPowerMah;
- totalBluetoothPowerMah += sipper.bluetoothPowerMah;
- totalGpsPowerMah += sipper.gpsPowerMah;
- totalCameraPowerMah += sipper.cameraPowerMah;
- totalFlashlightPowerMah += sipper.flashlightPowerMah;
- totalSensorPowerMah += sipper.sensorPowerMah;
- totalAudioPowerMah += sipper.audioPowerMah;
- totalVideoPowerMah += sipper.videoPowerMah;
-
- totalCpuTimeMs += sipper.cpuTimeMs;
- totalCpuFgTimeMs += sipper.cpuFgTimeMs;
- totalWakeLockTimeMs += sipper.wakeLockTimeMs;
- totalWifiRunningTimeMs += sipper.wifiRunningTimeMs;
- totalBluetoothRunningTimeMs += sipper.bluetoothRunningTimeMs;
- totalGpsTimeMs += sipper.gpsTimeMs;
- totalCameraTimeMs += sipper.cameraTimeMs;
- totalFlashlightTimeMs += sipper.flashlightTimeMs;
- totalAudioTimeMs += sipper.audioTimeMs;
- totalVideoTimeMs += sipper.videoTimeMs;
}
- if (uidSipper == null) {
+ if (selectedBatteryConsumer == null) {
return;
}
- addMetric(METRIC_APP_POWER, MetricKind.POWER, "Total power",
- uidSipper.totalSmearedPowerMah, totalSmearedPowerMah);
- addMetric(METRIC_APP_POWER_EXCLUDE_SYSTEM_FROM_TOTAL, MetricKind.POWER,
- "Total power excluding system",
- uidSipper.totalSmearedPowerMah, totalPowerExcludeSystemMah);
- addMetric(METRIC_SCREEN_POWER, MetricKind.POWER, "Screen, smeared",
- uidSipper.screenPowerMah, totalScreenPower);
- addMetric(METRIC_OTHER_POWER, MetricKind.POWER, "Other, smeared",
- uidSipper.proportionalSmearMah, totalProportionalSmearMah);
- addMetric(METRIC_APP_POWER_EXCLUDE_SMEARED, MetricKind.POWER, "Excluding smeared",
- uidSipper.totalPowerMah, totalPowerMah);
- addMetric(METRIC_CPU_POWER, MetricKind.POWER, "CPU",
- uidSipper.cpuPowerMah, totalCpuPowerMah);
- addMetric(METRIC_SYSTEM_SERVICE_CPU_POWER, MetricKind.POWER, "System services",
- uidSipper.systemServiceCpuPowerMah, totalSystemServiceCpuPowerMah);
- addMetric(METRIC_RAM_POWER, MetricKind.POWER, "RAM",
- uidSipper.usagePowerMah, totalUsagePowerMah);
- addMetric(METRIC_WAKELOCK_POWER, MetricKind.POWER, "Wake lock",
- uidSipper.wakeLockPowerMah, totalWakeLockPowerMah);
- addMetric(METRIC_MOBILE_RADIO_POWER, MetricKind.POWER, "Mobile radio",
- uidSipper.mobileRadioPowerMah, totalMobileRadioPowerMah);
- addMetric(METRIC_WIFI_POWER, MetricKind.POWER, "WiFi",
- uidSipper.wifiPowerMah, totalWifiPowerMah);
- addMetric(METRIC_BLUETOOTH_POWER, MetricKind.POWER, "Bluetooth",
- uidSipper.bluetoothPowerMah, totalBluetoothPowerMah);
- addMetric(METRIC_GPS_POWER, MetricKind.POWER, "GPS",
- uidSipper.gpsPowerMah, totalGpsPowerMah);
- addMetric(METRIC_CAMERA_POWER, MetricKind.POWER, "Camera",
- uidSipper.cameraPowerMah, totalCameraPowerMah);
- addMetric(METRIC_FLASHLIGHT_POWER, MetricKind.POWER, "Flashlight",
- uidSipper.flashlightPowerMah, totalFlashlightPowerMah);
- addMetric(METRIC_SENSORS_POWER, MetricKind.POWER, "Sensors",
- uidSipper.sensorPowerMah, totalSensorPowerMah);
- addMetric(METRIC_AUDIO_POWER, MetricKind.POWER, "Audio",
- uidSipper.audioPowerMah, totalAudioPowerMah);
- addMetric(METRIC_VIDEO_POWER, MetricKind.POWER, "Video",
- uidSipper.videoPowerMah, totalVideoPowerMah);
-
- addMetric(METRIC_CPU_TIME, MetricKind.DURATION, "CPU time",
- uidSipper.cpuTimeMs, totalCpuTimeMs);
- addMetric(METRIC_CPU_FOREGROUND_TIME, MetricKind.DURATION, "CPU foreground time",
- uidSipper.cpuFgTimeMs, totalCpuFgTimeMs);
- addMetric(METRIC_WAKELOCK_TIME, MetricKind.DURATION, "Wake lock time",
- uidSipper.wakeLockTimeMs, totalWakeLockTimeMs);
- addMetric(METRIC_WIFI_RUNNING_TIME, MetricKind.DURATION, "WiFi running time",
- uidSipper.wifiRunningTimeMs, totalWifiRunningTimeMs);
- addMetric(METRIC_BLUETOOTH_RUNNING_TIME, MetricKind.DURATION, "Bluetooth time",
- uidSipper.bluetoothRunningTimeMs, totalBluetoothRunningTimeMs);
- addMetric(METRIC_GPS_TIME, MetricKind.DURATION, "GPS time",
- uidSipper.gpsTimeMs, totalGpsTimeMs);
- addMetric(METRIC_CAMERA_TIME, MetricKind.DURATION, "Camera time",
- uidSipper.cameraTimeMs, totalCameraTimeMs);
- addMetric(METRIC_FLASHLIGHT_TIME, MetricKind.DURATION, "Flashlight time",
- uidSipper.flashlightTimeMs, totalFlashlightTimeMs);
- addMetric(METRIC_AUDIO_TIME, MetricKind.DURATION, "Audio time",
- uidSipper.audioTimeMs, totalAudioTimeMs);
- addMetric(METRIC_VIDEO_TIME, MetricKind.DURATION, "Video time",
- uidSipper.videoTimeMs, totalVideoTimeMs);
- }
+ for (int component = 0; component < BatteryConsumer.POWER_COMPONENT_COUNT; component++) {
+ addMetric(getPowerMetricName(component), MetricKind.POWER,
+ selectedBatteryConsumer.getConsumedPower(component),
+ totalPowerPerComponentMah[component]);
+ }
- public List<Metric> getMetrics() {
- return mMetrics;
+ for (int component = 0; component < BatteryConsumer.TIME_COMPONENT_COUNT; component++) {
+ addMetric(getTimeMetricName(component), MetricKind.DURATION,
+ selectedBatteryConsumer.getUsageDurationMillis(component),
+ totalDurationPerComponentMs[component]);
+ }
}
- public double getMinDrainedPower() {
- return mMinDrainedPower;
+ static String getTimeMetricName(int componentId) {
+ return "TIME_" + DebugUtils.constantToString(BatteryConsumer.class,
+ "TIME_COMPONENT_", componentId);
}
- public double getMaxDrainedPower() {
- return mMaxDrainedPower;
+ static String getPowerMetricName(int componentId) {
+ return "POWER_" + DebugUtils.constantToString(BatteryConsumer.class,
+ "POWER_COMPONENT_", componentId);
}
- protected boolean isHiddenDrainType(BatterySipper.DrainType drainType) {
- return drainType == BatterySipper.DrainType.IDLE
- || drainType == BatterySipper.DrainType.CELL
- || drainType == BatterySipper.DrainType.SCREEN
- || drainType == BatterySipper.DrainType.UNACCOUNTED
- || drainType == BatterySipper.DrainType.OVERCOUNTED
- || drainType == BatterySipper.DrainType.BLUETOOTH
- || drainType == BatterySipper.DrainType.WIFI;
+ public List<Metric> getMetrics() {
+ return mMetrics;
}
- private boolean isSystemSipper(BatterySipper sipper) {
- final int uid = sipper.uidObj == null ? -1 : sipper.getUid();
- if (uid >= Process.ROOT_UID && uid < Process.FIRST_APPLICATION_UID) {
- return true;
- } else if (sipper.mPackages != null) {
- for (final String packageName : sipper.mPackages) {
- for (final String systemPackage : PACKAGES_SYSTEM) {
- if (systemPackage.equals(packageName)) {
- return true;
- }
- }
- }
- }
-
- return false;
+ public double getDrainedPower() {
+ return mDrainedPower;
}
- private void addMetric(String metricType, MetricKind metricKind, String title, double amount,
+ private void addMetric(String metricType, MetricKind metricKind, double amount,
double totalAmount) {
Metric metric = new Metric();
- metric.metricType = metricType;
+ metric.metricName = metricType;
metric.metricKind = metricKind;
- metric.title = title;
+ metric.statusKeyPrefix = metricKind.toString().toLowerCase();
metric.value = amount;
metric.total = totalAmount;
mMetrics.add(metric);
diff --git a/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetricsCollector.java b/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetricsCollector.java
index 254458cc8935..5b5da603b199 100644
--- a/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetricsCollector.java
+++ b/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/PowerMetricsCollector.java
@@ -19,47 +19,43 @@ package com.android.frameworks.core.batterystatsloadtests;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import android.app.Activity;
import android.app.Instrumentation;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.os.BatteryConsumer;
import android.os.BatteryManager;
-import android.os.BatteryStats;
+import android.os.BatteryStatsManager;
import android.os.Bundle;
+import android.os.ConditionVariable;
import android.os.Process;
import android.os.SystemClock;
-import android.os.UserManager;
+import android.util.IndentingPrintWriter;
import android.util.Log;
import android.util.TimeUtils;
import androidx.test.platform.app.InstrumentationRegistry;
-import com.android.compatibility.common.util.SystemUtil;
-import com.android.internal.os.BatteryStatsHelper;
-import com.android.internal.os.LoggingPrintStream;
-
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
-import java.io.PrintStream;
+import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
public class PowerMetricsCollector implements TestRule {
private final String mTag;
private final float mBatteryDrainThresholdPct;
private final int mTimeoutMillis;
+ private final Instrumentation mInstrumentation;
private final Context mContext;
- private final UserManager mUserManager;
private final int mUid;
- private final BatteryStatsHelper mStatsHelper;
- private final CountDownLatch mSuspendingBatteryInput = new CountDownLatch(1);
+ private final ConditionVariable mSuspendingBatteryInput = new ConditionVariable();
private long mStartTime;
private volatile float mInitialBatteryLevel;
@@ -68,29 +64,34 @@ public class PowerMetricsCollector implements TestRule {
private PowerMetrics mInitialPowerMetrics;
private PowerMetrics mFinalPowerMetrics;
private List<PowerMetrics.Metric> mPowerMetricsDelta;
- private Intent mBatteryStatus;
+ private final BatteryStatsManager mBatteryStatsManager;
+ private final BroadcastReceiver mBatteryLevelReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ handleBatteryStatus(intent);
+ }
+ };
+ private final Bundle mStatus = new Bundle();
+ private final StringWriter mReportStringWriter = new StringWriter();
+ private final IndentingPrintWriter mReportWriter =
+ new IndentingPrintWriter(mReportStringWriter);
@Override
public Statement apply(Statement base, Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
- BroadcastReceiver batteryBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- handleBatteryStatus(intent);
- }
- };
- mBatteryStatus = mContext.registerReceiver(batteryBroadcastReceiver,
- new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
disableCharger();
try {
- prepareBatteryLevelMonitor();
mStartTime = SystemClock.uptimeMillis();
+ mContext.registerReceiver(mBatteryLevelReceiver,
+ new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
base.evaluate();
captureFinalPowerStatsData();
+ mStatus.putString("report", mReportStringWriter.toString());
+ mInstrumentation.sendStatus(Activity.RESULT_OK, mStatus);
} finally {
- mContext.unregisterReceiver(batteryBroadcastReceiver);
+ mContext.unregisterReceiver(mBatteryLevelReceiver);
enableCharger();
}
}
@@ -102,35 +103,41 @@ public class PowerMetricsCollector implements TestRule {
mBatteryDrainThresholdPct = batteryDrainThresholdPct;
mTimeoutMillis = timeoutMillis;
- Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
- mContext = instrumentation.getContext();
+ mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ mContext = mInstrumentation.getContext();
mUid = Process.myUid();
- mUserManager = mContext.getSystemService(UserManager.class);
- // TODO(b/175324611): Use BatteryUsageStats instead
- mStatsHelper = new BatteryStatsHelper(mContext, false /* collectBatteryBroadcast */);
- mStatsHelper.create((Bundle) null);
+ mBatteryStatsManager = mContext.getSystemService(BatteryStatsManager.class);
}
- private void disableCharger() throws InterruptedException {
- SystemUtil.runShellCommand("dumpsys battery suspend_input");
- final boolean success = mSuspendingBatteryInput.await(10, TimeUnit.SECONDS);
- assertTrue("Timed out waiting for battery input to be suspended", success);
+ private void disableCharger() {
+ final BroadcastReceiver receiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (!isCharging(intent)) {
+ mInitialBatteryLevel = mCurrentBatteryLevel = getBatteryLevel(intent);
+ mSuspendingBatteryInput.open();
+ }
+ }
+ };
+ final Intent intent = mContext.registerReceiver(
+ receiver,
+ new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+
+ if (isCharging(intent)) {
+ mBatteryStatsManager.suspendBatteryInput();
+ final boolean success = mSuspendingBatteryInput.block(10000);
+ assertTrue("Timed out waiting for battery input to be suspended", success);
+ }
+
+ mContext.unregisterReceiver(receiver);
}
private void enableCharger() {
- SystemUtil.runShellCommand("dumpsys battery reset");
+ mBatteryStatsManager.resetBattery(/* forceUpdate */false);
}
private PowerMetrics readBatteryStatsData() {
- mStatsHelper.clearStats();
- mStatsHelper.refreshStats(BatteryStats.STATS_SINCE_CHARGED,
- mUserManager.getUserProfiles());
- return new PowerMetrics(mStatsHelper, mUid);
- }
-
- protected void prepareBatteryLevelMonitor() {
- handleBatteryStatus(mBatteryStatus);
- mInitialBatteryLevel = mCurrentBatteryLevel;
+ return new PowerMetrics(mBatteryStatsManager.getBatteryUsageStats(), mUid);
}
protected void handleBatteryStatus(Intent intent) {
@@ -138,36 +145,35 @@ public class PowerMetricsCollector implements TestRule {
return;
}
- final boolean isCharging = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) != 0;
-
- if (mSuspendingBatteryInput.getCount() > 0) {
- if (!isCharging) {
- mSuspendingBatteryInput.countDown();
- }
- return;
- }
-
- if (isCharging) {
+ if (isCharging(intent)) {
fail("Device must remain disconnected from the power source "
+ "for the duration of the test");
}
- int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
- int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
-
- mCurrentBatteryLevel = level * 100 / (float) scale;
+ mCurrentBatteryLevel = getBatteryLevel(intent);
Log.i(mTag, "Battery level = " + mCurrentBatteryLevel);
// We delay tracking until the battery level drops. If the resolution of
// battery level is 1%, and the initially reported level is 73, we don't know whether
// it's 73.1 or 73.7. Once it drops to 72, we can be confident that the real battery
- // level it is very close to 72.0 and can start tracking.
+ // level is very close to 72.0 and can start tracking.
if (mInitialPowerMetrics == null && mCurrentBatteryLevel < mInitialBatteryLevel) {
mInitialBatteryLevel = mCurrentBatteryLevel;
mInitialPowerMetrics = readBatteryStatsData();
}
}
+ private boolean isCharging(Intent intent) {
+ return intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) != 0;
+ }
+
+ private float getBatteryLevel(Intent intent) {
+ int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+ int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+ return level * 100 / (float) scale;
+ }
+
private void captureFinalPowerStatsData() {
if (mFinalPowerMetrics != null) {
return;
@@ -181,7 +187,7 @@ public class PowerMetricsCollector implements TestRule {
for (PowerMetrics.Metric initialMetric : initialPowerMetrics) {
PowerMetrics.Metric finalMetric = null;
for (PowerMetrics.Metric metric : finalPowerMetrics) {
- if (metric.title.equals(initialMetric.title)) {
+ if (metric.metricName.equals(initialMetric.metricName)) {
finalMetric = metric;
break;
}
@@ -189,9 +195,9 @@ public class PowerMetricsCollector implements TestRule {
if (finalMetric != null) {
PowerMetrics.Metric delta = new PowerMetrics.Metric();
- delta.metricType = initialMetric.metricType;
+ delta.metricName = initialMetric.metricName;
delta.metricKind = initialMetric.metricKind;
- delta.title = initialMetric.title;
+ delta.statusKeyPrefix = initialMetric.statusKeyPrefix;
delta.total = finalMetric.total - initialMetric.total;
delta.value = finalMetric.value - initialMetric.value;
mPowerMetricsDelta.add(delta);
@@ -230,73 +236,80 @@ public class PowerMetricsCollector implements TestRule {
return mIterations;
}
- public void dumpMetrics() {
- dumpMetrics(new LoggingPrintStream() {
- @Override
- protected void log(String line) {
- Log.i(mTag, line);
- }
- });
+ public void report(String line) {
+ mReportWriter.println(line);
}
- public void dumpMetrics(PrintStream out) {
+ public void reportMetrics() {
List<PowerMetrics.Metric> initialPowerMetrics = mInitialPowerMetrics.getMetrics();
List<PowerMetrics.Metric> finalPowerMetrics = mFinalPowerMetrics.getMetrics();
- out.println("== Power metrics at test start");
- dumpPowerStatsData(out, initialPowerMetrics);
+ mReportWriter.println("Power metrics at test start");
+ mReportWriter.increaseIndent();
+ reportPowerStatsData(initialPowerMetrics);
+ mReportWriter.decreaseIndent();
- out.println("== Power metrics at test end");
- dumpPowerStatsData(out, finalPowerMetrics);
+ mReportWriter.println("Power metrics at test end");
+ mReportWriter.increaseIndent();
+ reportPowerStatsData(finalPowerMetrics);
+ mReportWriter.decreaseIndent();
- out.println("== Power metrics delta");
- dumpPowerStatsData(out, mPowerMetricsDelta);
+ mReportWriter.println("Power metrics delta");
+ mReportWriter.increaseIndent();
+ reportPowerStatsData(mPowerMetricsDelta);
+ mReportWriter.decreaseIndent();
}
- protected void dumpPowerStatsData(PrintStream out, List<PowerMetrics.Metric> metrics) {
+ protected void reportPowerStatsData(List<PowerMetrics.Metric> metrics) {
Locale locale = Locale.getDefault();
for (PowerMetrics.Metric metric : metrics) {
double proportion = metric.total != 0 ? metric.value * 100 / metric.total : 0;
switch (metric.metricKind) {
case POWER:
- out.println(
- String.format(locale, " %-30s %7.1f mAh %4.1f%%", metric.title,
+ mReportWriter.println(
+ String.format(locale, "%-40s %7.1f mAh %4.1f%%", metric.metricName,
metric.value, proportion));
break;
case DURATION:
- out.println(
- String.format(locale, " %-30s %,7d ms %4.1f%%", metric.title,
+ mReportWriter.println(
+ String.format(locale, "%-40s %,7d ms %4.1f%%", metric.metricName,
(long) metric.value, proportion));
break;
}
}
}
- public void dumpMetricAsPercentageOfDrainedPower(String metricType) {
- double minDrainedPower =
- mFinalPowerMetrics.getMinDrainedPower() - mInitialPowerMetrics.getMinDrainedPower();
- double maxDrainedPower =
- mFinalPowerMetrics.getMaxDrainedPower() - mInitialPowerMetrics.getMaxDrainedPower();
+ public void reportMetricAsPercentageOfDrainedPower(
+ @BatteryConsumer.PowerComponent int component) {
+ double drainedPower =
+ mFinalPowerMetrics.getDrainedPower() - mInitialPowerMetrics.getDrainedPower();
- PowerMetrics.Metric metric = getMetric(metricType);
+ PowerMetrics.Metric metric = getPowerMetric(component);
double metricDelta = metric.value;
- if (maxDrainedPower - minDrainedPower < 0.1f) {
- Log.i(mTag, String.format(Locale.getDefault(),
- "%s power consumed by the test: %.1f of %.1f mAh (%.1f%%)",
- metric.title, metricDelta, maxDrainedPower,
- metricDelta / maxDrainedPower * 100));
- } else {
- Log.i(mTag, String.format(Locale.getDefault(),
- "%s power consumed by the test: %.1f of %.1f - %.1f mAh (%.1f%% - %.1f%%)",
- metric.title, metricDelta, minDrainedPower, maxDrainedPower,
- metricDelta / minDrainedPower * 100, metricDelta / maxDrainedPower * 100));
+ final double percent = metricDelta / drainedPower * 100;
+ mStatus.putDouble(metric.statusKeyPrefix, metricDelta);
+ mStatus.putDouble(metric.statusKeyPrefix + "_pct", percent);
+
+ mReportWriter.println(String.format(Locale.getDefault(),
+ "%s power consumed by the test: %.1f of %.1f mAh (%.1f%%)",
+ metric.metricName, metricDelta, drainedPower, percent));
+ }
+
+ public PowerMetrics.Metric getPowerMetric(@BatteryConsumer.PowerComponent int component) {
+ final String name = PowerMetrics.getPowerMetricName(component);
+ for (PowerMetrics.Metric metric : mPowerMetricsDelta) {
+ if (metric.metricName.equals(name)) {
+ return metric;
+ }
}
+ return null;
}
- public PowerMetrics.Metric getMetric(String metricType) {
+ public PowerMetrics.Metric getTimeMetric(@BatteryConsumer.TimeComponent int component) {
+ final String name = PowerMetrics.getTimeMetricName(component);
for (PowerMetrics.Metric metric : mPowerMetricsDelta) {
- if (metric.metricType.equals(metricType)) {
+ if (metric.metricName.equals(name)) {
return metric;
}
}
diff --git a/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/SystemServiceCallLoadTest.java b/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/SystemServiceCallLoadTest.java
index 488469d54f29..1ebc7435f9fd 100644
--- a/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/SystemServiceCallLoadTest.java
+++ b/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/SystemServiceCallLoadTest.java
@@ -23,7 +23,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
-import android.util.Log;
+import android.os.BatteryConsumer;
import androidx.test.platform.app.InstrumentationRegistry;
@@ -58,12 +58,12 @@ public class SystemServiceCallLoadTest {
assertNotNull(resolveInfo);
}
- mPowerMetricsCollector.dumpMetrics();
+ mPowerMetricsCollector.reportMetrics();
- Log.i(TAG, "==");
- Log.i(TAG, "Total system server calls made " + mPowerMetricsCollector.getIterationCount());
+ mPowerMetricsCollector.report(
+ "Total system server calls made: " + mPowerMetricsCollector.getIterationCount());
- mPowerMetricsCollector.dumpMetricAsPercentageOfDrainedPower(
- PowerMetrics.METRIC_SYSTEM_SERVICE_CPU_POWER);
+ mPowerMetricsCollector.reportMetricAsPercentageOfDrainedPower(
+ BatteryConsumer.POWER_COMPONENT_SYSTEM_SERVICES);
}
}
diff --git a/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/WiFiLoadTest.java b/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/WiFiLoadTest.java
index 27495da8d839..15bb3fc0c20a 100644
--- a/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/WiFiLoadTest.java
+++ b/core/tests/batterystatstests/BatteryStatsLoadTests/src/com/android/frameworks/core/batterystatsloadtests/WiFiLoadTest.java
@@ -16,7 +16,7 @@
package com.android.frameworks.core.batterystatsloadtests;
-import android.util.Log;
+import android.os.BatteryConsumer;
import org.junit.Rule;
import org.junit.Test;
@@ -59,14 +59,15 @@ public class WiFiLoadTest {
}
}
- mPowerMetricsCollector.dumpMetrics();
+ mPowerMetricsCollector.reportMetrics();
- Log.i(TAG, "==");
- Log.i(TAG, "WiFi running time: " + (long) mPowerMetricsCollector.getMetric(
- PowerMetrics.METRIC_WIFI_RUNNING_TIME).value);
- Log.i(TAG, "Total bytes read over WiFi: " + totalBytesRead);
+ mPowerMetricsCollector.report(
+ "WiFi running time: " + (long) mPowerMetricsCollector.getTimeMetric(
+ BatteryConsumer.POWER_COMPONENT_WIFI).value);
- mPowerMetricsCollector.dumpMetricAsPercentageOfDrainedPower(
- PowerMetrics.METRIC_WIFI_POWER);
+ mPowerMetricsCollector.report("Total bytes read over WiFi: " + totalBytesRead);
+
+ mPowerMetricsCollector.reportMetricAsPercentageOfDrainedPower(
+ BatteryConsumer.POWER_COMPONENT_WIFI);
}
}
diff --git a/core/tests/coretests/src/android/app/NotificationTest.java b/core/tests/coretests/src/android/app/NotificationTest.java
index 0ea63643d24e..0f8c9e2de826 100644
--- a/core/tests/coretests/src/android/app/NotificationTest.java
+++ b/core/tests/coretests/src/android/app/NotificationTest.java
@@ -28,6 +28,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.LocusId;
import android.graphics.BitmapFactory;
+import android.graphics.Color;
import android.graphics.drawable.Icon;
import android.media.session.MediaSession;
import android.os.Build;
@@ -60,7 +61,7 @@ public class NotificationTest {
public void testColorizedByPermission() {
Notification n = new Notification.Builder(mContext, "test")
.setFlag(Notification.FLAG_CAN_COLORIZE, true)
- .setColorized(true)
+ .setColorized(true).setColor(Color.WHITE)
.build();
assertTrue(n.isColorized());
@@ -71,7 +72,7 @@ public class NotificationTest {
n = new Notification.Builder(mContext, "test")
.setFlag(Notification.FLAG_CAN_COLORIZE, false)
- .setColorized(true)
+ .setColorized(true).setColor(Color.WHITE)
.build();
assertFalse(n.isColorized());
}
@@ -80,7 +81,7 @@ public class NotificationTest {
public void testColorizedByForeground() {
Notification n = new Notification.Builder(mContext, "test")
.setFlag(Notification.FLAG_FOREGROUND_SERVICE, true)
- .setColorized(true)
+ .setColorized(true).setColor(Color.WHITE)
.build();
assertTrue(n.isColorized());
@@ -91,7 +92,7 @@ public class NotificationTest {
n = new Notification.Builder(mContext, "test")
.setFlag(Notification.FLAG_FOREGROUND_SERVICE, false)
- .setColorized(true)
+ .setColorized(true).setColor(Color.WHITE)
.build();
assertFalse(n.isColorized());
}
diff --git a/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java b/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java
index cfdb2b769a08..8643a37bba8d 100644
--- a/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java
+++ b/core/tests/coretests/src/android/view/accessibility/AccessibilityServiceConnectionImpl.java
@@ -163,4 +163,7 @@ public class AccessibilityServiceConnectionImpl extends IAccessibilityServiceCon
public void setGestureDetectionPassthroughRegion(int displayId, Region region) {}
public void setFocusAppearance(int strokeWidth, int color) {}
+
+ public void logTrace(long timestamp, String where, String callingParams, int processId,
+ long threadId, int callingUid, Bundle callingStack) {}
}
diff --git a/core/tests/coretests/src/com/android/internal/os/AmbientDisplayPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/AmbientDisplayPowerCalculatorTest.java
index c67f90136992..cf47efddddd9 100644
--- a/core/tests/coretests/src/com/android/internal/os/AmbientDisplayPowerCalculatorTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/AmbientDisplayPowerCalculatorTest.java
@@ -19,7 +19,6 @@ package com.android.internal.os;
import static com.google.common.truth.Truth.assertThat;
import android.os.BatteryConsumer;
-import android.os.BatteryUsageStatsQuery;
import android.os.SystemBatteryConsumer;
import android.view.Display;
@@ -71,6 +70,8 @@ public class AmbientDisplayPowerCalculatorTest {
// 100,000,00 uC / 1000 (micro-/milli-) / 360 (seconds/hour) = 27.777778 mAh
assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE))
.isWithin(PRECISION).of(27.777778);
+ assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_USAGE))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
}
@Test
@@ -85,8 +86,7 @@ public class AmbientDisplayPowerCalculatorTest {
AmbientDisplayPowerCalculator calculator =
new AmbientDisplayPowerCalculator(mStatsRule.getPowerProfile());
- mStatsRule.apply(new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(),
- calculator);
+ mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
SystemBatteryConsumer consumer =
mStatsRule.getSystemBatteryConsumer(
@@ -95,5 +95,7 @@ public class AmbientDisplayPowerCalculatorTest {
.isEqualTo(90 * MINUTE_IN_MS);
assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE))
.isWithin(PRECISION).of(15.0);
+ assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_USAGE))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
}
}
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java
index 80ab36ec84cf..1e614c480bde 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java
@@ -43,6 +43,12 @@ import org.mockito.stubbing.Answer;
import java.util.Arrays;
public class BatteryUsageStatsRule implements TestRule {
+ public static final BatteryUsageStatsQuery POWER_PROFILE_MODEL_ONLY =
+ new BatteryUsageStatsQuery.Builder()
+ .powerProfileModeledOnly()
+ .includePowerModels()
+ .build();
+
private final PowerProfile mPowerProfile;
private final MockClocks mMockClocks = new MockClocks();
private final MockBatteryStatsImpl mBatteryStats = new MockBatteryStatsImpl(mMockClocks) {
@@ -156,7 +162,8 @@ public class BatteryUsageStatsRule implements TestRule {
}
BatteryUsageStats apply(PowerCalculator... calculators) {
- return apply(BatteryUsageStatsQuery.DEFAULT, calculators);
+ return apply(new BatteryUsageStatsQuery.Builder().includePowerModels().build(),
+ calculators);
}
BatteryUsageStats apply(BatteryUsageStatsQuery query, PowerCalculator... calculators) {
@@ -165,8 +172,10 @@ public class BatteryUsageStatsRule implements TestRule {
final int customMeasuredEnergiesCount = customMeasuredEnergiesMicroJoules != null
? customMeasuredEnergiesMicroJoules.length
: 0;
+ final boolean includePowerModels = (query.getFlags()
+ & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS) != 0;
BatteryUsageStats.Builder builder = new BatteryUsageStats.Builder(
- customMeasuredEnergiesCount, 0);
+ customMeasuredEnergiesCount, 0, includePowerModels);
SparseArray<? extends BatteryStats.Uid> uidStats = mBatteryStats.getUidStats();
for (int i = 0; i < uidStats.size(); i++) {
builder.getOrCreateUidBatteryConsumerBuilder(uidStats.valueAt(i));
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java
index a18a88cb2ca8..60df9688b5a4 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java
@@ -103,7 +103,10 @@ public class BatteryUsageStatsTest {
}
public void validateBatteryUsageStats(BatteryUsageStats batteryUsageStats) {
- assertThat(batteryUsageStats.getConsumedPower()).isEqualTo(21500);
+ // Camera: (10100 + 10200) - 20000 (consumed by apps) = 300
+ // App: 300 + 400 + 500 = 1200
+ // Total: 1500
+ assertThat(batteryUsageStats.getConsumedPower()).isEqualTo(1500);
assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(20);
assertThat(batteryUsageStats.getDischargedPowerRange().getLower()).isEqualTo(1000);
assertThat(batteryUsageStats.getDischargedPowerRange().getUpper()).isEqualTo(2000);
diff --git a/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java
index 2769b163ecd2..1a87c1084fe0 100644
--- a/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java
@@ -19,6 +19,8 @@ package com.android.internal.os;
import static com.google.common.truth.Truth.assertThat;
import android.annotation.Nullable;
+import android.bluetooth.BluetoothActivityEnergyInfo;
+import android.bluetooth.UidTraffic;
import android.os.BatteryConsumer;
import android.os.BatteryUsageStatsQuery;
import android.os.Process;
@@ -41,7 +43,8 @@ public class BluetoothPowerCalculatorTest {
public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule()
.setAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_IDLE, 10.0)
.setAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_RX, 50.0)
- .setAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_TX, 100.0);
+ .setAveragePower(PowerProfile.POWER_BLUETOOTH_CONTROLLER_TX, 100.0)
+ .initMeasuredEnergyStatsLocked(0);
@Test
public void testTimerBasedModel() {
@@ -60,16 +63,15 @@ public class BluetoothPowerCalculatorTest {
BluetoothPowerCalculator calculator =
new BluetoothPowerCalculator(mStatsRule.getPowerProfile());
- mStatsRule.apply(new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(),
- calculator);
+ mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
assertThat(mStatsRule.getUidBatteryConsumer(Process.BLUETOOTH_UID)).isNull();
assertBluetoothPowerAndDuration(
mStatsRule.getUidBatteryConsumer(APP_UID),
- 0.24722, 15000);
+ 0.24722, 15000, BatteryConsumer.POWER_MODEL_POWER_PROFILE);
assertBluetoothPowerAndDuration(
mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH),
- 0.51944, 9000, 0.51944, 0.36111);
+ 0.51944, 9000, 0.51944, 0.36111, BatteryConsumer.POWER_MODEL_POWER_PROFILE);
}
@Test
@@ -89,16 +91,40 @@ public class BluetoothPowerCalculatorTest {
BluetoothPowerCalculator calculator =
new BluetoothPowerCalculator(mStatsRule.getPowerProfile());
- mStatsRule.apply(new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(),
+ mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
+
+ assertThat(mStatsRule.getUidBatteryConsumer(Process.BLUETOOTH_UID)).isNull();
+ assertBluetoothPowerAndDuration(
+ mStatsRule.getUidBatteryConsumer(APP_UID),
+ 0.2, 15000, BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+ assertBluetoothPowerAndDuration(
+ mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH),
+ 0.45, 9000, 0.45, 0.3, BatteryConsumer.POWER_MODEL_POWER_PROFILE);
+ }
+
+ @Test
+ public void testMeasuredEnergyBasedModel() {
+ final BluetoothActivityEnergyInfo info = new BluetoothActivityEnergyInfo(1000,
+ BluetoothActivityEnergyInfo.BT_STACK_STATE_STATE_ACTIVE, 7000, 5000, 0, 100000);
+ info.setUidTraffic(new UidTraffic[]{
+ new UidTraffic(Process.BLUETOOTH_UID, 1000, 2000),
+ new UidTraffic(APP_UID, 3000, 4000)
+ });
+ mStatsRule.getBatteryStats().updateBluetoothStateLocked(info, 1200000, 1000, 1000);
+
+ final BluetoothPowerCalculator calculator =
+ new BluetoothPowerCalculator(mStatsRule.getPowerProfile());
+
+ mStatsRule.apply(new BatteryUsageStatsQuery.Builder().includePowerModels().build(),
calculator);
assertThat(mStatsRule.getUidBatteryConsumer(Process.BLUETOOTH_UID)).isNull();
assertBluetoothPowerAndDuration(
mStatsRule.getUidBatteryConsumer(APP_UID),
- 0.2, 15000);
+ 0.22950, 8416, BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
assertBluetoothPowerAndDuration(
mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH),
- 0.45, 9000, 0.45, 0.3);
+ 0.43712, 3584, 0.43712, 0.33329, BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
}
private void setDurationsAndPower(
@@ -111,12 +137,14 @@ public class BluetoothPowerCalculatorTest {
}
private void assertBluetoothPowerAndDuration(@Nullable BatteryConsumer batteryConsumer,
- double powerMah, int durationMs) {
+ double powerMah, int durationMs, @BatteryConsumer.PowerModel int powerModel) {
assertThat(batteryConsumer).isNotNull();
double consumedPower = batteryConsumer.getConsumedPower(
BatteryConsumer.POWER_COMPONENT_BLUETOOTH);
assertThat(consumedPower).isWithin(PRECISION).of(powerMah);
+ assertThat(batteryConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_BLUETOOTH))
+ .isEqualTo(powerModel);
long usageDurationMillis = batteryConsumer.getUsageDurationMillis(
BatteryConsumer.TIME_COMPONENT_BLUETOOTH);
@@ -125,8 +153,9 @@ public class BluetoothPowerCalculatorTest {
}
private void assertBluetoothPowerAndDuration(@Nullable SystemBatteryConsumer batteryConsumer,
- double powerMah, int durationMs, double consumedPower, double attributedPower) {
- assertBluetoothPowerAndDuration(batteryConsumer, powerMah, durationMs);
+ double powerMah, int durationMs, double consumedPower, double attributedPower,
+ @BatteryConsumer.PowerModel int powerModel) {
+ assertBluetoothPowerAndDuration(batteryConsumer, powerMah, durationMs, powerModel);
assertThat(batteryConsumer.getConsumedPower())
.isWithin(PRECISION).of(consumedPower);
diff --git a/core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java b/core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java
index 13d529cfed26..a181bc8ba4da 100644
--- a/core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BstatsCpuTimesValidationTest.java
@@ -186,6 +186,7 @@ public class BstatsCpuTimesValidationTest {
sPerProcStateTimesAvailable = fgCpuTimes != null;
}
+ @SkipPresubmit("b/184201598 flaky")
@Test
public void testCpuFreqTimes() throws Exception {
if (!sCpuFreqTimesAvailable) {
@@ -214,6 +215,7 @@ public class BstatsCpuTimesValidationTest {
batteryOffScreenOn();
}
+ @SkipPresubmit("b/184201598 flaky")
@Test
public void testCpuFreqTimes_screenOff() throws Exception {
if (!sCpuFreqTimesAvailable) {
@@ -276,6 +278,7 @@ public class BstatsCpuTimesValidationTest {
batteryOffScreenOn();
}
+ @SkipPresubmit("b/184201598 flaky")
@Test
public void testCpuFreqTimes_stateTop() throws Exception {
if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
@@ -309,6 +312,7 @@ public class BstatsCpuTimesValidationTest {
batteryOffScreenOn();
}
+ @SkipPresubmit("b/184201598 flaky")
@Test
public void testIsolatedCpuFreqTimes_stateService() throws Exception {
if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
@@ -450,6 +454,7 @@ public class BstatsCpuTimesValidationTest {
batteryOff();
}
+ @SkipPresubmit("b/184201598 flaky")
@Test
public void testCpuFreqTimes_stateBg() throws Exception {
if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
@@ -516,6 +521,7 @@ public class BstatsCpuTimesValidationTest {
batteryOffScreenOn();
}
+ @SkipPresubmit("b/184201598 flaky")
@Test
public void testCpuFreqTimes_trackingDisabled() throws Exception {
if (!sCpuFreqTimesAvailable || !sPerProcStateTimesAvailable) {
diff --git a/core/tests/coretests/src/com/android/internal/os/CpuPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/CpuPowerCalculatorTest.java
index 496415a43a6a..31abbc20a090 100644
--- a/core/tests/coretests/src/com/android/internal/os/CpuPowerCalculatorTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/CpuPowerCalculatorTest.java
@@ -26,7 +26,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import android.os.BatteryConsumer;
-import android.os.BatteryUsageStatsQuery;
import android.os.Process;
import android.os.UidBatteryConsumer;
@@ -142,14 +141,15 @@ public class CpuPowerCalculatorTest {
CpuPowerCalculator calculator =
new CpuPowerCalculator(mStatsRule.getPowerProfile());
- mStatsRule.apply(new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(),
- calculator);
+ mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
UidBatteryConsumer uidConsumer1 = mStatsRule.getUidBatteryConsumer(APP_UID1);
assertThat(uidConsumer1.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_CPU))
.isEqualTo(3333);
assertThat(uidConsumer1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
.isWithin(PRECISION).of(1.092233);
+ assertThat(uidConsumer1.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
assertThat(uidConsumer1.getPackageWithHighestDrain()).isEqualTo("bar");
UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
@@ -157,6 +157,8 @@ public class CpuPowerCalculatorTest {
.isEqualTo(7777);
assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
.isWithin(PRECISION).of(2.672322);
+ assertThat(uidConsumer2.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
assertThat(uidConsumer2.getPackageWithHighestDrain()).isNull();
}
@@ -210,6 +212,8 @@ public class CpuPowerCalculatorTest {
.isEqualTo(3333);
assertThat(uidConsumer1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
.isWithin(PRECISION).of(3.18877);
+ assertThat(uidConsumer1.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
assertThat(uidConsumer1.getPackageWithHighestDrain()).isEqualTo("bar");
UidBatteryConsumer uidConsumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
@@ -217,6 +221,8 @@ public class CpuPowerCalculatorTest {
.isEqualTo(7777);
assertThat(uidConsumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU))
.isWithin(PRECISION).of(7.44072);
+ assertThat(uidConsumer2.getPowerModel(BatteryConsumer.POWER_COMPONENT_CPU))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
assertThat(uidConsumer2.getPackageWithHighestDrain()).isNull();
}
}
diff --git a/core/tests/coretests/src/com/android/internal/os/GnssPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/GnssPowerCalculatorTest.java
index eed61cb0afe7..95c3b4ed8a40 100644
--- a/core/tests/coretests/src/com/android/internal/os/GnssPowerCalculatorTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/GnssPowerCalculatorTest.java
@@ -19,7 +19,6 @@ package com.android.internal.os;
import static com.google.common.truth.Truth.assertThat;
import android.os.BatteryConsumer;
-import android.os.BatteryUsageStatsQuery;
import android.os.Process;
import android.os.UidBatteryConsumer;
@@ -54,14 +53,15 @@ public class GnssPowerCalculatorTest {
GnssPowerCalculator calculator =
new GnssPowerCalculator(mStatsRule.getPowerProfile());
- mStatsRule.apply(new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(),
- calculator);
+ mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
UidBatteryConsumer consumer = mStatsRule.getUidBatteryConsumer(APP_UID);
assertThat(consumer.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_GNSS))
.isEqualTo(1000);
assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_GNSS))
.isWithin(PRECISION).of(0.1);
+ assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_GNSS))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
}
@Test
@@ -87,11 +87,15 @@ public class GnssPowerCalculatorTest {
.isEqualTo(1000);
assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_GNSS))
.isWithin(PRECISION).of(2.77777);
+ assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_GNSS))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
UidBatteryConsumer consumer2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
assertThat(consumer2.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_GNSS))
.isEqualTo(2000);
assertThat(consumer2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_GNSS))
.isWithin(PRECISION).of(5.55555);
+ assertThat(consumer2.getPowerModel(BatteryConsumer.POWER_COMPONENT_GNSS))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
}
}
diff --git a/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java
index 813bc9f43662..3505e8c34027 100644
--- a/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/MobileRadioPowerCalculatorTest.java
@@ -26,7 +26,6 @@ import static org.mockito.Mockito.when;
import android.net.NetworkCapabilities;
import android.net.NetworkStats;
import android.os.BatteryConsumer;
-import android.os.BatteryUsageStatsQuery;
import android.os.Process;
import android.os.SystemBatteryConsumer;
import android.os.UidBatteryConsumer;
@@ -99,13 +98,14 @@ public class MobileRadioPowerCalculatorTest {
MobileRadioPowerCalculator calculator =
new MobileRadioPowerCalculator(mStatsRule.getPowerProfile());
- mStatsRule.apply(new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(),
- calculator);
+ mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
SystemBatteryConsumer consumer =
mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO);
assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
.isWithin(PRECISION).of(2.2444);
+ assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
assertThat(consumer.getConsumedPower())
.isWithin(PRECISION).of(2.2444);
assertThat(consumer.getPowerConsumedByApps())
@@ -114,6 +114,8 @@ public class MobileRadioPowerCalculatorTest {
UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
.isWithin(PRECISION).of(0.8);
+ assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
}
@Test
@@ -163,11 +165,15 @@ public class MobileRadioPowerCalculatorTest {
// 100000000 uAs * (1 mA / 1000 uA) * (1 h / 3600 s) + 1.53934 (apps)= 4.31711 mAh
assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
.isWithin(PRECISION).of(4.31711);
+ assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
assertThat(consumer.getPowerConsumedByApps())
.isWithin(PRECISION).of(1.53934);
UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
.isWithin(PRECISION).of(1.53934);
+ assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
}
}
diff --git a/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java
index d296afa00dbc..9cd6ea8a6a3b 100644
--- a/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/ScreenPowerCalculatorTest.java
@@ -20,7 +20,6 @@ import static com.google.common.truth.Truth.assertThat;
import android.app.ActivityManager;
import android.os.BatteryConsumer;
-import android.os.BatteryUsageStatsQuery;
import android.os.Process;
import android.os.SystemBatteryConsumer;
import android.os.UidBatteryConsumer;
@@ -91,6 +90,8 @@ public class ScreenPowerCalculatorTest {
// 600000000 uAs * (1 mA / 1000 uA) * (1 h / 3600 s) = 166.66666 mAh
assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE))
.isWithin(PRECISION).of(166.66666);
+ assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_USAGE))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
assertThat(consumer.getConsumedPower())
.isWithin(PRECISION).of(166.66666);
assertThat(consumer.getPowerConsumedByApps())
@@ -105,6 +106,8 @@ public class ScreenPowerCalculatorTest {
// Uid1 charge = 200000000 + 5 / 45 * 300000000 mAs = 64.81 mAh
assertThat(uid1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN))
.isWithin(PRECISION).of(64.81481);
+ assertThat(uid1.getPowerModel(BatteryConsumer.POWER_COMPONENT_SCREEN))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
UidBatteryConsumer uid2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
assertThat(uid2.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_SCREEN))
@@ -115,6 +118,8 @@ public class ScreenPowerCalculatorTest {
// Uid2 charge = 40 / 45 * 300000000 + 100000000 mAs = 101.85 mAh
assertThat(uid2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN))
.isWithin(PRECISION).of(101.85185);
+ assertThat(uid2.getPowerModel(BatteryConsumer.POWER_COMPONENT_SCREEN))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
}
@Test
@@ -144,8 +149,7 @@ public class ScreenPowerCalculatorTest {
ScreenPowerCalculator calculator =
new ScreenPowerCalculator(mStatsRule.getPowerProfile());
- mStatsRule.apply(new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(),
- calculator);
+ mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
SystemBatteryConsumer consumer =
mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_SCREEN);
@@ -153,6 +157,8 @@ public class ScreenPowerCalculatorTest {
.isEqualTo(80 * MINUTE_IN_MS);
assertThat(consumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_USAGE))
.isWithin(PRECISION).of(92.0);
+ assertThat(consumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_USAGE))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
assertThat(consumer.getConsumedPower())
.isWithin(PRECISION).of(92.0);
assertThat(consumer.getPowerConsumedByApps())
@@ -166,6 +172,8 @@ public class ScreenPowerCalculatorTest {
// Uid1 charge = 20 / 80 * 92.0 = 23.0 mAh
assertThat(uid1.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN))
.isWithin(PRECISION).of(23.0);
+ assertThat(uid1.getPowerModel(BatteryConsumer.POWER_COMPONENT_SCREEN))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
UidBatteryConsumer uid2 = mStatsRule.getUidBatteryConsumer(APP_UID2);
assertThat(uid2.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_SCREEN))
@@ -175,6 +183,8 @@ public class ScreenPowerCalculatorTest {
// Uid2 charge = 60 / 80 * 92.0 = 69.0 mAh
assertThat(uid2.getConsumedPower(BatteryConsumer.POWER_COMPONENT_SCREEN))
.isWithin(PRECISION).of(69.0);
+ assertThat(uid2.getPowerModel(BatteryConsumer.POWER_COMPONENT_SCREEN))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
}
private void setProcState(int uid, int procState, boolean resumed, long realtimeMs,
diff --git a/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java
index 5df91dd00f59..2e501dbe355e 100644
--- a/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/WifiPowerCalculatorTest.java
@@ -24,7 +24,6 @@ import static com.google.common.truth.Truth.assertThat;
import android.net.NetworkCapabilities;
import android.net.NetworkStats;
import android.os.BatteryConsumer;
-import android.os.BatteryUsageStatsQuery;
import android.os.Process;
import android.os.SystemBatteryConsumer;
import android.os.UidBatteryConsumer;
@@ -85,14 +84,15 @@ public class WifiPowerCalculatorTest {
batteryStats.updateWifiState(energyInfo, POWER_DATA_UNAVAILABLE, 1000, 1000);
WifiPowerCalculator calculator = new WifiPowerCalculator(mStatsRule.getPowerProfile());
- mStatsRule.apply(new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(),
- calculator);
+ mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
assertThat(uidConsumer.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_WIFI))
.isEqualTo(1423);
assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI))
.isWithin(PRECISION).of(0.2214666);
+ assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
SystemBatteryConsumer systemConsumer =
mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_WIFI);
@@ -100,6 +100,8 @@ public class WifiPowerCalculatorTest {
.isEqualTo(5577);
assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI))
.isWithin(PRECISION).of(1.11153);
+ assertThat(systemConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
assertThat(systemConsumer.getPowerConsumedByApps())
.isWithin(PRECISION).of(0.466333);
}
@@ -120,6 +122,8 @@ public class WifiPowerCalculatorTest {
/* Same ratio as in testPowerControllerBasedModel_nonMeasured but scaled by 1_000_000uC. */
assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI))
.isWithin(PRECISION).of(0.2214666 / (0.2214666 + 0.645200) * 1_000_000 / 3600000);
+ assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
SystemBatteryConsumer systemConsumer =
mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_WIFI);
@@ -128,6 +132,8 @@ public class WifiPowerCalculatorTest {
/* Same ratio as in testPowerControllerBasedModel_nonMeasured but scaled by 1_000_000uC. */
assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI))
.isWithin(PRECISION).of(1.11153 / (0.2214666 + 0.645200) * 1_000_000 / 3600000);
+ assertThat(systemConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
assertThat(systemConsumer.getPowerConsumedByApps())
.isWithin(PRECISION).of(0.14946);
}
@@ -153,14 +159,15 @@ public class WifiPowerCalculatorTest {
batteryStats.updateWifiState(/* energyInfo */ null, POWER_DATA_UNAVAILABLE, 1000, 1000);
WifiPowerCalculator calculator = new WifiPowerCalculator(mStatsRule.getPowerProfile());
- mStatsRule.apply(new BatteryUsageStatsQuery.Builder().powerProfileModeledOnly().build(),
- calculator);
+ mStatsRule.apply(BatteryUsageStatsRule.POWER_PROFILE_MODEL_ONLY, calculator);
UidBatteryConsumer uidConsumer = mStatsRule.getUidBatteryConsumer(APP_UID);
assertThat(uidConsumer.getUsageDurationMillis(BatteryConsumer.TIME_COMPONENT_WIFI))
.isEqualTo(1000);
assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI))
.isWithin(PRECISION).of(0.8231573);
+ assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
SystemBatteryConsumer systemConsumer =
mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_WIFI);
@@ -168,6 +175,8 @@ public class WifiPowerCalculatorTest {
.isEqualTo(2222);
assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI))
.isWithin(PRECISION).of(2.575000);
+ assertThat(systemConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_POWER_PROFILE);
assertThat(systemConsumer.getPowerConsumedByApps())
.isWithin(PRECISION).of(1.69907);
}
@@ -189,6 +198,8 @@ public class WifiPowerCalculatorTest {
/* Same ratio as in testTimerBasedModel_nonMeasured but scaled by 1_000_000uC. */
assertThat(uidConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI))
.isWithin(PRECISION).of(0.8231573 / (0.8231573 + 0.8759216) * 1_000_000 / 3600000);
+ assertThat(uidConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
SystemBatteryConsumer systemConsumer =
mStatsRule.getSystemBatteryConsumer(SystemBatteryConsumer.DRAIN_TYPE_WIFI);
@@ -197,6 +208,8 @@ public class WifiPowerCalculatorTest {
/* Same ratio as in testTimerBasedModel_nonMeasured but scaled by 1_000_000uC. */
assertThat(systemConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_WIFI))
.isWithin(PRECISION).of(2.575000 / (0.8231573 + 0.8759216) * 1_000_000 / 3600000);
+ assertThat(systemConsumer.getPowerModel(BatteryConsumer.POWER_COMPONENT_WIFI))
+ .isEqualTo(BatteryConsumer.POWER_MODEL_MEASURED_ENERGY);
assertThat(systemConsumer.getPowerConsumedByApps())
.isWithin(PRECISION).of(0.277777);
}
diff --git a/data/etc/privapp-permissions-platform.xml b/data/etc/privapp-permissions-platform.xml
index 1eecca5baa2c..8312320a8d87 100644
--- a/data/etc/privapp-permissions-platform.xml
+++ b/data/etc/privapp-permissions-platform.xml
@@ -499,6 +499,8 @@ applications that come with the platform
<permission name="android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER" />
<!-- Permission required for CTS test - CtsAlarmManagerTestCases -->
<permission name="android.permission.SCHEDULE_PRIORITIZED_ALARM" />
+ <!-- Permission required for CTS test - SystemMediaRouter2Test -->
+ <permission name="android.permission.MODIFY_AUDIO_ROUTING"/>
</privapp-permissions>
<privapp-permissions package="com.android.statementservice">
diff --git a/drm/java/Android.bp b/drm/java/Android.bp
index 54e1a8c0dff8..21fc018f7f4a 100644
--- a/drm/java/Android.bp
+++ b/drm/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-drm-sources",
srcs: ["**/*.java"],
diff --git a/graphics/java/Android.bp b/graphics/java/Android.bp
index dcfd5d72a7cb..63d1f6d6f2d6 100644
--- a/graphics/java/Android.bp
+++ b/graphics/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-graphics-nonupdatable-sources",
srcs: [
diff --git a/graphics/java/android/graphics/drawable/RippleAnimationSession.java b/graphics/java/android/graphics/drawable/RippleAnimationSession.java
index 94d5c2265372..fb089741dfb2 100644
--- a/graphics/java/android/graphics/drawable/RippleAnimationSession.java
+++ b/graphics/java/android/graphics/drawable/RippleAnimationSession.java
@@ -49,23 +49,12 @@ public final class RippleAnimationSession {
private Runnable mOnUpdate;
private long mStartTime;
private boolean mForceSoftware;
- private final ValueAnimator mSparkle = ValueAnimator.ofFloat(0, 1);
+ private boolean mAnimateSparkle;
RippleAnimationSession(@NonNull AnimationProperties<Float, Paint> properties,
boolean forceSoftware) {
mProperties = properties;
mForceSoftware = forceSoftware;
-
- mSparkle.addUpdateListener(anim -> {
- final long now = AnimationUtils.currentAnimationTimeMillis();
- final long elapsed = now - mStartTime - ENTER_ANIM_DURATION;
- final float phase = (float) elapsed / 800;
- mProperties.getShader().setNoisePhase(phase);
- notifyUpdate();
- });
- mSparkle.setDuration(ENTER_ANIM_DURATION);
- mSparkle.setInterpolator(LINEAR_INTERPOLATOR);
- mSparkle.setRepeatCount(ValueAnimator.INFINITE);
}
@NonNull RippleAnimationSession enter(Canvas canvas) {
@@ -99,6 +88,16 @@ public final class RippleAnimationSession {
return this;
}
+ public boolean shouldAnimateSparkle() {
+ return mAnimateSparkle;
+ }
+
+ public float getSparklePhase() {
+ final long now = AnimationUtils.currentAnimationTimeMillis();
+ final long elapsed = now - mStartTime;
+ return (float) elapsed / 800;
+ }
+
private boolean isHwAccelerated(Canvas canvas) {
return canvas.isHardwareAccelerated() && !mForceSoftware;
}
@@ -115,7 +114,7 @@ public final class RippleAnimationSession {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
- mSparkle.end();
+ mAnimateSparkle = false;
Consumer<RippleAnimationSession> onEnd = mOnSessionEnd;
if (onEnd != null) onEnd.accept(RippleAnimationSession.this);
}
@@ -149,7 +148,7 @@ public final class RippleAnimationSession {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
- mSparkle.end();
+ mAnimateSparkle = false;
Consumer<RippleAnimationSession> onEnd = mOnSessionEnd;
if (onEnd != null) onEnd.accept(RippleAnimationSession.this);
}
@@ -176,9 +175,7 @@ public final class RippleAnimationSession {
expand.addListener(new AnimatorListener(this));
expand.setInterpolator(FAST_OUT_LINEAR_IN);
expand.start();
- if (!mSparkle.isRunning()) {
- mSparkle.start();
- }
+ mAnimateSparkle = true;
}
private void enterSoftware() {
diff --git a/graphics/java/android/graphics/drawable/RippleDrawable.java b/graphics/java/android/graphics/drawable/RippleDrawable.java
index 3bd0a43652d2..8b8cbbc8a9a6 100644
--- a/graphics/java/android/graphics/drawable/RippleDrawable.java
+++ b/graphics/java/android/graphics/drawable/RippleDrawable.java
@@ -48,7 +48,6 @@ import android.graphics.RecordingCanvas;
import android.graphics.Rect;
import android.graphics.Shader;
import android.os.Build;
-import android.os.SystemProperties;
import android.util.AttributeSet;
import android.view.animation.LinearInterpolator;
@@ -152,8 +151,7 @@ public class RippleDrawable extends LayerDrawable {
private static final int MAX_RIPPLES = 10;
private static final LinearInterpolator LINEAR_INTERPOLATOR = new LinearInterpolator();
/** Temporary flag for teamfood. **/
- private static final boolean FORCE_PATTERNED_STYLE =
- SystemProperties.getBoolean("persist.material.patternedripple", false);
+ private static final boolean FORCE_PATTERNED_STYLE = true;
private final Rect mTempRect = new Rect();
@@ -861,6 +859,15 @@ public class RippleDrawable extends LayerDrawable {
}
for (int i = 0; i < mRunningAnimations.size(); i++) {
RippleAnimationSession s = mRunningAnimations.get(i);
+ if (s.shouldAnimateSparkle()) {
+ final float phase = s.getSparklePhase();
+ if (useCanvasProps) {
+ s.getCanvasProperties().getShader().setNoisePhase(phase);
+ } else {
+ s.getProperties().getShader().setNoisePhase(phase);
+ }
+ invalidateSelf();
+ }
if (useCanvasProps) {
RippleAnimationSession.AnimationProperties<CanvasProperty<Float>,
CanvasProperty<Paint>>
diff --git a/identity/Android.bp b/identity/Android.bp
new file mode 100644
index 000000000000..826d6f806573
--- /dev/null
+++ b/identity/Android.bp
@@ -0,0 +1,31 @@
+//
+// Copyright (C) 2021 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package {
+ default_applicable_licenses: ["frameworks_base_identity_license"],
+}
+
+// Added automatically by a large-scale-change
+// See: http://go/android-license-faq
+license {
+ name: "frameworks_base_identity_license",
+ visibility: [":__subpackages__"],
+ license_kinds: [
+ "SPDX-license-identifier-Apache-2.0",
+ ],
+ license_text: [
+ "NOTICE",
+ ],
+}
diff --git a/identity/java/Android.bp b/identity/java/Android.bp
index 16aef5d2d871..a193d9764c7a 100644
--- a/identity/java/Android.bp
+++ b/identity/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_identity_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_identity_license"],
+}
+
filegroup {
name: "framework-identity-sources",
srcs: ["**/*.java"],
diff --git a/keystore/java/Android.bp b/keystore/java/Android.bp
index 6860f71a8516..21edff1e1c96 100644
--- a/keystore/java/Android.bp
+++ b/keystore/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_keystore_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_keystore_license"],
+}
+
filegroup {
name: "framework-keystore-sources",
srcs: [
diff --git a/libs/WindowManager/Shell/res/values/config.xml b/libs/WindowManager/Shell/res/values/config.xml
index 0e783779866e..6698a01dc159 100644
--- a/libs/WindowManager/Shell/res/values/config.xml
+++ b/libs/WindowManager/Shell/res/values/config.xml
@@ -30,6 +30,9 @@
<!-- Allow PIP to resize to a slightly bigger state upon touch/showing the menu -->
<bool name="config_pipEnableResizeForMenu">true</bool>
+ <!-- Allow PIP to resize via dragging the corner of PiP. -->
+ <bool name="config_pipEnableDragCornerResize">false</bool>
+
<!-- Allow PIP to enable round corner, see also R.dimen.pip_corner_radius -->
<bool name="config_pipEnableRoundCorner">false</bool>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
index 9eec48c02306..64bd245cb2ee 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
@@ -268,7 +268,7 @@ public class BubbleStackView extends FrameLayout
private boolean mIsDraggingStack = false;
/** Whether the expanded view has been hidden, because we are dragging out a bubble. */
- private boolean mExpandedViewHidden = false;
+ private boolean mExpandedViewTemporarilyHidden = false;
/** Animator for animating the expanded view's alpha (including the TaskView inside it). */
private final ValueAnimator mExpandedViewAlphaAnimator = ValueAnimator.ofFloat(0f, 1f);
@@ -968,7 +968,13 @@ public class BubbleStackView extends FrameLayout
@Override
public void onAnimationEnd(Animator animation) {
- if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
+ if (mExpandedBubble != null
+ && mExpandedBubble.getExpandedView() != null
+ // The surface needs to be Z ordered on top for alpha values to work on the
+ // TaskView, and if we're temporarily hidden, we are still on the screen
+ // with alpha = 0f until we animate back. Stay Z ordered on top so the alpha
+ // = 0f remains in effect.
+ && !mExpandedViewTemporarilyHidden) {
mExpandedBubble.getExpandedView().setSurfaceZOrderedOnTop(false);
mExpandedBubble.getExpandedView().setAlphaAnimating(false);
}
@@ -983,7 +989,7 @@ public class BubbleStackView extends FrameLayout
mAnimatingOutSurfaceAlphaAnimator.setDuration(EXPANDED_VIEW_ALPHA_ANIMATION_DURATION);
mAnimatingOutSurfaceAlphaAnimator.setInterpolator(Interpolators.PANEL_CLOSE_ACCELERATED);
mAnimatingOutSurfaceAlphaAnimator.addUpdateListener(valueAnimator -> {
- if (!mExpandedViewHidden) {
+ if (!mExpandedViewTemporarilyHidden) {
mAnimatingOutSurfaceView.setAlpha((float) valueAnimator.getAnimatedValue());
}
});
@@ -1596,7 +1602,7 @@ public class BubbleStackView extends FrameLayout
// If we're expanded, screenshot the currently expanded bubble (before expanding the newly
// selected bubble) so we can animate it out.
if (mIsExpanded && mExpandedBubble != null && mExpandedBubble.getExpandedView() != null
- && !mExpandedViewHidden) {
+ && !mExpandedViewTemporarilyHidden) {
if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) {
// Before screenshotting, have the real ActivityView show on top of other surfaces
// so that the screenshot doesn't flicker on top of it.
@@ -1722,13 +1728,13 @@ public class BubbleStackView extends FrameLayout
/** Animate the expanded view hidden. This is done while we're dragging out a bubble. */
private void hideExpandedViewIfNeeded() {
- if (mExpandedViewHidden
+ if (mExpandedViewTemporarilyHidden
|| mExpandedBubble == null
|| mExpandedBubble.getExpandedView() == null) {
return;
}
- mExpandedViewHidden = true;
+ mExpandedViewTemporarilyHidden = true;
// Scale down.
PhysicsAnimator.getInstance(mExpandedViewContainerMatrix)
@@ -1752,11 +1758,11 @@ public class BubbleStackView extends FrameLayout
* Animate the expanded view visible again. This is done when we're done dragging out a bubble.
*/
private void showExpandedViewIfNeeded() {
- if (!mExpandedViewHidden) {
+ if (!mExpandedViewTemporarilyHidden) {
return;
}
- mExpandedViewHidden = false;
+ mExpandedViewTemporarilyHidden = false;
PhysicsAnimator.getInstance(mExpandedViewContainerMatrix)
.spring(AnimatableScaleMatrix.SCALE_X,
@@ -2085,7 +2091,7 @@ public class BubbleStackView extends FrameLayout
mExpandedViewContainer.setAnimationMatrix(mExpandedViewContainerMatrix);
})
.withEndActions(() -> {
- mExpandedViewHidden = false;
+ mExpandedViewTemporarilyHidden = false;
mIsBubbleSwitchAnimating = false;
})
.start();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
index af4ccadae538..5c3af3ee5330 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipAnimationController.java
@@ -42,7 +42,7 @@ import java.lang.annotation.RetentionPolicy;
* Controller class of PiP animations (both from and to PiP mode).
*/
public class PipAnimationController {
- private static final float FRACTION_START = 0f;
+ static final float FRACTION_START = 0f;
private static final float FRACTION_END = 1f;
public static final int ANIM_TYPE_BOUNDS = 0;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java
index 702385ecc3d2..7b834b294bb9 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipBoundsAlgorithm.java
@@ -57,9 +57,10 @@ public class PipBoundsAlgorithm {
private int mOverridableMinSize;
private Point mScreenEdgeInsets;
- public PipBoundsAlgorithm(Context context, @NonNull PipBoundsState pipBoundsState) {
+ public PipBoundsAlgorithm(Context context, @NonNull PipBoundsState pipBoundsState,
+ @NonNull PipSnapAlgorithm pipSnapAlgorithm) {
mPipBoundsState = pipBoundsState;
- mSnapAlgorithm = new PipSnapAlgorithm();
+ mSnapAlgorithm = pipSnapAlgorithm;
reloadResources(context);
// Initialize the aspect ratio to the default aspect ratio. Don't do this in reload
// resources as it would clobber mAspectRatio when entering PiP from fullscreen which
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java
index 6afcc06aa1ae..3af0ff0dfb36 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMediaController.java
@@ -19,6 +19,8 @@ package com.android.wm.shell.pip;
import static android.app.PendingIntent.FLAG_IMMUTABLE;
import static android.app.PendingIntent.FLAG_UPDATE_CURRENT;
+import android.annotation.DrawableRes;
+import android.annotation.StringRes;
import android.app.PendingIntent;
import android.app.RemoteAction;
import android.content.BroadcastReceiver;
@@ -49,6 +51,7 @@ import java.util.List;
* when there is a media session from the top PiP activity.
*/
public class PipMediaController {
+ private static final String SYSTEMUI_PERMISSION = "com.android.systemui.permission.SELF";
private static final String ACTION_PLAY = "com.android.wm.shell.pip.PLAY";
private static final String ACTION_PAUSE = "com.android.wm.shell.pip.PAUSE";
@@ -87,18 +90,26 @@ public class PipMediaController {
private RemoteAction mNextAction;
private RemoteAction mPrevAction;
- private BroadcastReceiver mPlayPauseActionReceiver = new BroadcastReceiver() {
+ private final BroadcastReceiver mMediaActionReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- final String action = intent.getAction();
- if (action.equals(ACTION_PLAY)) {
- mMediaController.getTransportControls().play();
- } else if (action.equals(ACTION_PAUSE)) {
- mMediaController.getTransportControls().pause();
- } else if (action.equals(ACTION_NEXT)) {
- mMediaController.getTransportControls().skipToNext();
- } else if (action.equals(ACTION_PREV)) {
- mMediaController.getTransportControls().skipToPrevious();
+ if (mMediaController == null || mMediaController.getTransportControls() == null) {
+ // no active media session, bail early.
+ return;
+ }
+ switch (intent.getAction()) {
+ case ACTION_PLAY:
+ mMediaController.getTransportControls().play();
+ break;
+ case ACTION_PAUSE:
+ mMediaController.getTransportControls().pause();
+ break;
+ case ACTION_NEXT:
+ mMediaController.getTransportControls().skipToNext();
+ break;
+ case ACTION_PREV:
+ mMediaController.getTransportControls().skipToPrevious();
+ break;
}
}
};
@@ -131,10 +142,19 @@ public class PipMediaController {
mediaControlFilter.addAction(ACTION_PAUSE);
mediaControlFilter.addAction(ACTION_NEXT);
mediaControlFilter.addAction(ACTION_PREV);
- mContext.registerReceiverForAllUsers(mPlayPauseActionReceiver, mediaControlFilter,
- null /* permission */, mainHandler);
+ mContext.registerReceiverForAllUsers(mMediaActionReceiver, mediaControlFilter,
+ SYSTEMUI_PERMISSION, mainHandler);
+
+ // Creates the standard media buttons that we may show.
+ mPauseAction = getDefaultRemoteAction(R.string.pip_pause,
+ R.drawable.pip_ic_pause_white, ACTION_PAUSE);
+ mPlayAction = getDefaultRemoteAction(R.string.pip_play,
+ R.drawable.pip_ic_play_arrow_white, ACTION_PLAY);
+ mNextAction = getDefaultRemoteAction(R.string.pip_skip_to_next,
+ R.drawable.pip_ic_skip_next_white, ACTION_NEXT);
+ mPrevAction = getDefaultRemoteAction(R.string.pip_skip_to_prev,
+ R.drawable.pip_ic_skip_previous_white, ACTION_PREV);
- createMediaActions();
mMediaSessionManager = context.getSystemService(MediaSessionManager.class);
}
@@ -216,32 +236,15 @@ public class PipMediaController {
return mediaActions;
}
- /**
- * Creates the standard media buttons that we may show.
- */
- private void createMediaActions() {
- String pauseDescription = mContext.getString(R.string.pip_pause);
- mPauseAction = new RemoteAction(Icon.createWithResource(mContext,
- R.drawable.pip_ic_pause_white), pauseDescription, pauseDescription,
- PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_PAUSE),
- FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE));
-
- String playDescription = mContext.getString(R.string.pip_play);
- mPlayAction = new RemoteAction(Icon.createWithResource(mContext,
- R.drawable.pip_ic_play_arrow_white), playDescription, playDescription,
- PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_PLAY),
- FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE));
-
- String nextDescription = mContext.getString(R.string.pip_skip_to_next);
- mNextAction = new RemoteAction(Icon.createWithResource(mContext,
- R.drawable.pip_ic_skip_next_white), nextDescription, nextDescription,
- PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_NEXT),
- FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE));
-
- String prevDescription = mContext.getString(R.string.pip_skip_to_prev);
- mPrevAction = new RemoteAction(Icon.createWithResource(mContext,
- R.drawable.pip_ic_skip_previous_white), prevDescription, prevDescription,
- PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_PREV),
+ /** @return Default {@link RemoteAction} sends broadcast back to SysUI. */
+ private RemoteAction getDefaultRemoteAction(@StringRes int titleAndDescription,
+ @DrawableRes int icon, String action) {
+ final String titleAndDescriptionStr = mContext.getString(titleAndDescription);
+ final Intent intent = new Intent(action);
+ intent.setPackage(mContext.getPackageName());
+ return new RemoteAction(Icon.createWithResource(mContext, icon),
+ titleAndDescriptionStr, titleAndDescriptionStr,
+ PendingIntent.getBroadcast(mContext, 0 /* requestCode */, intent,
FLAG_UPDATE_CURRENT | FLAG_IMMUTABLE));
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
index 99ec10049340..f6b63eb006ac 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
@@ -25,6 +25,7 @@ import static com.android.wm.shell.ShellTaskOrganizer.TASK_LISTENER_TYPE_PIP;
import static com.android.wm.shell.ShellTaskOrganizer.taskListenerTypeToString;
import static com.android.wm.shell.pip.PipAnimationController.ANIM_TYPE_ALPHA;
import static com.android.wm.shell.pip.PipAnimationController.ANIM_TYPE_BOUNDS;
+import static com.android.wm.shell.pip.PipAnimationController.FRACTION_START;
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_EXPAND_OR_UNEXPAND;
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_LEAVE_PIP;
import static com.android.wm.shell.pip.PipAnimationController.TRANSITION_DIRECTION_LEAVE_PIP_TO_SPLIT_SCREEN;
@@ -352,9 +353,19 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
// updated right after applying the windowing mode change.
final Rect sourceHintRect = PipBoundsAlgorithm.getValidSourceHintRect(
mPictureInPictureParams, destinationBounds);
- scheduleAnimateResizePip(mPipBoundsState.getBounds(), destinationBounds,
+ final PipAnimationController.PipTransitionAnimator<?> animator =
+ scheduleAnimateResizePip(mPipBoundsState.getBounds(), destinationBounds,
0 /* startingAngle */, sourceHintRect, direction,
animationDurationMs, null /* updateBoundsCallback */);
+ if (animator != null) {
+ // Even though the animation was started above, re-apply the transaction for the
+ // first frame using the SurfaceControl.Transaction supplied by the
+ // SyncTransactionQueue. This is necessary because the initial surface transform
+ // may not be applied until the next frame if a different Transaction than the one
+ // supplied is used, resulting in 1 frame not being cropped to the source rect
+ // hint during expansion that causes a visible jank/flash. See b/184166183.
+ animator.applySurfaceControlTransaction(mLeash, t, FRACTION_START);
+ }
mState = State.EXITING_PIP;
});
}
@@ -768,22 +779,24 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
* Animates resizing of the pinned stack given the duration and start bounds.
* This always animates the angle to zero from the starting angle.
*/
- private void scheduleAnimateResizePip(Rect currentBounds, Rect destinationBounds,
- float startingAngle, Rect sourceHintRect,
+ private @Nullable PipAnimationController.PipTransitionAnimator<?> scheduleAnimateResizePip(
+ Rect currentBounds, Rect destinationBounds, float startingAngle, Rect sourceHintRect,
@PipAnimationController.TransitionDirection int direction, int durationMs,
Consumer<Rect> updateBoundsCallback) {
if (!mState.isInPip()) {
// TODO: tend to use shouldBlockResizeRequest here as well but need to consider
// the fact that when in exitPip, scheduleAnimateResizePip is executed in the window
// container transaction callback and we want to set the mState immediately.
- return;
+ return null;
}
- animateResizePip(currentBounds, destinationBounds, sourceHintRect, direction, durationMs,
+ final PipAnimationController.PipTransitionAnimator<?> animator = animateResizePip(
+ currentBounds, destinationBounds, sourceHintRect, direction, durationMs,
startingAngle);
if (updateBoundsCallback != null) {
updateBoundsCallback.accept(destinationBounds);
}
+ return animator;
}
/**
@@ -968,28 +981,26 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
destinationBounds.height());
mSurfaceTransactionHelper.scale(t, snapshotSurface, snapshotSrc, snapshotDest);
- mMainExecutor.execute(() -> {
- // Start animation to fade out the snapshot.
- final ValueAnimator animator = ValueAnimator.ofFloat(1.0f, 0.0f);
- animator.setDuration(mEnterAnimationDuration);
- animator.addUpdateListener(animation -> {
- final float alpha = (float) animation.getAnimatedValue();
- final SurfaceControl.Transaction transaction =
+ // Start animation to fade out the snapshot.
+ final ValueAnimator animator = ValueAnimator.ofFloat(1.0f, 0.0f);
+ animator.setDuration(mEnterAnimationDuration);
+ animator.addUpdateListener(animation -> {
+ final float alpha = (float) animation.getAnimatedValue();
+ final SurfaceControl.Transaction transaction =
+ mSurfaceControlTransactionFactory.getTransaction();
+ transaction.setAlpha(snapshotSurface, alpha);
+ transaction.apply();
+ });
+ animator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ final SurfaceControl.Transaction tx =
mSurfaceControlTransactionFactory.getTransaction();
- transaction.setAlpha(snapshotSurface, alpha);
- transaction.apply();
- });
- animator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- final SurfaceControl.Transaction tx =
- mSurfaceControlTransactionFactory.getTransaction();
- tx.remove(snapshotSurface);
- tx.apply();
- }
- });
- animator.start();
+ tx.remove(snapshotSurface);
+ tx.apply();
+ }
});
+ animator.start();
});
} else {
applyFinishBoundsResize(wct, direction);
@@ -1050,26 +1061,28 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
return WINDOWING_MODE_UNDEFINED;
}
- private void animateResizePip(Rect currentBounds, Rect destinationBounds, Rect sourceHintRect,
+ private @Nullable PipAnimationController.PipTransitionAnimator<?> animateResizePip(
+ Rect currentBounds, Rect destinationBounds, Rect sourceHintRect,
@PipAnimationController.TransitionDirection int direction, int durationMs,
float startingAngle) {
// Could happen when exitPip
if (mToken == null || mLeash == null) {
Log.w(TAG, "Abort animation, invalid leash");
- return;
+ return null;
}
final int rotationDelta = mWaitForFixedRotation
? ((mNextRotation - mPipBoundsState.getDisplayLayout().rotation()) + 4) % 4
: Surface.ROTATION_0;
Rect baseBounds = direction == TRANSITION_DIRECTION_SNAP_AFTER_RESIZE
? mPipBoundsState.getBounds() : currentBounds;
- mPipAnimationController
+ final PipAnimationController.PipTransitionAnimator<?> animator = mPipAnimationController
.getAnimator(mTaskInfo, mLeash, baseBounds, currentBounds, destinationBounds,
- sourceHintRect, direction, startingAngle, rotationDelta)
- .setTransitionDirection(direction)
+ sourceHintRect, direction, startingAngle, rotationDelta);
+ animator.setTransitionDirection(direction)
.setPipAnimationCallback(mPipAnimationCallback)
.setDuration(durationMs)
.start();
+ return animator;
}
/**
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
index d75c1d65614d..62ae1d5d600c 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipController.java
@@ -95,6 +95,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
private PipBoundsState mPipBoundsState;
private PipTouchHandler mTouchHandler;
private PipTransitionController mPipTransitionController;
+ private TaskStackListenerImpl mTaskStackListener;
private Optional<OneHandedController> mOneHandedController;
protected final PipImpl mImpl;
@@ -291,12 +292,18 @@ public class PipController implements PipTransitionController.PipTransitionCallb
mAppOpsListener = pipAppOpsListener;
mOneHandedController = oneHandedController;
mPipTransitionController = pipTransitionController;
+ mTaskStackListener = taskStackListener;
mPipInputConsumer = new PipInputConsumer(WindowManagerGlobal.getWindowManagerService(),
INPUT_CONSUMER_PIP, mainExecutor);
+ //TODO: move this to ShellInit when PipController can be injected
+ mMainExecutor.execute(this::init);
+ }
+
+ public void init() {
mPipTransitionController.registerPipTransitionCallback(this);
mPipTaskOrganizer.registerOnDisplayIdChangeCallback((int displayId) -> {
mPipBoundsState.setDisplayId(displayId);
- onDisplayChanged(displayController.getDisplayLayout(displayId),
+ onDisplayChanged(mDisplayController.getDisplayLayout(displayId),
false /* saveRestoreSnapFraction */);
});
mPipBoundsState.setOnMinimalSizeChangeCallback(
@@ -321,13 +328,13 @@ public class PipController implements PipTransitionController.PipTransitionCallb
mPipInputConsumer.setInputListener(mTouchHandler::handleTouchEvent);
mPipInputConsumer.setRegistrationListener(mTouchHandler::onRegistrationChanged);
}
- displayController.addDisplayChangingController(mRotationController);
- displayController.addDisplayWindowListener(mDisplaysChangedListener);
+ mDisplayController.addDisplayChangingController(mRotationController);
+ mDisplayController.addDisplayWindowListener(mDisplaysChangedListener);
// Ensure that we have the display info in case we get calls to update the bounds before the
// listener calls back
- mPipBoundsState.setDisplayId(context.getDisplayId());
- mPipBoundsState.setDisplayLayout(new DisplayLayout(context, context.getDisplay()));
+ mPipBoundsState.setDisplayId(mContext.getDisplayId());
+ mPipBoundsState.setDisplayLayout(new DisplayLayout(mContext, mContext.getDisplay()));
try {
mWindowManagerShellWrapper.addPinnedStackListener(mPinnedTaskListener);
@@ -349,7 +356,7 @@ public class PipController implements PipTransitionController.PipTransitionCallb
}
// Handle for system task stack changes.
- taskStackListener.addListener(
+ mTaskStackListener.addListener(
new TaskStackListenerCallback() {
@Override
public void onActivityPinned(String packageName, int userId, int taskId,
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java
index 588571f7171e..0a148c413c0f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipResizeGestureHandler.java
@@ -103,6 +103,7 @@ public class PipResizeGestureHandler {
private boolean mIsAttached;
private boolean mIsEnabled;
private boolean mEnablePinchResize;
+ private boolean mEnableDragCornerResize;
private boolean mIsSysUiStateValid;
private boolean mThresholdCrossed;
private boolean mOngoingPinchToResize = false;
@@ -174,6 +175,7 @@ public class PipResizeGestureHandler {
private void reloadResources() {
final Resources res = mContext.getResources();
mDelta = res.getDimensionPixelSize(R.dimen.pip_resize_edge_size);
+ mEnableDragCornerResize = res.getBoolean(R.bool.config_pipEnableDragCornerResize);
mTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
}
@@ -267,6 +269,10 @@ public class PipResizeGestureHandler {
* |_|_| |_|_|
*/
public boolean isWithinDragResizeRegion(int x, int y) {
+ if (!mEnableDragCornerResize) {
+ return false;
+ }
+
final Rect currentPipBounds = mPipBoundsState.getBounds();
if (currentPipBounds == null) {
return false;
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
index d474b6638e4a..f29d4f59493e 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PipTouchHandler.java
@@ -53,7 +53,6 @@ import com.android.wm.shell.pip.PipAnimationController;
import com.android.wm.shell.pip.PipBoundsAlgorithm;
import com.android.wm.shell.pip.PipBoundsState;
import com.android.wm.shell.pip.PipTaskOrganizer;
-import com.android.wm.shell.pip.PipTransitionController;
import com.android.wm.shell.pip.PipUiEventLogger;
import java.io.PrintWriter;
@@ -158,7 +157,7 @@ public class PipTouchHandler {
PipBoundsAlgorithm pipBoundsAlgorithm,
@NonNull PipBoundsState pipBoundsState,
PipTaskOrganizer pipTaskOrganizer,
- PipTransitionController pipTransitionController,
+ PipMotionHelper pipMotionHelper,
FloatingContentCoordinator floatingContentCoordinator,
PipUiEventLogger pipUiEventLogger,
ShellExecutor mainExecutor) {
@@ -173,9 +172,7 @@ public class PipTouchHandler {
mFloatingContentCoordinator = floatingContentCoordinator;
mMenuController.addListener(new PipMenuListener());
mGesture = new DefaultPipTouchGesture();
- mMotionHelper = new PipMotionHelper(mContext, pipBoundsState, pipTaskOrganizer,
- mMenuController, mPipBoundsAlgorithm.getSnapAlgorithm(), pipTransitionController,
- floatingContentCoordinator);
+ mMotionHelper = pipMotionHelper;
mPipDismissTargetHandler = new PipDismissTargetHandler(context, pipUiEventLogger,
mMotionHelper, mainExecutor);
mPipResizeGestureHandler =
diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipMovesInAllApps.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipShelfHeightTest.kt
index 5713822bba99..84f66fc14969 100644
--- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipMovesInAllApps.kt
+++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipShelfHeightTest.kt
@@ -18,13 +18,13 @@ package com.android.wm.shell.flicker.pip
import android.platform.test.annotations.Presubmit
import android.view.Surface
-import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import com.android.launcher3.tapl.LauncherInstrumentation
import com.android.server.wm.flicker.FlickerParametersRunnerFactory
import com.android.server.wm.flicker.FlickerTestParameter
import com.android.server.wm.flicker.FlickerTestParameterFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
+import com.android.wm.shell.flicker.helpers.FixedAppHelper
import com.google.common.truth.Truth
import org.junit.FixMethodOrder
import org.junit.Test
@@ -33,15 +33,16 @@ import org.junit.runners.MethodSorters
import org.junit.runners.Parameterized
/**
- * Test Pip launch.
- * To run this test: `atest WMShellFlickerTests:PipMovesInAllApps`
+ * Test Pip movement with Launcher shelf height change.
+ * To run this test: `atest WMShellFlickerTests:PipShelfHeightTest`
*/
@RequiresDevice
@RunWith(Parameterized::class)
@Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
-class PipMovesInAllApps(testSpec: FlickerTestParameter) : PipTransition(testSpec) {
+class PipShelfHeightTest(testSpec: FlickerTestParameter) : PipTransition(testSpec) {
private val taplInstrumentation = LauncherInstrumentation()
+ private val testApp = FixedAppHelper(instrumentation)
override val transition: FlickerBuilder.(Map<String, Any?>) -> Unit
get() = buildTransition(eachRun = false) {
@@ -49,10 +50,12 @@ class PipMovesInAllApps(testSpec: FlickerTestParameter) : PipTransition(testSpec
eachRun {
taplInstrumentation.pressHome()
}
+ test {
+ testApp.exit(wmHelper)
+ }
}
transitions {
- taplInstrumentation.pressHome().switchToAllApps()
- wmHelper.waitForAppTransitionIdle()
+ testApp.launchViaIntent(wmHelper)
}
}
@@ -68,7 +71,7 @@ class PipMovesInAllApps(testSpec: FlickerTestParameter) : PipTransition(testSpec
}
}
- @FlakyTest(bugId = 184050344)
+ @Presubmit
@Test
fun pipWindowMovesUp() = testSpec.assertWmEnd {
val initialState = this.trace?.first()?.wmState
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipBoundsAlgorithmTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipBoundsAlgorithmTest.java
index babfc5ca20cf..a0c6d1138698 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipBoundsAlgorithmTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipBoundsAlgorithmTest.java
@@ -24,7 +24,6 @@ import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.testing.TestableResources;
import android.util.Size;
-import android.view.Display;
import android.view.DisplayInfo;
import android.view.Gravity;
@@ -58,11 +57,13 @@ public class PipBoundsAlgorithmTest extends ShellTestCase {
private DisplayInfo mDefaultDisplayInfo;
private PipBoundsState mPipBoundsState;
+
@Before
public void setUp() throws Exception {
initializeMockResources();
mPipBoundsState = new PipBoundsState(mContext);
- mPipBoundsAlgorithm = new PipBoundsAlgorithm(mContext, mPipBoundsState);
+ mPipBoundsAlgorithm = new PipBoundsAlgorithm(mContext, mPipBoundsState,
+ new PipSnapAlgorithm());
mPipBoundsState.setDisplayLayout(
new DisplayLayout(mDefaultDisplayInfo, mContext.getResources(), true, true));
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java
index d687e8d76d91..5df391f919a7 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/PipTaskOrganizerTest.java
@@ -88,7 +88,8 @@ public class PipTaskOrganizerTest extends ShellTestCase {
mComponent1 = new ComponentName(mContext, "component1");
mComponent2 = new ComponentName(mContext, "component2");
mPipBoundsState = new PipBoundsState(mContext);
- mPipBoundsAlgorithm = new PipBoundsAlgorithm(mContext, mPipBoundsState);
+ mPipBoundsAlgorithm = new PipBoundsAlgorithm(mContext, mPipBoundsState,
+ new PipSnapAlgorithm());
mMainExecutor = new TestShellExecutor();
mSpiedPipTaskOrganizer = spy(new PipTaskOrganizer(mContext,
mMockSyncTransactionQueue, mPipBoundsState,
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java
index 700bf7850604..c61302be19b1 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipControllerTest.java
@@ -83,15 +83,15 @@ public class PipControllerTest extends ShellTestCase {
@Before
public void setUp() throws RemoteException {
MockitoAnnotations.initMocks(this);
+ doAnswer(invocation -> {
+ ((Runnable) invocation.getArgument(0)).run();
+ return null;
+ }).when(mMockExecutor).execute(any());
mPipController = new PipController(mContext, mMockDisplayController,
mMockPipAppOpsListener, mMockPipBoundsAlgorithm, mMockPipBoundsState,
mMockPipMediaController, mMockPhonePipMenuController, mMockPipTaskOrganizer,
mMockPipTouchHandler, mMockPipTransitionController, mMockWindowManagerShellWrapper,
mMockTaskStackListener, mMockOneHandedController, mMockExecutor);
- doAnswer(invocation -> {
- ((Runnable) invocation.getArgument(0)).run();
- return null;
- }).when(mMockExecutor).execute(any());
}
@Test
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTouchHandlerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTouchHandlerTest.java
index 75ea4ac94257..74519eaf3ebf 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTouchHandlerTest.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/pip/phone/PipTouchHandlerTest.java
@@ -99,12 +99,14 @@ public class PipTouchHandlerTest extends ShellTestCase {
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
mPipBoundsState = new PipBoundsState(mContext);
- mPipBoundsAlgorithm = new PipBoundsAlgorithm(mContext, mPipBoundsState);
- mPipSnapAlgorithm = mPipBoundsAlgorithm.getSnapAlgorithm();
mPipSnapAlgorithm = new PipSnapAlgorithm();
+ mPipBoundsAlgorithm = new PipBoundsAlgorithm(mContext, mPipBoundsState, mPipSnapAlgorithm);
+ PipMotionHelper pipMotionHelper = new PipMotionHelper(mContext, mPipBoundsState,
+ mPipTaskOrganizer, mPhonePipMenuController, mPipSnapAlgorithm,
+ mMockPipTransitionController, mFloatingContentCoordinator);
mPipTouchHandler = new PipTouchHandler(mContext, mPhonePipMenuController,
mPipBoundsAlgorithm, mPipBoundsState, mPipTaskOrganizer,
- mMockPipTransitionController, mFloatingContentCoordinator, mPipUiEventLogger,
+ pipMotionHelper, mFloatingContentCoordinator, mPipUiEventLogger,
mMainExecutor);
mPipTouchHandler.init();
mMotionHelper = Mockito.spy(mPipTouchHandler.getMotionHelper());
diff --git a/libs/hwui/effects/StretchEffect.cpp b/libs/hwui/effects/StretchEffect.cpp
index 0804e0aec278..bd1c154c6c5e 100644
--- a/libs/hwui/effects/StretchEffect.cpp
+++ b/libs/hwui/effects/StretchEffect.cpp
@@ -40,6 +40,8 @@ static const SkString stretchShader = SkString(R"(
// scale intensity
uniform float uDistanceStretchedX;
uniform float uDistanceStretchedY;
+ uniform float uInverseDistanceStretchedX;
+ uniform float uInverseDistanceStretchedY;
uniform float uDistDiffX;
// Difference between the peak stretch amount and overscroll amount normalized
@@ -58,14 +60,20 @@ static const SkString stretchShader = SkString(R"(
uniform float viewportWidth; // target height in pixels
uniform float viewportHeight; // target width in pixels
+ float easeInCubic(float t, float d) {
+ float tmp = t * d;
+ return tmp * tmp * tmp;
+ }
+
float computeOverscrollStart(
float inPos,
float overscroll,
float uStretchAffectedDist,
+ float uInverseStretchAffectedDist,
float distanceStretched
) {
float offsetPos = uStretchAffectedDist - inPos;
- float posBasedVariation = smoothstep(0., uStretchAffectedDist, offsetPos);
+ float posBasedVariation = easeInCubic(offsetPos, uInverseStretchAffectedDist);
float stretchIntensity = overscroll * posBasedVariation;
return distanceStretched - (offsetPos / (1. + stretchIntensity));
}
@@ -75,10 +83,11 @@ static const SkString stretchShader = SkString(R"(
float overscroll,
float reverseStretchDist,
float uStretchAffectedDist,
+ float uInverseStretchAffectedDist,
float distanceStretched
) {
float offsetPos = inPos - reverseStretchDist;
- float posBasedVariation = (smoothstep(0., uStretchAffectedDist, offsetPos));
+ float posBasedVariation = easeInCubic(offsetPos, uInverseStretchAffectedDist);
float stretchIntensity = (-overscroll) * posBasedVariation;
return 1 - (distanceStretched - (offsetPos / (1. + stretchIntensity)));
}
@@ -90,6 +99,7 @@ static const SkString stretchShader = SkString(R"(
float inPos,
float overscroll,
float uStretchAffectedDist,
+ float uInverseStretchAffectedDist,
float distanceStretched,
float distanceDiff
) {
@@ -100,6 +110,7 @@ static const SkString stretchShader = SkString(R"(
inPos,
overscroll,
uStretchAffectedDist,
+ uInverseStretchAffectedDist,
distanceStretched
);
} else if (inPos >= distanceStretched) {
@@ -114,6 +125,7 @@ static const SkString stretchShader = SkString(R"(
overscroll,
stretchAffectedDist,
uStretchAffectedDist,
+ uInverseStretchAffectedDist,
distanceStretched
);
} else if (inPos < stretchAffectedDist) {
@@ -139,6 +151,7 @@ static const SkString stretchShader = SkString(R"(
inU,
uOverscrollX,
uStretchAffectedDistX,
+ uInverseDistanceStretchedX,
uDistanceStretchedX,
uDistDiffX
);
@@ -146,6 +159,7 @@ static const SkString stretchShader = SkString(R"(
inV,
uOverscrollY,
uStretchAffectedDistY,
+ uInverseDistanceStretchedY,
uDistanceStretchedY,
uDistDiffY
);
@@ -155,6 +169,7 @@ static const SkString stretchShader = SkString(R"(
})");
static const float ZERO = 0.f;
+static const float CONTENT_DISTANCE_STRETCHED = 1.f;
sk_sp<SkImageFilter> StretchEffect::getImageFilter(const sk_sp<SkImage>& snapshotImage) const {
if (isEmpty()) {
@@ -169,10 +184,12 @@ sk_sp<SkImageFilter> StretchEffect::getImageFilter(const sk_sp<SkImage>& snapsho
float viewportHeight = stretchArea.height();
float normOverScrollDistX = mStretchDirection.x();
float normOverScrollDistY = mStretchDirection.y();
- float distanceStretchedX = maxStretchAmountX / (1 + abs(normOverScrollDistX));
- float distanceStretchedY = maxStretchAmountY / (1 + abs(normOverScrollDistY));
- float diffX = distanceStretchedX;
- float diffY = distanceStretchedY;
+ float distanceStretchedX = CONTENT_DISTANCE_STRETCHED / (1 + abs(normOverScrollDistX));
+ float distanceStretchedY = CONTENT_DISTANCE_STRETCHED / (1 + abs(normOverScrollDistY));
+ float inverseDistanceStretchedX = 1.f / distanceStretchedX;
+ float inverseDistanceStretchedY = 1.f / distanceStretchedY;
+ float diffX = distanceStretchedX - CONTENT_DISTANCE_STRETCHED;
+ float diffY = distanceStretchedY - CONTENT_DISTANCE_STRETCHED;
if (mBuilder == nullptr) {
mBuilder = std::make_unique<SkRuntimeShaderBuilder>(getStretchEffect());
@@ -180,10 +197,12 @@ sk_sp<SkImageFilter> StretchEffect::getImageFilter(const sk_sp<SkImage>& snapsho
mBuilder->child("uContentTexture") = snapshotImage->makeShader(
SkTileMode::kClamp, SkTileMode::kClamp, SkSamplingOptions(SkFilterMode::kLinear));
- mBuilder->uniform("uStretchAffectedDistX").set(&maxStretchAmountX, 1);
- mBuilder->uniform("uStretchAffectedDistY").set(&maxStretchAmountY, 1);
+ mBuilder->uniform("uStretchAffectedDistX").set(&CONTENT_DISTANCE_STRETCHED, 1);
+ mBuilder->uniform("uStretchAffectedDistY").set(&CONTENT_DISTANCE_STRETCHED, 1);
mBuilder->uniform("uDistanceStretchedX").set(&distanceStretchedX, 1);
mBuilder->uniform("uDistanceStretchedY").set(&distanceStretchedY, 1);
+ mBuilder->uniform("uInverseDistanceStretchedX").set(&inverseDistanceStretchedX, 1);
+ mBuilder->uniform("uInverseDistanceStretchedY").set(&inverseDistanceStretchedY, 1);
mBuilder->uniform("uDistDiffX").set(&diffX, 1);
mBuilder->uniform("uDistDiffY").set(&diffY, 1);
mBuilder->uniform("uOverscrollX").set(&normOverScrollDistX, 1);
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp
index adf4aee8b931..79b938841bc2 100644
--- a/libs/hwui/renderthread/RenderThread.cpp
+++ b/libs/hwui/renderthread/RenderThread.cpp
@@ -153,10 +153,11 @@ JVMAttachHook RenderThread::getOnStartHook() {
}
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
- // because we don't want to delete the RenderThread normally.
- static RenderThread* sInstance = new RenderThread();
+ [[clang::no_destroy]] static sp<RenderThread> sInstance = []() {
+ sp<RenderThread> thread = sp<RenderThread>::make();
+ thread->start("RenderThread");
+ return thread;
+ }();
gHasRenderThreadInstance = true;
return *sInstance;
}
@@ -171,7 +172,6 @@ RenderThread::RenderThread()
, mFunctorManager(WebViewFunctorManager::instance())
, mGlobalProfileData(mJankDataMutex) {
Properties::load();
- start("RenderThread");
}
RenderThread::~RenderThread() {
diff --git a/libs/hwui/renderthread/RenderThread.h b/libs/hwui/renderthread/RenderThread.h
index a7d1ba8dafd7..9e5bce76e228 100644
--- a/libs/hwui/renderthread/RenderThread.h
+++ b/libs/hwui/renderthread/RenderThread.h
@@ -171,6 +171,7 @@ private:
friend class android::uirenderer::WebViewFunctor;
friend class android::uirenderer::skiapipeline::VkFunctorDrawHandler;
friend class android::uirenderer::VectorDrawable::Tree;
+ friend class sp<RenderThread>;
RenderThread();
virtual ~RenderThread();
diff --git a/libs/hwui/renderthread/VulkanSurface.cpp b/libs/hwui/renderthread/VulkanSurface.cpp
index acf4931d6144..474d2ccf8600 100644
--- a/libs/hwui/renderthread/VulkanSurface.cpp
+++ b/libs/hwui/renderthread/VulkanSurface.cpp
@@ -194,24 +194,25 @@ bool VulkanSurface::InitializeWindowInfoStruct(ANativeWindow* window, ColorMode
outWindowInfo->bufferCount = static_cast<uint32_t>(query_value);
}
- outWindowInfo->dataspace = HAL_DATASPACE_V0_SRGB;
- if (colorMode == ColorMode::WideColorGamut) {
- skcms_Matrix3x3 surfaceGamut;
- LOG_ALWAYS_FATAL_IF(!colorSpace->toXYZD50(&surfaceGamut),
- "Could not get gamut matrix from color space");
- if (memcmp(&surfaceGamut, &SkNamedGamut::kSRGB, sizeof(surfaceGamut)) == 0) {
- outWindowInfo->dataspace = HAL_DATASPACE_V0_SCRGB;
- } else if (memcmp(&surfaceGamut, &SkNamedGamut::kDisplayP3, sizeof(surfaceGamut)) == 0) {
- outWindowInfo->dataspace = HAL_DATASPACE_DISPLAY_P3;
- } else {
- LOG_ALWAYS_FATAL("Unreachable: unsupported wide color space.");
- }
- }
-
outWindowInfo->bufferFormat = ColorTypeToBufferFormat(colorType);
- VkFormat vkPixelFormat = VK_FORMAT_R8G8B8A8_UNORM;
- if (outWindowInfo->bufferFormat == AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT) {
- vkPixelFormat = VK_FORMAT_R16G16B16A16_SFLOAT;
+ outWindowInfo->colorspace = colorSpace;
+ outWindowInfo->dataspace = ColorSpaceToADataSpace(colorSpace.get(), colorType);
+ LOG_ALWAYS_FATAL_IF(outWindowInfo->dataspace == HAL_DATASPACE_UNKNOWN,
+ "Unsupported colorspace");
+
+ VkFormat vkPixelFormat;
+ switch (colorType) {
+ case kRGBA_8888_SkColorType:
+ vkPixelFormat = VK_FORMAT_R8G8B8A8_UNORM;
+ break;
+ case kRGBA_F16_SkColorType:
+ vkPixelFormat = VK_FORMAT_R16G16B16A16_SFLOAT;
+ break;
+ case kRGBA_1010102_SkColorType:
+ vkPixelFormat = VK_FORMAT_A2B10G10R10_UNORM_PACK32;
+ break;
+ default:
+ LOG_ALWAYS_FATAL("Unsupported colorType: %d", (int)colorType);
}
LOG_ALWAYS_FATAL_IF(nullptr == vkManager.mGetPhysicalDeviceImageFormatProperties2,
@@ -425,7 +426,7 @@ VulkanSurface::NativeBufferInfo* VulkanSurface::dequeueNativeBuffer() {
if (bufferInfo->skSurface.get() == nullptr) {
bufferInfo->skSurface = SkSurface::MakeFromAHardwareBuffer(
mGrContext, ANativeWindowBuffer_getHardwareBuffer(bufferInfo->buffer.get()),
- kTopLeft_GrSurfaceOrigin, DataSpaceToColorSpace(mWindowInfo.dataspace), nullptr);
+ kTopLeft_GrSurfaceOrigin, mWindowInfo.colorspace, nullptr);
if (bufferInfo->skSurface.get() == nullptr) {
ALOGE("SkSurface::MakeFromAHardwareBuffer failed");
mNativeWindow->cancelBuffer(mNativeWindow.get(), buffer, fence_fd);
diff --git a/libs/hwui/renderthread/VulkanSurface.h b/libs/hwui/renderthread/VulkanSurface.h
index 409921bdfdd7..7c2554583961 100644
--- a/libs/hwui/renderthread/VulkanSurface.h
+++ b/libs/hwui/renderthread/VulkanSurface.h
@@ -91,6 +91,7 @@ private:
SkISize size;
uint32_t bufferFormat;
android_dataspace dataspace;
+ sk_sp<SkColorSpace> colorspace;
int transform;
size_t bufferCount;
uint64_t windowUsageFlags;
diff --git a/libs/hwui/utils/Color.cpp b/libs/hwui/utils/Color.cpp
index 87512f0354c8..5d9f2297c15a 100644
--- a/libs/hwui/utils/Color.cpp
+++ b/libs/hwui/utils/Color.cpp
@@ -148,7 +148,19 @@ android_dataspace ColorSpaceToADataSpace(SkColorSpace* colorSpace, SkColorType c
}
skcms_TransferFunction fn;
- LOG_ALWAYS_FATAL_IF(!colorSpace->isNumericalTransferFn(&fn));
+ if (!colorSpace->isNumericalTransferFn(&fn)) {
+ // pq with the default white point
+ auto rec2020PQ = SkColorSpace::MakeRGB(GetPQSkTransferFunction(), SkNamedGamut::kRec2020);
+ if (SkColorSpace::Equals(colorSpace, rec2020PQ.get())) {
+ return HAL_DATASPACE_BT2020_PQ;
+ }
+ // standard PQ
+ rec2020PQ = SkColorSpace::MakeRGB(SkNamedTransferFn::kPQ, SkNamedGamut::kRec2020);
+ if (SkColorSpace::Equals(colorSpace, rec2020PQ.get())) {
+ return HAL_DATASPACE_BT2020_PQ;
+ }
+ LOG_ALWAYS_FATAL("Only select non-numerical transfer functions are supported");
+ }
skcms_Matrix3x3 gamut;
LOG_ALWAYS_FATAL_IF(!colorSpace->toXYZD50(&gamut));
diff --git a/location/java/Android.bp b/location/java/Android.bp
index 996a7ea37adf..543f2b1ab4a8 100644
--- a/location/java/Android.bp
+++ b/location/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-location-sources",
srcs: [
diff --git a/lowpan/java/Android.bp b/lowpan/java/Android.bp
index b95b0daf428e..58513d70042c 100644
--- a/lowpan/java/Android.bp
+++ b/lowpan/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-lowpan-sources",
srcs: [
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 8134d6f8352d..7220379e836b 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -27,6 +27,7 @@ import android.content.pm.PackageManager;
import android.media.audiofx.AudioEffect;
import android.media.audiopolicy.AudioMix;
import android.os.Build;
+import android.os.Vibrator;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.util.Pair;
@@ -1937,6 +1938,14 @@ public class AudioSystem
public static native int getDevicesForRoleAndCapturePreset(
int capturePreset, int role, @NonNull List<AudioDeviceAttributes> devices);
+ /**
+ * @hide
+ * Set the vibrators' information. The value will be used to initialize HapticGenerator.
+ * @param vibrators a list of all available vibrators
+ * @return command completion status
+ */
+ public static native int setVibratorInfos(@NonNull List<Vibrator> vibrators);
+
// Items shared with audio service
/**
diff --git a/media/java/android/media/IMediaRouterService.aidl b/media/java/android/media/IMediaRouterService.aidl
index 4b8a8adade1f..f817a3c3c353 100644
--- a/media/java/android/media/IMediaRouterService.aidl
+++ b/media/java/android/media/IMediaRouterService.aidl
@@ -48,6 +48,7 @@ interface IMediaRouterService {
// MediaRouterService.java for readability.
// Methods for MediaRouter2
+ void checkModifyAudioRoutingPermission();
List<MediaRoute2Info> getSystemRoutes();
RoutingSessionInfo getSystemSessionInfo();
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index 822d22b072d6..4968bd1e0ce7 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -1684,7 +1684,6 @@ final public class MediaCodec {
private MediaCodecInfo mCodecInfo;
private final Object mCodecInfoLock = new Object();
private MediaCrypto mCrypto;
- private String mPlaybackId;
private static final int EVENT_CALLBACK = 1;
private static final int EVENT_SET_CALLBACK = 2;
diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java
index 2448d481af2e..50a326e9a595 100644
--- a/media/java/android/media/MediaFormat.java
+++ b/media/java/android/media/MediaFormat.java
@@ -219,6 +219,15 @@ public final class MediaFormat {
private Map<String, Object> mMap;
/**
+ * A key describing the log session ID for MediaCodec. The log session ID is a random 32-byte
+ * hexadecimal string that is used to associate metrics from multiple media codec instances
+ * to the same playback or recording session.
+ * The associated value is a string.
+ * @hide
+ */
+ public static final String LOG_SESSION_ID = "log-session-id";
+
+ /**
* A key describing the mime type of the MediaFormat.
* The associated value is a string.
*/
diff --git a/media/java/android/media/MediaRouter2.java b/media/java/android/media/MediaRouter2.java
index 1f6855a4ae8e..90fa9a52f5cf 100644
--- a/media/java/android/media/MediaRouter2.java
+++ b/media/java/android/media/MediaRouter2.java
@@ -21,6 +21,7 @@ import static com.android.internal.util.function.pooled.PooledLambda.obtainMessa
import android.annotation.CallbackExecutor;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.TestApi;
import android.content.Context;
@@ -159,9 +160,11 @@ public final class MediaRouter2 {
* Finally, it will have no effect to call {@link #setOnGetControllerHintsListener}.
*
* @param clientPackageName the package name of the app to control
+ * @throws SecurityException if the caller doesn't have MODIFY_AUDIO_ROUTING permission.
* @hide
*/
@SystemApi
+ @RequiresPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING)
@Nullable
public static MediaRouter2 getInstance(@NonNull Context context,
@NonNull String clientPackageName) {
@@ -179,13 +182,20 @@ public final class MediaRouter2 {
synchronized (sSystemRouterLock) {
MediaRouter2 instance = sSystemMediaRouter2Map.get(clientPackageName);
if (instance == null) {
- // TODO: Add permission check here using MODIFY_AUDIO_ROUTING.
if (sManager == null) {
+ IMediaRouterService serviceBinder = IMediaRouterService.Stub.asInterface(
+ ServiceManager.getService(Context.MEDIA_ROUTER_SERVICE));
+ try {
+ // MediaRouterService will throw a SecurityException if the caller
+ // doesn't have MODIFY_AUDIO_ROUTING permission.
+ serviceBinder.checkModifyAudioRoutingPermission();
+ } catch (RemoteException e) {
+ e.rethrowAsRuntimeException();
+ }
sManager = MediaRouter2Manager.getInstance(context.getApplicationContext());
}
instance = new MediaRouter2(context, clientPackageName);
sSystemMediaRouter2Map.put(clientPackageName, instance);
- // TODO: Remove router instance once it is not needed.
instance.registerManagerCallbackForSystemRouter();
}
return instance;
@@ -281,9 +291,9 @@ public final class MediaRouter2 {
mDiscoveryPreference = new RouteDiscoveryPreference.Builder(
sManager.getPreferredFeatures(clientPackageName), true).build();
updateAllRoutesFromManager();
- mMediaRouterService = null; // TODO: Make this non-null and check permission.
// Only used by non-system MediaRouter2.
+ mMediaRouterService = null;
mPackageName = null;
}
diff --git a/media/mca/effect/java/Android.bp b/media/mca/effect/java/Android.bp
index 708167c94607..70d999f76483 100644
--- a/media/mca/effect/java/Android.bp
+++ b/media/mca/effect/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-mca-effect-sources",
srcs: ["**/*.java"],
diff --git a/media/mca/filterfw/java/Android.bp b/media/mca/filterfw/java/Android.bp
index 51be85b46602..77afcff27f56 100644
--- a/media/mca/filterfw/java/Android.bp
+++ b/media/mca/filterfw/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-mca-filterfw-sources",
srcs: ["**/*.java"],
diff --git a/media/mca/filterpacks/java/Android.bp b/media/mca/filterpacks/java/Android.bp
index d9271b95f6d2..f370b21589c5 100644
--- a/media/mca/filterpacks/java/Android.bp
+++ b/media/mca/filterpacks/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-mca-filterpacks-sources",
srcs: ["**/*.java"],
diff --git a/mime/java/Android.bp b/mime/java/Android.bp
index 7e562639d4cc..07cada8e1372 100644
--- a/mime/java/Android.bp
+++ b/mime/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-mime-sources",
srcs: ["**/*.java"],
diff --git a/mms/java/Android.bp b/mms/java/Android.bp
index 367d8c35fdce..4d51439392fa 100644
--- a/mms/java/Android.bp
+++ b/mms/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-mms-sources",
srcs: [
diff --git a/native/android/OWNERS b/native/android/OWNERS
index d414ed4cd5e2..6f7def8bc03a 100644
--- a/native/android/OWNERS
+++ b/native/android/OWNERS
@@ -2,3 +2,7 @@ per-file libandroid_net.map.txt, net.c = set noparent
per-file libandroid_net.map.txt, net.c = codewiz@google.com, jchalard@google.com, junyulai@google.com
per-file libandroid_net.map.txt, net.c = lorenzo@google.com, reminv@google.com, satk@google.com
per-file system_fonts.cpp = file:/graphics/java/android/graphics/fonts/OWNERS
+
+per-file native_window_jni.cpp = file:/services/core/java/com/android/server/wm/OWNERS
+per-file native_activity.cpp = file:/services/core/java/com/android/server/wm/OWNERS
+per-file surface_control.cpp = file:/services/core/java/com/android/server/wm/OWNERS
diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt
index a2fde4ecd3a2..4d137e0e1acc 100644
--- a/native/android/libandroid.map.txt
+++ b/native/android/libandroid.map.txt
@@ -252,6 +252,7 @@ LIBANDROID {
ASurfaceTransaction_setColor; # introduced=29
ASurfaceTransaction_setDamageRegion; # introduced=29
ASurfaceTransaction_setDesiredPresentTime; # introduced=29
+ ASurfaceTransaction_setEnableBackPressure; # introduced=31
ASurfaceTransaction_setFrameRate; # introduced=30
ASurfaceTransaction_setFrameRateWithChangeStrategy; # introduced=31
ASurfaceTransaction_setGeometry; # introduced=29
diff --git a/native/android/surface_control.cpp b/native/android/surface_control.cpp
index 80cf663978a9..e0f637959cfb 100644
--- a/native/android/surface_control.cpp
+++ b/native/android/surface_control.cpp
@@ -656,3 +656,17 @@ void ASurfaceTransaction_setFrameRateWithChangeStrategy(ASurfaceTransaction* aSu
sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl);
transaction->setFrameRate(surfaceControl, frameRate, compatibility, changeFrameRateStrategy);
}
+
+void ASurfaceTransaction_setEnableBackPressure(ASurfaceTransaction* aSurfaceTransaction,
+ ASurfaceControl* aSurfaceControl,
+ bool enableBackpressure) {
+ CHECK_NOT_NULL(aSurfaceControl);
+ CHECK_NOT_NULL(aSurfaceTransaction);
+
+ sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl);
+ Transaction* transaction = ASurfaceTransaction_to_Transaction(aSurfaceTransaction);
+
+ const uint32_t flags = enableBackpressure ?
+ layer_state_t::eEnableBackpressure : 0;
+ transaction->setFlags(surfaceControl, flags, layer_state_t::eEnableBackpressure);
+}
diff --git a/opengl/java/Android.bp b/opengl/java/Android.bp
index 8ed4161cb9de..6dbae421e059 100644
--- a/opengl/java/Android.bp
+++ b/opengl/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-opengl-sources",
srcs: ["**/*.java"],
diff --git a/packages/PackageInstaller/res/values-af/strings.xml b/packages/PackageInstaller/res/values-af/strings.xml
index 4f0f0f00bbb6..0bca4f4ad643 100644
--- a/packages/PackageInstaller/res/values-af/strings.xml
+++ b/packages/PackageInstaller/res/values-af/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Pakketinstalleerder"</string>
<string name="install" msgid="711829760615509273">"Installeer"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Klaar"</string>
<string name="cancel" msgid="1018267193425558088">"Kanselleer"</string>
<string name="installing" msgid="4921993079741206516">"Installeer tans …"</string>
<string name="installing_app" msgid="1165095864863849422">"Installeer tans <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> …"</string>
<string name="install_done" msgid="5987363587661783896">"Program geïnstalleer."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Wil jy hierdie program installeer?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Wil jy \'n opdatering vir hierdie bestaande program installeer? Jou bestaande data sal nie verlore gaan nie."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Wil jy \'n opdatering vir hierdie ingeboude program installeer? Jou bestaande data sal nie verlore gaan nie."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Program nie geïnstalleer nie."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Die installering van die pakket is geblokkeer."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Program is nie geïnstalleer nie omdat pakket met \'n bestaande pakket bots."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Installeer- en deïnstalleerhandelinge word nie in Wear gesteun nie."</string>
<string name="message_staging" msgid="8032722385658438567">"Voer tans program uit …"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Onbekend"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Jou tablet word vir jou veiligheid nie toegelaat om onbekende programme van hierdie bron af te installeer nie."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Jou TV word vir jou veiligheid nie toegelaat om onbekende programme van hierdie bron af te installeer nie."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Jou foon word vir jou veiligheid nie toegelaat om onbekende programme van hierdie bron af te installeer nie."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Jou foon en persoonlike data is meer kwesbaar vir aanvalle deur onbekende programme. Deur hierdie program te installeer, stem jy in dat jy verantwoordelik is vir enige skade aan jou foon of verlies van data wat uit sy gebruik kan spruit."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Jou tablet en persoonlike data is meer kwesbaar vir aanvalle deur onbekende programme. Deur hierdie program te installeer, stem jy in dat jy verantwoordelik is vir enige skade aan jou tablet of verlies van data wat uit sy gebruik kan spruit."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Jou TV en persoonlike data is meer kwesbaar vir aanvalle deur onbekende programme. Deur hierdie program te installeer, stem jy in dat jy verantwoordelik is vir enige skade aan jou TV of verlies van data wat uit sy gebruik kan spruit."</string>
diff --git a/packages/PackageInstaller/res/values-am/strings.xml b/packages/PackageInstaller/res/values-am/strings.xml
index 0acab9e796c7..cf6e96f55d27 100644
--- a/packages/PackageInstaller/res/values-am/strings.xml
+++ b/packages/PackageInstaller/res/values-am/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"ጥቅል ጫኚ"</string>
<string name="install" msgid="711829760615509273">"ጫን"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"ተከናውኗል"</string>
<string name="cancel" msgid="1018267193425558088">"ይቅር"</string>
<string name="installing" msgid="4921993079741206516">"በመጫን ላይ…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ን በመጫን ላይ…"</string>
<string name="install_done" msgid="5987363587661783896">"መተግበሪያ ተጭኗል።"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"ይህን መተግበሪያ መጫን ይፈልጋሉ?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"ለዚህ ነባር መተግበሪያ ዝማኔ መጫን ይፈልጋሉ? ነባሪ ውሂብዎ አይጠፋም።"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"ለዚህ አብሮ ለተሠራ መተግበሪያ ዝማኔ መጫን ይፈልጋሉ? ነባር ውሂብዎ አይጠፋም።"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"መተግበሪያ አልተጫነም።"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"ጥቅሉ እንዳይጫን ታግዷል።"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"እንደ ጥቅል ያልተጫነ መተግበሪያ ከነባር ጥቅል ጋር ይጋጫል።"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"በWear ላይ የመጫን/ማራገፍ እርምጃዎች አይደገፉም።"</string>
<string name="message_staging" msgid="8032722385658438567">"መተግበሪያን በማዘጋጀት ላይ…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"ያልታወቀ"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"ለእርስዎ ደህንነት ሲባል የእርስዎ ጡባዊ ከዚህ ምንጭ የመጡ ያልታወቁ መተግበሪያዎችን እንዲጭን አልተፈቀደለትም።"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"ለእርስዎ ደህንነት ሲባል የእርስዎ ቴሌቪዥን ከዚህ ምንጭ የመጡ ያልታወቁ መተግበሪያዎችን እንዲጭን አልተፈቀደለትም።"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"ለእርስዎ ደህንነት ሲባል የእርስዎ ስልክ ከዚህ ምንጭ የመጡ ያልታወቁ መተግበሪያዎችን እንዲጭን አልተፈቀደለትም።"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"የእርስዎ ስልክ እና የግል ውሂብ በማይታወቁ መተግበሪያዎች ለሚደርሱ ጥቃቶች በይልበልጥ ተጋላጭ ናቸው። ይህን መተግበሪያ በመጫንዎ በእርስዎ ስልክ ላይ ለሚደርስ ማናቸውም ጉዳት ወይም መተግበሪያውን በመጠቀም ለሚከሰት የውሂብ መጥፋት ኃላፊነቱን እንደሚወስዱ ተስማምተዋል።"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"የእርስዎ ጡባዊ እና የግል ውሂብ በማይታወቁ መተግበሪያዎች ለሚደርሱ ጥቃቶች በይበልጥ ተጋላጭ ናቸው። ይህን መተግበሪያ በመጫንዎ በእርስዎ ጡባዊ ላይ ለሚደርስ ማናቸውም ጉዳት ወይም መተግበሪያውን በመጠቀም ለሚከሰት የውሂብ መጥፋት ኃላፊነቱን እንደሚወስዱ ተስማምተዋል።"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"የእርስዎ ቴሌቪዥን እና የግል ውሂብ በማይታወቁ መተግበሪያዎች ለሚደርሱ ጥቃቶች በይበልጥ ተጋላጭ ናቸው። ይህን መተግበሪያ በመጫንዎ በእርስዎ ቴሌቪዥን ላይ ለሚደርስ ማናቸውም ጉዳት ወይም መተግበሪያውን በመጠቀም ለሚከሰት የውሂብ መጥፋት ኃላፊነቱን እንደሚወስዱ ተስማምተዋል።"</string>
diff --git a/packages/PackageInstaller/res/values-ar/strings.xml b/packages/PackageInstaller/res/values-ar/strings.xml
index c840374d3f6b..7cfa08a9e32c 100644
--- a/packages/PackageInstaller/res/values-ar/strings.xml
+++ b/packages/PackageInstaller/res/values-ar/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"أداة تثبيت الحزم"</string>
<string name="install" msgid="711829760615509273">"تثبيت"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"تم"</string>
<string name="cancel" msgid="1018267193425558088">"إلغاء"</string>
<string name="installing" msgid="4921993079741206516">"جارٍ التثبيت…"</string>
<string name="installing_app" msgid="1165095864863849422">"جارٍ تثبيت <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"تم تثبيت التطبيق."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"هل تريد تثبيت هذا التطبيق؟"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"هل تريد تثبيت تحديث لهذا التطبيق الحالي؟ لن تفقد بياناتك الحالية."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"هل تريد تثبيت تحديث لهذا التطبيق المضمَّن؟ لن تفقد بياناتك الحالية."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"التطبيق ليس مثبتًا."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"تم حظر تثبيت الحزمة."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"لم يتم تثبيت التطبيق لأن حزمة التثبيت تتعارض مع حزمة حالية."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"‏لا تتوافق إجراءات التثبيت/إلغاء التثبيت مع نظام Android Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"جارٍ الطرح المرحلي للتطبيق…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"غير معروف"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"لأغراض الأمان، غير مسموح لجهازك اللوحي بتثبيت تطبيقات غير معروفة من هذا المصدر."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"لأغراض الأمان، غير مسموح لجهاز التلفزيون الذي تستخدمه بتثبيت تطبيقات غير معروفة من هذا المصدر."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"لأغراض الأمان، غير مسموح لهاتفك بتثبيت تطبيقات غير معروفة من هذا المصدر."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"يعتبر الهاتف والبيانات الشخصية أكثر عرضة لهجوم التطبيقات غير المعروفة. من خلال تثبيت هذا التطبيق، توافق على تحمل مسؤولية أي ضرر يحدث لهاتفك أو فقدان البيانات الذي قد ينتج عن استخدامه."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"يعتبر الجهاز اللوحي والبيانات الشخصية أكثر عرضة لهجوم التطبيقات غير المعروفة. من خلال تثبيت هذا التطبيق، توافق على تحمل مسؤولية أي ضرر يحدث للجهاز اللوحي أو فقدان البيانات الذي قد ينتج عن استخدامه."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"يعتبر جهاز التلفزيون والبيانات الشخصية أكثر عرضة لهجوم التطبيقات غير المعروفة. من خلال تثبيت هذا التطبيق، توافق على تحمل مسؤولية أي ضرر يحدث لجهاز التلفزيون أو فقدان البيانات الذي قد ينتج عن استخدامه."</string>
diff --git a/packages/PackageInstaller/res/values-as/strings.xml b/packages/PackageInstaller/res/values-as/strings.xml
index c900efdfb480..5c902f0a6b53 100644
--- a/packages/PackageInstaller/res/values-as/strings.xml
+++ b/packages/PackageInstaller/res/values-as/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"পেকেজ ইনষ্টলাৰ"</string>
<string name="install" msgid="711829760615509273">"ইনষ্টল কৰক"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"সম্পন্ন হ’ল"</string>
<string name="cancel" msgid="1018267193425558088">"বাতিল কৰক"</string>
<string name="installing" msgid="4921993079741206516">"ইনষ্টল কৰি থকা হৈছে…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ইনষ্টল কৰি থকা হৈছে…"</string>
<string name="install_done" msgid="5987363587661783896">"এপ্ ইনষ্টল কৰা হ’ল।"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"আপুনি এই এপ্লিকেশ্বনটো ইনষ্টল কৰিব বিচাৰেনে?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"আপুনি আগৰে পৰা থকা এপ্লিকেশ্বন আপডে’ট কৰিব বিচাৰেনে? আপোনাৰ আগৰ ডেটা নেহেৰায়।"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"আপুনি এই আগৰে পৰা থকা এপ্লিকেশ্বনটো আপডে’ট কৰিব বিচাৰেনে? আপোনাৰ আগৰ ডেটা নেহেৰায়।"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"এপ্ ইনষ্টল কৰা হোৱা নাই।"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"পেকেজটোৰ ইনষ্টল অৱৰোধ কৰা হৈছে।"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"এপটো ইনষ্টল কৰিব পৰা নগ\'ল কাৰণ ইয়াৰ সৈতে আগৰে পৰা থকা এটা পেকেজৰ সংঘাত হৈছে।"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"ৱেৰ-ত ইনষ্টল/আনইনষ্টল কৰিব পৰা নাযায়।"</string>
<string name="message_staging" msgid="8032722385658438567">"এপৰ অন্তিম পর্যায়ৰ পৰীক্ষণ চলি আছে…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"অজ্ঞাত"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"আপোনাৰ সুৰক্ষাৰ বাবে এই উৎসৰ পৰা অজ্ঞাত এপসমূহ আপোনাৰ টেবলেটত ইনষ্টল কৰাৰ অনুমতি দিয়া হোৱা নাই।"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"আপোনাৰ সুৰক্ষাৰ বাবে এই উৎসৰ পৰা অজ্ঞাত এপসমূহ আপোনাৰ টিভিত ইনষ্টল কৰাৰ অনুমতি দিয়া হোৱা নাই।"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"আপোনাৰ সুৰক্ষাৰ বাবে এই উৎসৰ পৰা অজ্ঞাত এপসমূহ আপোনাৰ ফ\'নত ইনষ্টল কৰাৰ অনুমতি দিয়া হোৱা নাই।"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"আপোনাৰ ফ\'ন আৰু ব্যক্তিগত ডেটা অজ্ঞাত এপৰ আক্ৰমণৰ বলি হোৱাৰ সম্ভাৱনা অধিক। আপুনি এই এপটো ইনষ্টল কৰি এপটোৰ ব্যৱহাৰৰ ফলত আপোনাৰ টিভিত হ\'ব পৰা যিকোনো ক্ষতি বা ডেটা ক্ষয়ৰ বাবে আপুনি নিজে দায়ী হ\'ব বুলি সন্মতি দিয়ে।"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"আপোনাৰ টেবলেট আৰু ব্যক্তিগত ডেটা অজ্ঞাত এপৰ আক্ৰমণৰ বলি হোৱাৰ সম্ভাৱনা অধিক। আপুনি এই এপটো ইনষ্টল কৰি এপটোৰ ব্যৱহাৰৰ ফলত আপোনাৰ টিভিত হ\'ব পৰা যিকোনো ক্ষতি বা ডেটা ক্ষয়ৰ বাবে আপুনি নিজে দায়ী হ\'ব বুলি সন্মতি দিয়ে।"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"আপোনাৰ টিভি আৰু ব্যক্তিগত ডেটা অজ্ঞাত এপৰ আক্ৰমণৰ বলি হোৱাৰ সম্ভাৱনা অধিক। আপুনি এই এপটো ইনষ্টল কৰি এপটোৰ ব্যৱহাৰৰ ফলত আপোনাৰ টিভিত হ\'ব পৰা যিকোনো ক্ষতি বা ডেটা ক্ষয়ৰ বাবে আপুনি নিজে দায়ী হ\'ব বুলি সন্মতি দিয়ে।"</string>
diff --git a/packages/PackageInstaller/res/values-az/strings.xml b/packages/PackageInstaller/res/values-az/strings.xml
index bc36123ed46a..485dd1612070 100644
--- a/packages/PackageInstaller/res/values-az/strings.xml
+++ b/packages/PackageInstaller/res/values-az/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Paket quraşdırıcı"</string>
<string name="install" msgid="711829760615509273">"Quraşdırın"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Hazırdır"</string>
<string name="cancel" msgid="1018267193425558088">"Ləğv edin"</string>
<string name="installing" msgid="4921993079741206516">"Quraşdırılır..."</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> quraşdırılır…"</string>
<string name="install_done" msgid="5987363587661783896">"Tətbiq quraşdırılıb."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Bu tətbiqi quraşdırmaq istəyirsiniz?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Bu mövcud tətbiqdə güncəllənmə quraşdırmaq istəyirsiniz? Hazırkı datanız silinməyəcək."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Bu daxili tətbiqdə güncəllənmə quraşdırmaq istəyirsiniz? Hazırkı datanız silinməyəcək."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Tətbiq quraşdırılmayıb."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Paketin quraşdırılması blok edildi."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Bu paketin mövcud paket ilə ziddiyətinə görə tətbiq quraşdırılmadı."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Yükləmə/Sistemdən silmə fəaliyyətləri Wear\'də dəstəklənmir."</string>
<string name="message_staging" msgid="8032722385658438567">"Tətbiq hazırlanır..."</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Naməlum"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Təhlükəsizliyiniz üçün planşetə bu mənbədən olan naməlum tətbiqləri quraşdırmağa icazə verilmir."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Təhlükəsizliyiniz üçün TV-yə bu mənbədən olan naməlum tətbiqləri quraşdırmağa icazə verilmir."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Təhlükəsizliyiniz üçün telefona bu mənbədən olan naməlum tətbiqləri quraşdırmağa icazə verilmir."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefon və şəxsi data naməlum tətbiqlərin hücumuna qarşı daha həssasdır. Bu tətbiqi quraşdırmaqla telefona dəyə biləcək zərər və ya onun istifadəsi nəticəsində baş verən data itkisinə görə məsuliyyət daşıdığınızı qəbul edirsiniz."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Planşet və şəxsi data naməlum tətbiqlərin hücumuna qarşı daha həssasdır. Bu tətbiqi quraşdırmaqla planşetə dəyə biləcək zərər və ya onun istifadəsi nəticəsində baş verə biləcək data itkisinə görə məsuliyyət daşıdığınızı qəbul edirsiniz."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Tv və şəxsi data naməlum tətbiqlərin hücumuna qarşı daha həssasdır. Bu tətbiqi quraşdırmaqla Tv-yə dəyə biləcək zərər və ya onun istifadəsi nəticəsində baş verən data itkisinə görə məsuliyyət daşıdığınızı qəbul edirsiniz."</string>
diff --git a/packages/PackageInstaller/res/values-b+sr+Latn/strings.xml b/packages/PackageInstaller/res/values-b+sr+Latn/strings.xml
index 44cfef05e32d..9a97dad86ea2 100644
--- a/packages/PackageInstaller/res/values-b+sr+Latn/strings.xml
+++ b/packages/PackageInstaller/res/values-b+sr+Latn/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Program za instal. paketa"</string>
<string name="install" msgid="711829760615509273">"Instaliraj"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Gotovo"</string>
<string name="cancel" msgid="1018267193425558088">"Otkaži"</string>
<string name="installing" msgid="4921993079741206516">"Instalira se..."</string>
<string name="installing_app" msgid="1165095864863849422">"Instalira se <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikacija je instalirana."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Želite li da instalirate ovu aplikaciju?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Želite li da instalirate ažuriranje za ovu postojeću aplikaciju? Postojeći podaci se neće izgubiti."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Želite li da instalirate ažuriranje za ovu ugrađenu aplikaciju? Postojeći podaci se neće izgubiti."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikacija nije instalirana."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Instaliranje paketa je blokirano."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacija nije instalirana jer je paket neusaglašen sa postojećim paketom."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Radnje Instaliraj/Deinstaliraj nisu podržane u Wear-u."</string>
<string name="message_staging" msgid="8032722385658438567">"Aplikacija se priprema…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Nepoznato"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Tabletu iz bezbednosnih razloga nije dozvoljeno da instalira nepoznate aplikacije iz ovog izvora."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Televizoru iz bezbednosnih razloga nije dozvoljeno da instalira nepoznate aplikacije iz ovog izvora."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Telefonu iz bezbednosnih razloga nije dozvoljeno da instalira nepoznate aplikacije iz ovog izvora."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefon i lični podaci su podložniji napadu nepoznatih aplikacija. Ako instalirate ovu aplikaciju, prihvatate da ste odgovorni za eventualna oštećenja telefona ili gubitak podataka do kojih može da dođe zbog njenog korišćenja."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tablet i lični podaci su podložniji napadu nepoznatih aplikacija. Ako instalirate ovu aplikaciju, prihvatate da ste odgovorni za eventualna oštećenja tableta ili gubitak podataka do kojih može da dođe zbog njenog korišćenja."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV i lični podaci su podložniji napadu nepoznatih aplikacija. Ako instalirate ovu aplikaciju, prihvatate da ste odgovorni za eventualna oštećenja TV-a ili gubitak podataka do kojih može da dođe zbog njenog korišćenja."</string>
diff --git a/packages/PackageInstaller/res/values-be/strings.xml b/packages/PackageInstaller/res/values-be/strings.xml
index e7cbf06624e3..ceca8a2bc4d1 100644
--- a/packages/PackageInstaller/res/values-be/strings.xml
+++ b/packages/PackageInstaller/res/values-be/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Усталёўшчык пакетаў"</string>
<string name="install" msgid="711829760615509273">"Усталяваць"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Гатова"</string>
<string name="cancel" msgid="1018267193425558088">"Скасаваць"</string>
<string name="installing" msgid="4921993079741206516">"Ідзе ўсталёўка…"</string>
<string name="installing_app" msgid="1165095864863849422">"Усталёўваецца <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Праграма ўсталявана."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Хочаце ўсталяваць гэту праграму?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Хочаце ўсталяваць абнаўленне для гэтай праграмы? Існуючыя даныя не будуць страчаны."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Хочаце ўсталяваць абнаўленне для ўбудаванай праграмы? Існуючыя даныя не будуць страчаны."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Праграма не ўсталявана."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Усталяванне пакета заблакіравана."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Праграма не ўсталявана, таму што пакет канфліктуе з існуючым пакетам."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Дзеянні па ўсталяванні або выдаленні не падтрымліваюцца на Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Праграма падрыхтоўваецца…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Невядома"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"У мэтах бяспекі вашаму планшэту забаронена ўсталёўваць невядомыя праграмы з гэтай крыніцы."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"У мэтах бяспекі вашаму тэлевізару забаронена ўсталёўваць невядомыя праграмы з гэтай крыніцы."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"У мэтах бяспекі вашаму тэлефону забаронена ўсталёўваць невядомыя праграмы з гэтай крыніцы."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Ваш тэлефон і асабістыя даныя больш прыступныя для атак невядомых праграм. Усталёўваючы гэту праграму, вы згаджаецеся з тым, што несяце адказнасць за любыя пашкоджанні тэлефона ці страту даных, якія могуць адбыцца ў выніку выкарыстання гэтай праграмы."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Ваш планшэт і асабістыя даныя больш прыступныя для атак невядомых праграм. Усталёўваючы гэту праграму, вы згаджаецеся з тым, што несяце адказнасць за любыя пашкоджанні планшэта ці страту даных, якія могуць адбыцца ў выніку выкарыстання гэтай праграмы."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Ваш тэлевізар і асабістыя даныя больш прыступныя для атак невядомых праграм. Усталёўваючы гэту праграму, вы згаджаецеся з тым, што несяце адказнасць за любыя пашкоджанні тэлевізара ці страту даных, якія могуць адбыцца ў выніку выкарыстання гэтай праграмы."</string>
diff --git a/packages/PackageInstaller/res/values-bg/strings.xml b/packages/PackageInstaller/res/values-bg/strings.xml
index 12ba3ef413e8..17aa400f66b7 100644
--- a/packages/PackageInstaller/res/values-bg/strings.xml
+++ b/packages/PackageInstaller/res/values-bg/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Пакети: Инстал. програма"</string>
<string name="install" msgid="711829760615509273">"Инсталиране"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Готово"</string>
<string name="cancel" msgid="1018267193425558088">"Отказ"</string>
<string name="installing" msgid="4921993079741206516">"Инсталира се..."</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> се инсталира…"</string>
<string name="install_done" msgid="5987363587661783896">"Приложението бе инсталирано."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Искате ли да инсталирате това приложение?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Искате ли да инсталирате актуализация за това съществуващо приложение? Съществуващите ви данни няма да бъдат загубени."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Искате ли да инсталирате актуализация за това вградено приложение? Съществуващите ви данни няма да бъдат загубени."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Приложението не бе инсталирано."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Инсталирането на пакета бе блокирано."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Приложението не бе инсталирано, тъй като пакетът е в конфликт със съществуващ пакет."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Действията инсталиране и деинсталиране не се поддържат на устройства с Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Приложението се подготвя…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Неизвестно"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"От съображения за сигурност на таблета ви не могат да се инсталират неизвестни приложения от този източник."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"От съображения за сигурност на телевизора ви не могат да се инсталират неизвестни приложения от този източник."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"От съображения за сигурност на телефона ви не могат да се инсталират неизвестни приложения от този източник."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Телефонът и личните ви данни са по-уязвими към атаки от неизвестни приложения. С инсталирането на това приложение приемате, че носите отговорност при евентуална повреда на телефона или загуба на информация вследствие на използването на приложението."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Таблетът и личните ви данни са по-уязвими към атаки от неизвестни приложения. С инсталирането на това приложение приемате, че носите отговорност при евентуална повреда на таблета или загуба на информация вследствие на използването на приложението."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Телевизорът и личните ви данни са по-уязвими към атаки от неизвестни приложения. С инсталирането на това приложение приемате, че носите отговорност при евентуална повреда на телевизора или загуба на информация вследствие на използването на приложението."</string>
diff --git a/packages/PackageInstaller/res/values-bn/strings.xml b/packages/PackageInstaller/res/values-bn/strings.xml
index 80255529c821..54f67c0fe2f2 100644
--- a/packages/PackageInstaller/res/values-bn/strings.xml
+++ b/packages/PackageInstaller/res/values-bn/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"প্যাকেজ ইনস্টলার"</string>
<string name="install" msgid="711829760615509273">"ইনস্টল করুন"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"হয়ে গেছে"</string>
<string name="cancel" msgid="1018267193425558088">"বাতিল করুন"</string>
<string name="installing" msgid="4921993079741206516">"ইনস্টল করা হচ্ছে…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ইনস্টল করা হচ্ছে…"</string>
<string name="install_done" msgid="5987363587661783896">"অ্যাপটি ইনস্টল করা হয়ে গেছে।"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"আপনি কি এই অ্যাপ্লিকেশনটি ইনস্টল করতে চান?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"আগে থেকেই থাকা এই অ্যাপ্লিকেশনটির একটি আপডেট কি আপনি ইনস্টল করতে চান? আপনার আগে থেকে থাকা ডেটা মুছে যাবে না।"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"এই বিল্ট-ইন অ্যাপ্লিকেশনটির একটি আপডেট কি আপনি ইনস্টল করতে চান? আপনার আগে থেকে থাকা ডেটা মুছে যাবে না।"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"অ্যাপটি ইনস্টল করা হয়নি।"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"ইনস্টল হওয়া থেকে প্যাকেজটিকে ব্লক করা হয়েছে।"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"আগে থেকেই থাকা একটি প্যাকেজের সাথে প্যাকেজটির সমস্যা সৃষ্টি হওয়ায় অ্যাপটি ইনস্টল করা যায়নি।"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear-এ ইনস্টল/আনইনস্টল করা সমর্থিত নয়।"</string>
<string name="message_staging" msgid="8032722385658438567">"অ্যাপ স্টেজ করা হচ্ছে…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"অজানা"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"আপনার নিরাপত্তার জন্য, এই অজানা উৎস থেকে আপনার ট্যাবলেটের অ্যাপ ইনস্টল করার অনুমতি নেই।"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"আপনার নিরাপত্তার জন্য, এই অজানা উৎস থেকে আপনার টিভির অ্যাপ ইনস্টল করার অনুমতি নেই।"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"আপনার নিরাপত্তার জন্য, এই অজানা উৎস থেকে আপনার ফোনের অ্যাপ ইনস্টল করার অনুমতি নেই।"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"অজানা অ্যাপের দ্বারা আপনার ফোন এবং ব্যক্তিগত ডেটা আক্রান্ত হওয়ার সম্ভাবনা বেশি থাকে। এই অ্যাপটি ইনস্টল করার মাধ্যমে আপনি সম্মত হচ্ছেন যে এটি ব্যবহারের ফলে আপনার ফোনের বা ডেটার কোনও ক্ষতি হলে তার জন্য আপনিই দায়ী থাকবেন।"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"অজানা অ্যাপের দ্বারা আপনার ট্যাবলেট এবং ব্যক্তিগত ডেটা আক্রান্ত হওয়ার সম্ভাবনা বেশি থাকে। এই অ্যাপটি ইনস্টল করার মাধ্যমে আপনি সম্মত হচ্ছেন যে এটি ব্যবহারের ফলে আপনার ট্যাবলেটের বা ডেটার কোনও ক্ষতি হলে তার জন্য আপনিই দায়ী থাকবেন।"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"অজানা অ্যাপের দ্বারা আপনার টিভি এবং ব্যক্তিগত ডেটা আক্রান্ত হওয়ার সম্ভাবনা বেশি থাকে। এই অ্যাপটি ইনস্টল করার মাধ্যমে আপনি সম্মত হচ্ছেন যে এটি ব্যবহারের ফলে আপনার টিভি বা ডেটার কোনও ক্ষতি হলে তার জন্য আপনিই দায়ী থাকবেন।"</string>
diff --git a/packages/PackageInstaller/res/values-bs/strings.xml b/packages/PackageInstaller/res/values-bs/strings.xml
index a099147072bc..22b85dd61b6d 100644
--- a/packages/PackageInstaller/res/values-bs/strings.xml
+++ b/packages/PackageInstaller/res/values-bs/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Alat za instalir. paketa"</string>
<string name="install" msgid="711829760615509273">"Instaliraj"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Gotovo"</string>
<string name="cancel" msgid="1018267193425558088">"Otkaži"</string>
<string name="installing" msgid="4921993079741206516">"Instaliranje…"</string>
<string name="installing_app" msgid="1165095864863849422">"Instaliranje paketa <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikacija je instalirana."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Želite li instalirati ovu aplikaciju?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Želite li instalirati ažuriranje za ovu postojeću aplikaciju? Vaši postojeći podaci neće biti izgubljeni."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Želite li instalirati ažuriranje za ovu ugrađenu aplikaciju? Vaš postojeći podaci neće biti izgubljeni."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikacija nije instalirana."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Instaliranje ovog paketa je blokirano."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacija nije instalirana jer paket nije usaglašen s postojećim paketom."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Instaliranje/deinstaliranje nije podržano na Wearu."</string>
<string name="message_staging" msgid="8032722385658438567">"Pripremanje aplikacije…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Nepoznato"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Vašem tabletu iz sigurnosnih razloga nije dopušteno instaliranje nepoznatih aplikacija iz ovog izvora."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Vašem TV-u iz sigurnosnih razloga nije dopušteno instaliranje nepoznatih aplikacija iz ovog izvora."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Vašem telefonu iz sigurnosnih razloga nije dopušteno instaliranje nepoznatih aplikacija iz ovog izvora."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Vaši podaci na telefonu i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, saglasni ste da ste vi odgovorni za bilo kakvu štetu na telefonu ili gubitak podataka do kojih može doći korištenjem aplikacije."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Vaši podaci na tabletu i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, saglasni ste da ste vi odgovorni za bilo kakvu štetu na tabletu ili gubitak podataka do kojih može doći korištenjem aplikacije."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Vaši podaci na TV-u i vaši lični podaci izloženiji su napadima nepoznatih aplikacija. Instaliranjem ove aplikacije, saglasni ste da ste vi odgovorni za bilo kakvu štetu na TV-u ili gubitak podataka do kojih može doći korištenjem aplikacije."</string>
diff --git a/packages/PackageInstaller/res/values-ca/strings.xml b/packages/PackageInstaller/res/values-ca/strings.xml
index b25b37bec795..4daf205d3589 100644
--- a/packages/PackageInstaller/res/values-ca/strings.xml
+++ b/packages/PackageInstaller/res/values-ca/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instal·lador de paquets"</string>
<string name="install" msgid="711829760615509273">"Instal·la"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Fet"</string>
<string name="cancel" msgid="1018267193425558088">"Cancel·la"</string>
<string name="installing" msgid="4921993079741206516">"S\'està instal·lant…"</string>
<string name="installing_app" msgid="1165095864863849422">"S\'està instal·lant <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"S\'ha instal·lat l\'aplicació."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Vols instal·lar aquesta aplicació?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Vols instal·lar una actualització en aquesta aplicació? Les teves dades no es perdran."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Vols instal·lar una actualització en aquesta aplicació integrada? Les teves dades no es perdran."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"No s\'ha instal·lat l\'aplicació."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"El paquet s\'ha bloquejat perquè no es pugui instal·lar."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"L\'aplicació no s\'ha instal·lat perquè el paquet entra en conflicte amb un d\'existent."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Les accions d\'instal·lar o de desinstal·lar no s\'admeten a Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"S\'està preparant la instal·lació de l\'aplicació…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Desconeguda"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Per la teva seguretat, la tauleta no pot instal·lar aplicacions desconegudes d\'aquesta font."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Per la teva seguretat, el televisor no pot instal·lar aplicacions desconegudes d\'aquesta font."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Per la teva seguretat, el telèfon no pot instal·lar aplicacions desconegudes d\'aquesta font."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"El telèfon i les dades personals són més vulnerables als atacs d\'aplicacions desconegudes. En instal·lar aquesta aplicació, acceptes que ets responsable de qualsevol dany que es produeixi al telèfon o de la pèrdua de dades que pugui resultar del seu ús."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"La tauleta i les dades personals són més vulnerables als atacs d\'aplicacions desconegudes. En instal·lar aquesta aplicació, acceptes que ets responsable de qualsevol dany que es produeixi a la tauleta o de la pèrdua de dades que pugui resultar del seu ús."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"El televisor i les dades personals són més vulnerables als atacs d\'aplicacions desconegudes. En instal·lar aquesta aplicació, acceptes que ets responsable de qualsevol dany que es produeixi al televisor o de la pèrdua de dades que pugui resultar del seu ús."</string>
diff --git a/packages/PackageInstaller/res/values-cs/strings.xml b/packages/PackageInstaller/res/values-cs/strings.xml
index e250c7bf6ff3..041a37557f8c 100644
--- a/packages/PackageInstaller/res/values-cs/strings.xml
+++ b/packages/PackageInstaller/res/values-cs/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instalátor balíčků"</string>
<string name="install" msgid="711829760615509273">"Instalovat"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Hotovo"</string>
<string name="cancel" msgid="1018267193425558088">"Zrušit"</string>
<string name="installing" msgid="4921993079741206516">"Instalace…"</string>
<string name="installing_app" msgid="1165095864863849422">"Instalace balíčku <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikace je nainstalována."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Chcete tuto aplikaci nainstalovat?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Chcete nainstalovat aktualizaci této existující aplikace? Stávající data nebudou ztracena."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Chcete nainstalovat aktualizaci této integrované aplikace? Stávající data nebudou ztracena."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikaci nelze nainstalovat."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Instalace balíčku byla zablokována."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplikaci nelze nainstalovat, protože balíček je v konfliktu se stávajícím balíčkem."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Akce instalace/odinstalace nejsou v zařízení Wear podporovány."</string>
<string name="message_staging" msgid="8032722385658438567">"Příprava instalace…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Neznámé"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Z bezpečnostních důvodů do tabletu není dovoleno instalovat neznámé aplikace z tohoto zdroje."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Z bezpečnostních důvodů do televize není dovoleno instalovat neznámé aplikace z tohoto zdroje."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Z bezpečnostních důvodů do telefonu není dovoleno instalovat neznámé aplikace z tohoto zdroje."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefon a osobní údaje jsou zranitelnější vůči útoku ze strany neznámých aplikací. Instalací této aplikace přijímáte odpovědnost za případné škody na telefonu nebo ztrátu dat, která může být používáním aplikace způsobena."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tablet a osobní údaje jsou zranitelnější vůči útoku ze strany neznámých aplikací. Instalací této aplikace přijímáte odpovědnost za případné škody na tabletu nebo ztrátu dat, která může být používáním aplikace způsobena."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Televize a osobní údaje jsou zranitelnější vůči útoku ze strany neznámých aplikací. Instalací této aplikace přijímáte odpovědnost za případné škody na televizi nebo ztrátu dat, která může být používáním aplikace způsobena."</string>
diff --git a/packages/PackageInstaller/res/values-da/strings.xml b/packages/PackageInstaller/res/values-da/strings.xml
index ca9f37e64cde..231ada111557 100644
--- a/packages/PackageInstaller/res/values-da/strings.xml
+++ b/packages/PackageInstaller/res/values-da/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Pakkeinstallationsprogram"</string>
<string name="install" msgid="711829760615509273">"Installer"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Udfør"</string>
<string name="cancel" msgid="1018267193425558088">"Annuller"</string>
<string name="installing" msgid="4921993079741206516">"Installerer…"</string>
<string name="installing_app" msgid="1165095864863849422">"Installerer <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Appen er installeret."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Vil du installere denne app?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Vil du installere en opdatering til denne eksisterende app? Du mister ikke dine eksisterende data."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Vil du installere en opdatering til denne indbyggede app? Du mister ikke dine eksisterende data."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Appen blev ikke installeret."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Pakken blev forhindret i at blive installeret."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Appen blev ikke installeret, da pakken er i strid med en eksisterende pakke."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Det er ikke muligt at installere/afinstallere på Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Forbereder appen…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Ukendt"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Din tablet har af sikkerhedshensyn ikke tilladelse til at installere ukendte apps fra denne kilde."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Dit fjernsyn har af sikkerhedshensyn ikke tilladelse til at installere ukendte apps fra denne kilde."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Din telefon har af sikkerhedshensyn ikke tilladelse til at installere ukendte apps fra denne kilde."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Din telefon og dine personlige data er mere sårbare over for angreb fra ukendte apps. Når du installerer denne app, accepterer du, at du er ansvarlig for skader på din telefon eller tab af data, der kan skyldes brug af appen."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Din tablet og dine personlige data er mere sårbare over for angreb fra ukendte apps. Når du installerer denne app, accepterer du, at du er ansvarlig for skader på din tablet eller tab af data, der kan skyldes brug af appen."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Dit fjernsyn og dine personlige data er mere sårbare over for angreb fra ukendte apps. Når du installerer denne app, accepterer du, at du er ansvarlig for skader på dit fjernsyn eller tab af data, der kan skyldes brug af appen."</string>
diff --git a/packages/PackageInstaller/res/values-de/strings.xml b/packages/PackageInstaller/res/values-de/strings.xml
index 7826cebf10a0..257f66211adf 100644
--- a/packages/PackageInstaller/res/values-de/strings.xml
+++ b/packages/PackageInstaller/res/values-de/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Paketinstallation"</string>
<string name="install" msgid="711829760615509273">"Installieren"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Fertig"</string>
<string name="cancel" msgid="1018267193425558088">"Abbrechen"</string>
<string name="installing" msgid="4921993079741206516">"Wird installiert…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> wird installiert…"</string>
<string name="install_done" msgid="5987363587661783896">"App wurde installiert."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Möchtest du diese App installieren?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Möchtest du ein Update dieser vorhandenen App installieren? Deine bisherigen Daten gehen dabei nicht verloren."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Möchtest du ein Update dieser integrierten App installieren? Deine bisherigen Daten gehen dabei nicht verloren."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"App wurde nicht installiert."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Die Installation des Pakets wurde blockiert."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Die App wurde nicht installiert, da das Paket in Konflikt mit einem bestehenden Paket steht."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Installations-/Deinstallationsaktion auf Android Wear nicht unterstützt."</string>
<string name="message_staging" msgid="8032722385658438567">"App wird vorbereitet…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Unbekannt"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Aus Sicherheitsgründen kannst du auf dem Tablet keine unbekannten Apps aus dieser Quelle installieren."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Aus Sicherheitsgründen kannst du auf dem Fernseher keine unbekannten Apps aus dieser Quelle installieren."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Aus Sicherheitsgründen kannst du auf dem Smartphone keine unbekannten Apps aus dieser Quelle installieren."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Unbekannte Apps können gefährlich für dein Smartphone und deine personenbezogenen Daten sein. Wenn du diese App installierst, erklärst du dich damit einverstanden, dass du die Verantwortung für alle Schäden an deinem Smartphone und jegliche Datenverluste trägst, die aus der Verwendung dieser App entstehen können."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Unbekannte Apps können gefährlich für dein Tablet und deine personenbezogenen Daten sein. Wenn du diese App installierst, erklärst du dich damit einverstanden, dass du die Verantwortung für alle Schäden an deinem Tablet und jegliche Datenverluste trägst, die aus der Verwendung dieser App entstehen können."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Unbekannte Apps können gefährlich für deinen Fernseher und deine personenbezogenen Daten sein. Wenn du diese App installierst, erklärst du dich damit einverstanden, dass du die Verantwortung für alle Schäden an deinem Fernseher und jegliche Datenverluste trägst, die aus der Verwendung dieser App entstehen können."</string>
diff --git a/packages/PackageInstaller/res/values-el/strings.xml b/packages/PackageInstaller/res/values-el/strings.xml
index 2be6207f2f65..fd6bf6a07074 100644
--- a/packages/PackageInstaller/res/values-el/strings.xml
+++ b/packages/PackageInstaller/res/values-el/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Πρόγρ. εγκατάστ. πακέτου"</string>
<string name="install" msgid="711829760615509273">"Εγκατάσταση"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Τέλος"</string>
<string name="cancel" msgid="1018267193425558088">"Ακύρωση"</string>
<string name="installing" msgid="4921993079741206516">"Εγκατάσταση…"</string>
<string name="installing_app" msgid="1165095864863849422">"Εγκατάσταση <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Η εφαρμογή εγκαταστάθηκε."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Θέλετε να εγκαταστήσετε αυτήν την εφαρμογή;"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Θέλετε να εγκαταστήσετε μια ενημέρωση σε αυτήν την υπάρχουσα εφαρμογή; Τα υπάρχοντα δεδομένα σας δεν θα χαθούν."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Θέλετε να εγκαταστήσετε μια ενημέρωση σε αυτήν την ενσωματωμένη εφαρμογή; Τα υπάρχοντα δεδομένα σας δεν θα χαθούν."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Η εφαρμογή δεν εγκαταστάθηκε."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Η εγκατάσταση του πακέτου αποκλείστηκε."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Η εφαρμογή δεν εγκαταστάθηκε, επειδή το πακέτο είναι σε διένεξη με κάποιο υπάρχον πακέτο."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Οι ενέργειες εγκατάστασης/απεγκατάστασης δεν υποστηρίζονται στο Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Σταδιακή διάθεση εφαρμογής…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Άγνωστη"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Για λόγους ασφάλειας, δεν επιτρέπεται η εγκατάσταση άγνωστων εφαρμογών από αυτήν την πηγή στο tablet σας."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Για λόγους ασφάλειας, δεν επιτρέπεται η εγκατάσταση άγνωστων εφαρμογών από αυτήν την πηγή στην τηλεόρασή σας."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Για λόγους ασφάλειας, δεν επιτρέπεται η εγκατάσταση άγνωστων εφαρμογών από αυτήν την πηγή στο τηλέφωνό σας."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Το τηλέφωνό σας και τα προσωπικά δεδομένα σας είναι πιο ευάλωτα σε επιθέσεις από άγνωστες εφαρμογές. Με την εγκατάσταση αυτής της εφαρμογής, συμφωνείτε ότι είστε υπεύθυνοι για τυχόν βλάβη που μπορεί να προκληθεί στο τηλέφωνο ή απώλεια δεδομένων που μπορεί να προκύψει από τη χρήση τους."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Το tablet σας και τα προσωπικά δεδομένα σας είναι πιο ευάλωτα σε επιθέσεις από άγνωστες εφαρμογές. Με την εγκατάσταση αυτής της εφαρμογής, συμφωνείτε ότι είστε υπεύθυνοι για τυχόν βλάβη που μπορεί να προκληθεί στο tablet ή απώλεια δεδομένων που μπορεί να προκύψει από τη χρήση τους."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Η τηλεόρασή σας και τα προσωπικά δεδομένα σας είναι πιο ευάλωτα σε επιθέσεις από άγνωστες εφαρμογές. Με την εγκατάσταση αυτής της εφαρμογής, συμφωνείτε ότι είστε υπεύθυνοι για τυχόν βλάβη που μπορεί να προκληθεί στην τηλεόρασή ή απώλεια δεδομένων που μπορεί να προκύψει από τη χρήση τους."</string>
diff --git a/packages/PackageInstaller/res/values-en-rAU/strings.xml b/packages/PackageInstaller/res/values-en-rAU/strings.xml
index 84cde474caa0..24b0aa78efe8 100644
--- a/packages/PackageInstaller/res/values-en-rAU/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rAU/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Package installer"</string>
<string name="install" msgid="711829760615509273">"Install"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Done"</string>
<string name="cancel" msgid="1018267193425558088">"Cancel"</string>
<string name="installing" msgid="4921993079741206516">"Installing…"</string>
<string name="installing_app" msgid="1165095864863849422">"Installing <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"App installed."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Do you want to install this application?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Do you want to install an update to this existing application? Your existing data will not be lost."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Do you want to install an update to this built-in application? Your existing data will not be lost."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"App not installed."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"The package was blocked from being installed."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"App not installed as package conflicts with an existing package."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Install/uninstall actions not supported on Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Staging app…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Unknown"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"For your security, your tablet is not allowed to install unknown apps from this source."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"For your security, your TV is not allowed to install unknown apps from this source."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"For your security, your phone is not allowed to install unknown apps from this source."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Your phone and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your phone or loss of data that may result from its use."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Your tablet and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your tablet or loss of data that may result from its use."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Your TV and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your TV or loss of data that may result from its use."</string>
diff --git a/packages/PackageInstaller/res/values-en-rCA/strings.xml b/packages/PackageInstaller/res/values-en-rCA/strings.xml
index 84cde474caa0..24b0aa78efe8 100644
--- a/packages/PackageInstaller/res/values-en-rCA/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rCA/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Package installer"</string>
<string name="install" msgid="711829760615509273">"Install"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Done"</string>
<string name="cancel" msgid="1018267193425558088">"Cancel"</string>
<string name="installing" msgid="4921993079741206516">"Installing…"</string>
<string name="installing_app" msgid="1165095864863849422">"Installing <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"App installed."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Do you want to install this application?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Do you want to install an update to this existing application? Your existing data will not be lost."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Do you want to install an update to this built-in application? Your existing data will not be lost."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"App not installed."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"The package was blocked from being installed."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"App not installed as package conflicts with an existing package."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Install/uninstall actions not supported on Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Staging app…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Unknown"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"For your security, your tablet is not allowed to install unknown apps from this source."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"For your security, your TV is not allowed to install unknown apps from this source."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"For your security, your phone is not allowed to install unknown apps from this source."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Your phone and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your phone or loss of data that may result from its use."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Your tablet and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your tablet or loss of data that may result from its use."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Your TV and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your TV or loss of data that may result from its use."</string>
diff --git a/packages/PackageInstaller/res/values-en-rGB/strings.xml b/packages/PackageInstaller/res/values-en-rGB/strings.xml
index 84cde474caa0..24b0aa78efe8 100644
--- a/packages/PackageInstaller/res/values-en-rGB/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rGB/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Package installer"</string>
<string name="install" msgid="711829760615509273">"Install"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Done"</string>
<string name="cancel" msgid="1018267193425558088">"Cancel"</string>
<string name="installing" msgid="4921993079741206516">"Installing…"</string>
<string name="installing_app" msgid="1165095864863849422">"Installing <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"App installed."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Do you want to install this application?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Do you want to install an update to this existing application? Your existing data will not be lost."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Do you want to install an update to this built-in application? Your existing data will not be lost."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"App not installed."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"The package was blocked from being installed."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"App not installed as package conflicts with an existing package."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Install/uninstall actions not supported on Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Staging app…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Unknown"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"For your security, your tablet is not allowed to install unknown apps from this source."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"For your security, your TV is not allowed to install unknown apps from this source."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"For your security, your phone is not allowed to install unknown apps from this source."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Your phone and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your phone or loss of data that may result from its use."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Your tablet and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your tablet or loss of data that may result from its use."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Your TV and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your TV or loss of data that may result from its use."</string>
diff --git a/packages/PackageInstaller/res/values-en-rIN/strings.xml b/packages/PackageInstaller/res/values-en-rIN/strings.xml
index 84cde474caa0..24b0aa78efe8 100644
--- a/packages/PackageInstaller/res/values-en-rIN/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rIN/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Package installer"</string>
<string name="install" msgid="711829760615509273">"Install"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Done"</string>
<string name="cancel" msgid="1018267193425558088">"Cancel"</string>
<string name="installing" msgid="4921993079741206516">"Installing…"</string>
<string name="installing_app" msgid="1165095864863849422">"Installing <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"App installed."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Do you want to install this application?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Do you want to install an update to this existing application? Your existing data will not be lost."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Do you want to install an update to this built-in application? Your existing data will not be lost."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"App not installed."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"The package was blocked from being installed."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"App not installed as package conflicts with an existing package."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Install/uninstall actions not supported on Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Staging app…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Unknown"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"For your security, your tablet is not allowed to install unknown apps from this source."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"For your security, your TV is not allowed to install unknown apps from this source."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"For your security, your phone is not allowed to install unknown apps from this source."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Your phone and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your phone or loss of data that may result from its use."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Your tablet and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your tablet or loss of data that may result from its use."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Your TV and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your TV or loss of data that may result from its use."</string>
diff --git a/packages/PackageInstaller/res/values-en-rXC/strings.xml b/packages/PackageInstaller/res/values-en-rXC/strings.xml
index 128cbaefd5e1..79136ee00a6d 100644
--- a/packages/PackageInstaller/res/values-en-rXC/strings.xml
+++ b/packages/PackageInstaller/res/values-en-rXC/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‎‎‏‎‎‎‎‎‎Package installer‎‏‎‎‏‎"</string>
<string name="install" msgid="711829760615509273">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‏‎Install‎‏‎‎‏‎"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‎‎‎‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‏‎Done‎‏‎‎‏‎"</string>
<string name="cancel" msgid="1018267193425558088">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‎‎‎‎Cancel‎‏‎‎‏‎"</string>
<string name="installing" msgid="4921993079741206516">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎Installing…‎‏‎‎‏‎"</string>
<string name="installing_app" msgid="1165095864863849422">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‎‎Installing ‎‏‎‎‏‏‎<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎…‎‏‎‎‏‎"</string>
<string name="install_done" msgid="5987363587661783896">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‏‏‎‎‎‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‎‎App installed.‎‏‎‎‏‎"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎Do you want to install this application?‎‏‎‎‏‎"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎Do you want to install an update to this existing application? Your existing data will not be lost.‎‏‎‎‏‎"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‏‏‏‏‎‏‏‏‎Do you want to install an update to this built-in application? Your existing data will not be lost.‎‏‎‎‏‎"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎App not installed.‎‏‎‎‏‎"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‏‏‏‏‎‎The package was blocked from being installed.‎‏‎‎‏‎"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‎App not installed as package conflicts with an existing package.‎‏‎‎‏‎"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‎‏‎Install/Uninstall actions not supported on Wear.‎‏‎‎‏‎"</string>
<string name="message_staging" msgid="8032722385658438567">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‎Staging app…‎‏‎‎‏‎"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‎‏‏‏‏‎‏‎‏‏‎‎Unknown‎‏‎‎‏‎"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‎For your security, your tablet is not allowed to install unknown apps from this source.‎‏‎‎‏‎"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎For your security, your TV is not allowed to install unknown apps from this source.‎‏‎‎‏‎"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‏‎‎‏‏‏‎‏‎For your security, your phone is not allowed to install unknown apps from this source.‎‏‎‎‏‎"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‎Your phone and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your phone or loss of data that may result from its use.‎‏‎‎‏‎"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‎‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎Your tablet and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your tablet or loss of data that may result from its use.‎‏‎‎‏‎"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‎‏‏‎‏‎‎‎‏‏‏‎‏‏‎‎Your TV and personal data are more vulnerable to attack by unknown apps. By installing this app, you agree that you are responsible for any damage to your TV or loss of data that may result from its use.‎‏‎‎‏‎"</string>
diff --git a/packages/PackageInstaller/res/values-es-rUS/strings.xml b/packages/PackageInstaller/res/values-es-rUS/strings.xml
index 117c9f64f2ee..8144516c10d3 100644
--- a/packages/PackageInstaller/res/values-es-rUS/strings.xml
+++ b/packages/PackageInstaller/res/values-es-rUS/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instalador del paquete"</string>
<string name="install" msgid="711829760615509273">"Instalar"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Listo"</string>
<string name="cancel" msgid="1018267193425558088">"Cancelar"</string>
<string name="installing" msgid="4921993079741206516">"Instalando…"</string>
<string name="installing_app" msgid="1165095864863849422">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Se instaló la app."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"¿Deseas instalar esta aplicación?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"¿Quieres instalar una actualización de esta app? No se perderán los datos."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"¿Quieres instalar una actualización de esta app integrada? No se perderán los datos."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"No se instaló la app."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Se bloqueó el paquete para impedir la instalación."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"No se instaló la app debido a un conflicto con un paquete."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear no admite las acciones de instalación y desinstalación"</string>
<string name="message_staging" msgid="8032722385658438567">"Preparando app…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Desconocido"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Por tu seguridad, la tablet no tiene permitido instalar apps desconocidas de esta fuente."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Por tu seguridad, la TV no tiene permitido instalar apps desconocidas de esta fuente."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Por tu seguridad, el teléfono no tiene permitido instalar apps desconocidas de esta fuente."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"El teléfono y tus datos personales son más vulnerables a los ataques de apps desconocidas. Si instalas esta app, serás responsable de los daños que sufra el teléfono y de la pérdida de datos que pueda ocasionar su uso."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"La tablet y tus datos personales son más vulnerables a los ataques de apps desconocidas. Si instalas esta app, serás responsable de los daños que sufra la tablet y de la pérdida de datos que pueda ocasionar su uso."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"La TV y tus datos personales son más vulnerables a los ataques de apps desconocidas. Si instalas esta app, serás responsable de los daños que sufra la TV y de la pérdida de datos que pueda ocasionar su uso."</string>
diff --git a/packages/PackageInstaller/res/values-es/strings.xml b/packages/PackageInstaller/res/values-es/strings.xml
index fa738734c598..a43b55096100 100644
--- a/packages/PackageInstaller/res/values-es/strings.xml
+++ b/packages/PackageInstaller/res/values-es/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instalador de paquetes"</string>
<string name="install" msgid="711829760615509273">"Instalar"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Listo"</string>
<string name="cancel" msgid="1018267193425558088">"Cancelar"</string>
<string name="installing" msgid="4921993079741206516">"Instalando…"</string>
<string name="installing_app" msgid="1165095864863849422">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Se ha instalado la aplicación."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"¿Quieres instalar esta aplicación?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"¿Quieres instalar una actualización de esta aplicación? Tus datos no se perderán."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"¿Quieres instalar una actualización de esta aplicación integrada? Tus datos no se perderán."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"No se ha instalado la aplicación."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Se ha bloqueado la instalación del paquete."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"La aplicación no se ha instalado debido a un conflicto con un paquete."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Las acciones de instalar y desinstalar no pueden realizarse en Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Preparando aplicación…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Desconocida"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Por motivos de seguridad, tu tablet no puede instalar aplicaciones desconocidas de esta fuente."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Por motivos de seguridad, tu TV no puede instalar aplicaciones desconocidas de esta fuente."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Por motivos de seguridad, tu teléfono no puede instalar aplicaciones desconocidas de esta fuente."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Tu teléfono y tus datos personales son más vulnerables a los ataques de aplicaciones desconocidas. Al instalar esta aplicación, aceptas ser responsable de cualquier daño que sufra tu teléfono o la pérdida de datos que se pueda derivar de su uso."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tu tablet y tus datos personales son más vulnerables a los ataques de aplicaciones desconocidas. Al instalar esta aplicación, aceptas ser responsable de cualquier daño que sufra tu tablet o la pérdida de datos que se pueda derivar de su uso."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Tu TV y tus datos personales son más vulnerables a los ataques de aplicaciones desconocidas. Al instalar esta aplicación, aceptas ser responsable de cualquier daño que sufra tu TV o la pérdida de datos que se pueda derivar de su uso."</string>
diff --git a/packages/PackageInstaller/res/values-et/strings.xml b/packages/PackageInstaller/res/values-et/strings.xml
index b6387807a2d8..97f1c67cd609 100644
--- a/packages/PackageInstaller/res/values-et/strings.xml
+++ b/packages/PackageInstaller/res/values-et/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Paketi installiprogramm"</string>
<string name="install" msgid="711829760615509273">"Installi"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Valmis"</string>
<string name="cancel" msgid="1018267193425558088">"Tühista"</string>
<string name="installing" msgid="4921993079741206516">"Installimine …"</string>
<string name="installing_app" msgid="1165095864863849422">"Paketi <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> installimine …"</string>
<string name="install_done" msgid="5987363587661783896">"Rakendus on installitud."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Kas soovite selle rakenduse installida?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Kas soovite olemasoleva rakenduse värskenduse installida? Teie olemasolevad andmed jäävad alles."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Kas soovite sisseehitatud rakenduse värskenduse installida? Teie olemasolevad andmed jäävad alles."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Rakendus pole installitud."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Paketi installimine blokeeriti."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Rakendust ei installitud, kuna pakett on olemasoleva paketiga vastuolus."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear ei toeta installimist/desinstallimist."</string>
<string name="message_staging" msgid="8032722385658438567">"Rakenduse koondamine …"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Teadmata"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Teie turvalisuse huvides ei ole tahvelarvutil lubatud installida sellest allikast tundmatuid rakendusi."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Teie turvalisuse huvides ei ole teleril lubatud installida sellest allikast tundmatuid rakendusi."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Teie turvalisuse huvides ei ole telefonil lubatud installida sellest allikast tundmatuid rakendusi."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Teie telefon ja isiklikud andmed on tundmatute rakenduste rünnakute suhtes haavatavamad. Selle rakenduse installimisel nõustute, et vastutate telefoni kahjude ja andmekao eest, mis võivad tuleneda selliste rakenduste kasutamisest."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Teie tahvelarvuti ja isiklikud andmed on tundmatute rakenduste rünnakute suhtes haavatavamad. Selle rakenduse installimisel nõustute, et vastutate tahvelarvuti kahjude ja andmekao eest, mis võivad tuleneda selliste rakenduste kasutamisest."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Teie teler ja isiklikud andmed on tundmatute rakenduste rünnakute suhtes haavatavamad. Selle rakenduse installimisel nõustute, et vastutate teleri kahjude ja andmekao eest, mis võivad tuleneda selliste rakenduste kasutamisest."</string>
diff --git a/packages/PackageInstaller/res/values-eu/strings.xml b/packages/PackageInstaller/res/values-eu/strings.xml
index 65e75cdba405..a62e9ba2f42e 100644
--- a/packages/PackageInstaller/res/values-eu/strings.xml
+++ b/packages/PackageInstaller/res/values-eu/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Pakete-instalatzailea"</string>
<string name="install" msgid="711829760615509273">"Instalatu"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Eginda"</string>
<string name="cancel" msgid="1018267193425558088">"Utzi"</string>
<string name="installing" msgid="4921993079741206516">"Instalatzen…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> instalatzen…"</string>
<string name="install_done" msgid="5987363587661783896">"Instalatu da aplikazioa."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Aplikazio hau instalatu nahi duzu?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Aplikazioaren eguneratzea instalatu nahi duzu? Lehendik dauden datuak ez dira galduko."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Aplikazio integratu honen eguneratzea instalatu nahi duzu? Lehendik dauden datuak ez dira galduko."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Ez da instalatu aplikazioa."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Paketea instalatzeko aukera blokeatu egin da."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Ez da instalatu aplikazioa, gatazka bat sortu delako lehendik dagoen pakete batekin."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Ezin dira gauzatu instalatzeko eta desinstalatzeko ekintzak Wear gailuetan."</string>
<string name="message_staging" msgid="8032722385658438567">"Aplikazioa prestatzen…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Ezezaguna"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak tableta honetan."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telebista honetan."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Segurtasuna bermatzeko, ezin dira instalatu iturburu honetako aplikazio ezezagunak telefono honetan."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telefonoak jasan ditzakeen kalteen edo datu-galeren erantzulea."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik tabletak jasan ditzakeen kalteen edo datu-galeren erantzulea."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Telebistak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Aplikazio hau instalatzen baduzu, onartu egingo duzu zeu zarela hura erabiltzeagatik telebistak jasan ditzakeen kalteen edo datu-galeren erantzulea."</string>
diff --git a/packages/PackageInstaller/res/values-fa/strings.xml b/packages/PackageInstaller/res/values-fa/strings.xml
index d08409e284ac..8824a18284da 100644
--- a/packages/PackageInstaller/res/values-fa/strings.xml
+++ b/packages/PackageInstaller/res/values-fa/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"نصب‌کننده بسته"</string>
<string name="install" msgid="711829760615509273">"نصب"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"تمام"</string>
<string name="cancel" msgid="1018267193425558088">"لغو"</string>
<string name="installing" msgid="4921993079741206516">"درحال نصب…"</string>
<string name="installing_app" msgid="1165095864863849422">"درحال نصب <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"برنامه نصب شد."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"می‌خواهید این برنامه را نصب کنید؟"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"آیا می‌خواهید به‌روزرسانی‌ این برنامه کنونی را نصب کنید؟ داده کنونی شما از بین نمی‌رود."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"آیا می‌خواهید به‌روزرسانی این برنامه داخلی را نصب کنید؟ داده‌های کنونی شما از بین نمی‌رود."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"برنامه نصب نشد."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"از نصب شدن بسته جلوگیری شد."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"برنامه نصب نشد چون بسته با بسته موجود تداخل دارد."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"‏کنش‌های نصب/حذف نصب در Wear پشتیبانی نمی‌شود."</string>
<string name="message_staging" msgid="8032722385658438567">"مرحله‌بندی برنامه…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"نامشخص"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"برای امنیت شما، رایانه لوحی‌تان اجازه نمی‌دهد از این منبع برنامه‌های ناشناس نصب شود."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"برای امنیت شما، تلویزیونتان اجازه نمی‌دهد از این منبع برنامه‌های ناشناس نصب شود."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"برای امنیت شما، تلفنتان اجازه نمی‌دهد از این منبع برنامه‌های ناشناس نصب شود."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"تلفن و داده‌های شخصی‌تان دربرابر حمله برنامه‌های ناشناس آسیب‌پذیرتر هستند. با نصب این برنامه، موافقت می‌کنید که مسئول هرگونه آسیب به تلفن یا از دست رفتن داده‌ای هستید که ممکن است درنتیجه استفاده از آن به وجود آید."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"رایانه لوحی و داده‌های شخصی‌تان دربرابر حمله برنامه‌های ناشناس آسیب‌پذیرتر هستند. با نصب این برنامه، موافقت می‌کنید که مسئول هرگونه آسیب به رایانه لوحی یا از دست رفتن داده‌ای هستید که ممکن است درنتیجه استفاده از آن به وجود آید."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"تلویزیون و داده‌های شخصی‌تان دربرابر حمله برنامه‌های ناشناس آسیب‌پذیرتر هستند. با نصب این برنامه، موافقت می‌کنید که مسئول هرگونه آسیب به تلویزیون یا از دست رفتن داده‌ای هستید که ممکن است درنتیجه استفاده از آن به وجود آید."</string>
diff --git a/packages/PackageInstaller/res/values-fi/strings.xml b/packages/PackageInstaller/res/values-fi/strings.xml
index d52eddf82998..e7b3de750dc7 100644
--- a/packages/PackageInstaller/res/values-fi/strings.xml
+++ b/packages/PackageInstaller/res/values-fi/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Paketin asentaja"</string>
<string name="install" msgid="711829760615509273">"Asenna"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Valmis"</string>
<string name="cancel" msgid="1018267193425558088">"Peruuta"</string>
<string name="installing" msgid="4921993079741206516">"Asennetaan…"</string>
<string name="installing_app" msgid="1165095864863849422">"Asennetaan <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Sovellus on asennettu."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Haluatko asentaa tämän sovelluksen?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Haluatko asentaa päivityksen tähän asennettuun sovellukseen? Aiempi data ei katoa."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Haluatko asentaa päivityksen tähän valmiiksi asennettuun sovellukseen? Aiempi data ei katoa."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Sovellusta ei asennettu."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Paketin asennus estettiin."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Sovellusta ei asennettu, koska paketti on ristiriidassa nykyisen paketin kanssa."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear ei tue asennus- ja poistotoimintoja."</string>
<string name="message_staging" msgid="8032722385658438567">"Valmistellaan sovellusta…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Tuntematon"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Turvallisuussyistä tabletti ei voi asentaa tuntemattomia sovelluksia tästä lähteestä."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Turvallisuussyistä televisiosi ei voi asentaa tuntemattomia sovelluksia tästä lähteestä."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Turvallisuussyistä puhelin ei voi asentaa tuntemattomia sovelluksia tästä lähteestä."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Tuntemattomat sovellukset voivat helpommin kaapata puhelimesi ja henkilökohtaiset tietosi. Lataamalla sovelluksia tästä lähteestä hyväksyt, että olet itse vastuussa puhelimellesi aiheutuvista vahingoista tai tietojen menetyksestä, jotka voivat johtua sovellusten käytöstä."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tuntemattomat sovellukset voivat helpommin kaapata tablettisi ja henkilökohtaiset tietosi. Lataamalla sovelluksia tästä lähteestä hyväksyt, että olet itse vastuussa tabletillesi aiheutuvista vahingoista tai tietojen menetyksestä, jotka voivat johtua sovellusten käytöstä."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Tuntemattomat sovellukset voivat helpommin kaapata televisiosi ja henkilökohtaiset tietosi. Lataamalla sovelluksen hyväksyt, että olet itse vastuussa mahdollisista televisiolle aiheutuvista vahingoista tai tietojen menetyksestä, jotka voivat johtua sovellusten käytöstä."</string>
diff --git a/packages/PackageInstaller/res/values-fr-rCA/strings.xml b/packages/PackageInstaller/res/values-fr-rCA/strings.xml
index 365493f8bbb9..bc9bad932d7b 100644
--- a/packages/PackageInstaller/res/values-fr-rCA/strings.xml
+++ b/packages/PackageInstaller/res/values-fr-rCA/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Progr. d\'inst. de paquet"</string>
<string name="install" msgid="711829760615509273">"Installer"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Terminé"</string>
<string name="cancel" msgid="1018267193425558088">"Annuler"</string>
<string name="installing" msgid="4921993079741206516">"Installation en cours…"</string>
<string name="installing_app" msgid="1165095864863849422">"Installation de <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> en cours…"</string>
<string name="install_done" msgid="5987363587661783896">"Application installée."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Voulez-vous installer cette application?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Voulez-vous installer une mise à jour pour cette application existante? Vos données existantes ne seront pas perdues."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Voulez-vous installer une mise à jour pour cette application intégrée? Vos données existantes ne seront pas perdues."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Application non installée."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"L\'installation du paquet a été bloquée."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"L\'application n\'a pas été installée, car le paquet entre en conflit avec un paquet existant."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Les actions d\'installation et de désinstallation ne sont pas prises en charge par Android Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Pré-production de l\'application en cours…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Inconnue"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur cette tablette."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur ce téléviseur."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur ce téléphone."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Votre téléphone et vos données personnelles sont plus vulnérables aux attaques provenant d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre téléphone ou de toute perte de données pouvant découler de l\'utilisation de telles applications."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Votre tablette et vos données personnelles sont plus vulnérables aux attaques provenant d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre tablette ou de toute perte de données pouvant découler de l\'utilisation de telles applications."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Votre téléviseur et vos données personnelles sont plus vulnérables aux attaques d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre téléviseur ou de toute perte de données pouvant découler de son utilisation."</string>
diff --git a/packages/PackageInstaller/res/values-fr/strings.xml b/packages/PackageInstaller/res/values-fr/strings.xml
index 462c60ed748a..b9fb05d21ddd 100644
--- a/packages/PackageInstaller/res/values-fr/strings.xml
+++ b/packages/PackageInstaller/res/values-fr/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Programme installation kit"</string>
<string name="install" msgid="711829760615509273">"Installer"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"OK"</string>
<string name="cancel" msgid="1018267193425558088">"Annuler"</string>
<string name="installing" msgid="4921993079741206516">"Installation…"</string>
<string name="installing_app" msgid="1165095864863849422">"Installation du package <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Application installée."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Voulez-vous installer cette application ?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Voulez-vous mettre à jour cette application ? Vos données actuelles ne seront pas perdues."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Voulez-vous mettre à jour cette application intégrée ? Vos données actuelles ne seront pas perdues."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Application non installée."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"L\'installation du package a été bloquée."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"L\'application n\'a pas été installée, car le package est en conflit avec un package déjà présent."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Opérations d\'installation et de désinstallation impossibles sur Android Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Préparation de l\'installation de l\'appli…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Inconnu"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur cette tablette."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur ce téléviseur."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"À des fins de sécurité, l\'installation d\'applications inconnues provenant de cette source n\'est pas autorisée sur ce téléphone."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Votre téléphone et vos données à caractère personnel sont plus vulnérables aux attaques d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre téléphone ou de toute perte de données pouvant découler de son utilisation."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Votre tablette et vos données à caractère personnel sont plus vulnérables aux attaques d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre tablette ou de toute perte de données pouvant découler de son utilisation."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Votre téléviseur et vos données à caractère personnel sont plus vulnérables aux attaques d\'applications inconnues. En installant cette application, vous acceptez d\'être le seul responsable de tout dommage causé à votre téléviseur ou de toute perte de données pouvant découler de son utilisation."</string>
diff --git a/packages/PackageInstaller/res/values-gl/strings.xml b/packages/PackageInstaller/res/values-gl/strings.xml
index 1ad1174eacad..16ad2a3c701a 100644
--- a/packages/PackageInstaller/res/values-gl/strings.xml
+++ b/packages/PackageInstaller/res/values-gl/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instalador de paquetes"</string>
<string name="install" msgid="711829760615509273">"Instalar"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Feito"</string>
<string name="cancel" msgid="1018267193425558088">"Cancelar"</string>
<string name="installing" msgid="4921993079741206516">"Instalando…"</string>
<string name="installing_app" msgid="1165095864863849422">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Instalouse a aplicación"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Queres instalar esta aplicación?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Queres instalar unha actualización para esta aplicación? Non se perderán os datos que teñas."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Queres instalar unha actualización para esta aplicación integrada? Non se perderán os datos que teñas."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Non se instalou a aplicación"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Bloqueouse a instalación do paquete."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"A aplicación non se instalou porque o paquete presenta un conflito cun paquete que xa hai."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"As accións de instalar e desinstalar non son compatibles con Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Preparando aplicación…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Nome descoñecido"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Por cuestións de seguranza, na tableta non se poden instalar aplicacións descoñecidas procedentes desta fonte."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Por cuestións de seguranza, na televisión non se poden instalar aplicacións descoñecidas procedentes desta fonte."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Por cuestións de seguranza, no teléfono non se poden instalar aplicacións descoñecidas procedentes desta fonte."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"O teléfono e os datos persoais son máis vulnerables aos ataques de aplicacións descoñecidas. Ao instalar esta aplicación, aceptas que es responsable dos danos ocasionados no teléfono ou da perda dos datos que se poidan derivar do seu uso."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"A tableta e os datos persoais son máis vulnerables aos ataques de aplicacións descoñecidas. Ao instalar esta aplicación, aceptas que es responsable dos danos ocasionados na tableta ou da perda dos datos que se poidan derivar do seu uso."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"A televisión e os datos persoais son máis vulnerables aos ataques de aplicacións descoñecidas. Ao instalar esta aplicación, aceptas que es responsable dos danos ocasionados na televisión ou da perda dos datos que se poidan derivar do seu uso."</string>
diff --git a/packages/PackageInstaller/res/values-gu/strings.xml b/packages/PackageInstaller/res/values-gu/strings.xml
index 20fbafe0e78a..804658147c15 100644
--- a/packages/PackageInstaller/res/values-gu/strings.xml
+++ b/packages/PackageInstaller/res/values-gu/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"પૅકેજ ઇન્સ્ટૉલર"</string>
<string name="install" msgid="711829760615509273">"ઇન્સ્ટૉલ કરો"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"થઈ ગયું"</string>
<string name="cancel" msgid="1018267193425558088">"રદ કરો"</string>
<string name="installing" msgid="4921993079741206516">"ઇન્સ્ટૉલ કરી રહ્યાં છીએ…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ને ઇન્સ્ટૉલ કરી રહ્યાં છીએ…"</string>
<string name="install_done" msgid="5987363587661783896">"ઍપ્લિકેશન ઇન્સ્ટૉલ કરી."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"શું તમે આ ઍપ્લિકેશન ઇન્સ્ટૉલ કરવા માંગો છો?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"શું તમે આ અસ્તિત્વમાંની ઍપ્લિકેશનના અપડેટને ઇન્સ્ટૉલ કરવા માગો છો? તમારો અસ્તિત્વમાંનો ડેટા ગુમ થશે નહીં."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"શું તમે આ બિલ્ટ-ઇન ઍપ્લિકેશનના અપડેટને ઇન્સ્ટૉલ કરવા માગો છો? તમારો અસ્તિત્વમાંનો ડેટા ગુમ થશે નહીં."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ઍપ્લિકેશન ઇન્સ્ટૉલ કરી નથી."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"પૅકેજને ઇન્સ્ટૉલ થવાથી બ્લૉક કરવામાં આવ્યું હતું."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"પૅકેજનો અસ્તિત્વમાંના પૅકેજ સાથે વિરોધાભાસ હોવાને કારણે ઍપ્લિકેશન ઇન્સ્ટૉલ થઈ નથી."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear પર ઇન્સ્ટૉલ/અનઇન્સ્ટૉલ ક્રિયાઓ સમર્થિત નથી."</string>
<string name="message_staging" msgid="8032722385658438567">"ઍપ્લિકેશનની પ્રક્રિયા ચાલુ છે…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"અજાણ"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"તમારી સુરક્ષા માટે, તમારા ટૅબ્લેટને આ સ્રોત પરથી અજાણી ઍપ્લિકેશનો ઇન્સ્ટૉલ કરવાની મંજૂરી નથી."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"તમારી સુરક્ષા માટે, તમારા ટીવીને આ સ્રોત પરથી અજાણી ઍપ્લિકેશનો ઇન્સ્ટૉલ કરવાની મંજૂરી નથી."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"તમારી સુરક્ષા માટે, તમારા ફોનને આ સ્રોત પરથી અજાણી ઍપ્લિકેશનો ઇન્સ્ટૉલ કરવાની મંજૂરી નથી."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"તમારો ફોન અને વ્યક્તિગત ડેટા અજાણી ઍપ્લિકેશનો દ્વારા હુમલા માટે વધુ સંવેદનશીલ છે. આ ઍપ્લિકેશન ઇન્સ્ટૉલ કરીને તમે સંમત થાઓ છો કે આનો ઉપયોગ કરવાથી તમારા ફોનને થતી કોઈપણ હાનિ અથવા ડેટાના નુકસાન માટે તમે જવાબદાર છો."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"તમારું ટૅબ્લેટ અને વ્યક્તિગત ડેટા અજાણી ઍપ્લિકેશનો દ્વારા હુમલા માટે વધુ સંવેદનશીલ છે. આ ઍપ્લિકેશન ઇન્સ્ટૉલ કરીને તમે સંમત થાઓ છો કે આનો ઉપયોગ કરવાથી તમારા ટૅબ્લેટને થતી કોઈપણ હાનિ અથવા ડેટાના નુકસાન માટે તમે જવાબદાર છો."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"તમારું ટીવી અને વ્યક્તિગત ડેટા અજાણી ઍપ્લિકેશનો દ્વારા હુમલા માટે વધુ સંવેદનશીલ છે. આ ઍપ્લિકેશન ઇન્સ્ટૉલ કરીને તમે સંમત થાઓ છો કે આનો ઉપયોગ કરવાથી તમારા ટીવીને થતી કોઈપણ હાનિ અથવા ડેટાના નુકસાન માટે તમે જવાબદાર છો."</string>
diff --git a/packages/PackageInstaller/res/values-hi/strings.xml b/packages/PackageInstaller/res/values-hi/strings.xml
index 47f83019594f..290a21167c61 100644
--- a/packages/PackageInstaller/res/values-hi/strings.xml
+++ b/packages/PackageInstaller/res/values-hi/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"पैकेज इंस्‍टॉलर"</string>
<string name="install" msgid="711829760615509273">"इंस्टॉल करें"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"हो गया"</string>
<string name="cancel" msgid="1018267193425558088">"रद्द करें"</string>
<string name="installing" msgid="4921993079741206516">"इंस्टॉल हो रहा है..."</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> इंस्टॉल हो रहा है…"</string>
<string name="install_done" msgid="5987363587661783896">"ऐप्लिकेशन इंस्‍टॉल हो गया."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"क्या आप इस ऐप्लिकेशन को इंस्‍टॉल करना चाहते हैं?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"क्या आप इस मौजूदा ऐप्लिकेशन को अपडेट करना चाहते हैं? आपका मौजूदा डेटा बचा रहेगा."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"क्या आप इस बिल्ट-इन ऐप्लिकेशन को अपडेट करना चाहते हैं? आपका मौजूदा डेटा बचा रहेगा."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ऐप्लिकेशन इंस्‍टॉल नहीं हुआ."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"पैकेज को इंस्टॉल होने से ब्लॉक किया हुआ है."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"ऐप्लिकेशन इंस्टॉल नहीं हुआ क्योंकि पैकेज का किसी मौजूदा पैकेज से विरोध है."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear पर ऐप्लिकेशन इंस्टॉल या अनइंस्टॉल नहीं किए जा सकते."</string>
<string name="message_staging" msgid="8032722385658438567">"ऐप्लिकेशन तैयार किया जा रहा है…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"अनजान"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"आपकी सुरक्षा के लिए, आपके टैबलेट को इस स्रोत से अनजान ऐप्लिकेशन इंस्टॉल करने की अनुमति नहीं है."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"आपकी सुरक्षा के लिए, आपके टीवी को इस स्रोत से अनजान ऐप्लिकेशन इंस्टॉल करने की अनुमति नहीं है."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"आपकी सुरक्षा के लिए, आपके फ़ोन को इस स्रोत से अनजान ऐप्लिकेशन इंस्टॉल करने की अनुमति नहीं है."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"आपका फ़ोन और निजी डेटा अनजान ऐप्लिकेशन के हमले को लेकर ज़्यादा संवेदनशील हैं. इस ऐप्लिकेशन को इंस्टॉल करके, आप सहमति देते हैं कि इसके इस्तेमाल के चलते आपके फ़ोन को होने वाले किसी भी नुकसान या डेटा के मिट जाने पर, आप ज़िम्मेदार होंगे."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"आपका टैबलेट और निजी डेटा अनजान ऐप्लिकेशन के हमले को लेकर ज़्यादा संवेदनशील हैं. इस ऐप्लिकेशन को इंस्टॉल करके, आप सहमति देते हैं कि इसके इस्तेमाल के चलते आपके टैबलेट को होने वाले किसी भी नुकसान या डेटा के मिट जाने पर, आप ज़िम्मेदार होंगे."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"आपका टीवी और निजी डेटा अनजान ऐप्लिकेशन के हमले को लेकर ज़्यादा संवेदनशील हैं. इस ऐप्लिकेशन को इंस्टॉल करके, आप सहमति देते हैं कि इसके इस्तेमाल के चलते आपके टीवी को होने वाले किसी भी नुकसान या डेटा के मिट जाने पर, आप ज़िम्मेदार होंगे."</string>
diff --git a/packages/PackageInstaller/res/values-hr/strings.xml b/packages/PackageInstaller/res/values-hr/strings.xml
index ba5d3784376a..dc8a93e16033 100644
--- a/packages/PackageInstaller/res/values-hr/strings.xml
+++ b/packages/PackageInstaller/res/values-hr/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Alat za inst. paketa"</string>
<string name="install" msgid="711829760615509273">"Instaliraj"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Gotovo"</string>
<string name="cancel" msgid="1018267193425558088">"Otkaži"</string>
<string name="installing" msgid="4921993079741206516">"Instaliranje…"</string>
<string name="installing_app" msgid="1165095864863849422">"Instaliranje paketa <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikacija je instalirana."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Želite li instalirati tu aplikaciju?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Želite li instalirati ažuriranje postojeće aplikacije? Vaši postojeći podaci neće se izgubiti."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Želite li instalirati ažuriranje za ovu ugrađenu aplikaciju? Vaši postojeći podaci neće se izgubiti."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikacija nije instalirana."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Instaliranje paketa blokirano je."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacija koja nije instalirana kao paket u sukobu je s postojećim paketom."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Radnje instaliranja i deinstaliranja nisu podržane na Wearu."</string>
<string name="message_staging" msgid="8032722385658438567">"Postavljanje aplikacije…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Nepoznato"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Iz sigurnosnih razloga tablet nema dopuštenje za instaliranje nepoznatih aplikacija iz ovog izvora."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Iz sigurnosnih razloga televizor nema dopuštenje za instaliranje nepoznatih aplikacija iz ovog izvora."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Iz sigurnosnih razloga telefon nema dopuštenje za instaliranje nepoznatih aplikacija iz ovog izvora."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Vaš telefon i osobni podaci podložniji su napadima nepoznatih aplikacija. Instaliranjem te aplikacije prihvaćate odgovornost za oštećenje telefona ili gubitak podataka do kojih može doći uslijed njezine upotrebe."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Vaš tablet i osobni podaci podložniji su napadima nepoznatih aplikacija. Instaliranjem te aplikacije prihvaćate odgovornost za oštećenje tableta ili gubitak podataka do kojih može doći uslijed njezine upotrebe."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Vaš TV i osobni podaci podložniji su napadima nepoznatih aplikacija. Instaliranjem te aplikacije prihvaćate odgovornost za oštećenje televizora ili gubitak podataka do kojih može doći uslijed njezine upotrebe."</string>
diff --git a/packages/PackageInstaller/res/values-hu/strings.xml b/packages/PackageInstaller/res/values-hu/strings.xml
index 2b951de645d3..c8517faaa9c8 100644
--- a/packages/PackageInstaller/res/values-hu/strings.xml
+++ b/packages/PackageInstaller/res/values-hu/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Csomagtelepítő"</string>
<string name="install" msgid="711829760615509273">"Telepítés"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Kész"</string>
<string name="cancel" msgid="1018267193425558088">"Mégse"</string>
<string name="installing" msgid="4921993079741206516">"Telepítés…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> telepítése…"</string>
<string name="install_done" msgid="5987363587661783896">"Alkalmazás telepítve."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Telepíti ezt az alkalmazást?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Telepíti a meglévő alkalmazás frissítését? Meglévő adatai nem vesznek el."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Telepíti a beépített alkalmazás frissítését? Meglévő adatai nem vesznek el."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Az alkalmazás nincs telepítve."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"A csomag telepítését letiltotta a rendszer."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"A nem csomagként telepített alkalmazás ütközik egy már létező csomaggal."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"A Wear nem támogatja a telepítés/eltávolítás műveletet."</string>
<string name="message_staging" msgid="8032722385658438567">"Alkalmazás fokozatos közzététele…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Ismeretlen"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Az Ön biztonsága érdekében táblagépe nem telepíthet ebből a forrásból származó ismeretlen alkalmazásokat."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Az Ön biztonsága érdekében tévéje nem telepíthet ebből a forrásból származó ismeretlen alkalmazásokat."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Az Ön biztonsága érdekében telefonja nem telepíthet ebből a forrásból származó ismeretlen alkalmazásokat."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefonja és személyes adatai fokozott kockázatnak vannak kitéve az ismeretlen alkalmazások támadásaival szemben. Az alkalmazás telepítésével elfogadja, hogy Ön a felelős az alkalmazás használatából eredő esetleges adatvesztésért és a telefont ért károkért."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Táblagépe és személyes adatai fokozott kockázatnak vannak kitéve az ismeretlen alkalmazások támadásaival szemben. Az alkalmazás telepítésével elfogadja, hogy Ön a felelős az alkalmazás használatából eredő esetleges adatvesztésért és a táblagépet ért károkért."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Tévéje és személyes adatai fokozott kockázatnak vannak kitéve az ismeretlen alkalmazások támadásaival szemben. Az alkalmazás telepítésével elfogadja, hogy Ön a felelős az alkalmazás használatából eredő esetleges adatvesztésért és a tévét ért károkért."</string>
diff --git a/packages/PackageInstaller/res/values-hy/strings.xml b/packages/PackageInstaller/res/values-hy/strings.xml
index c05040b147c0..82cd089c3a7b 100644
--- a/packages/PackageInstaller/res/values-hy/strings.xml
+++ b/packages/PackageInstaller/res/values-hy/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Package Installer"</string>
<string name="install" msgid="711829760615509273">"Տեղադրել"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Պատրաստ է"</string>
<string name="cancel" msgid="1018267193425558088">"Չեղարկել"</string>
<string name="installing" msgid="4921993079741206516">"Տեղադրում…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> հավելվածը տեղադրվում է…"</string>
<string name="install_done" msgid="5987363587661783896">"Հավելվածը տեղադրված է:"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Տեղադրե՞լ այս հավելվածը:"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Տեղադրե՞լ այս հավելվածի թարմացումը: Ձեր տվյալները կպահպանվեն:"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Տեղադրե՞լ այս ներկառուցված հավելվածի թարմացումը: Ձեր տվյալները կպահպանվեն:"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Հավելվածը տեղադրված չէ:"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Փաթեթի տեղադրումն արգելափակվել է:"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Հավելվածը չի տեղադրվել, քանի որ տեղադրման փաթեթն ունի հակասություն առկա փաթեթի հետ:"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Տեղադրման/ապատեղադրման գործողությունները Android Wear-ում չեն աջակցվում:"</string>
<string name="message_staging" msgid="8032722385658438567">"Սպասեք…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Անհայտ"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Անվտանգության նկատառումներից ելնելով՝ ձեր պլանշետին չի թույլատրվում այս աղբյուրից տեղադրել անհայտ հավելվածներ:"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Անվտանգության նկատառումներից ելնելով՝ ձեր հեռուստացույցին չի թույլատրվում այս աղբյուրից տեղադրել անհայտ հավելվածներ:"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Անվտանգության նկատառումներից ելնելով՝ ձեր հեռախոսին չի թույլատրվում այս աղբյուրից տեղադրել անհայտ հավելվածներ:"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Ձեր հեռախոսը և անձնական տվյալներն առավել խոցելի են անհայտ հավելվածների գրոհների նկատմամբ: Տեղադրելով այս հավելվածը՝ դուք ընդունում եք, որ պատասխանատվություն եք կրում հավելվածի օգտագործման հետևանքով ձեր հեռախոսին պատճառած ցանկացած վնասի կամ տվյալների կորստի համար:"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Ձեր պլանշետը և անձնական տվյալներն առավել խոցելի են անհայտ հավելվածների գրոհների նկատմամբ: Տեղադրելով այս հավելվածը՝ դուք ընդունում եք, որ պատասխանատվություն եք կրում հավելվածի օգտագործման հետևանքով ձեր պլանշետին պատճառած ցանկացած վնասի կամ տվյալների կորստի համար:"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Ձեր հեռուստացույցը և անձնական տվյալներն առավել խոցելի են անհայտ հավելվածների գրոհների նկատմամբ: Տեղադրելով այս հավելվածը՝ դուք ընդունում եք, որ պատասխանատվություն եք կրում հավելվածի օգտագործման հետևանքով ձեր հեռուստացույցին պատճառած ցանկացած վնասի կամ տվյալների կորստի համար:"</string>
diff --git a/packages/PackageInstaller/res/values-in/strings.xml b/packages/PackageInstaller/res/values-in/strings.xml
index 52aa3c061928..db5954d93cdc 100644
--- a/packages/PackageInstaller/res/values-in/strings.xml
+++ b/packages/PackageInstaller/res/values-in/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Installer paket"</string>
<string name="install" msgid="711829760615509273">"Instal"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Selesai"</string>
<string name="cancel" msgid="1018267193425558088">"Batal"</string>
<string name="installing" msgid="4921993079741206516">"Menginstal..."</string>
<string name="installing_app" msgid="1165095864863849422">"Menginstal <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikasi terinstal."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Anda ingin menginstal aplikasi ini?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Apakah Anda ingin menginstal update ke aplikasi yang sudah ada? Data Anda yang ada saat ini tidak akan hilang."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Apakah Anda ingin menginstal update ke aplikasi bawaan? Data Anda yang ada saat ini tidak akan hilang."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikasi tidak terinstal."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Paket diblokir sehingga tidak dapat diinstal."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplikasi tidak diinstal karena paket ini bentrok dengan paket yang sudah ada."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Tindakan Instal/Uninstal tidak didukung di Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Menyiapkan aplikasi..."</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Tidak dikenal"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Demi keamanan, TV Anda tidak diizinkan menginstal aplikasi yang tidak dikenal dari sumber ini."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Demi keamanan, TV Anda tidak diizinkan menginstal aplikasi yang tidak dikenal dari sumber ini."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Demi keamanan, ponsel Anda tidak diizinkan menginstal aplikasi yang tidak dikenal dari sumber ini."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Ponsel dan data pribadi Anda lebih rentan terhadap serangan oleh aplikasi yang tidak dikenal. Dengan menginstal aplikasi ini, Anda setuju bahwa Anda bertanggung jawab atas kerusakan ponsel atau kehilangan data yang mungkin diakibatkan oleh penggunaannya."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tablet dan data pribadi Anda lebih rentan terhadap serangan oleh aplikasi yang tidak dikenal. Dengan menginstal aplikasi ini, Anda setuju bahwa Anda bertanggung jawab atas kerusakan tablet atau kehilangan data yang mungkin diakibatkan oleh penggunaannya."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV dan data pribadi Anda lebih rentan terhadap serangan oleh aplikasi yang tidak dikenal. Dengan menginstal aplikasi ini, Anda setuju bahwa Anda bertanggung jawab atas kerusakan TV atau kehilangan data yang mungkin diakibatkan oleh penggunaannya."</string>
diff --git a/packages/PackageInstaller/res/values-is/strings.xml b/packages/PackageInstaller/res/values-is/strings.xml
index 82d10d3d5aaf..9fc4d70342b5 100644
--- a/packages/PackageInstaller/res/values-is/strings.xml
+++ b/packages/PackageInstaller/res/values-is/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Uppsetningarforrit pakka"</string>
<string name="install" msgid="711829760615509273">"Setja upp"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Lokið"</string>
<string name="cancel" msgid="1018267193425558088">"Hætta við"</string>
<string name="installing" msgid="4921993079741206516">"Setur upp…"</string>
<string name="installing_app" msgid="1165095864863849422">"Setur <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> upp…"</string>
<string name="install_done" msgid="5987363587661783896">"Forritið er uppsett."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Viltu setja þetta forrit upp?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Viltu setja upp uppfærslu á þessu uppsetta forriti? Eldri gögn glatast ekki."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Viltu setja upp uppfærslu á þessu innbyggða forriti? Eldri gögn glatast ekki."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Forritið er ekki uppsett."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Lokað var á uppsetningu pakkans."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Forritið var ekki sett upp vegna árekstra á milli pakkans og annars pakka."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Aðgerðir til að setja upp / fjarlægja eru ekki studdar í Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Setur upp forrit…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Óþekkt"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Til að tryggja öryggi þitt er ekki heimild í spjaldtölvunni þinni fyrir uppsetningu óþekktra forrita frá þessari veitu."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Til að tryggja öryggi þitt er ekki heimild í sjónvarpinu þínu fyrir uppsetningu óþekktra forrita frá þessari veitu."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Til að tryggja öryggi þitt er ekki heimild í símanum þínum fyrir uppsetningu óþekktra forrita frá þessari veitu."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Síminn þinn og persónuleg gögn eru berskjaldaðri fyrir árásum forrita af óþekktum uppruna. Með uppsetningu þessa forrits samþykkirðu að bera fulla ábyrgð á hverju því tjóni sem verða kann á símanum eða gagnatapi sem leiða kann af notkun þess."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Spjaldtölvan þín og persónuleg gögn eru berskjaldaðri fyrir árásum forrita af óþekktum uppruna. Með uppsetningu þessa forrits samþykkirðu að bera fulla ábyrgð á hverju því tjóni sem verða kann á spjaldtölvunni eða gagnatapi sem leiða kann af notkun þess."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Sjónvarpið þitt og persónuleg gögn eru berskjaldaðri fyrir árásum forrita af óþekktum uppruna. Með uppsetningu þessa forrits samþykkirðu að bera fulla ábyrgð á hverju því tjóni sem verða kann á sjónvarpinu eða gagnatapi sem leiða kann af notkun þess."</string>
diff --git a/packages/PackageInstaller/res/values-it/strings.xml b/packages/PackageInstaller/res/values-it/strings.xml
index cee14bc66d95..672a39207011 100644
--- a/packages/PackageInstaller/res/values-it/strings.xml
+++ b/packages/PackageInstaller/res/values-it/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Installazione pacchetti"</string>
<string name="install" msgid="711829760615509273">"Installa"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Fine"</string>
<string name="cancel" msgid="1018267193425558088">"Annulla"</string>
<string name="installing" msgid="4921993079741206516">"Installazione…"</string>
<string name="installing_app" msgid="1165095864863849422">"Installazione di <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"App installata."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Installare questa applicazione?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Vuoi installare un aggiornamento a questa applicazione esistente? I tuoi dati non andranno persi."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Vuoi installare un aggiornamento per questa applicazione integrata? I tuoi dati non andranno persi."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"App non installata."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"È stata bloccata l\'installazione del pacchetto."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"App non installata poiché il pacchetto è in conflitto con un pacchetto esistente."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Le azioni di installazione/disinstallazione non sono supportate su Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"App in preparazione…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Sconosciuto"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Per sicurezza, il tuo tablet non è autorizzato a installare app sconosciute da questa origine."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Per sicurezza, la tua TV non è autorizzata a installare app sconosciute da questa origine."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Per sicurezza, il tuo telefono non è autorizzato a installare app sconosciute da questa origine."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"I dati del telefono e i dati personali sono più vulnerabili agli attacchi di app sconosciute. Se installi questa app, accetti di essere responsabile degli eventuali danni al telefono o dell\'eventuale perdita di dati derivanti dall\'uso dell\'app."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"I dati del tablet e i dati personali sono più vulnerabili agli attacchi di app sconosciute. Se installi questa app, accetti di essere responsabile degli eventuali danni al tablet o dell\'eventuale perdita di dati derivanti dall\'uso dell\'app."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"I dati della TV e i dati personali sono più vulnerabili agli attacchi di app sconosciute. Se installi questa app, accetti di essere responsabile degli eventuali danni alla TV o dell\'eventuale perdita di dati derivanti dall\'uso dell\'app."</string>
diff --git a/packages/PackageInstaller/res/values-iw/strings.xml b/packages/PackageInstaller/res/values-iw/strings.xml
index e5e219559c62..430e25fcb95b 100644
--- a/packages/PackageInstaller/res/values-iw/strings.xml
+++ b/packages/PackageInstaller/res/values-iw/strings.xml
@@ -18,19 +18,22 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"מתקין החבילה"</string>
<string name="install" msgid="711829760615509273">"התקנה"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"סיום"</string>
<string name="cancel" msgid="1018267193425558088">"ביטול"</string>
- <string name="installing" msgid="4921993079741206516">"מתקין…"</string>
+ <string name="installing" msgid="4921993079741206516">"בהתקנה…"</string>
<string name="installing_app" msgid="1165095864863849422">"מתבצעת התקנה של <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"האפליקציה הותקנה."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"להתקין את האפליקציה הזו?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"להתקין עדכון עבור האפליקציה הזו? הנתונים הקיימים שלך לא יאבדו."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"האם ברצונך להתקין עדכון עבור אפליקציה מובנית זו? הנתונים הקיימים שלך לא יאבדו."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"האפליקציה לא הותקנה."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"החבילה נחסמה להתקנה."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"האפליקציה לא הותקנה כי החבילה מתנגשת עם חבילה קיימת."</string>
<string name="install_failed_incompatible" product="tablet" msgid="6019021440094927928">"האפליקציה לא הותקנה כי האפליקציה אינה תואמת לטאבלט."</string>
- <string name="install_failed_incompatible" product="tv" msgid="2890001324362291683">"האפליקציה הזו אינה תואמת לטלוויזיה שלך."</string>
+ <string name="install_failed_incompatible" product="tv" msgid="2890001324362291683">"האפליקציה הזו לא תואמת לטלוויזיה שלך."</string>
<string name="install_failed_incompatible" product="default" msgid="7254630419511645826">"האפליקציה לא הותקנה כי היא לא תואמת לטלפון."</string>
<string name="install_failed_invalid_apk" msgid="8581007676422623930">"האפליקציה לא הותקנה כי נראה שהחבילה לא תקפה."</string>
<string name="install_failed_msg" product="tablet" msgid="6298387264270562442">"לא ניתן להתקין את <xliff:g id="APP_NAME">%1$s</xliff:g> בטאבלט שלך."</string>
@@ -42,7 +45,7 @@
<string name="install_apps_user_restriction_dlg_text" msgid="2154119597001074022">"למשתמש הזה אין הרשאה להתקין אפליקציות"</string>
<string name="ok" msgid="7871959885003339302">"אישור"</string>
<string name="manage_applications" msgid="5400164782453975580">"ניהול אפליקציות"</string>
- <string name="out_of_space_dlg_title" msgid="4156690013884649502">"אין מספיק שטח"</string>
+ <string name="out_of_space_dlg_title" msgid="4156690013884649502">"אין מספיק מקום"</string>
<string name="out_of_space_dlg_text" msgid="8727714096031856231">"לא ניתן להתקין את <xliff:g id="APP_NAME">%1$s</xliff:g>. יש לפנות מקום אחסון ולנסות שוב."</string>
<string name="app_not_found_dlg_title" msgid="5107924008597470285">"האפליקציה לא נמצאה"</string>
<string name="app_not_found_dlg_text" msgid="5219983779377811611">"האפליקציה לא נמצאת ברשימת האפליקציות המותקנות."</string>
@@ -56,7 +59,7 @@
<string name="uninstall_application_text" msgid="3816830743706143980">"האם ברצונך להסיר את ההתקנה של אפליקציה זו?"</string>
<string name="uninstall_application_text_all_users" msgid="575491774380227119">"להסיר את האפליקציה הזו עבור "<b>"כל"</b>" המשתמשים? האפליקציה והנתונים שלה יוסרו עבור "<b>"כל"</b>" המשתמשים במכשיר."</string>
<string name="uninstall_application_text_user" msgid="498072714173920526">"להסיר את ההתקנה של האפליקציה הזו עבור <xliff:g id="USERNAME">%1$s</xliff:g>?"</string>
- <string name="uninstall_update_text" msgid="863648314632448705">"האם להחליף את האפליקציה הזאת בגרסת היצרן? כל הנתונים יוסרו."</string>
+ <string name="uninstall_update_text" msgid="863648314632448705">"להחליף את האפליקציה הזאת בגרסת היצרן? כל הנתונים יוסרו."</string>
<string name="uninstall_update_text_multiuser" msgid="8992883151333057227">"האם להחליף את האפליקציה הזאת בגרסת היצרן? כל הנתונים יוסרו. הפעולה תשפיע על כל משתמשי המכשיר, כולל משתמשים בעלי פרופיל עבודה."</string>
<string name="uninstall_keep_data" msgid="7002379587465487550">"שמירת <xliff:g id="SIZE">%1$s</xliff:g> מנתוני האפליקציה."</string>
<string name="uninstalling_notification_channel" msgid="840153394325714653">"התקנות בתהליכי הסרה"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"‏פעולות התקנה/הסרת התקנה אינן נתמכות ב-Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"מכין אפליקציה להתקנה…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"לא ידוע"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"לצורכי אבטחה, הטאבלט שלך חסום להתקנת אפליקציות בלתי מוכרות המגיעות ממקור זה."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"לצורכי אבטחה, מכשיר הטלוויזיה שלך חסום להתקנת אפליקציות בלתי מוכרות המגיעות ממקור זה."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"לצורכי אבטחה, הטלפון שלך חסום להתקנת אפליקציות בלתי מוכרות המגיעות ממקור זה."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"נתוני הטלפון והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. התקנת האפליקציה הזו מהווה את הסכמתך לכך שהאחריות הבלעדית היא שלך במקרה של אובדן נתונים או גרימת נזק לטלפון שלך בעקבות השימוש באפליקציה."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"נתוני הטאבלט והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. אם תתקין אפליקציה זו, אתה מסכים לכך שאתה האחראי הבלעדי במקרה של אובדן נתונים או אם ייגרם נזק לטאבלט שלך בעקבות השימוש באפליקציה."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"נתוני הטלוויזיה והנתונים האישיים שלך חשופים יותר בפני התקפות על ידי אפליקציות ממקורות לא ידועים. אם תתקין אפליקציה זו, אתה מסכים לכך שאתה האחראי הבלעדי במקרה של אובדן נתונים או אם ייגרם נזק לטלוויזיה שלך בעקבות השימוש באפליקציה."</string>
diff --git a/packages/PackageInstaller/res/values-ja/strings.xml b/packages/PackageInstaller/res/values-ja/strings.xml
index 1ba36e7745c2..535c1ae2876e 100644
--- a/packages/PackageInstaller/res/values-ja/strings.xml
+++ b/packages/PackageInstaller/res/values-ja/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"パッケージ インストーラ"</string>
<string name="install" msgid="711829760615509273">"インストール"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"完了"</string>
<string name="cancel" msgid="1018267193425558088">"キャンセル"</string>
<string name="installing" msgid="4921993079741206516">"インストールしています…"</string>
<string name="installing_app" msgid="1165095864863849422">"「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」をインストールしています…"</string>
<string name="install_done" msgid="5987363587661783896">"アプリをインストールしました。"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"このアプリをインストールしますか?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"この既存のアプリへのアップデートをインストールしてもよろしいですか?既存のデータは失われません。"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"この内蔵アプリへのアップデートをインストールしてもよろしいですか?既存のデータは失われません。"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"アプリはインストールされていません。"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"パッケージのインストールはブロックされています。"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"パッケージが既存のパッケージと競合するため、アプリをインストールできませんでした。"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear ではインストールやアンインストールはできません。"</string>
<string name="message_staging" msgid="8032722385658438567">"アプリを準備しています…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"不明"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"セキュリティ上の理由から、お使いのタブレットではこの提供元からの不明なアプリをインストールすることはできません。"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"セキュリティ上の理由から、お使いのテレビではこの提供元からの不明なアプリをインストールすることはできません。"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"セキュリティ上の理由から、お使いのスマートフォンではこの提供元からの不明なアプリをインストールすることはできません。"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"不明なアプリをインストールするとスマートフォンや個人データが攻撃を受ける可能性が高くなります。このアプリをインストールすることにより、アプリの使用により生じる可能性があるスマートフォンへの損害やデータの損失について、ユーザーご自身が単独で責任を負うことに同意するものとします。"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"不明なアプリをインストールするとタブレットや個人データが攻撃を受ける可能性が高くなります。このアプリをインストールすることにより、アプリの使用により生じる可能性があるタブレットへの損害やデータの損失について、ユーザーご自身が単独で責任を負うことに同意するものとします。"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"不明なアプリをインストールするとテレビや個人データが攻撃を受ける可能性が高くなります。このアプリをインストールすることにより、アプリの使用により生じる可能性があるテレビへの損害やデータの損失について、ユーザーご自身が単独で責任を負うことに同意するものとします。"</string>
diff --git a/packages/PackageInstaller/res/values-ka/strings.xml b/packages/PackageInstaller/res/values-ka/strings.xml
index 779fa0e11c8d..c8b440193f15 100644
--- a/packages/PackageInstaller/res/values-ka/strings.xml
+++ b/packages/PackageInstaller/res/values-ka/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"პაკეტის ინსტალატორი"</string>
<string name="install" msgid="711829760615509273">"ინსტალაცია"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"მზადაა"</string>
<string name="cancel" msgid="1018267193425558088">"გაუქმება"</string>
<string name="installing" msgid="4921993079741206516">"მიმდინარეობს ინსტალაცია…"</string>
<string name="installing_app" msgid="1165095864863849422">"მიმდინარეობს <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-ის ინსტალაცია…"</string>
<string name="install_done" msgid="5987363587661783896">"აპი დაინსტალირებულია."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"გსურთ ამ აპლიკაციის ინსტალაცია?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"გსურთ ამ არსებული აპლიკაციის განახლების ინსტალაცია? არსებული მონაცემები არ დაიკარგება."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"გსურთ ამ ჩაშენებული აპლიკაციის განახლების ინსტალაცია? არსებული მონაცემები არ დაიკარგება."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"აპი დაუინსტალირებელია."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"ამ პაკეტის ინსტალაცია დაბლოკილია."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"აპი ვერ დაინსტალირდა, რადგან პაკეტი კონფლიქტშია არსებულ პაკეტთან."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"ინსტალაცია/დეინსტალაცია მხარდაუჭერელია Wear-ზე."</string>
<string name="message_staging" msgid="8032722385658438567">"მიმდინარეობს აპის შუალედური შენახვა…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"უცნობი"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"თქვენივე უსაფრთხოებისთვის, ტაბლეტს არ აქვს ამ წყაროდან უცნობი აპების ინსტალაციის უფლება."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"თქვენივე უსაფრთხოებისთვის, ტელევიზორს არ აქვს ამ წყაროდან უცნობი აპების ინსტალაციის უფლება."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"თქვენივე უსაფრთხოებისთვის, ტელეფონს არ აქვს ამ წყაროდან უცნობი აპების ინსტალაციის უფლება."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"თქვენი ტელეფონი და პერსონალური მონაცემები მეტად დაუცველია უცნობი აპების მხრიდან შეტევების წინაშე. ამ აპის ინსტალაციის შემთხვევაში, თქვენ თანახმა ხართ, პასუხისმგებელი იყოთ მისი გამოყენების შედეგად ტელეფონისთვის მიყენებულ ზიანსა თუ მონაცემების დაკარგვაზე."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"თქვენი ტაბლეტი და პერსონალური მონაცემები მეტად დაუცველია უცნობი აპების მხრიდან შეტევების წინაშე. ამ აპის ინსტალაციის შემთხვევაში, თქვენ თანახმა ხართ, პასუხისმგებელი იყოთ მისი გამოყენების შედეგად ტაბლეტისთვის მიყენებულ ზიანსა თუ მონაცემების დაკარგვაზე."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"თქვენი ტელევიზორი და პერსონალური მონაცემები მეტად დაუცველია უცნობი აპების მხრიდან შეტევების წინაშე. ამ აპის ინსტალაციის შემთხვევაში, თქვენ თანახმა ხართ, პასუხისმგებელი იყოთ მისი გამოყენების შედეგად ტელევიზორისთვის მიყენებულ ზიანსა თუ მონაცემების დაკარგვაზე."</string>
diff --git a/packages/PackageInstaller/res/values-kk/strings.xml b/packages/PackageInstaller/res/values-kk/strings.xml
index 3e6d25d29ba7..badfa4e346d6 100644
--- a/packages/PackageInstaller/res/values-kk/strings.xml
+++ b/packages/PackageInstaller/res/values-kk/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Пакет орнатқыш"</string>
<string name="install" msgid="711829760615509273">"Орнату"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Дайын"</string>
<string name="cancel" msgid="1018267193425558088">"Бас тарту"</string>
<string name="installing" msgid="4921993079741206516">"Орнатылуда…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> орнатылуда…"</string>
<string name="install_done" msgid="5987363587661783896">"Қолданба орнатылды."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Осы қолданба орнатылсын ба?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Қолданбаның жаңартылған нұсқасы орнатылсын ба? Бұрыннан бар деректер сақталады."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Орнатылған қолданбаның жаңартылған нұсқасы орнатылсын ба? Бұрыннан бар деректер сақталады."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Қолданба орнатылмады."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Пакетті орнатуға тыйым салынды."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Жаңа пакет пен бұрыннан бар пакеттің арасында қайшылық туындағандықтан, қолданба орнатылмады."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear жүйесінде \"Орнату/Жою\" әрекеттері қолданылмайды."</string>
<string name="message_staging" msgid="8032722385658438567">"Қолданба дайындалуда…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Белгісіз"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Қауіпсіздік үшін планшетке бұл дереккөзден белгісіз қолданбаларды орнатуға рұқсат берілмейді."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Қауіпсіздік үшін теледидарға бұл дереккөзден белгісіз қолданбаларды орнатуға рұқсат берілмейді."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Қауіпсіздік үшін телефонға бұл дереккөзден белгісіз қолданбаларды орнатуға рұқсат берілмейді."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Телефон және жеке деректер белгісіз қолданбалардың шабуылына ұшырауы мүмкін. Бұл қолданбаны орнату арқылы оны пайдалану нәтижесіндегі телефонға келетін залалға немесе деректердің жоғалуына өзіңіз ғана жауапты болатыныңызға келісесіз."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Планшет және жеке деректер белгісіз қолданбалардың шабуылына ұшырауы мүмкін. Бұл қолданбаны орнату арқылы оны пайдалану нәтижесіндегі планшетке келетін залалға немесе деректердің жоғалуына өзіңіз ғана жауапты болатыныңызға келісесіз."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Теледидар және жеке деректер белгісіз қолданбалардың шабуылына ұшырауы мүмкін. Бұл қолданбаны орнату арқылы оны пайдалану нәтижесіндегі теледидарға келетін қандай да бір залалға немесе деректердің жоғалуына өзіңіз ғана жауапты болатыныңызға келісесіз."</string>
diff --git a/packages/PackageInstaller/res/values-km/strings.xml b/packages/PackageInstaller/res/values-km/strings.xml
index af7ef0b9f314..eb13774c7367 100644
--- a/packages/PackageInstaller/res/values-km/strings.xml
+++ b/packages/PackageInstaller/res/values-km/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"កម្មវិធី​ដំឡើង​កញ្ចប់"</string>
<string name="install" msgid="711829760615509273">"ដំឡើង"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"រួចរាល់"</string>
<string name="cancel" msgid="1018267193425558088">"បោះបង់"</string>
<string name="installing" msgid="4921993079741206516">"កំពុងដំឡើង…"</string>
<string name="installing_app" msgid="1165095864863849422">"កំពុង​ដំឡើង <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"បាន​ដំឡើង​កម្មវិធី។"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"តើ​អ្នក​ចង់​ដំឡើង​កម្មវិធី​នេះ​ដែរទេ?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"តើ​អ្នក​ចង់​ដំឡើងកំណែ​ថ្មី​សម្រាប់​កម្មវិធី​ដែលមាន​ស្រាប់​នេះ​ដែរទេ? ទិន្នន័យ​ដែល​មាន​ស្រាប់​របស់​អ្នក​នឹង​មិន​បាត់​បង់​ទេ។"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"តើ​អ្នក​ចង់​ដំឡើងកំណែ​ថ្មី​សម្រាប់​កម្មវិធី​ដែលភ្ជាប់​មក​ជាមួយនេះ​ដែរទេ? ទិន្នន័យ​ដែល​មាន​ស្រាប់​របស់​អ្នក​នឹង​មិន​បាត់​បង់​ទេ។"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"មិន​បាន​ដំឡើង​កម្មវិធីទេ។"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"កញ្ចប់ត្រូវបានទប់ស្កាត់​មិន​ឱ្យ​ដំឡើង។"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"កម្មវិធីមិនបានដំឡើងទេ ដោយសារកញ្ចប់កម្មវិធីមិនត្រូវគ្នាជាមួយកញ្ចប់ដែលមានស្រាប់។"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"សកម្មភាព​ដំឡើង/លុបចេញមិនអាចប្រើ​នៅលើ Wear បានទេ។"</string>
<string name="message_staging" msgid="8032722385658438567">"កំពុងសាកល្បងកម្មវិធី…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"មិនស្គាល់"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"ដើម្បីសុវតិ្ថភាពរបស់អ្នក ថេប្លេតរបស់អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យដំឡើងកម្មវិធីដែលមិនស្គាល់ពីប្រភពនេះទេ។"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"ដើម្បីសុវតិ្ថភាពរបស់អ្នក ទូរទស្សន៍របស់អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យ​ដំឡើងកម្មវិធីដែលមិនស្គាល់ពីប្រភពនេះទេ។"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"ដើម្បីសុវតិ្ថភាពរបស់អ្នក ទូរសព្ទរបស់អ្នកមិនត្រូវបានអនុញ្ញាតឱ្យដំឡើងកម្មវិធីដែលមិនស្គាល់ពីប្រភពនេះទេ។"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"ទូរសព្ទ និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីនេះ មានន័យថាអ្នកទទួលខុសត្រូវលើការខូចខាតទាំងឡាយចំពោះទូរសព្ទ ឬការបាត់បង់ទិន្នន័យរបស់អ្នក ដែលអាចបណ្ដាលមកពីការប្រើប្រាស់កម្មវិធីនេះ។"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"ថេប្លេត និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីនេះ មានន័យថាអ្នកទទួលខុសត្រូវលើការខូចខាតទាំងឡាយចំពោះថេប្លេត ឬការបាត់បង់ទិន្នន័យរបស់អ្នក ដែលអាចបណ្ដាលមកពីការប្រើប្រាស់កម្មវិធីនេះ។"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"ទូរទស្សន៍ និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីនេះ មានន័យថាអ្នកទទួលខុសត្រូវលើការខូចខាតទាំងឡាយចំពោះទូរទស្សន៍ ឬការបាត់បង់ទិន្នន័យរបស់អ្នក ដែលអាចបណ្ដាលមកពីការប្រើប្រាស់កម្មវិធីនេះ។"</string>
diff --git a/packages/PackageInstaller/res/values-kn/strings.xml b/packages/PackageInstaller/res/values-kn/strings.xml
index fa93f0d71fd6..66df526e5c9b 100644
--- a/packages/PackageInstaller/res/values-kn/strings.xml
+++ b/packages/PackageInstaller/res/values-kn/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"ಪ್ಯಾಕೇಜ್ ಇನ್‌ಸ್ಟಾಲರ್‌‌"</string>
<string name="install" msgid="711829760615509273">"ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"ಮುಗಿದಿದೆ"</string>
<string name="cancel" msgid="1018267193425558088">"ರದ್ದುಮಾಡಿ"</string>
<string name="installing" msgid="4921993079741206516">"ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
<string name="install_done" msgid="5987363587661783896">"ಆ್ಯಪ್‌ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲಾಗಿದೆ."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"ನೀವು ಈ ಆ್ಯಪ್‌ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲು ಬಯಸುವಿರಾ?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"ನೀವು ಈ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಆ್ಯಪ್‌ನ ಅಪ್‌ಡೇಟ್‌‌ ಆದ ಆ್ಯಪ್‌ ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಿಕೊಳ್ಳಲು ಬಯಸುವಿರಾ? ಈಗಿರುವ ನಿಮ್ಮ ಡೇಟಾ ಕಳೆದು ಹೋಗುವುದಿಲ್ಲ."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"ನೀವು ಈ ಅಂತನಿರ್ಮಿತ ಆ್ಯಪ್‌ನ ಅಪ್‌ಡೇಟ್‌‌ ಆದ ಆ್ಯಪ್‌ ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಿಕೊಳ್ಳಲು ಬಯಸುವಿರಾ? ಈಗಿರುವ ನಿಮ್ಮ ಡೇಟಾ ಕಳೆದು ಹೋಗುವುದಿಲ್ಲ. ಇದಕ್ಕೆ ಯಾವುದೇ ವಿಶೇಷ ಪ್ರವೇಶದ ಅಗತ್ಯವಿಲ್ಲ."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ಆ್ಯಪ್‌ ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲಾಗಿಲ್ಲ."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡುವ ಪ್ಯಾಕೇಜ್‌ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"ಪ್ಯಾಕೇಜ್‌ನಂತೆ ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲಾಗಿರುವ ಆ್ಯಪ್‌ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಪ್ಯಾಕೇಜ್ ಜೊತೆಗೆ ಸಂಘರ್ಷವಾಗುತ್ತದೆ."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear ನಲ್ಲಿ ಇನ್‌ಸ್ಟಾಲ್/ಅನ್ಇನ್‌ಸ್ಟಾಲ್ ಕ್ರಿಯೆಗಳು ಬೆಂಬಲಿತವಾಗಿಲ್ಲ."</string>
<string name="message_staging" msgid="8032722385658438567">"ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ಸಿದ್ಧವಿರುವ ಆ್ಯಪ್…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"ಅಪರಿಚಿತ"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"ನಿಮ್ಮ ಸುರಕ್ಷತೆಯ ದೃಷ್ಟಿಯಿಂದ, ಈ ಮೂಲದಿಂದ ಬಂದಿರುವ ಅಪರಿಚಿತ ಆ್ಯಪ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲು ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್‌ಗೆ ಅನುಮತಿಯಿಲ್ಲ."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"ನಿಮ್ಮ ಸುರಕ್ಷತೆಯ ದೃಷ್ಟಿಯಿಂದ, ಅಪರಿಚಿತ ಮೂಲಗಳಿಂದ ಪಡೆದುಕೊಳ್ಳುವ ಆ್ಯಪ್‌‍‍ಗಳನ್ನು ನಿಮ್ಮ ಟಿವಿಯಲ್ಲಿ ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲು ಅನುಮತಿಯಿಲ್ಲ."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"ನಿಮ್ಮ ಸುರಕ್ಷತೆಯ ದೃಷ್ಟಿಯಿಂದ, ಈ ಮೂಲದಿಂದ ಬಂದಿರುವ ಅಪರಿಚಿತ ಆ್ಯಪ್‌ಗಳನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡಲು ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಅನುಮತಿಯಿಲ್ಲ."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"ನಿಮ್ಮ ಫೋನ್ ಹಾಗೂ ವೈಯಕ್ತಿಕ ಡೇಟಾ, ಅಪರಿಚಿತ ಆ್ಯಪ್‌ಗಳ ದಾಳಿಗೆ ತುತ್ತಾಗುವ ಸಾಧ್ಯತೆ ಹೆಚ್ಚಾಗಿದೆ. ಈ ಆ್ಯಪ್‌ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡುವ ಮೂಲಕ, ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಯಾವುದೇ ಹಾನಿ ಉಂಟಾದರೆ ಅಥವಾ ಅದರ ಬಳಕೆಯಿಂದ ಡೇಟಾ ನಷ್ಟವಾದರೆ, ಅದಕ್ಕೆ ನೀವೇ ಜವಾಬ್ದಾರರು ಎನ್ನುವುದನ್ನು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರಿ."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಹಾಗೂ ವೈಯಕ್ತಿಕ ಡೇಟಾ, ಅಪರಿಚಿತ ಆ್ಯಪ್‌ಗಳ ದಾಳಿಗೆ ತುತ್ತಾಗುವ ಸಾಧ್ಯತೆ ಹೆಚ್ಚಾಗಿದೆ. ಈ ಆ್ಯಪ್‌ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡುವ ಮೂಲಕ, ನಿಮ್ಮ ಫೋನ್‌ಗೆ ಯಾವುದೇ ಹಾನಿ ಉಂಟಾದರೆ ಅಥವಾ ಅದರ ಬಳಕೆಯಿಂದ ಡೇಟಾ ನಷ್ಟವಾದರೆ, ಅದಕ್ಕೆ ನೀವೇ ಜವಾಬ್ದಾರರು ಎನ್ನುವುದನ್ನು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರಿ."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"ನಿಮ್ಮ ಟಿವಿ ಹಾಗೂ ವೈಯಕ್ತಿಕ ಡೇಟಾ, ಅಪರಿಚಿತ ಆ್ಯಪ್‌ಗಳ ದಾಳಿಗೆ ತುತ್ತಾಗುವ ಸಾಧ್ಯತೆ ಹೆಚ್ಚಾಗಿದೆ. ಈ ಆ್ಯಪ್‌ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್‌ ಮಾಡುವ ಮೂಲಕ, ನಿಮ್ಮ ಟಿವಿಗೆ ಯಾವುದೇ ಹಾನಿ ಉಂಟಾದರೆ ಅಥವಾ ಅದರ ಬಳಕೆಯಿಂದ ಡೇಟಾ ನಷ್ಟವಾದರೆ, ಅದಕ್ಕೆ ನೀವೇ ಜವಾಬ್ದಾರರು ಎನ್ನುವುದನ್ನು ಒಪ್ಪಿಕೊಳ್ಳುತ್ತೀರಿ."</string>
diff --git a/packages/PackageInstaller/res/values-ko/strings.xml b/packages/PackageInstaller/res/values-ko/strings.xml
index 2f11159f82c2..2eada005bfbe 100644
--- a/packages/PackageInstaller/res/values-ko/strings.xml
+++ b/packages/PackageInstaller/res/values-ko/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"패키지 설치 프로그램"</string>
<string name="install" msgid="711829760615509273">"설치"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"완료"</string>
<string name="cancel" msgid="1018267193425558088">"취소"</string>
<string name="installing" msgid="4921993079741206516">"설치 중..."</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> 설치 중…"</string>
<string name="install_done" msgid="5987363587661783896">"앱이 설치되었습니다."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"이 애플리케이션을 설치하시겠습니까?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"이 기존 애플리케이션에 대한 업데이트를 설치하시겠습니까? 기존 데이터는 유지됩니다."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"이 내장 애플리케이션에 대한 업데이트를 설치하시겠습니까? 기존 데이터는 유지됩니다."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"앱이 설치되지 않았습니다."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"패키지 설치가 차단되었습니다."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"패키지가 기존 패키지와 충돌하여 앱이 설치되지 않았습니다."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear에서 지원되지 않는 설치/제거 작업"</string>
<string name="message_staging" msgid="8032722385658438567">"앱 준비 중…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"알 수 없음"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"보안상의 이유로 이 소스의 알 수 없는 앱을 태블릿에 설치할 수 없습니다."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"보안상의 이유로 이 소스의 알 수 없는 앱을 TV에 설치할 수 없습니다."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"보안상의 이유로 이 소스의 알 수 없는 앱을 휴대전화에 설치할 수 없습니다."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"휴대전화와 개인 데이터는 알 수 없는 앱의 공격에 더욱 취약합니다. 이 앱을 설치하면 앱 사용으로 인해 발생할 수 있는 모든 휴대전화 손상이나 데이터 손실에 사용자가 책임을 진다는 것에 동의하게 됩니다."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"태블릿과 개인 데이터는 알 수 없는 앱의 공격에 더욱 취약합니다. 이 앱을 설치하면 앱 사용으로 인해 발생할 수 있는 모든 태블릿 손상이나 데이터 손실에 사용자가 책임을 진다는 것에 동의하게 됩니다."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV와 개인 데이터는 알 수 없는 앱의 공격에 더욱 취약합니다. 이 앱을 설치하면 앱 사용으로 인해 발생할 수 있는 모든 TV 손상이나 데이터 손실에 사용자가 책임을 진다는 것에 동의하게 됩니다."</string>
diff --git a/packages/PackageInstaller/res/values-ky/strings.xml b/packages/PackageInstaller/res/values-ky/strings.xml
index 822c548bc139..ef652915cd39 100644
--- a/packages/PackageInstaller/res/values-ky/strings.xml
+++ b/packages/PackageInstaller/res/values-ky/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Топтомду орноткуч"</string>
<string name="install" msgid="711829760615509273">"Орнотуу"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Бүттү"</string>
<string name="cancel" msgid="1018267193425558088">"Жокко чыгаруу"</string>
<string name="installing" msgid="4921993079741206516">"Орнотулууда…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> орнотулууда…"</string>
<string name="install_done" msgid="5987363587661783896">"Колдонмо орнотулду."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Бул колдонмону орнотоюн деп жатасызбы?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Учурдагы колдонмону жаңыртканы жатасызбы? Буга чейин сакталган дайын-даректериңиз өчүрүлбөйт."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Учурдагы алдын ала орнотулган колдонмону жаңыртканы жатасызбы? Буга чейин сакталган дайын-даректериңиз өчүрүлбөйт."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Колдонмо орнотулган жок."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Топтомду орнотууга болбойт."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Башка топтом менен дал келбегендиктен колдонмо орнотулган жок."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Орнотуу/чыгарып салуу аракеттери Android Wear\'де колдоого алынбайт."</string>
<string name="message_staging" msgid="8032722385658438567">"Күтө туруңуз…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Белгисиз"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Коопсуздукту сактоо максатында, планшетиңизге бул булактан колдонмолорду орнотууга уруксат жок."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Коопсуздукту сактоо максатында, сыналгыңызга бул булактан колдонмолорду орнотууга уруксат жок."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Коопсуздукту сактоо максатында, телефонуңузга бул булактан колдонмолорду орнотууга уруксат жок."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Телефонуңуз жана жеке дайын-даректериңиз белгисиз колдонмолордон зыян тартып калышы мүмкүн. Бул колдонмону орнотуп, аны пайдалануудан улам телефонуңузга кандайдыр бир зыян келтирилсе же дайын-даректериңизды жоготуп алсаңыз, өзүңүз жооптуу болосуз."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Планшетиңиз жана жеке дайын-даректериңиз белгисиз колдонмолордон зыян тартып калышы мүмкүн. Бул колдонмону орнотуп, аны пайдалануудан улам планшетиңизге кандайдыр бир зыян келтирилсе же дайын-даректериңизды жоготуп алсаңыз, өзүңүз жооптуу болосуз."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Сыналгыңыз жана жеке дайын-даректериңиз белгисиз колдонмолордон зыян тартып калышы мүмкүн. Бул колдонмону орнотуп, аны пайдалануудан улам сыналгыңызга кандайдыр бир зыян келтирилсе же дайын-даректериңизды жоготуп алсаңыз, өзүңүз жооптуу болосуз."</string>
diff --git a/packages/PackageInstaller/res/values-lo/strings.xml b/packages/PackageInstaller/res/values-lo/strings.xml
index c52f5090d388..78209bfa4f04 100644
--- a/packages/PackageInstaller/res/values-lo/strings.xml
+++ b/packages/PackageInstaller/res/values-lo/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"ຕົວຕິດຕັ້ງແພັກເກດ"</string>
<string name="install" msgid="711829760615509273">"ຕິດຕັ້ງ"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"ແລ້ວໆ"</string>
<string name="cancel" msgid="1018267193425558088">"ຍົກເລີກ"</string>
<string name="installing" msgid="4921993079741206516">"ກຳລັງຕິດຕັ້ງ…"</string>
<string name="installing_app" msgid="1165095864863849422">"ກຳລັງຕິດຕັ້ງ <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"ຕິດຕັ້ງແອັບແລ້ວ."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"ທ່ານ​ຕ້ອງ​ການ​ຕິດ​ຕັ້ງ​ແອັບພລິເຄຊັນນີ້​ບໍ່?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"ທ່ານຕ້ອງການຕິດຕັ້ງອັບເດດຫາແອັບພລິເຄຊັນທີ່ມີຢູ່ກ່ອນແລ້ວນີ້ບໍ່? ຂໍ້ມູນເກົ່າຂອງທ່ານຈະບໍ່ເສຍໄປໃສ."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"ທ່ານຕ້ອງການຕິດຕັ້ງອັບເດດໃສ່ແອັບພລິເຄຊັນແບບມີມາໃນຕົວນີ້ບໍ່? ຂໍ້ມູນເກົ່າຂອງທ່ານຈະບໍ່ເສຍໄປໃສ."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ບໍ່ໄດ້ຕິດຕັ້ງແອັບເທື່ອ."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"ແພັກ​ເກດ​ຖືກບ​ລັອກ​ບໍ່​ໃຫ້​ໄດ້​ຮັບ​ການ​ຕິດ​ຕັ້ງ."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"ບໍ່ໄດ້ຕິດຕັ້ງແອັບເນື່ອງຈາກແພັກເກດຂັດແຍ່ງກັບແພັກເກດທີ່ມີຢູ່ກ່ອນແລ້ວ."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"ຕິດຕັ້ງ/ຖອນການຕິດຕັ້ງ ຄຳສັ່ງທີ່ບໍ່ຮອງຮັບຢູ່ Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"ກຳລັງຮຽງແອັບ…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"ບໍ່ຮູ້ຈັກ"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"ເພື່ອຄວາມປອດໄພຂອງທ່ານ, ແທັບເລັດຂອງທ່ານບໍ່ສາມາດຕິດຕັ້ງແອັບຈາກແຫລ່ງຂໍ້ມູນນີ້ໄດ້."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"ເພື່ອຄວາມປອດໄພຂອງທ່ານ, ໂທລະທັດຂອງທ່ານບໍ່ສາມາດຕິດຕັ້ງແອັບຈາກແຫລ່ງຂໍ້ມູນນີ້ໄດ້."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"ເພື່ອຄວາມປອດໄພຂອງທ່ານ, ໂທລະສັບຂອງທ່ານບໍ່ສາມາດຕິດຕັ້ງແອັບຈາກແຫລ່ງຂໍ້ມູນນີ້ໄດ້."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"ໂທລະສັບ ແລະ ຂໍ້ມູນສ່ວນຕົວຂອງທ່ານອາດຖືກໂຈມຕີໄດ້ໂດຍແອັບທີ່ບໍ່ຮູ້ຈັກ. ໂດຍການຕິດຕັ້ງແອັບນີ້, ແມ່ນທ່ານຍອມຮັບວ່າທ່ານຈະຮັບຜິດຊອບຕໍ່ຄວາມເສຍຫາຍໃດໆກໍຕາມທີ່ເກີດຂຶ້ນຕໍ່ໂທລະທັດຂອງທ່ານ ຫຼື ການສູນເສຍຂໍ້ມູນທີ່ອາດເກີດຈາກການນຳໃຊ້ມັນ."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"ແທັບເລັດ ແລະ ຂໍ້ມູນສ່ວນຕົວຂອງທ່ານອາດຖືກໂຈມຕີໄດ້ໂດຍແອັບທີ່ບໍ່ຮູ້ຈັກ. ໂດຍການຕິດຕັ້ງແອັບນີ້, ແມ່ນທ່ານຍອມຮັບວ່າທ່ານຈະຮັບຜິດຊອບຕໍ່ຄວາມເສຍຫາຍໃດໆກໍຕາມທີ່ເກີດຂຶ້ນຕໍ່ໂທລະທັດຂອງທ່ານ ຫຼື ການສູນເສຍຂໍ້ມູນທີ່ອາດເກີດຈາກການນຳໃຊ້ມັນ."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"ໂທລະທັດ ແລະ ຂໍ້ມູນສ່ວນຕົວຂອງທ່ານອາດຖືກໂຈມຕີໄດ້ໂດຍແອັບທີ່ບໍ່ຮູ້ຈັກ. ໂດຍການຕິດຕັ້ງແອັບນີ້, ແມ່ນທ່ານຍອມຮັບວ່າທ່ານຈະຮັບຜິດຊອບຕໍ່ຄວາມເສຍຫາຍໃດໆກໍຕາມທີ່ເກີດຂຶ້ນຕໍ່ໂທລະທັດຂອງທ່ານ ຫຼື ການສູນເສຍຂໍ້ມູນທີ່ອາດເກີດຈາກການນຳໃຊ້ມັນ."</string>
diff --git a/packages/PackageInstaller/res/values-lt/strings.xml b/packages/PackageInstaller/res/values-lt/strings.xml
index e88bde45ba45..b0bff20a2502 100644
--- a/packages/PackageInstaller/res/values-lt/strings.xml
+++ b/packages/PackageInstaller/res/values-lt/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Paketo diegimo programa"</string>
<string name="install" msgid="711829760615509273">"Įdiegti"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Atlikta"</string>
<string name="cancel" msgid="1018267193425558088">"Atšaukti"</string>
<string name="installing" msgid="4921993079741206516">"Įdiegiama…"</string>
<string name="installing_app" msgid="1165095864863849422">"Įdiegiamas paketas „<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>“…"</string>
<string name="install_done" msgid="5987363587661783896">"Programa įdiegta."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Ar norite įdiegti šią programą?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Ar norite įdiegti šios esamos programos naujinį? Esamų duomenų neprarasite."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Ar norite įdiegti šios įtaisytos programos naujinį? Esamų duomenų neprarasite."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Programa neįdiegta."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Paketas užblokuotas ir negali būti įdiegtas."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Programa neįdiegta, nes paketas nesuderinamas su esamu paketu."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Diegimo / pašalinimo veiksmai nepalaikomi sistemoje „Wear“."</string>
<string name="message_staging" msgid="8032722385658438567">"Programa pateikiama etapais…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Nežinoma"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Saugos sumetimais planšetiniame kompiuteryje neleidžiama diegti nežinomų programų iš šio šaltinio."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Saugos sumetimais televizoriuje neleidžiama diegti nežinomų programų iš šio šaltinio."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Saugos sumetimais telefone neleidžiama diegti nežinomų programų iš šio šaltinio."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefonas ir asmens duomenys labiau pažeidžiami įdiegus nežinomų programų. Įdiegdami šią programą sutinkate, kad patys esate atsakingi už žalą telefonui arba prarastus duomenis dėl šios programos naudojimo."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Planšetinis kompiuteris ir asmens duomenys labiau pažeidžiami įdiegus nežinomų programų. Įdiegdami šią programą sutinkate, kad patys esate atsakingi už žalą planšetiniam kompiuteriui arba prarastus duomenis dėl šios programos naudojimo."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV ir asmens duomenys labiau pažeidžiami įdiegus nežinomų programų. Įdiegdami šią programą sutinkate, kad patys esate atsakingi už žalą TV arba prarastus duomenis dėl šios programos naudojimo."</string>
diff --git a/packages/PackageInstaller/res/values-lv/strings.xml b/packages/PackageInstaller/res/values-lv/strings.xml
index fa1452794422..70ea5961a223 100644
--- a/packages/PackageInstaller/res/values-lv/strings.xml
+++ b/packages/PackageInstaller/res/values-lv/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Pakotnes instalēš. progr."</string>
<string name="install" msgid="711829760615509273">"Instalēt"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Gatavs"</string>
<string name="cancel" msgid="1018267193425558088">"Atcelt"</string>
<string name="installing" msgid="4921993079741206516">"Notiek instalēšana…"</string>
<string name="installing_app" msgid="1165095864863849422">"Notiek pakotnes <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> instalēšana…"</string>
<string name="install_done" msgid="5987363587661783896">"Lietotne ir instalēta."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Vai vēlaties instalēt šo lietojumprogrammu?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Vai vēlaties instalēt šīs lietojumprogrammas atjauninājumu? Esošie dati netiks zaudēti."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Vai vēlaties instalēt šīs iebūvētās lietojumprogrammas atjauninājumu? Esošie dati netiks zaudēti."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Lietotne nav instalēta."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Pakotnes instalēšana tika bloķēta."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Lietotne netika instalēta, jo pastāv pakotnes konflikts ar esošu pakotni."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Operētājsistēmā Wear netiek atbalstīta instalēšana/atinstalēšana."</string>
<string name="message_staging" msgid="8032722385658438567">"Lietotne tiek izstādīta…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Nezināma"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Drošības nolūkos jūsu planšetdatorā ir aizliegts instalēt no šī avota iegūtas nezināmas lietotnes."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Drošības nolūkos jūsu televizorā ir aizliegts instalēt no šī avota iegūtas nezināmas lietotnes."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Drošības nolūkos jūsu tālrunī ir aizliegts instalēt no šī avota iegūtas nezināmas lietotnes."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Jūsu tālrunis un personas dati ir neaizsargātāki pret uzbrukumiem no nezināmām lietotnēm. Instalējot šo lietotni, jūs piekrītat, ka esat atbildīgs par tālruņa bojājumiem vai datu zudumu, kas var rasties lietotnes dēļ."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Jūsu planšetdators un personas dati ir neaizsargātāki pret uzbrukumiem no nezināmām lietotnēm. Instalējot šo lietotni, jūs piekrītat, ka esat atbildīgs par planšetdatora bojājumiem vai datu zudumu, kas var rasties lietotnes dēļ."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Jūsu televizors un personas dati ir neaizsargātāki pret uzbrukumiem no nezināmām lietotnēm. Instalējot šo lietotni, jūs piekrītat, ka esat atbildīgs par televizora bojājumiem vai datu zudumu, kas var rasties lietotnes dēļ."</string>
diff --git a/packages/PackageInstaller/res/values-mk/strings.xml b/packages/PackageInstaller/res/values-mk/strings.xml
index 000e5d88553a..6152b398f0d1 100644
--- a/packages/PackageInstaller/res/values-mk/strings.xml
+++ b/packages/PackageInstaller/res/values-mk/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Инсталатор на пакет"</string>
<string name="install" msgid="711829760615509273">"Инсталирај"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Готово"</string>
<string name="cancel" msgid="1018267193425558088">"Откажи"</string>
<string name="installing" msgid="4921993079741206516">"Се инсталира…"</string>
<string name="installing_app" msgid="1165095864863849422">"Се инсталира <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Апликацијата е инсталирана."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Дали сакате да ја инсталирате апликацијава?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Дали сакате да инсталирате ажурирање на оваа постоечка апликација? Постоечките податоци нема да се изгубат."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Дали сакате да инсталирате ажурирање на оваа вградена апликација? Постоечките податоци нема да се изгубат."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Апликацијата не е инсталирана."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Инсталирањето на пакетот е блокирано."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Апликација што не е инсталирана како пакет е во конфликт со постоечки пакет."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Дејствата „Инсталирај/деинсталирај“ не се поддржани на Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Апликацијата се поставува…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Непозната"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"За ваша безбедност, таблетот нема дозвола за инсталирање непознати апликации од изворов."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"За ваша безбедност, телевизорот нема дозвола за инсталирање непознати апликации од изворов."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"За ваша безбедност, телефонот нема дозвола за инсталирање непознати апликации од изворов."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Телефонот и личните податоци се поподложни на напади од непознати апликации. Ако ја инсталирате апликацијава, се согласувате дека сте одговорни за каква било штета на телефонот или губењето податоци што може да произлезат од нејзиното користење."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Таблетот и личните податоци се поподложни на напади од непознати апликации. Ако ја инсталирате апликацијава, се согласувате дека сте одговорни за каква било штета на таблетот или губењето податоци што може да произлезат од нејзиното користење."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Телевизорот и личните податоци се поподложни на напади од непознати апликации. Ако ја инсталирате апликацијава, се согласувате дека сте одговорни за каква било штета на телевизорот или губењето податоци што може да произлезат од нејзиното користење."</string>
diff --git a/packages/PackageInstaller/res/values-ml/strings.xml b/packages/PackageInstaller/res/values-ml/strings.xml
index c22ead4bc186..d66f4d6bc975 100644
--- a/packages/PackageInstaller/res/values-ml/strings.xml
+++ b/packages/PackageInstaller/res/values-ml/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"പാക്കേജ് ഇൻസ്‌റ്റാളർ"</string>
<string name="install" msgid="711829760615509273">"ഇൻസ്‌റ്റാൾ‌ ചെയ്യുക"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"പൂർത്തിയായി"</string>
<string name="cancel" msgid="1018267193425558088">"റദ്ദാക്കുക"</string>
<string name="installing" msgid="4921993079741206516">"ഇൻസ്‌റ്റാൾ ചെയ്യുന്നു…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ഇൻസ്‌റ്റാൾ ചെയ്യുന്നു…"</string>
<string name="install_done" msgid="5987363587661783896">"ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്‌തു."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"ഈ ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്യണോ?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"നിലവിലുള്ള ഈ ആപ്പിന്റെ അപ്‌ഡേറ്റ് ഇൻസ്‌റ്റാൾ ചെയ്യണോ നിലവിലുള്ള ഡാറ്റ നഷ്‌ടപ്പെടില്ല."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"ഈ അടങ്ങിയ ആപ്പിന് ഒരു അപ്‌ഡേറ്റ് ഇൻസ്‌റ്റാൾ ചെയ്യണോ? നിലവിലുള്ള ഡാറ്റ നഷ്‌ടപ്പെടില്ല."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്‌തിട്ടില്ല."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"പാക്കേജ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നത് ബ്ലോക്ക് ചെയ്‌തു."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"പാക്കേജിന് നിലവിലുള്ള പാക്കേജുമായി പൊരുത്തക്കേടുള്ളതിനാൽ, ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്‌തില്ല."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"ഇൻസ്‌റ്റാൾ/അൺഇൻസ്‌റ്റാൾ ചെയ്യുന്നത് Wear പിന്തുണയ്‌ക്കുന്നില്ല."</string>
<string name="message_staging" msgid="8032722385658438567">"ആപ്പ് തയ്യാറാക്കുന്നു…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"അജ്ഞാതം"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"നിങ്ങളുടെ സുരക്ഷയ്ക്കായി, ഈ ഉറവിടത്തിൽ നിന്നുള്ള, അജ്ഞാത ആപ്പുകൾ ഡാബ്‌ലെറ്റിൽ ഇൻസ്‌റ്റാൾ ചെയ്യുന്നത് അനുവദനീയമല്ല."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"നിങ്ങളുടെ സുരക്ഷയ്ക്കായി, ഈ ഉറവിടത്തിൽ നിന്നുള്ള, അജ്ഞാത ആപ്പുകൾ ടിവിയിൽ ഇൻസ്‌റ്റാൾ ചെയ്യുന്നത് അനുവദനീയമല്ല."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"നിങ്ങളുടെ സുരക്ഷയ്ക്കായി, ഈ ഉറവിടത്തിൽ നിന്നുള്ള, അജ്ഞാത ആപ്പുകൾ ഫോണിൽ ഇൻസ്‌റ്റാൾ ചെയ്യുന്നത് അനുവദനീയമല്ല."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"അജ്ഞാതമായ ആപ്പുകളാൽ നിങ്ങളുടെ ഫോണും വ്യക്തിഗത ഡാറ്റയും ആക്രമിക്കപ്പെടാനുള്ള സാധ്യത വളരെ കൂടുതലാണ്. ഈ ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിലൂടെ, ഇത് ഉപയോഗിക്കുന്നതിനാൽ നിങ്ങളുടെ ഫോണിന് സംഭവിച്ചേക്കാവുന്ന ഏത് നാശനഷ്‌ടത്തിന്റെയും അല്ലെങ്കിൽ ഡാറ്റാ നഷ്‌ടത്തിന്റെയും ഉത്തരവാദിത്തം നിങ്ങൾക്കായിരിക്കുമെന്ന് അംഗീകരിക്കുന്നു."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"അജ്ഞാതമായ ആപ്പുകളാൽ നിങ്ങളുടെ ടാബ്‌ലെറ്റും വ്യക്തിഗത ഡാറ്റയും ആക്രമിക്കപ്പെടാനുള്ള സാധ്യത വളരെ കൂടുതലാണ്. ഈ ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിലൂടെ, ഇത് ഉപയോഗിക്കുന്നതിനാൽ നിങ്ങളുടെ ടാബ്‌ലെറ്റിന് സംഭവിച്ചേക്കാവുന്ന ഏത് നാശനഷ്‌ടത്തിന്റെയും അല്ലെങ്കിൽ ഡാറ്റാ നഷ്‌ടത്തിന്റെയും ഉത്തരവാദിത്തം നിങ്ങൾക്കായിരിക്കുമെന്ന് അംഗീകരിക്കുന്നു."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"അജ്ഞാതമായ ആപ്പുകളാൽ നിങ്ങളുടെ ടിവിയും വ്യക്തിഗത ഡാറ്റയും ആക്രമിക്കപ്പെടാനുള്ള സാധ്യത വളരെ കൂടുതലാണ്. ഈ ആപ്പ് ഇൻസ്‌റ്റാൾ ചെയ്യുന്നതിലൂടെ, ഇത് ഉപയോഗിക്കുന്നതിനാൽ നിങ്ങളുടെ ടിവിക്ക് സംഭവിച്ചേക്കാവുന്ന ഏത് നാശനഷ്‌ടത്തിന്റെയും അല്ലെങ്കിൽ ഡാറ്റാ നഷ്‌ടത്തിന്റെയും ഉത്തരവാദിത്തം നിങ്ങൾക്കായിരിക്കുമെന്ന് അംഗീകരിക്കുന്നു."</string>
diff --git a/packages/PackageInstaller/res/values-mn/strings.xml b/packages/PackageInstaller/res/values-mn/strings.xml
index 61aba5746611..6cc992a8fa82 100644
--- a/packages/PackageInstaller/res/values-mn/strings.xml
+++ b/packages/PackageInstaller/res/values-mn/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Багц суулгагч"</string>
<string name="install" msgid="711829760615509273">"Суулгах"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Болсон"</string>
<string name="cancel" msgid="1018267193425558088">"Болих"</string>
<string name="installing" msgid="4921993079741206516">"Суулгаж байна…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>-г суулгаж байна…"</string>
<string name="install_done" msgid="5987363587661783896">"Аппыг суулгасан."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Та энэ аппыг суулгахыг хүсэж байна уу?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Та одоо байгаа аппын шинэчлэлтийг суулгахыг хүсэж байна уу? Таны хуучин өгөгдөл устахгүй."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Та энэ үндсэн аппын шинэчлэлтийг суулгахыг хүсэж байна уу? Таны хуучин өгөгдөл устахгүй."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Аппыг суулгаагүй."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Багц суулгахыг блоклосон байна."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Багц одоо байгаа багцтай тохирохгүй байгаа тул аппыг суулгаж чадсангүй."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear-д суулгах/устгах үйлдлийг дэмждэггүй."</string>
<string name="message_staging" msgid="8032722385658438567">"Аппыг байршуулж байна…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Тодорхойгүй"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Таны аюулгүй байдлыг хангахын тулд таны таблет энэ эх сурвалжаас тодорхойгүй апп суулгахыг зөвшөөрдөггүй."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Таны аюулгүй байдлыг хангахын тулд таны ТВ энэ эх сурвалжаас тодорхойгүй апп суулгахыг зөвшөөрдөггүй."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Таны аюулгүй байдлыг хангахын тулд таны утас энэ эх сурвалжаас тодорхойгүй апп суулгахыг зөвшөөрдөггүй."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Таны утас болон хувийн өгөгдөл тодорхойгүй апп суулгасан тохиолдолд гэмтэж болзошгүй. Энэ аппыг суулгаснаар үүнийг ашигласнаас үүдэн таны утсанд гэмтэл гарах, эсвэл өгөгдөл устах зэрэг эрсдэлийг хариуцна гэдгээ зөвшөөрч байна."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Таны таблет болон хувийн өгөгдөл тодорхойгүй апп суулгасан тохиолдолд гэмтэж болзошгүй. Энэ аппыг суулгаснаар үүнийг ашигласнаас үүдэн таны таблетад гэмтэл гарах, эсвэл өгөгдөл устах зэрэг эрсдэлийг хариуцна гэдгээ зөвшөөрч байна."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Таны ТВ болон хувийн өгөгдөл тодорхойгүй апп суулгасан тохиолдолд гэмтэж болзошгүй. Энэ аппыг суулгаснаар үүнийг ашигласнаас үүдэн таны ТВ-д гэмтэл гарах, эсвэл өгөгдөл устах зэрэг эрсдэлийг хариуцна гэдгээ зөвшөөрч байна."</string>
diff --git a/packages/PackageInstaller/res/values-mr/strings.xml b/packages/PackageInstaller/res/values-mr/strings.xml
index da1c7a7d7cbf..844ed8171d30 100644
--- a/packages/PackageInstaller/res/values-mr/strings.xml
+++ b/packages/PackageInstaller/res/values-mr/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"पॅकेज इंस्टॉलर"</string>
<string name="install" msgid="711829760615509273">"इंस्टॉल करा"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"पूर्ण झाले"</string>
<string name="cancel" msgid="1018267193425558088">"रद्द करा"</string>
<string name="installing" msgid="4921993079741206516">"इंस्‍टॉल होत आहे…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> इंस्टॉल होत आहे…"</string>
<string name="install_done" msgid="5987363587661783896">"अ‍ॅप इंस्टॉल झाले."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"तुम्हाला हे ॲप्लिकेशन इंस्टॉल करायचे आहे का?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"तुम्हाच्या विद्यमान ॲप्लिकेशनवर अपडेट इंस्टॉल करायचे आहे का? तुमचा विद्यमान डेटा गमावणार नाही."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"तुम्हाला या बिल्ट-इन ॲप्लिकेशनवर अपडेट इंस्टॉल करायचे आहे का? तुमचा विद्यमान डेटा गमावणार नाही."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"अ‍ॅप इंस्टॉल झाले नाही."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"पॅकेज इंस्टॉल होण्यापासून ब्लॉक केले होते."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"पॅकेजचा विद्यमान पॅकेजशी विरोध असल्याने अ‍ॅप इंस्टॉल झाले नाही."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"इंस्टॉल करा/अनइंस्टॉल करा क्रिया Wear वर सपोर्ट करत नाहीत."</string>
<string name="message_staging" msgid="8032722385658438567">"अ‍ॅप सुरुवातीच्या स्थितीत आहे…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"अज्ञात"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"तुमच्या सुरक्षिततेसाठी, तुमच्या टॅबलेटला या स्रोताकडील अज्ञात अ‍ॅप्स इंस्टॉल करण्याची अनुमती नाही."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"तुमच्या सुरक्षिततेसाठी, तुमच्या टीव्हीला या स्रोताकडील अज्ञात अ‍ॅप्स इंस्टॉल करण्याची अनुमती नाही."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"तुमच्या सुरक्षिततेसाठी, तुमच्या फोनला या स्रोताकडील अज्ञात अ‍ॅप्स इंस्टॉल करण्याची अनुमती नाही."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"तुमचा फोन आणि वैयक्तिक डेटा अज्ञात अ‍ॅप्‍सकडून होणार्‍या अटॅकमुळे अधिक असुरक्षित आहे. हे अ‍ॅप इंस्टॉल करून, तुम्‍ही सहमती देता की ते वापरल्‍याने होणार्‍या तुमच्‍या फोनचे कोणत्‍याही प्रकारे होणारे नुकसान किंवा डेटा हानीसाठी तुम्‍ही जबाबदार आहात."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"तुमचा टॅबलेट आणि वैयक्तिक डेटा अज्ञात अ‍ॅप्‍सकडून होणार्‍या अटॅकमुळे अधिक असुरक्षित आहे. हे अ‍ॅप इंस्टॉल करून, तुम्‍ही सहमती देता की ते वापरल्‍याने तुमच्‍या टॅबलेटचे कोणत्‍याही प्रकारे होणारे नुकसान किंवा डेटा हानीसाठी तुम्‍ही जबाबदार आहात."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"तुमचा टीव्‍ही आणि वैयक्तिक डेटा अज्ञात अ‍ॅप्‍सकडून होणार्‍या अटॅकमुळे अधिक असुरक्षित आहे. हे अ‍ॅप इंस्टॉल करून, तुम्ही सहमती देता की ते वापरल्‍याने तुमच्‍या टीव्‍हीचे कोणत्‍याही प्रकारे होणारे नुकसान किंवा डेटा हानीसाठी तुम्‍ही जबाबदार आहात."</string>
diff --git a/packages/PackageInstaller/res/values-ms/strings.xml b/packages/PackageInstaller/res/values-ms/strings.xml
index 17815be1f4fd..ce251a5184c8 100644
--- a/packages/PackageInstaller/res/values-ms/strings.xml
+++ b/packages/PackageInstaller/res/values-ms/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Pemasang pakej"</string>
<string name="install" msgid="711829760615509273">"Pasang"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Selesai"</string>
<string name="cancel" msgid="1018267193425558088">"Batal"</string>
<string name="installing" msgid="4921993079741206516">"Memasang…"</string>
<string name="installing_app" msgid="1165095864863849422">"Memasang <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikasi dipasang."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Adakah anda ingin memasang aplikasi ini?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Adakah anda mahu memasang kemas kini pada aplikasi yang sedia ada? Data anda yang sedia ada tidak akan hilang."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Adakah anda mahu memasang kemas kini pada aplikasi terbina dalam ini? Data anda yang sedia ada tidak akan hilang."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikasi tidak dipasang."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Pakej ini telah disekat daripada dipasang."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Apl tidak dipasang kerana pakej bercanggah dengan pakej yang sedia ada."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Tindakan pasang/nyahpasang tidak disokong pada Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Pemeringkatan apl…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Tidak diketahui"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Untuk keselamatan, tablet anda tidak dibenarkan memasang apl yang tidak diketahui daripada sumber ini."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Untuk keselamatan, TV anda tidak dibenarkan memasang apl yang tidak diketahui daripada sumber ini."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Untuk keselamatan, telefon anda tidak dibenarkan memasang apl yang tidak diketahui daripada sumber ini."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefon dan data peribadi anda lebih mudah diserang oleh apl yang tidak diketahui. Dengan memasang apl ini, anda bersetuju bahawa anda bertanggungjawab atas sebarang kerosakan pada telefon anda atau kehilangan data yang mungkin disebabkan oleh penggunaan apl tersebut."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tablet dan data peribadi anda lebih mudah diserang oleh apl yang tidak diketahui. Dengan memasang apl ini, anda bersetuju bahawa anda bertanggungjawab atas sebarang kerosakan pada tablet anda atau kehilangan data yang mungkin disebabkan oleh penggunaan apl tersebut."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV dan data peribadi anda lebih mudah diserang oleh apl yang tidak diketahui. Dengan memasang apl ini, anda bersetuju bahawa anda bertanggungjawab atas sebarang kerosakan pada TV anda atau kehilangan data yang mungkin disebabkan oleh penggunaan apl tersebut."</string>
diff --git a/packages/PackageInstaller/res/values-my/strings.xml b/packages/PackageInstaller/res/values-my/strings.xml
index 356c370c4e3d..3c3ed99459ef 100644
--- a/packages/PackageInstaller/res/values-my/strings.xml
+++ b/packages/PackageInstaller/res/values-my/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"ပက်ကေ့ဂျ်ထည့်သွင်းကိရိယာ"</string>
<string name="install" msgid="711829760615509273">"ထည့်သွင်းရန်"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"ပြီးပြီ"</string>
<string name="cancel" msgid="1018267193425558088">"မလုပ်တော့"</string>
<string name="installing" msgid="4921993079741206516">"ထည့်သွင်းနေသည်…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ကို ထည့်သွင်းနေသည်…"</string>
<string name="install_done" msgid="5987363587661783896">"အက်ပ်ထည့်သွင်းပြီးပါပြီ"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"ဤအပလီကေးရှင်းကို ထည့်သွင်းလိုသလား။"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"ဤလက်ရှိအပလီကေးရှင်းအတွက် အပ်ဒိတ်ကို ထည့်သွင်းလိုပါသလား။ သင်၏ လက်ရှိဒေတာများ ဆုံးရှုံးသွားမည် မဟုတ်ပါ။"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"ဤနဂိုအသင့်ပါ အပလီကေးရှင်းအတွက် အပ်ဒိတ်ကို ထည့်သွင်းလိုပါသလား။ သင်၏ လက်ရှိဒေတာများ ဆုံးရှုံးသွားမည် မဟုတ်ပါ။"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"အက်ပ်မထည့်သွင်းရသေးပါ"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"ပက်ကေ့ဂျ်ထည့်သွင်းခြင်းကို ပိတ်ထားသည်။"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"ပက်ကေ့ဂျ်အဖြစ် ထည့်သွင်းမထားသော အက်ပ်သည် လက်ရှိပက်ကေ့ဂျ်နှင့် တိုက်နေသည်။"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear ပေါ်တွင် ထည့်သွင်းခြင်း/ဖယ်ရှားခြင်းများကို ပံ့ပိုးမထားပါ။"</string>
<string name="message_staging" msgid="8032722385658438567">"အက်ပ်ကို ပြင်ဆင်နေသည်…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"အမည်မသိ"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"လုံခြုံရေးအရ ဤနေရာမှရယူထားသည့် အမျိုးအမည်မသိသောအက်ပ်များကို သင်၏တက်ဘလက်တွင် ထည့်သွင်းခွင့်မရှိပါ။"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"လုံခြုံရေးအရ ဤနေရာမှရယူထားသည့် အမျိုးအမည်မသိသောအက်ပ်များကို သင်၏တီဗီတွင် ထည့်သွင်းခွင့်မရှိပါ။"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"လုံခြုံရေးအရ ဤနေရာမှရယူထားသည့် အမျိုးအမည်မသိသောအက်ပ်များကို သင်၏ဖုန်းတွင် ထည့်သွင်းခွင့်မရှိပါ။"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"သင်၏ဖုန်းနှင့် ကိုယ်ရေးကိုယ်တာ အချက်အလက်များသည် အမျိုးအမည် မသိသောအက်ပ်များ၏ တိုက်ခိုက်ခြင်းကို ပိုမိုခံရနိုင်ပါသည်။ ဤအက်ပ်ကို ထည့်သွင်းအသုံးပြုခြင်းအားဖြင့် ဖြစ်ပေါ်လာနိုင်သော ဖုန်းပျက်စီးမှု သို့မဟုတ် ဒေတာဆုံးရှုံးမှုများအတွက် သင့်ထံ၌သာ တာဝန်ရှိကြောင်း သဘောတူရာရောက်ပါသည်။"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"သင်၏ တက်ဘလက်နှင့် ကိုယ်ရေးကိုယ်တာ အချက်အလက်များသည် အမျိုးအမည် မသိသောအက်ပ်များ၏ တိုက်ခိုက်ခြင်းကို ပိုမိုခံရနိုင်ပါသည်။ ဤအက်ပ်ကို ထည့်သွင်းအသုံးပြုခြင်းအားဖြင့် ဖြစ်ပေါ်လာနိုင်သော တက်ဘလက်ပျက်စီးမှု သို့မဟုတ် ဒေတာဆုံးရှုံးမှုများအတွက် သင့်ထံ၌သာ တာဝန်ရှိကြောင်း သဘောတူရာရောက်ပါသည်။"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"သင်၏ TV နှင့် ကိုယ်ရေးကိုယ်တာ အချက်အလက်များသည် အမျိုးအမည် မသိသောအက်ပ်များ၏ တိုက်ခိုက်ခြင်းကို ပိုမိုခံရနိုင်ပါသည်။ ဤအက်ပ်ကို ထည့်သွင်းအသုံးပြုခြင်းအားဖြင့် ဖြစ်ပေါ်လာနိုင်သော TV ပျက်စီးမှု သို့မဟုတ် ဒေတာဆုံးရှုံးမှုများအတွက် သင့်ထံ၌သာ တာဝန်ရှိကြောင်း သဘောတူရာရောက်ပါသည်။"</string>
diff --git a/packages/PackageInstaller/res/values-nb/strings.xml b/packages/PackageInstaller/res/values-nb/strings.xml
index 6f2f11299823..e0faa8429ac8 100644
--- a/packages/PackageInstaller/res/values-nb/strings.xml
+++ b/packages/PackageInstaller/res/values-nb/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Pakkeinstallasjon"</string>
<string name="install" msgid="711829760615509273">"Installer"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Ferdig"</string>
<string name="cancel" msgid="1018267193425558088">"Avbryt"</string>
<string name="installing" msgid="4921993079741206516">"Installerer …"</string>
<string name="installing_app" msgid="1165095864863849422">"Installerer <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> …"</string>
<string name="install_done" msgid="5987363587661783896">"Appen er installert."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Ønsker du å installere denne appen?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Vil du installere en oppdatering for denne eksisterende appen? Du mister ikke de eksisterende dataene dine."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Vil du installere en oppdatering for denne innebygde appen? Du mister ikke de eksisterende dataene dine."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Appen ble ikke installert."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Pakken er blokkert fra å bli installert."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Appen ble ikke installert fordi pakken er i konflikt med en eksisterende pakke."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Handlinger for å installere og avinstallere støttes ikke på Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Klargjør appen …"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Ukjent"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Nettbrettet ditt har ikke tillatelse til å installere ukjente apper fra denne kilden, for å ivareta sikkerheten din."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"TV-en din har ikke tillatelse til å installere ukjente apper fra denne kilden, for å ivareta sikkerheten din."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Telefonen din har ikke tillatelse til å installere ukjente apper fra denne kilden, for å ivareta sikkerheten din."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefonen din og de personlige dataene dine er mer sårbare for angrep fra ukjente apper. Når du installerer denne appen, samtykker du i at du er ansvarlig for eventuelle skader på telefonen eller tap av data som kan skyldes bruk av appen"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Nettbrettet ditt og de personlige dataene dine er mer sårbare for angrep fra ukjente apper. Når du installerer denne appen, samtykker du i at du er ansvarlig for eventuelle skader på nettbrettet eller tap av data som kan skyldes bruk av appen."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV-en din og de personlige dataene dine er mer sårbare for angrep fra ukjente apper. Når du installerer denne appen, samtykker du i at du er ansvarlig for eventuelle skader på TV-en eller tap av data som kan skyldes bruk av appen."</string>
diff --git a/packages/PackageInstaller/res/values-ne/strings.xml b/packages/PackageInstaller/res/values-ne/strings.xml
index 0b73271a0f34..4405123283d5 100644
--- a/packages/PackageInstaller/res/values-ne/strings.xml
+++ b/packages/PackageInstaller/res/values-ne/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"प्याकेज स्थापनाकर्ता"</string>
<string name="install" msgid="711829760615509273">"स्थापना गर्नु…"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"सम्पन्न भयो"</string>
<string name="cancel" msgid="1018267193425558088">"रद्द गर्नुहोस्"</string>
<string name="installing" msgid="4921993079741206516">"स्थापना गर्दै…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> स्थापना गर्दै…"</string>
<string name="install_done" msgid="5987363587661783896">"एप स्थापना गरियो।"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"तपाईं यो एप स्थापना गर्न चाहनुहुन्छ?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"तपाईं यो पहिलेदेखि नै विद्यमान एपको साटो यसको अद्यावधिक संस्करण स्थापना गर्न चाहनुहुन्छ? तपाईंको विद्यमान डेटा गुम्ने छैन।"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"तपाईं यो अन्तर्निर्मित एपको साटो यसको अद्यावधिक संस्करण स्थापना गर्न चाहनुहुन्छ? तपाईंको विद्यमान डेटा गुम्ने छैन।"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"एप स्थापना गरिएन।"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"यो प्याकेज स्थापना गर्ने क्रममा अवरोध गरियो।"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"प्याकेजका रूपमा स्थापना नगरिएको एप विद्यमान प्याकेजसँग मेल खाँदैन।"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear मा स्थापना/स्थापना रद्द गर्ने कारबाहीहरू समर्थित छैनन्।"</string>
<string name="message_staging" msgid="8032722385658438567">"एप स्थापना गर्न तयारी गर्दै…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"अज्ञात"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"तपाईंको सुरक्षाका लागि, तपाईंको ट्याब्लेटलाई यो स्रोतबाट प्राप्त हुने अज्ञात एपहरू स्थापना गर्ने अनुमति छैन।"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"तपाईंको सुरक्षाका लागि, तपाईंको टिभी लाई यस स्रोतबाट प्राप्त हुने अज्ञात एपहरू स्थापना गर्ने अनुमति छैन।"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"तपाईंको सुरक्षाका लागि, तपाईंको फोनलाई यो स्रोतबाट प्राप्त हुने अज्ञात एपहरू स्थापना गर्ने अनुमति छैन।"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"तपाईंको फोन तथा व्यक्तिगत डेटा अज्ञात एपहरूबाट हुने आक्रमणको चपेटामा पर्ने बढी जोखिममा हुन्छन्। यो एप स्थापना गरेर तपाईं यसको प्रयोगबाट तपाईंको फोनमा हुन सक्ने क्षति वा डेटाको नोक्सानीका लागि स्वयं जिम्मेवार हुने कुरामा सहमत हुनुहुन्छ।"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"तपाईंको ट्याब्लेट तथा व्यक्तिगत डेटा अज्ञात एपहरूबाट हुने आक्रमणको चपेटामा पर्ने बढी जोखिममा हुन्छन्। यो एप स्थापना गरेर तपाईं यसको प्रयोगबाट तपाईंको ट्याब्लेटमा हुन सक्ने क्षति वा डेटाको नोक्सानीका लागि स्वयं जिम्मेवार हुने कुरामा सहमत हुनुहुन्छ।"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"तपाईंको टिभी तथा व्यक्तिगत डेटा अज्ञात एपहरूबाट हुने आक्रमणको चपेटामा पर्ने बढी जोखिममा हुन्छन्। यो एप स्थापना गरेर तपाईं यसको प्रयोगबाट तपाईंको टिभी मा हुन सक्ने क्षति वा डेटाको नोक्सानीका लागि स्वयं जिम्मेवार हुने कुरामा सहमत हुनुहुन्छ।"</string>
diff --git a/packages/PackageInstaller/res/values-nl/strings.xml b/packages/PackageInstaller/res/values-nl/strings.xml
index d3a958922d1c..3c26eecc97a4 100644
--- a/packages/PackageInstaller/res/values-nl/strings.xml
+++ b/packages/PackageInstaller/res/values-nl/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Pakket-installatie"</string>
<string name="install" msgid="711829760615509273">"Installeren"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Klaar"</string>
<string name="cancel" msgid="1018267193425558088">"Annuleren"</string>
<string name="installing" msgid="4921993079741206516">"Installeren…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> installeren…"</string>
<string name="install_done" msgid="5987363587661783896">"App geïnstalleerd."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Wil je deze app installeren?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Wil je een update voor deze bestaande app installeren? Je huidige gegevens gaan niet verloren."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Wil je een update voor deze ingebouwde app installeren? Je huidige gegevens gaan niet verloren."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"App niet geïnstalleerd."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"De installatie van het pakket is geblokkeerd."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"App die niet is geïnstalleerd als pakket conflicteert met een bestaand pakket."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Acties voor installeren/verwijderen niet ondersteund op Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"App uitvoeren…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Onbekend"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Uit veiligheidsoverwegingen heeft je tablet geen toestemming om onbekende apps van deze bron te installeren."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Uit veiligheidsoverwegingen heeft je tv geen toestemming om onbekende apps van deze bron te installeren."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Uit veiligheidsoverwegingen heeft je telefoon geen toestemming om onbekende apps van deze bron te installeren."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Je telefoon en persoonsgegevens zijn kwetsbaarder voor aanvallen door onbekende apps. Als je deze app installeert, ga je ermee akkoord dat je verantwoordelijk bent voor eventuele schade aan je telefoon of gegevensverlies als gevolg van het gebruik van de app."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Je tablet en persoonsgegevens zijn kwetsbaarder voor aanvallen door onbekende apps. Als je deze app installeert, ga je ermee akkoord dat je verantwoordelijk bent voor eventuele schade aan je tablet of gegevensverlies als gevolg van het gebruik van de app."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Je tv en persoonsgegevens zijn kwetsbaarder voor aanvallen door onbekende apps. Als je deze app installeert, ga je ermee akkoord dat je verantwoordelijk bent voor eventuele schade aan je tv of gegevensverlies als gevolg van het gebruik van de app."</string>
diff --git a/packages/PackageInstaller/res/values-or/strings.xml b/packages/PackageInstaller/res/values-or/strings.xml
index f3b97a98ccf4..e1617f4fcd57 100644
--- a/packages/PackageInstaller/res/values-or/strings.xml
+++ b/packages/PackageInstaller/res/values-or/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"ପ୍ୟାକେଜ୍‌ ଇନଷ୍ଟଲର୍‍"</string>
<string name="install" msgid="711829760615509273">"ଇନଷ୍ଟଲ୍‍ କରନ୍ତୁ"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"ହୋଇଗଲା"</string>
<string name="cancel" msgid="1018267193425558088">"ବାତିଲ୍ କରନ୍ତୁ"</string>
<string name="installing" msgid="4921993079741206516">"ଇନଷ୍ଟଲ୍‌ କରାଯାଉଛି…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ଇନଷ୍ଟଲ୍‌ କରାଯାଉଛି…"</string>
<string name="install_done" msgid="5987363587661783896">"ଆପ୍‍ ଇନଷ୍ଟଲ୍‌ ହୋଇଗଲା।"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"ଆପଣ ଏହି ଆପ୍ଲିକେଶନ୍ ଇନ୍‌ଷ୍ଟଲ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"ପୂର୍ବରୁ ରହିଥିବା ଏହି ଆପ୍ଲିକେଶନ୍‌ରେ ଆପଣ ଅପ୍‌ଡେଟ୍ ଇନ୍‌ଷ୍ଟଲ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି? ନିଜର ବିଦ୍ୟମାନ ଡାଟାକୁ ଆପଣ ହରାଇବେ ନାହିଁ।"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"ଏହି ବିଲ୍ଟ-ଇନ୍ ଆପ୍ଲିକେଶନ୍‌ରେ ଆପଣ ଏକ ଅପ୍‌ଡେଟ୍ ଇନ୍‌ଷ୍ଟଲ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି? ନିଜର ବିଦ୍ୟମାନ ଡାଟାକୁ ଆପଣ ହରାଇବେ ନାହିଁ।"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ଆପ୍‍ ଇନଷ୍ଟଲ୍‌ ହୋଇନାହିଁ।"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"ଏହି ପ୍ୟାକେଜ୍‌କୁ ଇନଷ୍ଟଲ୍‍ କରାଯିବାରୁ ଅବରୋଧ କରାଯାଇଥିଲା।"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"ପୂର୍ବରୁ ଥିବା ପ୍ୟାକେଜ୍‍ ସହ ଏହି ପ୍ୟାକେଜ୍‌ର ସମସ୍ୟା ଉପୁଯିବାରୁ ଆପ୍‍ ଇନଷ୍ଟଲ୍‍ ହୋଇପାରିଲା ନାହିଁ।"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"ୱିଅର୍‌ରେ ଇନଷ୍ଟଲ୍‍/ଅନଇନଷ୍ଟଲ୍‍ କାର୍ଯ୍ୟ ସପୋର୍ଟ କରେନାହିଁ।"</string>
<string name="message_staging" msgid="8032722385658438567">"ଆପ୍‍ ପର୍ଯ୍ୟାୟଭୁକ୍ତ କରାଯାଉଛି…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"ଅଜଣା"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"ଆପଣଙ୍କ ସୁରକ୍ଷା ପାଇଁ, ଆପଣଙ୍କ ଟାବ୍‌ଲେଟ୍‌କୁ ଏହି ସୋର୍ସରୁ ଆସିଥିବା ଅଜଣା ଆପ୍‍ ଇନଷ୍ଟଲ୍‍ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ।"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"ଆପଣଙ୍କ ସୁରକ୍ଷା ପାଇଁ, ଆପଣଙ୍କ ଟିଭିକୁ ଏହି ସୋର୍ସରୁ ଆସିଥିବା ଅଜଣା ଆପ୍‍ ଇନଷ୍ଟଲ୍‍ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ।"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"ଆପଣଙ୍କ ସୁରକ୍ଷା ପାଇଁ, ଆପଣଙ୍କ ଫୋନ୍‌କୁ ଏହି ସୋର୍ସରୁ ଆସିଥିବା ଅଜଣା ଆପ୍‍ ଇନଷ୍ଟଲ୍‍ କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ।"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"ଅଜଣା ଆପ୍‌ ଦ୍ୱାରା ଆପଣଙ୍କ ଫୋନ୍‍ ଏବଂ ବ୍ୟକ୍ତିଗତ ଡାଟାକୁ ନଷ୍ଟ କରାଯାଇପାରିବାର ସମ୍ଭାବନା ବହୁତ ଅଧିକ। ଏହି ଆପ୍‌କୁ ଇନଷ୍ଟଲ୍‌ କରିବାର ଅର୍ଥ ହେଉଛି ଆପଣଙ୍କ ଫୋନ୍‌ରେ ଘଟିବା କୌଣସି ପ୍ରକାର କ୍ଷତି କିମ୍ବା ସେଗୁଡ଼ିକର ବ୍ୟବହାରରୁ ହେବା କୌଣସି ପ୍ରକାର ଡାଟାର ହାନୀ ପାଇଁ ଆପଣ ଦାୟୀ ରହିବାକୁ ରାଜି ହୁଅନ୍ତି।"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"ଅଜଣା ଆପ୍‌ ଦ୍ୱାରା ଆପଣଙ୍କ ଟାବଲେଟ୍‍ ଏବଂ ବ୍ୟକ୍ତିଗତ ଡାଟାକୁ ନଷ୍ଟ କରାଯାଇପାରିବାର ସମ୍ଭାବନା ବହୁତ ଅଧିକ। ଏହି ଆପ୍‌କୁ ଇନଷ୍ଟଲ୍‌ କରିବାର ଅର୍ଥ ହେଉଛି ଆପଣଙ୍କ ଟାବ୍‌ଲେଟ୍‌ରେ ଘଟିବା କୌଣସି ପ୍ରକାର କ୍ଷତି କିମ୍ବା ସେଗୁଡ଼ିକର ବ୍ୟବହାରରୁ ହେବା କୌଣସି ପ୍ରକାର ଡାଟାର ହାନୀ ପାଇଁ ଆପଣ ଦାୟୀ ରହିବାକୁ ରାଜି ହୁଅନ୍ତି।"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"ଅଜଣା ଆପ୍‌ ଦ୍ୱାରା ଆପଣଙ୍କ ଟିଭି ଏବଂ ବ୍ୟକ୍ତିଗତ ଡାଟାକୁ ନଷ୍ଟ କରାଯାଇପାରିବାର ସମ୍ଭାବନା ବହୁତ ଅଧିକ। ଏହି ଆପ୍‌କୁ ଇନଷ୍ଟଲ୍‌ କରିବାର ଅର୍ଥ ହେଉଛି ଆପଣଙ୍କ ଟିଭିରେ ଘଟିବା କୌଣସି ପ୍ରକାର କ୍ଷତି କିମ୍ବା ସେଗୁଡ଼ିକର ବ୍ୟବହାରରୁ ହେବା କୌଣସି ପ୍ରକାର ଡାଟାର ହାନୀ ପାଇଁ ଆପଣ ଦାୟୀ ରହିବାକୁ ରାଜି ହୁଅନ୍ତି।"</string>
diff --git a/packages/PackageInstaller/res/values-pa/strings.xml b/packages/PackageInstaller/res/values-pa/strings.xml
index 5a417af14733..ce56ab1038b4 100644
--- a/packages/PackageInstaller/res/values-pa/strings.xml
+++ b/packages/PackageInstaller/res/values-pa/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"ਪੈਕੇਜ ਸਥਾਪਨਾਕਾਰ"</string>
<string name="install" msgid="711829760615509273">"ਸਥਾਪਤ ਕਰੋ"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"ਹੋ ਗਿਆ"</string>
<string name="cancel" msgid="1018267193425558088">"ਰੱਦ ਕਰੋ"</string>
<string name="installing" msgid="4921993079741206516">"ਸਥਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ਨੂੰ ਸਥਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="install_done" msgid="5987363587661783896">"ਐਪ ਸਥਾਪਤ ਕੀਤੀ ਗਈ।"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"ਕੀ ਤੁਸੀਂ ਇਹ ਐਪਲੀਕੇਸ਼ਨ ਸਥਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"ਕੀ ਤੁਸੀਂ ਇਸ ਮੌਜੂਦਾ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਇੱਕ ਅੱਪਡੇਟ ਸਥਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? ਤੁਹਾਡਾ ਮੌਜੂਦਾ ਡਾਟਾ ਨਸ਼ਟ ਨਹੀਂ ਹੋਵੇਗਾ।"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"ਕੀ ਤੁਸੀਂ ਇਸ ਬਿਲਟ-ਇਨ ਐਪਲੀਕੇਸ਼ਨ ਵਿੱਚ ਇੱਕ ਅੱਪਡੇਟ ਸਥਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ? ਤੁਹਾਡਾ ਮੌਜੂਦਾ ਡਾਟਾ ਨਸ਼ਟ ਨਹੀਂ ਹੋਵੇਗਾ।"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ਐਪ ਸਥਾਪਤ ਨਹੀਂ ਕੀਤੀ ਗਈ।"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"ਪੈਕੇਜ ਨੂੰ ਸਥਾਪਤ ਹੋਣ ਤੋਂ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਸੀ।"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"ਪੈਕੇਜ ਦੇ ਇੱਕ ਮੌਜੂਦਾ ਪੈਕੇਜ ਨਾਲ ਵਿਵਾਦ ਹੋਣ ਕਰਕੇ ਐਪ ਸਥਾਪਤ ਨਹੀਂ ਕੀਤੀ ਗਈ।"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear \'ਤੇ ਸਥਾਪਤ ਜਾਂ ਅਣਸਥਾਪਤ ਕਰਨ ਦੀਆਂ ਕਾਰਵਾਈਆਂ ਸਮਰਥਿਤ ਨਹੀਂ ਹਨ।"</string>
<string name="message_staging" msgid="8032722385658438567">"ਐਪ ਨੂੰ ਸਟੇਜ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"ਅਗਿਆਤ"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਤੁਹਾਡੇ ਟੈਬਲੈੱਟ ਨੂੰ ਇਸ ਸਰੋਤ ਤੋਂ ਅਗਿਆਤ ਐਪਾਂ ਸਥਾਪਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਤੁਹਾਡੇ ਟੀਵੀ ਨੂੰ ਇਸ ਸਰੋਤ ਤੋਂ ਅਗਿਆਤ ਐਪਾਂ ਸਥਾਪਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਇਸ ਸਰੋਤ ਤੋਂ ਅਗਿਆਤ ਐਪਾਂ ਸਥਾਪਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਹੈ।"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਅਤੇ ਨਿੱਜੀ ਡਾਟਾ ਅਗਿਆਤ ਐਪਾਂ ਤੋਂ ਹਮਲੇ ਪ੍ਰਤੀ ਵਧੇਰੇ ਵਿੰਨਣਸ਼ੀਲ ਹਨ। ਇਹ ਐਪ ਸਥਾਪਤ ਕਰਕੇ, ਤੁਸੀਂ ਸਹਿਮਤੀ ਦਿੰਦੇ ਹੋ ਕਿ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਨੁਕਸਾਨ ਜਾਂ ਡਾਟੇ ਦੀ ਹਾਨੀ ਲਈ ਤੁਸੀਂ ਜ਼ੁੰਮੇਵਾਰ ਹੋ ਜੋ ਸ਼ਾਇਦ ਇਸ ਐਪ ਨੂੰ ਵਰਤਣ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਹੋ ਸਕਦਾ ਹੈ।"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"ਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਅਤੇ ਨਿੱਜੀ ਡਾਟਾ ਅਗਿਆਤ ਐਪਾਂ ਤੋਂ ਹਮਲੇ ਪ੍ਰਤੀ ਵਧੇਰੇ ਵਿੰਨਣਸ਼ੀਲ ਹਨ। ਇਹ ਐਪ ਸਥਾਪਤ ਕਰਕੇ, ਤੁਸੀਂ ਸਹਿਮਤੀ ਦਿੰਦੇ ਹੋ ਕਿ ਆਪਣੇ ਟੈਬਲੈੱਟ ਨੂੰ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਨੁਕਸਾਨ ਜਾਂ ਡਾਟੇ ਦੀ ਹਾਨੀ ਲਈ ਤੁਸੀਂ ਜ਼ੁੰਮੇਵਾਰ ਹੋ ਜੋ ਸ਼ਾਇਦ ਇਸ ਐਪ ਨੂੰ ਵਰਤਣ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਹੋ ਸਕਦਾ ਹੈ।"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"ਤੁਹਾਡਾ ਟੀਵੀ ਅਤੇ ਨਿੱਜੀ ਡਾਟਾ ਅਗਿਆਤ ਐਪਾਂ ਤੋਂ ਹਮਲੇ ਪ੍ਰਤੀ ਵਧੇਰੇ ਵਿੰਨਣਸ਼ੀਲ ਹਨ। ਇਹ ਐਪ ਸਥਾਪਤ ਕਰਕੇ, ਤੁਸੀਂ ਸਹਿਮਤੀ ਦਿੰਦੇ ਹੋ ਕਿ ਆਪਣੇ ਟੀਵੀ ਨੂੰ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਨੁਕਸਾਨ ਜਾਂ ਡਾਟੇ ਦੀ ਹਾਨੀ ਲਈ ਤੁਸੀਂ ਜ਼ੁੰਮੇਵਾਰ ਹੋ ਜੋ ਸ਼ਾਇਦ ਇਸ ਐਪ ਨੂੰ ਵਰਤਣ ਦੇ ਨਤੀਜੇ ਵਜੋਂ ਹੋ ਸਕਦਾ ਹੈ।"</string>
diff --git a/packages/PackageInstaller/res/values-pl/strings.xml b/packages/PackageInstaller/res/values-pl/strings.xml
index f67cb0838358..57ee7fea519f 100644
--- a/packages/PackageInstaller/res/values-pl/strings.xml
+++ b/packages/PackageInstaller/res/values-pl/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instalator pakietu"</string>
<string name="install" msgid="711829760615509273">"Zainstaluj"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Gotowe"</string>
<string name="cancel" msgid="1018267193425558088">"Anuluj"</string>
<string name="installing" msgid="4921993079741206516">"Instaluję…"</string>
<string name="installing_app" msgid="1165095864863849422">"Instaluję pakiet <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikacja została zainstalowana."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Czy zainstalować tę aplikację?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Czy chcesz zainstalować aktualizację posiadanej aplikacji? Dotychczasowe dane nie zostaną utracone."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Czy chcesz zainstalować aktualizację fabrycznej aplikacji? Dotychczasowe dane nie zostaną utracone."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikacja nie została zainstalowana."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Instalacja pakietu została zablokowana."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacja nie została zainstalowana, bo powoduje konflikt z istniejącym pakietem."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear nie obsługuje instalowania ani odinstalowywania."</string>
<string name="message_staging" msgid="8032722385658438567">"Przygotowuję aplikację…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Inny"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Ze względów bezpieczeństwa na Twoim tablecie nie można instalować nieznanych aplikacji z tego źródła."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Ze względów bezpieczeństwa na Twoim telewizorze nie można instalować nieznanych aplikacji z tego źródła."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Ze względów bezpieczeństwa na Twoim telefonie nie można instalować nieznanych aplikacji z tego źródła."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Dane na telefonie i prywatne są bardziej narażone na atak nieznanych aplikacji. Instalując tę aplikację, bierzesz na siebie odpowiedzialność za ewentualne uszkodzenie telefonu lub utratę danych w wyniku jej używania."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Dane na tablecie i prywatne są bardziej narażone na atak nieznanych aplikacji. Instalując tę aplikację, bierzesz na siebie odpowiedzialność za ewentualne uszkodzenie tabletu lub utratę danych w wyniku jej używania."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Dane na telewizorze i prywatne są bardziej narażone na atak nieznanych aplikacji. Instalując tę aplikację, bierzesz na siebie odpowiedzialność za ewentualne uszkodzenie telewizora lub utratę danych w wyniku jej używania."</string>
diff --git a/packages/PackageInstaller/res/values-pt-rBR/strings.xml b/packages/PackageInstaller/res/values-pt-rBR/strings.xml
index abeb72d458e9..cef7681c8324 100644
--- a/packages/PackageInstaller/res/values-pt-rBR/strings.xml
+++ b/packages/PackageInstaller/res/values-pt-rBR/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instalador do pacote"</string>
<string name="install" msgid="711829760615509273">"Instalar"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Concluído"</string>
<string name="cancel" msgid="1018267193425558088">"Cancelar"</string>
<string name="installing" msgid="4921993079741206516">"Instalando…"</string>
<string name="installing_app" msgid="1165095864863849422">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"App instalado."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Quer instalar este aplicativo?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Quer instalar uma atualização para este aplicativo? Seus dados existentes não serão perdidos."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Quer instalar uma atualização para este aplicativo integrado? Seus dados existentes não serão perdidos."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"O app não foi instalado."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"A instalação do pacote foi bloqueada."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Como o pacote tem um conflito com um pacote já existente, o app não foi instalado."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"As ações de instalar/desinstalar não são compatíveis com o Android Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Testando app…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Desconhecido"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Para sua segurança, seu tablet não tem permissão para instalar apps desconhecidos dessa fonte."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Para sua segurança, sua TV não tem permissão para instalar apps desconhecidos dessa fonte."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Para sua segurança, seu smartphone não tem permissão para instalar apps desconhecidos dessa fonte."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Seu smartphone e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano causado ao seu smartphone ou pela perda de dados que possa resultar do uso do app."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Seu tablet e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano causado ao seu tablet ou pela perda de dados que possa resultar do uso do app."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Sua TV e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano à sua TV ou pela perda de dados que possa resultar do uso do app."</string>
diff --git a/packages/PackageInstaller/res/values-pt-rPT/strings.xml b/packages/PackageInstaller/res/values-pt-rPT/strings.xml
index d539f6f67874..0710aa3fb75f 100644
--- a/packages/PackageInstaller/res/values-pt-rPT/strings.xml
+++ b/packages/PackageInstaller/res/values-pt-rPT/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instalador do pacote"</string>
<string name="install" msgid="711829760615509273">"Instalar"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Concluído"</string>
<string name="cancel" msgid="1018267193425558088">"Cancelar"</string>
<string name="installing" msgid="4921993079741206516">"A instalar…"</string>
<string name="installing_app" msgid="1165095864863849422">"A instalar <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"App instalada."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Pretende instalar esta app?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Pretende instalar uma atualização para esta app existente? Os seus dados existentes não serão perdidos."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Pretende instalar uma atualização para esta app incorporada? Os seus dados existentes não serão perdidos."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplicação não instalada."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Foi bloqueada a instalação do pacote."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"A app não foi instalada porque o pacote entra em conflito com um pacote existente."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"As ações de instalar/desinstalar não são compatíveis com o Android Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"A preparar a app…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Desconhecida"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Para sua segurança, o tablet não está autorizado a instalar aplicações desconhecidas a partir desta fonte."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Para sua segurança, a TV não está autorizada a instalar aplicações desconhecidas a partir desta fonte."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Para sua segurança, o telemóvel não está autorizado a instalar aplicações desconhecidas a partir desta fonte."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"O seu telemóvel e os dados pessoais estão mais vulneráveis a ataques por parte de aplicações desconhecidas. Ao instalar esta app, concorda que é responsável por quaisquer danos causados ao telemóvel ou pelas perdas de dados que possam resultar da utilização da mesma."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"O seu tablet e os dados pessoais estão mais vulneráveis a ataques por parte de aplicações desconhecidas. Ao instalar esta app, concorda que é responsável por quaisquer danos causados ao tablet ou pelas perdas de dados que possam resultar da utilização da mesma."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"A sua TV e os dados pessoais estão mais vulneráveis a ataques por parte de aplicações desconhecidas. Ao instalar esta app, concorda que é responsável por quaisquer danos causados à TV ou pelas perdas de dados que possam resultar da utilização da mesma."</string>
diff --git a/packages/PackageInstaller/res/values-pt/strings.xml b/packages/PackageInstaller/res/values-pt/strings.xml
index abeb72d458e9..cef7681c8324 100644
--- a/packages/PackageInstaller/res/values-pt/strings.xml
+++ b/packages/PackageInstaller/res/values-pt/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instalador do pacote"</string>
<string name="install" msgid="711829760615509273">"Instalar"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Concluído"</string>
<string name="cancel" msgid="1018267193425558088">"Cancelar"</string>
<string name="installing" msgid="4921993079741206516">"Instalando…"</string>
<string name="installing_app" msgid="1165095864863849422">"Instalando <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"App instalado."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Quer instalar este aplicativo?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Quer instalar uma atualização para este aplicativo? Seus dados existentes não serão perdidos."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Quer instalar uma atualização para este aplicativo integrado? Seus dados existentes não serão perdidos."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"O app não foi instalado."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"A instalação do pacote foi bloqueada."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Como o pacote tem um conflito com um pacote já existente, o app não foi instalado."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"As ações de instalar/desinstalar não são compatíveis com o Android Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Testando app…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Desconhecido"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Para sua segurança, seu tablet não tem permissão para instalar apps desconhecidos dessa fonte."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Para sua segurança, sua TV não tem permissão para instalar apps desconhecidos dessa fonte."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Para sua segurança, seu smartphone não tem permissão para instalar apps desconhecidos dessa fonte."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Seu smartphone e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano causado ao seu smartphone ou pela perda de dados que possa resultar do uso do app."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Seu tablet e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano causado ao seu tablet ou pela perda de dados que possa resultar do uso do app."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Sua TV e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar esse app, você concorda que é responsável por qualquer dano à sua TV ou pela perda de dados que possa resultar do uso do app."</string>
diff --git a/packages/PackageInstaller/res/values-ro/strings.xml b/packages/PackageInstaller/res/values-ro/strings.xml
index 9c22fcd217fd..119860156e66 100644
--- a/packages/PackageInstaller/res/values-ro/strings.xml
+++ b/packages/PackageInstaller/res/values-ro/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Program de instalare a pachetelor"</string>
<string name="install" msgid="711829760615509273">"Instalați"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Gata"</string>
<string name="cancel" msgid="1018267193425558088">"Anulați"</string>
<string name="installing" msgid="4921993079741206516">"Se instalează…"</string>
<string name="installing_app" msgid="1165095864863849422">"Se instalează <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplicație instalată."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Doriți să instalați această aplicație?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Doriți să instalați o actualizare pentru această aplicație? Datele existente nu se vor pierde."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Doriți să instalați o actualizare pentru această aplicație încorporată? Datele existente nu se vor pierde."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplicația nu a fost instalată."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Instalarea pachetului a fost blocată."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplicația nu a fost instalată deoarece pachetul intră în conflict cu un pachet existent."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Acțiunile de instalare și dezinstalare nu sunt acceptate pe Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Se pregătește aplicația…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Necunoscut"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Din motive de securitate, tableta dvs. nu are permisiunea să instaleze aplicații necunoscute din această sursă."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Din motive de securitate, televizorul dvs. nu are permisiunea să instaleze aplicații necunoscute din această sursă."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Din motive de securitate, telefonul dvs. nu are permisiunea să instaleze aplicații necunoscute din această sursă."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefonul și datele dvs. personale sunt mai vulnerabile la un atac din partea aplicațiilor necunoscute. Dacă instalați această aplicație, acceptați că sunteți singura persoană responsabilă pentru deteriorarea telefonului sau pentru pierderea datelor, care pot avea loc în urma folosirii acesteia."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tableta și datele dvs. personale sunt mai vulnerabile la un atac din partea aplicațiilor necunoscute. Dacă instalați aplicația, acceptați că sunteți singura persoană responsabilă pentru deteriorarea tabletei sau pentru pierderea datelor, care pot avea loc în urma folosirii acesteia."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Televizorul și datele dvs. personale sunt mai vulnerabile la un atac din partea aplicațiilor necunoscute. Dacă instalați această aplicație, acceptați că sunteți singura persoană responsabilă pentru deteriorarea televizorului sau pentru pierderea datelor, care pot avea loc în urma folosirii acesteia."</string>
diff --git a/packages/PackageInstaller/res/values-ru/strings.xml b/packages/PackageInstaller/res/values-ru/strings.xml
index a9ae543518c7..b5477c1ba62b 100644
--- a/packages/PackageInstaller/res/values-ru/strings.xml
+++ b/packages/PackageInstaller/res/values-ru/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Установщик пакетов"</string>
<string name="install" msgid="711829760615509273">"Установить"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Готово"</string>
<string name="cancel" msgid="1018267193425558088">"Отмена"</string>
<string name="installing" msgid="4921993079741206516">"Установка…"</string>
<string name="installing_app" msgid="1165095864863849422">"Установка приложения \"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>\"…"</string>
<string name="install_done" msgid="5987363587661783896">"Приложение установлено."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Установить это приложение?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Установить обновление для этого приложения? Вы не потеряете связанные с ним данные."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Установить обновление для этого встроенного приложения? Вы не потеряете связанные с ним данные."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Приложение не установлено."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Установка пакета заблокирована."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Приложение не установлено, так как оно конфликтует с другим пакетом."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Установка и удаление не поддерживаются в Wear OS."</string>
<string name="message_staging" msgid="8032722385658438567">"Подождите…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Неизвестное приложение"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"В целях безопасности ваш планшет блокирует установку приложений из неизвестных источников."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"В целях безопасности ваш телевизор блокирует установку приложений из неизвестных источников."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"В целях безопасности ваш телефон блокирует установку приложений из неизвестных источников."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Ваши персональные данные и данные телефона более уязвимы для атак приложений из неизвестных источников. Устанавливая это приложение, вы берете на себя всю ответственность за последствия, связанные с его использованием, то есть за любой ущерб, нанесенный телефону, и возможную потерю данных."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Ваши персональные данные и данные планшета более уязвимы для атак приложений из неизвестных источников. Устанавливая это приложение, вы берете на себя всю ответственность за последствия, связанные с его использованием, то есть за любой ущерб, нанесенный планшету, и возможную потерю данных."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Ваши персональные данные и данные телевизора более уязвимы для атак приложений из неизвестных источников. Устанавливая это приложение, вы берете на себя всю ответственность за последствия, связанные с его использованием, то есть за любой ущерб, нанесенный телевизору, и возможную потерю данных."</string>
diff --git a/packages/PackageInstaller/res/values-si/strings.xml b/packages/PackageInstaller/res/values-si/strings.xml
index 5fad69d02268..b517efaea30e 100644
--- a/packages/PackageInstaller/res/values-si/strings.xml
+++ b/packages/PackageInstaller/res/values-si/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"පැකේජ ස්ථාපනකරු"</string>
<string name="install" msgid="711829760615509273">"ස්ථාපනය කරන්න"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"කළා"</string>
<string name="cancel" msgid="1018267193425558088">"අවලංගු කරන්න"</string>
<string name="installing" msgid="4921993079741206516">"ස්ථාපනය කරමින්…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> ස්ථාපනය කරමින්…"</string>
<string name="install_done" msgid="5987363587661783896">"යෙදුම ස්ථාපනය කර ඇත."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"මෙම යෙදුම ස්ථාපනය කිරීමට ඔබට අවශ්‍යද?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"මෙම යෙදුම සඳහා යාවත්කාලීන ස්ථාපනය කිරීමට ඔබට අවශ්‍යද? ඔබගේ පවතින දත්ත නැති වනු ඇත."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"මෙම ඇමිණූ යෙදුමට යාවත්කාලීන ස්ථාපනය කිරීමට ඔබට අවශ්‍යද? ඔබගේ පවතින දත්ත නැති වනු ඇත."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"යෙදුම ස්ථාපනය කර නැත."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"මෙම පැකේජය ස්ථාපනය කිරීම අවහිර කරන ලදි."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"පැකේජය දැනට පවතින පැකේජයක් සමග ගැටෙන නිසා යෙදුම ස්ථාපනය නොකරන ලදී."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear මත ස්ථාපන/අස්ථාපනය ක්‍රියා සහාය දක්වන්නේ නැත."</string>
<string name="message_staging" msgid="8032722385658438567">"යෙදුම වේදිකාගත කරමින්..."</string>
<string name="app_name_unknown" msgid="6881210203354323926">"නොදනී"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"ආරක්ෂාව සඳහා, ඔබගේ ටැබ්ලටය මෙම මුලාශ්‍රයෙන් ලබාගත් නොදන්නා යෙදුම් ස්ථාපනය කිරීමට අවසර නැත."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"ආරක්ෂාව සඳහා, ඔබගේ රූපවාහිනිය මෙම මුලාශ්‍රයෙන් ලබාගත් නොදන්නා යෙදුම් ස්ථාපනය කිරීමට අවසර නැත."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"ආරක්ෂාව සඳහා, ඔබගේ දුරකථනය මෙම මුලාශ්‍රයෙන් ලබාගත් නොදන්නා යෙදුම් ස්ථාපනය කිරීමට අවසර නැත."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"ඔබගේ දුරකථනය සහ පුද්ගලික දත්තවලට නොදන්නා යෙදුම් මඟින් තර්ජන එල්ල කිරීමේ හැකියාව වැඩිය. මෙම යෙදුම් ස්ථාපනය කිරීමෙන් සහ භාවිත කිරීමෙන් ඔබ ඔබේ දුරකථනය සඳහා සිදු වන යම් හානි හෝ එය භාවිත කිරීමේ ප්‍රතිඵලයක් ලෙස සිදු වන දත්ත හානි සඳහා ඔබ වගකිව යුතු බවට එකඟ වේ."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"ඔබගේ ටැබ්ලට් පරිගණකය සහ පුද්ගලික දත්තවලට නොදන්නා යෙදුම් මඟින් තර්ජන එල්ල කිරීමේ හැකියාව වැඩිය. මෙම යෙදුම් ස්ථාපනය කිරීමෙන් සහ භාවිත කිරීමෙන් ඔබ ඔබේ ටැබ්ලට් පරිගණකය සඳහා සිදු වන යම් හානි හෝ එය භාවිත කිරීමේ ප්‍රතිඵලයක් ලෙස සිදු වන දත්ත හානි සඳහා ඔබ වගකිව යුතු බවට එකඟ වේ."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"ඔබගේ TV සහ පුද්ගලික දත්තවලට නොදන්නා යෙදුම් මඟින් තර්ජන එල්ල කිරීමේ හැකියාව වැඩිය. මෙම යෙදුම් ස්ථාපනය කිරීමෙන් සහ භාවිත කිරීමෙන් ඔබ ඔබේ TV සඳහා සිදු වන යම් හානි හෝ එය භාවිත කිරීමේ ප්‍රතිඵලයක් ලෙස සිදු වන දත්ත හානි සඳහා ඔබ වගකිව යුතු බවට එකඟ වේ."</string>
diff --git a/packages/PackageInstaller/res/values-sk/strings.xml b/packages/PackageInstaller/res/values-sk/strings.xml
index ae914bd53aff..aa02eb483967 100644
--- a/packages/PackageInstaller/res/values-sk/strings.xml
+++ b/packages/PackageInstaller/res/values-sk/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Nástroj na inštaláciu balíkov"</string>
<string name="install" msgid="711829760615509273">"Inštalovať"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Hotovo"</string>
<string name="cancel" msgid="1018267193425558088">"Zrušiť"</string>
<string name="installing" msgid="4921993079741206516">"Inštaluje sa…"</string>
<string name="installing_app" msgid="1165095864863849422">"Inštaluje sa <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikácia bola nainštalovaná."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Chcete túto aplikáciu nainštalovať?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Chcete nainštalovať aktualizáciu tejto existujúcej aplikácie? Existujúce údaje sa nestratia."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Chcete nainštalovať aktualizáciu tejto integrovanej aplikácie? Existujúce údaje sa nestratia."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikácia nebola nainštalovaná."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Inštalácia balíka bola zablokovaná."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplikácia sa nenainštalovala, pretože balík je v konflikte s existujúcim balíkom."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear nepodporuje akciu inštalácie/odinštalovania."</string>
<string name="message_staging" msgid="8032722385658438567">"Aplikácia je zavádzaná po etapách…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Neznáma"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Váš tablet nemôže z bezpečnostných dôvodov inštalovať neznáme aplikácie z tohto zdroja."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Váš televízor nemôže z bezpečnostných dôvodov inštalovať neznáme aplikácie z tohto zdroja."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Váš telefón nemôže z bezpečnostných dôvodov inštalovať neznáme aplikácie z tohto zdroja."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Váš telefón a osobné dáta sú náchylnejšie na útok z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie telefónu alebo stratu dát, ktoré by mohli nastať pri jej používaní."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Váš tablet a osobné dáta sú náchylnejšie na útok z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie tabletu alebo stratu dát, ktoré by mohli nastať pri jej používaní."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Váš televízor a osobné údaje sú náchylnejšie na útok z neznámych aplikácií. Inštaláciou tejto aplikácie vyjadrujete súhlas s tým, že nesiete zodpovednosť za akékoľvek poškodenie televízora alebo stratu údajov, ktoré by mohli nastať pri jej používaní."</string>
diff --git a/packages/PackageInstaller/res/values-sl/strings.xml b/packages/PackageInstaller/res/values-sl/strings.xml
index c123d69c4dd5..add57cf8c5b4 100644
--- a/packages/PackageInstaller/res/values-sl/strings.xml
+++ b/packages/PackageInstaller/res/values-sl/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Namest. program za paket"</string>
<string name="install" msgid="711829760615509273">"Namesti"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Končano"</string>
<string name="cancel" msgid="1018267193425558088">"Prekliči"</string>
<string name="installing" msgid="4921993079741206516">"Nameščanje …"</string>
<string name="installing_app" msgid="1165095864863849422">"Nameščanje aplikacije <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> …"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikacija je nameščena."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Ali želite namestiti to aplikacijo?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Ali želite namestiti posodobitev te obstoječe aplikacije? Obstoječi podatki ne bodo izgubljeni."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Ali želite namestiti posodobitev te vgrajene aplikacije? Obstoječi podatki ne bodo izgubljeni."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikacija ni nameščena."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Namestitev paketa je bila blokirana."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacija ni bila nameščena, ker je paket v navzkrižju z obstoječim paketom."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Dejanja namestitve in odstranitve v sistemu Android Wear niso podprta."</string>
<string name="message_staging" msgid="8032722385658438567">"Priprava aplikacije …"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Neznano"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Vaš tablični računalnik zaradi varnosti nima dovoljenja za nameščanje neznanih aplikacij iz tega vira."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Vaš televizor zaradi varnosti nima dovoljenja za nameščanje neznanih aplikacij iz tega vira."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Vaš telefon zaradi varnosti nima dovoljenja za nameščanje neznanih aplikacij iz tega vira."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Neznane aplikacije lahko resno ogrozijo varnost telefona in osebnih podatkov. Z namestitvijo te aplikacije se strinjate, da ste sami odgovorni za morebitno škodo, nastalo v telefonu, ali izgubo podatkov, do katerih lahko pride zaradi uporabe te aplikacije."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Neznane aplikacije lahko resno ogrozijo varnost tabličnega računalnika in osebnih podatkov. Z namestitvijo te aplikacije se strinjate, da ste sami odgovorni za morebitno škodo, nastalo v tabličnem računalniku, ali izgubo podatkov, do katerih lahko pride zaradi uporabe te aplikacije."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Neznane aplikacije lahko resno ogrozijo varnost televizorja in osebnih podatkov. Z namestitvijo te aplikacije se strinjate, da ste sami odgovorni za morebitno škodo, nastalo v televizorju, ali izgubo podatkov, do katerih lahko pride zaradi uporabe te aplikacije."</string>
diff --git a/packages/PackageInstaller/res/values-sq/strings.xml b/packages/PackageInstaller/res/values-sq/strings.xml
index 0cde28ea2b5b..e5b8c0127983 100644
--- a/packages/PackageInstaller/res/values-sq/strings.xml
+++ b/packages/PackageInstaller/res/values-sq/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Instaluesi i paketës"</string>
<string name="install" msgid="711829760615509273">"Instalo"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"U krye"</string>
<string name="cancel" msgid="1018267193425558088">"Anulo"</string>
<string name="installing" msgid="4921993079741206516">"Po instalohet…"</string>
<string name="installing_app" msgid="1165095864863849422">"Po instalohet <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Aplikacioni u instalua."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Dëshiron ta instalosh këtë aplikacion?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Dëshiron të instalosh një përditësim të këtij aplikacioni ekzistues? Të dhënat e tua ekzistuese nuk do të humbasin."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Dëshiron të instalosh një përditësim të këtij aplikacioni ekzistues? Të dhënat e tua ekzistuese nuk do të humbasin."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Aplikacioni nuk u instalua."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Instalimi paketës u bllokua."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Aplikacioni nuk u instalua pasi paketa është në konflikt me një paketë ekzistuese."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Instalo/çinstalo veprimet që nuk mbështeten në Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Po vihet në përdorim aplikacioni..."</string>
<string name="app_name_unknown" msgid="6881210203354323926">"I panjohur"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Për sigurinë tënde, tableti yt nuk lejohet të instalojë aplikacione të panjohura nga ky burim."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Për sigurinë tënde, televizori yt nuk lejohet të instalojë aplikacione të panjohura nga ky burim."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Për sigurinë tënde, telefoni yt nuk lejohet të instalojë aplikacione të panjohura nga ky burim."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefoni dhe të dhënat e tua personale janë më të cenueshme për t\'u sulmuar nga aplikacione të panjohura. Duke instaluar këtë aplikacion, ti pranon se je përgjegjës për çdo dëm ndaj telefonit tënd ose çdo humbje të dhënash që mund të rezultojë nga përdorimi i tij."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tableti dhe të dhënat e tua personale janë më të cenueshme për t\'u sulmuar nga aplikacione të panjohura. Duke instaluar këtë aplikacion, ti pranon se je përgjegjës për çdo dëm ndaj tabletit tënd ose çdo humbje të dhënash që mund të rezultojë nga përdorimi i tij."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Televizori dhe të dhënat e tua personale janë më të cenueshme për t\'u sulmuar nga aplikacione të panjohura. Duke instaluar këtë aplikacion, ti pranon se je përgjegjës për çdo dëm ndaj televizorit tënd ose çdo humbje të dhënash që mund të rezultojë nga përdorimi i tij."</string>
diff --git a/packages/PackageInstaller/res/values-sr/strings.xml b/packages/PackageInstaller/res/values-sr/strings.xml
index 2746284686e0..14ca7a439f71 100644
--- a/packages/PackageInstaller/res/values-sr/strings.xml
+++ b/packages/PackageInstaller/res/values-sr/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Програм за инстал. пакета"</string>
<string name="install" msgid="711829760615509273">"Инсталирај"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Готово"</string>
<string name="cancel" msgid="1018267193425558088">"Откажи"</string>
<string name="installing" msgid="4921993079741206516">"Инсталира се..."</string>
<string name="installing_app" msgid="1165095864863849422">"Инсталира се <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Апликација је инсталирана."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Желите ли да инсталирате ову апликацију?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Желите ли да инсталирате ажурирање за ову постојећу апликацију? Постојећи подаци се неће изгубити."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Желите ли да инсталирате ажурирање за ову уграђену апликацију? Постојећи подаци се неће изгубити."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Апликација није инсталирана."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Инсталирање пакета је блокирано."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Апликација није инсталирана јер је пакет неусаглашен са постојећим пакетом."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Радње Инсталирај/Деинсталирај нису подржане у Wear-у."</string>
<string name="message_staging" msgid="8032722385658438567">"Апликација се припрема…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Непознато"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Таблету из безбедносних разлога није дозвољено да инсталира непознате апликације из овог извора."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Телевизору из безбедносних разлога није дозвољено да инсталира непознате апликације из овог извора."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Телефону из безбедносних разлога није дозвољено да инсталира непознате апликације из овог извора."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Телефон и лични подаци су подложнији нападу непознатих апликација. Ако инсталирате ову апликацију, прихватате да сте одговорни за евентуална оштећења телефона или губитак података до којих може да дође због њеног коришћења."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Таблет и лични подаци су подложнији нападу непознатих апликација. Ако инсталирате ову апликацију, прихватате да сте одговорни за евентуална оштећења таблета или губитак података до којих може да дође због њеног коришћења."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"ТВ и лични подаци су подложнији нападу непознатих апликација. Ако инсталирате ову апликацију, прихватате да сте одговорни за евентуална оштећења ТВ-а или губитак података до којих може да дође због њеног коришћења."</string>
diff --git a/packages/PackageInstaller/res/values-sv/strings.xml b/packages/PackageInstaller/res/values-sv/strings.xml
index 28ad6aafd77d..7252651a3b40 100644
--- a/packages/PackageInstaller/res/values-sv/strings.xml
+++ b/packages/PackageInstaller/res/values-sv/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Paketinstallationsprogram"</string>
<string name="install" msgid="711829760615509273">"Installera"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Klar"</string>
<string name="cancel" msgid="1018267193425558088">"Avbryt"</string>
<string name="installing" msgid="4921993079741206516">"Installerar …"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> installeras …"</string>
<string name="install_done" msgid="5987363587661783896">"Appen har installerats."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Vill du installera det här programmet?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Vill du installera en uppdatering till den här befintliga appen? Din befintliga data försvinner inte."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Vill du installera en uppdatering av den inbyggda appen? Din befintliga data försvinner inte."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Appen har inte installerats."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Paketet har blockerats för installation."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Appen har inte installerats på grund av en konflikt mellan detta paket och ett befintligt paket."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Åtgärder för att installera/avinstallera stöds inte på Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Provkör appen …"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Okänd"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Av säkerhetsskäl får okända appar från den här källan inte installeras av surfplattan."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Av säkerhetsskäl får okända appar från den här källan inte installeras av TV:n."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Av säkerhetsskäl får okända appar från den här källan inte installeras av mobilen."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Din mobil och personliga data är mer sårbara för attacker från okända appar. Genom att installera denna app bekräftar du att du är ansvarig för eventuella skador på mobilen och för dataförlust som kan uppstå vid användning av denna app."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Din surfplatta och personliga data är mer sårbara för attacker från okända appar. Genom att installera denna app bekräftar du att du är ansvarig för eventuella skador på surfplattan och för dataförlust som kan uppstå vid användning av denna app."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Din tv och personliga data är mer sårbar för attacker från okända appar. Genom att installera denna app bekräftar du att du är ansvarig för eventuella skador på tv:n och för dataförlust som kan uppstå vid användning av denna app."</string>
diff --git a/packages/PackageInstaller/res/values-sw/strings.xml b/packages/PackageInstaller/res/values-sw/strings.xml
index 7c1472b54ec8..dd301b02ea60 100644
--- a/packages/PackageInstaller/res/values-sw/strings.xml
+++ b/packages/PackageInstaller/res/values-sw/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Kisakinishaji cha kifurushi"</string>
<string name="install" msgid="711829760615509273">"Sakinisha"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Nimemaliza"</string>
<string name="cancel" msgid="1018267193425558088">"Ghairi"</string>
<string name="installing" msgid="4921993079741206516">"Inasakinisha…"</string>
<string name="installing_app" msgid="1165095864863849422">"Inasakinisha <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Imesakinisha programu."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Je, ungependa kusakinisha programu hii?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Je, ungependa kusakinisha sasisho la programu iliyopo? Data yako iliyopo haitapotea."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Je, ungependa kusakinisha sasisho la programu hii iliyopakiwa ndani? Data yako iliyopo haitapotea."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Imeshindwa kusakinisha programu."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Kifurushi kimezuiwa kisisakinishwe."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Programu haikusakinishwa kwa sababu kifurushi kinakinzana na kifurushi kingine kilichopo."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Huduma ya Android Wear haiwezi kutekeleza vitendo vya Kusakinisha au Kuondoa vipengee."</string>
<string name="message_staging" msgid="8032722385658438567">"Inatayarisha programu…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Haijulikani"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Kwa sababu ya usalama wako, kompyuta yako kibao haina ruhusa ya kusakinisha programu ambazo hazijulikani, kutoka kwenye chanzo hiki."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Kwa sababu ya usalama wako, TV yako haina ruhusa ya kusakinisha programu ambazo hazijulikani, kutoka kwenye chanzo hiki."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Kwa sababu ya usalama wako, simu yako haina ruhusa ya kusakinisha programu ambazo hazijulikani, kutoka kwenye chanzo hiki."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Data yako ya binafsi na ya simu yako inaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu hii, unakubali kuwajibikia uharibifu wowote kwenye simu yako au kupotea kwa data kutokana na matumizi yake."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Data yako ya binafsi na ya kompyuta yako kibao inaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu hii, unakubali kuwajibikia uharibifu wowote kwenye kompyuta yako kibao au kupotea kwa data kutokana na matumizi yake."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Data yako ya binafsi na ya televisheni yako inaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu hii, unakubali kuwajibikia uharibifu wowote kwenye televisheni yako au kupotea kwa data kutokana na matumizi yake."</string>
diff --git a/packages/PackageInstaller/res/values-ta/strings.xml b/packages/PackageInstaller/res/values-ta/strings.xml
index a1307128b472..f070b45f5190 100644
--- a/packages/PackageInstaller/res/values-ta/strings.xml
+++ b/packages/PackageInstaller/res/values-ta/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"தொகுப்பு நிறுவி"</string>
<string name="install" msgid="711829760615509273">"நிறுவு"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"முடிந்தது"</string>
<string name="cancel" msgid="1018267193425558088">"ரத்துசெய்"</string>
<string name="installing" msgid="4921993079741206516">"நிறுவுகிறது…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ஐ நிறுவுகிறது…"</string>
<string name="install_done" msgid="5987363587661783896">"ஆப்ஸ் நிறுவப்பட்டது."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"இந்த ஆப்ஸை நிறுவ விரும்புகிறீர்களா?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"ஏற்கனவே உள்ள ஆப்ஸில் புதுப்பிப்பை நிறுவ விரும்புகிறீர்களா? ஏற்கனவே உள்ள உங்கள் தரவை இழக்கமாட்டீர்கள்."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"உள்ளமைக்கப்பட்ட ஆப்ஸில் புதுப்பிப்பை நிறுவ விரும்புகிறீர்களா? ஏற்கனவே உள்ள உங்கள் தரவை இழக்கமாட்டீர்கள்."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ஆப்ஸ் நிறுவப்படவில்லை."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"இந்தத் தொகுப்பு நிறுவப்படுவதிலிருந்து தடுக்கப்பட்டது."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"இந்தத் தொகுப்பு ஏற்கனவே உள்ள தொகுப்புடன் முரண்படுவதால் ஆப்ஸ் நிறுவப்படவில்லை."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wearரில் நிறுவல்கள்/நிறுவல் நீக்கங்கள் செய்ய இயலாது"</string>
<string name="message_staging" msgid="8032722385658438567">"ஆப்ஸ் தயாராகிறது…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"அறியப்படாதது"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"உங்கள் பாதுகாப்பிற்காக, இந்த மூலத்திலிருந்து பெற்ற அறியப்படாத ஆப்ஸை டேப்லெட்டில் நிறுவ அனுமதியில்லை."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"உங்கள் பாதுகாப்பிற்காக, இந்த மூலத்திலிருந்து பெற்ற அறியப்படாத ஆப்ஸை டிவியில் நிறுவ அனுமதியில்லை."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"உங்கள் பாதுகாப்பிற்காக, இந்த மூலத்திலிருந்து பெற்ற அறியப்படாத ஆப்ஸை மொபைலில் நிறுவ அனுமதியில்லை."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"அறியப்படாத ஆப்ஸால் உங்கள் மொபைலும் தனிப்பட்ட தரவும் மிக எளிதாகப் பாதிப்புக்குள்ளாகலாம். இந்த ஆப்ஸை நிறுவுவதன் மூலம், இதைப் பயன்படுத்தும்போது மொபைலில் ஏதேனும் சிக்கல் ஏற்பட்டாலோ உங்களது தரவை இழந்தாலோ அதற்கு நீங்களே பொறுப்பாவீர்கள் என்பதை ஏற்கிறீர்கள்."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"அறியப்படாத ஆப்ஸால் உங்கள் டேப்லெட்டும் தனிப்பட்ட தரவும் மிக எளிதாகப் பாதிப்புக்குள்ளாகலாம். இந்த ஆப்ஸை நிறுவுவதன் மூலம், இதைப் பயன்படுத்தும்போது டேப்லெட்டில் ஏதேனும் சிக்கல் ஏற்பட்டாலோ உங்களது தரவை இழந்தாலோ அதற்கு நீங்களே பொறுப்பாவீர்கள் என்பதை ஏற்கிறீர்கள்."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"அறியப்படாத ஆப்ஸால் உங்கள் டிவியும் தனிப்பட்ட தரவும் மிக எளிதாகப் பாதிப்புக்குள்ளாகலாம். இந்த ஆப்ஸை நிறுவுவதன் மூலம், இதைப் பயன்படுத்தும்போது டிவியில் ஏதேனும் சிக்கல் ஏற்பட்டாலோ உங்களது தரவை இழந்தாலோ அதற்கு நீங்களே பொறுப்பாவீர்கள் என்பதை ஏற்கிறீர்கள்."</string>
diff --git a/packages/PackageInstaller/res/values-te/strings.xml b/packages/PackageInstaller/res/values-te/strings.xml
index 5cbb268ad7fb..c4b0fc2ac284 100644
--- a/packages/PackageInstaller/res/values-te/strings.xml
+++ b/packages/PackageInstaller/res/values-te/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"ప్యాకేజీ ఇన్‌స్టాలర్"</string>
<string name="install" msgid="711829760615509273">"ఇన్‌స్టాల్ చేయి"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"పూర్తయింది"</string>
<string name="cancel" msgid="1018267193425558088">"రద్దు చేయి"</string>
<string name="installing" msgid="4921993079741206516">"ఇన్‌స్టాల్ చేస్తోంది…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>ని ఇన్‌స్టాల్ చేస్తోంది…"</string>
<string name="install_done" msgid="5987363587661783896">"యాప్ ఇన్‌స్టాల్ చేయబడింది."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"మీరు ఈ అప్లికేషన్‌ను ఇన్‌స్టాల్ చేయాలనుకుంటున్నారా?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"మీరు ఇప్పటికే ఉన్న ఈ అప్లికేషన్‌కు అప్‌డేట్‌ను ఇన్‌స్టాల్ చేయాలనుకుంటున్నారా? ఇప్పటికే ఉన్న మీ డేటాను కోల్పోవడం సంభవించదు."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"మీరు ఈ అంతర్నిర్మిత అప్లికేషన్‌కు అప్‌డేట్‌ను ఇన్‌స్టాల్ చేయాలనుకుంటున్నారా? ఇప్పటికే ఉన్న మీ డేటాను కోల్పోవడం సంభవించదు."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"యాప్ ఇన్‌స్టాల్ చేయబడలేదు."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"ప్యాకేజీ ఇన్‌స్టాల్ కాకుండా బ్లాక్ చేయబడింది."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"ప్యాకేజీ, అలాగే ఇప్పటికే ఉన్న ప్యాకేజీ మధ్య వైరుధ్యం ఉన్నందున యాప్ ఇన్‌స్టాల్ చేయబడలేదు."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wearలో ఇన్‌స్టాల్/అన్ఇన్‌స్టాల్ చర్యలకు మద్దతు లేదు."</string>
<string name="message_staging" msgid="8032722385658438567">"యాప్‌ను సిద్ధం చేస్తుంది…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"తెలియదు"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"మీ భద్రత దృష్ట్యా, ఈ మూలం నుండి తెలియని యాప్‌లను ఇన్‌స్టాల్ చేయడానికి మీ టాబ్లెట్ అనుమతించబడదు."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"మీ భద్రత దృష్ట్యా, ఈ మూలం నుండి తెలియని యాప్‌లను ఇన్‌స్టాల్ చేయడానికి మీ టీవీ అనుమతించబడదు."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"మీ భద్రత దృష్ట్యా, ఈ మూలం నుండి తెలియని యాప్‌లను ఇన్‌స్టాల్ చేయడానికి మీ ఫోన్ అనుమతించబడదు."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"మీ ఫోన్ మరియు వ్యక్తిగత డేటాపై తెలియని యాప్‌లు దాడి చేయడానికి ఎక్కువ అవకాశం ఉంది. మీరు ఈ యాప్‌ను ఇన్‌స్టాల్ చేయడం ద్వారా, దీనిని ఉపయోగించడం వలన మీ ఫోన్‌కు ఏదైనా హాని జరిగినా లేదా డేటా కోల్పోయినా బాధ్యత మీదేనని అంగీకరిస్తున్నారు."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"మీ టాబ్లెట్ మరియు వ్యక్తిగత డేటాపై తెలియని యాప్‌లు దాడి చేయడానికి ఎక్కువ అవకాశం ఉంది. మీరు ఈ యాప్‌ను ఇన్‌స్టాల్ చేయడం ద్వారా, దీనిని ఉపయోగించడం వలన మీ టాబ్లెట్‌కు ఏదైనా హాని జరిగినా లేదా డేటా కోల్పోయినా బాధ్యత మీదేనని అంగీకరిస్తున్నారు."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"మీ టీవీ మరియు వ్యక్తిగత డేటాపై తెలియని యాప్‌లు దాడి చేయడానికి ఎక్కువ అవకాశం ఉంది. మీరు ఈ యాప్‌ను ఇన్‌స్టాల్ చేయడం ద్వారా, దీనిని ఉపయోగించడం వలన మీ టీవీకి ఏదైనా హాని జరిగినా లేదా డేటా కోల్పోయినా బాధ్యత మీదేనని అంగీకరిస్తున్నారు."</string>
diff --git a/packages/PackageInstaller/res/values-th/strings.xml b/packages/PackageInstaller/res/values-th/strings.xml
index 9c1f02816a25..1a8e3a90dbdf 100644
--- a/packages/PackageInstaller/res/values-th/strings.xml
+++ b/packages/PackageInstaller/res/values-th/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"โปรแกรมติดตั้งแพ็กเกจ"</string>
<string name="install" msgid="711829760615509273">"ติดตั้ง"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"เสร็จ"</string>
<string name="cancel" msgid="1018267193425558088">"ยกเลิก"</string>
<string name="installing" msgid="4921993079741206516">"กำลังติดตั้ง…"</string>
<string name="installing_app" msgid="1165095864863849422">"กำลังติดตั้ง <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"ติดตั้งแอปแล้ว"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"ต้องการติดตั้งแอปพลิเคชันนี้ไหม"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"ต้องการติดตั้งการอัปเดตของแอปพลิเคชันที่มีอยู่นี้ไหม ข้อมูลของคุณที่มีอยู่จะไม่สูญหาย"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"ต้องการติดตั้งการอัปเดตของแอปพลิเคชันที่มีอยู่ในตัวนี้ไหม ข้อมูลของคุณที่มีอยู่จะไม่สูญหาย"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ไม่ได้ติดตั้งแอป"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"มีการบล็อกแพ็กเกจไม่ให้ติดตั้ง"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"ไม่ได้ติดตั้งแอปเพราะแพ็กเกจขัดแย้งกับแพ็กเกจที่มีอยู่"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"ติดตั้ง/ถอนการติดตั้งใน Wear ไม่ได้"</string>
<string name="message_staging" msgid="8032722385658438567">"กำลังปรับสภาพแวดล้อมของแอป…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"ไม่ทราบ"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"เพื่อความปลอดภัย ไม่อนุญาตให้ติดตั้งแอปที่ไม่รู้จักจากแหล่งที่มานี้ในแท็บเล็ต"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"เพื่อความปลอดภัย ไม่อนุญาตให้ติดตั้งแอปที่ไม่รู้จักจากแหล่งที่มานี้ในทีวี"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"เพื่อความปลอดภัย ไม่อนุญาตให้ติดตั้งแอปที่ไม่รู้จักจากแหล่งที่มานี้ในโทรศัพท์"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"โทรศัพท์และข้อมูลส่วนตัวของคุณมีความเสี่ยงมากขึ้นที่จะถูกโจมตีจากแอปที่ไม่รู้จัก การติดตั้งแอปนี้แสดงว่าคุณยอมรับว่าจะรับผิดชอบต่อความเสียหายใดๆ ที่จะเกิดขึ้นกับโทรศัพท์หรือการสูญเสียข้อมูลที่อาจเกิดจากการใช้งานแอปดังกล่าว"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"แท็บเล็ตและข้อมูลส่วนตัวของคุณมีความเสี่ยงมากขึ้นที่จะถูกโจมตีจากแอปที่ไม่รู้จัก การติดตั้งแอปนี้แสดงว่าคุณยอมรับว่าจะรับผิดชอบต่อความเสียหายใดๆ ที่จะเกิดขึ้นกับแท็บเล็ตหรือการสูญเสียข้อมูลที่อาจเกิดจากการใช้งานแอปดังกล่าว"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"ทีวีและข้อมูลส่วนตัวของคุณมีความเสี่ยงมากขึ้นที่จะถูกโจมตีจากแอปที่ไม่รู้จัก การติดตั้งแอปนี้แสดงว่าคุณยอมรับว่าจะรับผิดชอบต่อความเสียหายใดๆ ที่จะเกิดขึ้นกับทีวีหรือการสูญเสียข้อมูลที่อาจเกิดจากการใช้งานแอปดังกล่าว"</string>
diff --git a/packages/PackageInstaller/res/values-tl/strings.xml b/packages/PackageInstaller/res/values-tl/strings.xml
index 9fcc064ddacc..22a565efdc68 100644
--- a/packages/PackageInstaller/res/values-tl/strings.xml
+++ b/packages/PackageInstaller/res/values-tl/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Installer ng package"</string>
<string name="install" msgid="711829760615509273">"I-install"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Tapos na"</string>
<string name="cancel" msgid="1018267193425558088">"Kanselahin"</string>
<string name="installing" msgid="4921993079741206516">"Nag-i-install…"</string>
<string name="installing_app" msgid="1165095864863849422">"Ini-install ang <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Na-install na ang app."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Gusto mo bang i-install ang application na ito?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Gusto mo bang mag-install ng update sa dati nang application na ito? Hindi mawawala ang iyong dati nang data."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Gusto mo bang mag-install ng update sa built-in na application na ito? Hindi mawawala ang iyong dati nang data."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Hindi na-install ang app."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Na-block ang pag-install sa package."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Hindi na-install ang app dahil nagkakaproblema ang package sa isang dati nang package."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Ang mga pagkilos na I-install/I-uninstall ay hindi sinusuportahan sa Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Inihahanda ang app…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Hindi Kilala"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Para sa iyong seguridad, hindi pinapayagan ang iyong tablet na mag-install ng mga hindi kilalang app mula sa source na ito."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Para sa iyong seguridad, hindi pinapayagan ang iyong TV na mag-install ng mga hindi kilalang app mula sa source na ito."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Para sa iyong seguridad, hindi pinapayagan ang iyong telepono na mag-install ng mga hindi kilalang app mula sa source na ito."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Mas nanganganib ang iyong telepono at personal na data sa mga pag-atake mula sa mga hindi kilalang app. Sa pamamagitan ng pag-install ng app na ito, sumasang-ayon kang ikaw ang responsable sa anumang pinsala sa iyong telepono o pagkawala ng data na maaaring magresulta mula sa paggamit nito."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Mas nanganganib ang iyong tablet at personal na data sa mga pag-atake mula sa mga hindi kilalang app. Sa pamamagitan ng pag-install ng app na ito, sumasang-ayon kang ikaw ang responsable sa anumang pinsala sa iyong tablet o pagkawala ng data na maaaring magresulta mula sa paggamit nito."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Mas nanganganib ang iyong TV at personal na data sa mga pag-atake mula sa mga hindi kilalang app. Sa pamamagitan ng pag-install ng app na ito, sumasang-ayon kang ikaw ang responsable sa anumang pinsala sa iyong TV o pagkawala ng data na maaaring magresulta mula sa paggamit nito."</string>
diff --git a/packages/PackageInstaller/res/values-tr/strings.xml b/packages/PackageInstaller/res/values-tr/strings.xml
index c6e2d441e7ca..2bda646a00cc 100644
--- a/packages/PackageInstaller/res/values-tr/strings.xml
+++ b/packages/PackageInstaller/res/values-tr/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Paket yükleyici"</string>
<string name="install" msgid="711829760615509273">"Yükle"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Bitti"</string>
<string name="cancel" msgid="1018267193425558088">"İptal"</string>
<string name="installing" msgid="4921993079741206516">"Yükleniyor…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> yükleniyor…"</string>
<string name="install_done" msgid="5987363587661783896">"Uygulama yüklendi."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Bu uygulamayı yüklemek istiyor musunuz?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Bu mevcut uygulamaya ait güncellemeyi yüklemek istiyor musunuz? Mevcut verileriniz silinmez."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Bu yerleşik uygulamaya ait güncellemeyi yüklemek istiyor musunuz? Mevcut verileriniz silinmez."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Uygulama yüklenmedi."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Paketin yüklemesi engellendi."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Paket, mevcut bir paketle çakıştığından uygulama yüklenemedi."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Yükleme/Yüklemeyi kaldırma işlemleri Wear\'da desteklenmiyor."</string>
<string name="message_staging" msgid="8032722385658438567">"Uygulama hazırlanıyor…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Bilinmiyor"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Güvenlik nedeniyle tabletinizin bu kaynaktan bilinmeyen uygulamalar yüklemesine izin verilmez."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Güvenlik nedeniyle TV\'nizin bu kaynaktan bilinmeyen uygulamalar yüklemesine izin verilmez."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Güvenlik nedeniyle telefonunuzun bu kaynaktan bilinmeyen uygulamalar yüklemesine izin verilmez."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefonunuz ve kişisel verileriniz, bilinmeyen uygulamaların saldırılarına karşı daha savunmasızdır. Bu uygulamayı yükleyerek, uygulama kullanımından dolayı telefonunuzda oluşabilecek hasarın veya uğrayabileceğiniz veri kaybının sorumluluğunu kabul etmiş olursunuz."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Tabletiniz ve kişisel verileriniz, bilinmeyen uygulamaların saldırılarına karşı daha savunmasızdır. Bu uygulamayı yükleyerek, uygulama kullanımından dolayı tabletinizde oluşabilecek hasarın veya uğrayabileceğiniz veri kaybının sorumluluğunu kabul etmiş olursunuz."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV\'niz ve kişisel verileriniz, bilinmeyen uygulamaların saldırılarına karşı daha savunmasızdır. Bu uygulamayı yükleyerek, uygulama kullanımından dolayı TV\'nizde oluşabilecek hasarın veya uğrayabileceğiniz veri kaybının sorumluluğunu kabul etmiş olursunuz."</string>
diff --git a/packages/PackageInstaller/res/values-uk/strings.xml b/packages/PackageInstaller/res/values-uk/strings.xml
index 4c49bf4c1433..13fbf0ff1402 100644
--- a/packages/PackageInstaller/res/values-uk/strings.xml
+++ b/packages/PackageInstaller/res/values-uk/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Програма встановлення пакета"</string>
<string name="install" msgid="711829760615509273">"Установити"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Готово"</string>
<string name="cancel" msgid="1018267193425558088">"Скасув."</string>
<string name="installing" msgid="4921993079741206516">"Встановлення…"</string>
<string name="installing_app" msgid="1165095864863849422">"Установлюється <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Програму встановлено."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Установити цю програму?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Установити оновлення для цього додатка? Наявні дані не буде втрачено."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Установити оновлення для цього вбудованого додатка? Наявні дані не буде втрачено."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Програму не встановлено."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Встановлення пакета заблоковано."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Додаток не встановлено, оскільки пакет конфліктує з наявним пакетом."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Встановлення й видалення не підтримуються на пристроях Android Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Підготовка додатка…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Невідомо"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"З міркувань безпеки на вашому планшеті заборонено встановлювати невідомі додатки з цього джерела."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"З міркувань безпеки на вашому телевізорі заборонено встановлювати невідомі додатки з цього джерела."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"З міркувань безпеки на вашому телефоні заборонено встановлювати невідомі додатки з цього джерела."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Ваш телефон і особисті дані більш уразливі до атак невідомих додатків. Установлюючи цей додаток, ви берете на себе відповідальність за пошкодження телефона чи втрату даних унаслідок використання додатка."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Ваш планшет і особисті дані більш уразливі до атак невідомих додатків. Установлюючи цей додаток, ви берете на себе відповідальність за пошкодження планшета чи втрату даних унаслідок використання додатка."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Ваш телевізор і особисті дані більш уразливі до атак невідомих додатків. Установлюючи цей додаток, ви берете на себе відповідальність за пошкодження телевізора чи втрату даних унаслідок використання додатка."</string>
diff --git a/packages/PackageInstaller/res/values-ur/strings.xml b/packages/PackageInstaller/res/values-ur/strings.xml
index d8f2c5086bb8..e122f3e29647 100644
--- a/packages/PackageInstaller/res/values-ur/strings.xml
+++ b/packages/PackageInstaller/res/values-ur/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"پیکیج انسٹالر"</string>
<string name="install" msgid="711829760615509273">"انسٹال کریں"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"ہو گیا"</string>
<string name="cancel" msgid="1018267193425558088">"منسوخ کریں"</string>
<string name="installing" msgid="4921993079741206516">"انسٹال ہو رہی ہے…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> کو انسٹال کیا جا رہا ہے…"</string>
<string name="install_done" msgid="5987363587661783896">"ایپ انسٹال ہو گئی۔"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"کیا آپ یہ ایپلیکیشن انسٹال کرنا چاہتے ہیں؟"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"کیا آپ اس موجودہ ایپلیکیشن میں ایک اپ ڈیٹ انسٹال کرنا چاہتے ہیں؟ آپ کا موجودہ ڈیٹا ضائع نہیں ہوگا۔"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"کیا آپ پہلے سے شامل اس ایپلیکیشن میں ایک اپ ڈیٹ انسٹال کرنا چاہتے ہیں؟ آپ کا موجودہ ڈیٹا ضائع نہیں ہوگا۔"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"ایپ انسٹال نہیں ہوئی۔"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"پیکج کو انسٹال ہونے سے مسدود کر دیا گیا تھا۔"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"ایپ انسٹال نہیں ہوئی کیونکہ پیکج ایک موجودہ پیکیج سے متصادم ہے۔"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"‏\'انسٹال/اَن انسٹال کی کارروائیاں\' Wear پر تعاون یافتہ نہیں ہیں۔"</string>
<string name="message_staging" msgid="8032722385658438567">"ایپ کی ٹیسٹنگ ہو رہی ہے…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"نامعلوم"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"آپ کی سیکیورٹی کے مدنظر، آپ کے ٹیبلیٹ کو اس ذریعے سے نامعلوم ایپس انسٹال کرنے کی اجازت نہیں ہے۔"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"‏آپ کی سیکیورٹی کے مدنظر، آپ کے TV کو اس ذریعے سے نامعلوم ایپس انسٹال کرنے کی اجازت نہیں ہے۔"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"آپ کی سیکیورٹی کے مدنظر، آپ کے فون کو اس ذریعے سے نامعلوم ایپس انسٹال کرنے کی اجازت نہیں ہے۔"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"آپ کے فون اور ذاتی ڈیٹا کو نامعلوم ایپس کی جانب سے حملے کا زیادہ خطرہ ہے۔ اس ایپ کو انسٹال کر کے، آپ اس بات سے اتفاق کرتے ہیں کہ آپ اس سے اپنے فون کو ہونے والے کسی بھی نقصان یا ڈیٹا کے نقصان کے لئے خود ذمہ دار ہیں۔"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"آپ کے ٹیبلیٹ اور ذاتی ڈیٹا کو نامعلوم ایپس کی جانب سے حملے کا زیادہ خطرہ ہے۔ اس ایپ کو انسٹال کر کے، آپ اس بات سے اتفاق کرتے ہیں کہ آپ اس سے اپنے ٹیبلیٹ کو ہونے والے کسی بھی نقصان یا ڈیٹا کے نقصان کے لئے خود ذمہ دار ہیں۔"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"‏آپ کے TV اور ذاتی ڈیٹا کو نامعلوم ایپس کی جانب سے حملے کا زیادہ خطرہ ہے۔ اس ایپ کو انسٹال کر کے، آپ اس بات سے اتفاق کرتے ہیں کہ آپ اس سے اپنے TV کو ہونے والے کسی بھی نقصان یا ڈیٹا کے نقصان کے لئے خود ذمہ دار ہیں۔"</string>
diff --git a/packages/PackageInstaller/res/values-uz/strings.xml b/packages/PackageInstaller/res/values-uz/strings.xml
index 0c1871fae9d9..e862e7d6e7b2 100644
--- a/packages/PackageInstaller/res/values-uz/strings.xml
+++ b/packages/PackageInstaller/res/values-uz/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Paket o‘rnatish vositasi"</string>
<string name="install" msgid="711829760615509273">"O‘rnatish"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"OK"</string>
<string name="cancel" msgid="1018267193425558088">"Bekor qilish"</string>
<string name="installing" msgid="4921993079741206516">"O‘rnatilmoqda…"</string>
<string name="installing_app" msgid="1165095864863849422">"<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g> o‘rnatilmoqda…"</string>
<string name="install_done" msgid="5987363587661783896">"Ilova o‘rnatildi."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Bu ilovani o‘rnatmoqchimisiz?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Bu ilova uchun yangilanish o‘rnatilsinmi? Mavjud axborotlaringiz o‘chib ketmaydi."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Bu ichki ilova uchun yangilanish o‘rnatilsinmi? Mavjud axborotlaringiz o‘chib ketmaydi."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Ilova o‘rnatilmadi."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Paket o‘rnatilishga qarshi bloklangan."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Paket mavjud paket bilan zid kelganligi uchun ilovani o‘rnatib bo‘lmadi."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear qurilmasi o‘rnatish/o‘chirish amallarini qo‘llab-quvvatlamaydi."</string>
<string name="message_staging" msgid="8032722385658438567">"Kutib turing…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Noaniq"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Xavfsizlik yuzasidan, planshetingizga bu manbadan notanish ilovalarni o‘rnatishga ruxsat berilmagan."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Xavfsizlik yuzasidan, televizoringizga bu manbadan notanish ilovalarni o‘rnatishga ruxsat berilmagan."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Xavfsizlik yuzasidan, telefoningizga bu manbadan notanish ilovalarni o‘rnatishga ruxsat berilmagan."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Telefoningiz va shaxsiy axborotlaringiz notanish ilovalar hujumiga zaif bo‘ladi. Bu ilovani o‘rnatish bilan telefoningizga yetkaziladigan shikast va axborotlaringizni o‘chirib yuborilishiga javobgarlikni o‘z zimmangizga olasiz."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Planshetingiz va shaxsiy axborotlaringiz notanish ilovalar hujumiga zaif bo‘ladi. Bu ilovani o‘rnatish bilan planshetingizga yetkaziladigan shikast va axborotlaringizni o‘chirib yuborilishiga javobgarlikni o‘z zimmangizga olasiz."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV va shaxsiy axborotlaringiz notanish ilovalar hujumiga zaif bo‘ladi. Bu ilovani o‘rnatish bilan televizoringizga yetkaziladigan shikast va axborotlaringizni o‘chirib yuborilishiga javobgarlikni o‘z zimmangizga olasiz."</string>
diff --git a/packages/PackageInstaller/res/values-vi/strings.xml b/packages/PackageInstaller/res/values-vi/strings.xml
index a1d6f8923038..13ddac5144c7 100644
--- a/packages/PackageInstaller/res/values-vi/strings.xml
+++ b/packages/PackageInstaller/res/values-vi/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Trình cài đặt gói"</string>
<string name="install" msgid="711829760615509273">"Cài đặt"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Xong"</string>
<string name="cancel" msgid="1018267193425558088">"Hủy"</string>
<string name="installing" msgid="4921993079741206516">"Đang cài đặt…"</string>
<string name="installing_app" msgid="1165095864863849422">"Đang cài đặt <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Ứng dụng đã được cài đặt."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Bạn có muốn cài đặt ứng dụng này không?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Bạn có muốn cài đặt bản cập nhật cho ứng dụng hiện có này không? Dữ liệu hiện có của bạn sẽ không bị mất."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Bạn có muốn cài đặt bản cập nhật cho ứng dụng cài sẵn này không? Dữ liệu hiện có của bạn sẽ không bị mất."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Ứng dụng chưa được cài đặt."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Đã chặn cài đặt gói."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Chưa cài đặt được ứng dụng do gói xung đột với một gói hiện có."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Không hỗ trợ thao tác Cài đặt/Gỡ cài đặt trên ứng dụng Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Đang thử nghiệm ứng dụng…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Không xác định"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Để bảo mật, máy tính bảng của bạn không được phép cài đặt các ứng dụng không xác định từ nguồn này."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Để bảo mật, TV của bạn không được phép cài đặt các ứng dụng không xác định từ nguồn này."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Để bảo mật, điện thoại của bạn không được phép cài đặt các ứng dụng không xác định từ nguồn này."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Điện thoại và dữ liệu cá nhân của bạn dễ bị các ứng dụng không xác định tấn công hơn. Bằng cách cài đặt ứng dụng này, bạn đồng ý tự chịu trách nhiệm cho mọi hỏng hóc đối với điện thoại của mình hoặc mất mát dữ liệu có thể phát sinh do sử dụng ứng dụng này."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Máy tính bảng và dữ liệu cá nhân của bạn dễ bị các ứng dụng không xác định tấn công hơn. Bằng cách cài đặt ứng dụng này, bạn đồng ý tự chịu trách nhiệm cho mọi hỏng hóc đối với máy tính bảng của mình hoặc mất mát dữ liệu có thể phát sinh do sử dụng ứng dụng này."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"TV và dữ liệu cá nhân của bạn dễ bị các ứng dụng không xác định tấn công hơn. Bằng cách cài đặt ứng dụng này, bạn đồng ý tự chịu trách nhiệm cho mọi hỏng hóc đối với TV của mình hoặc mất mát dữ liệu có thể phát sinh do sử dụng ứng dụng này."</string>
diff --git a/packages/PackageInstaller/res/values-zh-rCN/strings.xml b/packages/PackageInstaller/res/values-zh-rCN/strings.xml
index 6110938fb600..49e0b863f678 100644
--- a/packages/PackageInstaller/res/values-zh-rCN/strings.xml
+++ b/packages/PackageInstaller/res/values-zh-rCN/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"软件包安装程序"</string>
<string name="install" msgid="711829760615509273">"安装"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"完成"</string>
<string name="cancel" msgid="1018267193425558088">"取消"</string>
<string name="installing" msgid="4921993079741206516">"正在安装…"</string>
<string name="installing_app" msgid="1165095864863849422">"正在安装<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"已安装应用。"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"要安装此应用吗?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"要为此应用安装更新吗?您现有的数据将不会丢失。"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"要为此内置应用安装更新吗?您现有的数据将不会丢失。"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"未安装应用。"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"系统已禁止安装该软件包。"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"应用未安装:软件包与现有软件包存在冲突。"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear 不支持安装/卸载操作。"</string>
<string name="message_staging" msgid="8032722385658438567">"正在准备安装应用…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"未知"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"出于安全考虑,已禁止您的平板电脑安装来自此来源的未知应用。"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"出于安全考虑,已禁止您的电视安装来自此来源的未知应用。"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"出于安全考虑,已禁止您的手机安装来自此来源的未知应用。"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"来历不明的应用很可能会损害您的手机和个人数据。安装该应用即表示,您同意对于因使用该应用可能导致的任何手机损坏或数据丢失情况,您负有全部责任。"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"来历不明的应用很可能会损害您的平板电脑和个人数据。安装该应用即表示,您同意对于因使用该应用可能导致的任何平板电脑损坏或数据丢失情况,您负有全部责任。"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"来历不明的应用很可能会损害您的电视和个人数据。安装该应用即表示,您同意对于因使用该应用可能导致的任何电视损坏或数据丢失情况,您负有全部责任。"</string>
diff --git a/packages/PackageInstaller/res/values-zh-rHK/strings.xml b/packages/PackageInstaller/res/values-zh-rHK/strings.xml
index 128f3714c1e4..7c1cc52fa95a 100644
--- a/packages/PackageInstaller/res/values-zh-rHK/strings.xml
+++ b/packages/PackageInstaller/res/values-zh-rHK/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"套件安裝程式"</string>
<string name="install" msgid="711829760615509273">"安裝"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"完成"</string>
<string name="cancel" msgid="1018267193425558088">"取消"</string>
<string name="installing" msgid="4921993079741206516">"正在安裝…"</string>
<string name="installing_app" msgid="1165095864863849422">"正在安裝「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」…"</string>
<string name="install_done" msgid="5987363587661783896">"已安裝應用程式。"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"要安裝此應用程式嗎?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"您要為這個現有的應用程式安裝更新嗎?您不會遺失現有的資料。"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"您要為這個內置的應用程式安裝更新嗎?您不會遺失現有的資料。"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"未安裝應用程式。"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"套件已遭封鎖,無法安裝。"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"套件與現有的套件發生衝突,無法安裝應用程式。"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear 不支援安裝/解除安裝操作。"</string>
<string name="message_staging" msgid="8032722385658438567">"正在準備安裝應用程式…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"不明"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"為安全起見,您的平板電腦不得安裝此來源的不明應用程式。"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"為安全起見,您的電視不得安裝此來源的不明應用程式。"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"為安全起見,您的手機不得安裝此來源的不明應用程式。"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"來源不明的應用程式可能會侵害您的手機和個人資料。安裝此應用程式,即表示您同意承擔因使用這個應用程式而導致手機損壞或資料遺失的責任。"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"來源不明的應用程式可能會侵害您的平板電腦和個人資料。安裝此應用程式,即表示您同意承擔因使用這個應用程式而導致平板電腦損壞或資料遺失的責任。"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"來源不明的應用程式可能會侵害您的電視和個人資料。安裝此應用程式,即表示您同意承擔因使用這個應用程式而導致電視損壞或資料遺失的責任。"</string>
diff --git a/packages/PackageInstaller/res/values-zh-rTW/strings.xml b/packages/PackageInstaller/res/values-zh-rTW/strings.xml
index 507b5d4ad69f..9c089ddec1f8 100644
--- a/packages/PackageInstaller/res/values-zh-rTW/strings.xml
+++ b/packages/PackageInstaller/res/values-zh-rTW/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"套件安裝程式"</string>
<string name="install" msgid="711829760615509273">"安裝"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"完成"</string>
<string name="cancel" msgid="1018267193425558088">"取消"</string>
<string name="installing" msgid="4921993079741206516">"安裝中…"</string>
<string name="installing_app" msgid="1165095864863849422">"正在安裝「<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>」…"</string>
<string name="install_done" msgid="5987363587661783896">"已安裝應用程式。"</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"要安裝這個應用程式嗎?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"要為這個現有的應用程式安裝更新嗎?你不會遺失現有的資料。"</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"要為這個內建的應用程式安裝更新嗎?你不會遺失現有的資料。"</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"未安裝應用程式。"</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"系統已封鎖這個套件,因此無法安裝。"</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"應用程式套件與現有套件衝突,因此未能完成安裝。"</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Wear 不支援安裝及解除安裝操作。"</string>
<string name="message_staging" msgid="8032722385658438567">"正在準備應用程式安裝程序…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"不明"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"為了安全起見,你的平板電腦禁止安裝這個來源提供的不明應用程式。"</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"為了安全起見,你的電視禁止安裝這個來源提供的不明應用程式。"</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"為了安全起見,你的手機禁止安裝這個來源提供的不明應用程式。"</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"來歷不明的應用程式可能會損害你的手機和個人資料。如因安裝及使用這個應用程式,導致你的手機受損或資料遺失,請自行負責。"</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"來歷不明的應用程式可能會損害你的平板電腦和個人資料。如因安裝及使用這個應用程式,導致你的平板電腦受損或資料遺失,請自行負責。"</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"來歷不明的應用程式可能會損害你的電視和個人資料。如因安裝及使用這個應用程式,導致你的電視受損或資料遺失,請自行負責。"</string>
diff --git a/packages/PackageInstaller/res/values-zu/strings.xml b/packages/PackageInstaller/res/values-zu/strings.xml
index bdcb7e16765c..6f911bf49c9a 100644
--- a/packages/PackageInstaller/res/values-zu/strings.xml
+++ b/packages/PackageInstaller/res/values-zu/strings.xml
@@ -18,14 +18,17 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="7488448184431507488">"Isifaki sephakheji"</string>
<string name="install" msgid="711829760615509273">"Faka"</string>
+ <!-- no translation found for update (3932142540719227615) -->
+ <skip />
<string name="done" msgid="6632441120016885253">"Kwenziwe"</string>
<string name="cancel" msgid="1018267193425558088">"Khansela"</string>
<string name="installing" msgid="4921993079741206516">"Iyafaka..."</string>
<string name="installing_app" msgid="1165095864863849422">"Ifaka i-<xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>…"</string>
<string name="install_done" msgid="5987363587661783896">"Uhlelo lokusebenza olufakiwe."</string>
- <string name="install_confirm_question" msgid="8176284075816604590">"Ingabe ufuna ukufaka lolu hlelo lokusebenza?"</string>
- <string name="install_confirm_question_update" msgid="7942235418781274635">"Ingabe ufuna ukufaka lesi sibuyekezo kulolu hlelo lokusebenza olukhona? Idatha yakho ekhona ngeke ize ilahleke."</string>
- <string name="install_confirm_question_update_system" msgid="4713001702777910263">"Uyafuna ukufaka isibuyekezo kulolu hlelo lokusebenza olwakhelwe ngaphakathi? Idatha yakho ekhona ngeke ize ilahleke."</string>
+ <!-- no translation found for install_confirm_question (7663733664476363311) -->
+ <skip />
+ <!-- no translation found for install_confirm_question_update (3348888852318388584) -->
+ <skip />
<string name="install_failed" msgid="5777824004474125469">"Uhlelo lokusebenza alufakiwe."</string>
<string name="install_failed_blocked" msgid="8512284352994752094">"Iphakheji livinjiwe kusukela ekufakweni."</string>
<string name="install_failed_conflict" msgid="3493184212162521426">"Uhlelo lokusebenza alufakiwe njengoba ukuphakheja kushayisana nephakheji elikhona."</string>
@@ -80,9 +83,12 @@
<string name="wear_not_allowed_dlg_text" msgid="704615521550939237">"Izenzo zokufaka/ukukhipha azisekelwe ku-Wear."</string>
<string name="message_staging" msgid="8032722385658438567">"Ifaka kusiteji uhlelo lokusebenza…"</string>
<string name="app_name_unknown" msgid="6881210203354323926">"Akwaziwa"</string>
- <string name="untrusted_external_source_warning" product="tablet" msgid="6539403649459942547">"Ukuze uvikelwe, ithebulethi yakho ayivunyelwe ukuthi ifake izinhlelo zokusebenza ezingaziwa kusukela kulo mthombo."</string>
- <string name="untrusted_external_source_warning" product="tv" msgid="1206648674551321364">"Ukuze uvikelwe, i-TV yakho ayivunyelwe ukuthi ifake izinhlelo zokusebenza ezingaziwa kusukela kulo mthombo."</string>
- <string name="untrusted_external_source_warning" product="default" msgid="7279739265754475165">"Ukuze uvikelwe, ifoni yakho ayivunyelwe ukuthi ifake izinhlelo zokusebenza kusukela kulo mthombo."</string>
+ <!-- no translation found for untrusted_external_source_warning (7067510047443133095) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (7057271609532508035) -->
+ <skip />
+ <!-- no translation found for untrusted_external_source_warning (8444191224459138919) -->
+ <skip />
<string name="anonymous_source_warning" product="default" msgid="2784902545920822500">"Idatha yakho yefoni neyohlelo lwakho lokusebenza isengcupheni kakhulu ekuhlaselweni izinhlelo zokusebenza ezingaziwa. Ngokufaka lolu hlelo lokusebenza, uyavuma ukuthi unesibopho sanoma ikuphi ukonakala kufoni yakho noma ukulahlekelwa kwedatha okungabangelwa ukusetshenziswa kwayo."</string>
<string name="anonymous_source_warning" product="tablet" msgid="3939101621438855516">"Ithebulethi yakho nedatha yomuntu siqu zisengcupheni kakhulu ekuhlaselweni izinhlelo zokusebenza ezingaziwa. Ngokufaka lolu hlelo lokusebenza, uyavuma ukuthi unesibopho sanoma ikuphi ukonakala kuthebulethi yakho noma ukulahleka kwedatha okungabangelwa ukusetshenziswa kwayo."</string>
<string name="anonymous_source_warning" product="tv" msgid="5599483539528168566">"Idatha yakho ye-TV neyomuntu siqu isengcupheni kakhulu ekuhlaselweni izinhlelo zokusebenza ezingaziwa. Ngokufaka lolu hlelo lokusebenza, uyavuma ukuthi unesibopho sanoma ikuphi ukonakala ku-TV yakho noma ukulahlekelwa kwedatha okungabangelwa ukusetshenziswa kwayo."</string>
diff --git a/packages/SettingsLib/res/drawable/ic_3g_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_3g_mobiledata.xml
index 0c942bdf993c..413a3873f438 100644
--- a/packages/SettingsLib/res/drawable/ic_3g_mobiledata.xml
+++ b/packages/SettingsLib/res/drawable/ic_3g_mobiledata.xml
@@ -14,17 +14,14 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="12.35dp"
- android:height="15dp"
- android:viewportWidth="14"
- android:viewportHeight="17">
-
- <path
- android:fillColor="#FFFFFFFF"
- android:pathData="M1.9,7.88h0.77c0.5,0,0.88-0.15,1.15-0.46s0.4-0.72,0.4-1.25c0-1.17-0.45-1.75-1.35-1.75c-0.43,0-0.77,0.16-1.02,0.47 S1.49,5.62,1.49,6.13h-1.2c0-0.8,0.24-1.46,0.73-1.97s1.11-0.78,1.86-0.78c0.78,0,1.41,0.25,1.87,0.73S5.43,5.31,5.43,6.2 c0,0.46-0.12,0.89-0.36,1.29S4.52,8.18,4.14,8.37c0.94,0.35,1.41,1.12,1.41,2.33c0,0.89-0.25,1.6-0.74,2.12 c-0.49,0.53-1.14,0.79-1.94,0.79c-0.79,0-1.43-0.25-1.91-0.75c-0.49-0.5-0.73-1.17-0.73-2.01h1.21c0,0.53,0.13,0.95,0.38,1.26 c0.26,0.31,0.6,0.47,1.05,0.47c0.45,0,0.81-0.15,1.08-0.46s0.4-0.77,0.4-1.39c0-1.21-0.57-1.81-1.72-1.81H1.9V7.88z" />
+ android:width="21dp"
+ android:height="16dp"
+ android:viewportWidth="21.0"
+ android:viewportHeight="16.0">
<path
- android:fillColor="#FFFFFFFF"
- android:pathData="M13.77,12.24l-0.22,0.27c-0.63,0.73-1.55,1.1-2.76,1.1c-1.08,0-1.92-0.36-2.53-1.07c-0.61-0.71-0.93-1.72-0.94-3.02V7.56 c0-1.39,0.28-2.44,0.84-3.13s1.39-1.04,2.51-1.04c0.95,0,1.69,0.26,2.23,0.79s0.83,1.28,0.89,2.26h-1.25 C12.47,5.82,12.3,5.33,12,4.98s-0.74-0.52-1.34-0.52c-0.72,0-1.24,0.23-1.57,0.7S8.59,6.37,8.58,7.4v2.03c0,1,0.19,1.77,0.57,2.31 c0.38,0.54,0.93,0.8,1.65,0.8c0.67,0,1.19-0.16,1.54-0.49l0.18-0.17V9.59H10.7V8.52h3.07V12.24z" />
+ android:fillColor="#FF000000"
+ android:pathData="M5.29,13.22c-0.57,0 -1.09,-0.11 -1.57,-0.34c-0.47,-0.22 -0.85,-0.54 -1.16,-0.95C2.25,11.52 2.07,11.01 2,10.42l1.47,-0.34c0.07,0.51 0.27,0.92 0.59,1.23c0.32,0.31 0.73,0.46 1.23,0.46c0.52,0 0.94,-0.15 1.26,-0.46c0.33,-0.31 0.49,-0.71 0.49,-1.22c0,-0.51 -0.18,-0.92 -0.53,-1.22c-0.35,-0.31 -0.8,-0.46 -1.36,-0.46H4.37V7.06h0.73c0.47,0 0.86,-0.13 1.18,-0.38c0.32,-0.26 0.48,-0.63 0.48,-1.11c0,-0.42 -0.14,-0.77 -0.41,-1.04C6.08,4.27 5.7,4.14 5.21,4.14c-0.43,0 -0.79,0.13 -1.08,0.38C3.85,4.76 3.67,5.08 3.6,5.48L2.17,5.3C2.23,4.81 2.4,4.38 2.67,4c0.27,-0.38 0.62,-0.69 1.05,-0.91c0.44,-0.22 0.94,-0.34 1.5,-0.34c0.62,0 1.15,0.12 1.6,0.35c0.45,0.23 0.79,0.55 1.04,0.95C8.1,4.46 8.23,4.9 8.23,5.4C8.23,6 8.1,6.48 7.84,6.81C7.58,7.14 7.29,7.4 6.97,7.6v0.08c0.46,0.2 0.84,0.5 1.13,0.91c0.3,0.4 0.45,0.93 0.45,1.58c0,0.58 -0.14,1.1 -0.42,1.55c-0.27,0.46 -0.65,0.82 -1.15,1.09C6.5,13.09 5.93,13.22 5.29,13.22z"/>
<path
- android:pathData="M 0 0 H 14 V 17 H 0 V 0 Z" />
+ android:fillColor="#FF000000"
+ android:pathData="M14.44,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83c-0.38,-0.79 -0.57,-1.71 -0.57,-2.76c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11L17.3,6.01c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27s-0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6h-1.41v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C15.78,13.07 15.17,13.22 14.44,13.22z"/>
</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_4g_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_4g_mobiledata.xml
index 535f3589ea6b..1de7d78ff5f2 100644
--- a/packages/SettingsLib/res/drawable/ic_4g_mobiledata.xml
+++ b/packages/SettingsLib/res/drawable/ic_4g_mobiledata.xml
@@ -14,17 +14,14 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="12.35dp"
- android:height="15dp"
- android:viewportWidth="14"
- android:viewportHeight="17">
-
- <path
- android:fillColor="#FFFFFFFF"
- android:pathData="M5.07,10.13h1.11v1.03H5.07v2.31H3.86v-2.31H0.1v-0.75l3.7-6.9h1.27V10.13z M1.44,10.13h2.42V5.4L1.44,10.13z" />
+ android:width="22dp"
+ android:height="16dp"
+ android:viewportWidth="22.0"
+ android:viewportHeight="16.0">
<path
- android:fillColor="#FFFFFFFF"
- android:pathData="M13.9,12.24l-0.22,0.27c-0.63,0.73-1.55,1.1-2.76,1.1c-1.08,0-1.92-0.36-2.53-1.07c-0.61-0.71-0.93-1.72-0.94-3.02V7.56 c0-1.39,0.28-2.44,0.84-3.13s1.39-1.04,2.51-1.04c0.95,0,1.69,0.26,2.23,0.79s0.83,1.28,0.89,2.26h-1.25 c-0.05-0.62-0.22-1.1-0.52-1.45s-0.74-0.52-1.34-0.52c-0.72,0-1.24,0.23-1.57,0.7S8.72,6.37,8.71,7.4v2.03 c0,1,0.19,1.77,0.57,2.31c0.38,0.54,0.93,0.8,1.65,0.8c0.67,0,1.19-0.16,1.54-0.49l0.18-0.17V9.59h-1.82V8.52h3.07V12.24z" />
+ android:fillColor="#FF000000"
+ android:pathData="M2,10.98V9.81l4.28,-6.83h1.6v6.59h1.19v1.41H7.88V13H6.4v-2.02H2zM3.68,9.57H6.4V5.33H6.31L3.68,9.57z"/>
<path
- android:pathData="M 0 0 H 14 V 17 H 0 V 0 Z" />
+ android:fillColor="#FF000000"
+ android:pathData="M15,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83c-0.38,-0.79 -0.57,-1.71 -0.57,-2.76c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11l-1.47,0.39c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27c-0.28,0.56 -0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6h-1.41v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C16.34,13.07 15.73,13.22 15,13.22z"/>
</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_5g_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_5g_mobiledata.xml
index 2aa6e57f6f82..d961c6c2266f 100644
--- a/packages/SettingsLib/res/drawable/ic_5g_mobiledata.xml
+++ b/packages/SettingsLib/res/drawable/ic_5g_mobiledata.xml
@@ -14,14 +14,14 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="14dp"
- android:height="17dp"
- android:viewportWidth="14"
- android:viewportHeight="17">
- <path
- android:fillColor="#FF000000"
- android:pathData="M13.9,12.24l-0.22,0.27c-0.63,0.73 -1.55,1.1 -2.76,1.1c-1.08,0 -1.92,-0.36 -2.53,-1.07s-0.93,-1.72 -0.94,-3.02V7.56c0,-1.39 0.28,-2.44 0.84,-3.13s1.39,-1.04 2.51,-1.04c0.95,0 1.69,0.26 2.23,0.79s0.83,1.28 0.89,2.26h-1.25c-0.05,-0.62 -0.22,-1.1 -0.52,-1.45s-0.74,-0.52 -1.34,-0.52c-0.72,0 -1.24,0.23 -1.57,0.7S8.72,6.37 8.71,7.4v2.03c0,1 0.19,1.77 0.57,2.31c0.38,0.54 0.93,0.8 1.65,0.8c0.67,0 1.19,-0.16 1.54,-0.49l0.18,-0.17V9.59h-1.82V8.52h3.07V12.24z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M1.15,8.47l0.43,-4.96h4.33v1.17H2.6L2.37,7.39C2.78,7.1 3.22,6.96 3.69,6.96c0.77,0 1.38,0.3 1.83,0.9s0.66,1.41 0.66,2.43c0,1.03 -0.24,1.84 -0.72,2.43S4.32,13.6 3.48,13.6c-0.75,0 -1.36,-0.24 -1.83,-0.73s-0.74,-1.16 -0.81,-2.02h1.13c0.07,0.57 0.23,1 0.49,1.29c0.26,0.29 0.59,0.43 1.01,0.43c0.47,0 0.84,-0.2 1.1,-0.61c0.26,-0.41 0.4,-0.96 0.4,-1.65c0,-0.65 -0.14,-1.18 -0.43,-1.59S3.88,8.09 3.4,8.09c-0.4,0 -0.72,0.1 -0.96,0.31L2.11,8.73L1.15,8.47z"/>
+ android:width="21dp"
+ android:height="16dp"
+ android:viewportWidth="21.0"
+ android:viewportHeight="16.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M5.3,13.22c-0.57,0 -1.1,-0.11 -1.58,-0.34c-0.48,-0.22 -0.87,-0.55 -1.18,-0.98C2.24,11.47 2.06,10.93 2,10.3l1.48,-0.2c0.07,0.5 0.25,0.92 0.56,1.25c0.32,0.32 0.74,0.48 1.26,0.48c0.57,0 1.02,-0.18 1.34,-0.55c0.33,-0.37 0.49,-0.87 0.49,-1.48c0,-0.61 -0.16,-1.09 -0.49,-1.46C6.32,7.96 5.88,7.78 5.32,7.78C5,7.78 4.7,7.85 4.42,8C4.15,8.14 3.93,8.33 3.76,8.56L2.28,7.92l0.6,-4.94h5.26v1.36H4.1L3.72,7.02l0.08,0.03C4,6.87 4.25,6.73 4.55,6.62c0.3,-0.12 0.63,-0.18 1.01,-0.18c0.6,0 1.13,0.14 1.6,0.41C7.62,7.11 7.98,7.5 8.24,8c0.27,0.5 0.41,1.1 0.41,1.79c0,0.66 -0.14,1.26 -0.43,1.78c-0.28,0.51 -0.67,0.92 -1.18,1.22C6.55,13.08 5.97,13.22 5.3,13.22z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M14.51,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83C10.19,9.95 10,9.03 10,7.99c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11l-1.47,0.39c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27s-0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6H17.6v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C15.85,13.07 15.24,13.22 14.51,13.22z"/>
</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_5g_uc_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_5g_uc_mobiledata.xml
new file mode 100644
index 000000000000..93fcad298c3f
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/ic_5g_uc_mobiledata.xml
@@ -0,0 +1,33 @@
+<!--
+ Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="27dp"
+ android:height="16dp"
+ android:viewportWidth="27.0"
+ android:viewportHeight="16.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M5.3,13.22c-0.57,0 -1.1,-0.11 -1.58,-0.34c-0.48,-0.22 -0.87,-0.55 -1.18,-0.98C2.24,11.47 2.06,10.93 2,10.3l1.48,-0.2c0.07,0.5 0.25,0.92 0.56,1.25c0.32,0.32 0.74,0.48 1.26,0.48c0.57,0 1.02,-0.18 1.34,-0.55c0.33,-0.37 0.49,-0.87 0.49,-1.48c0,-0.61 -0.16,-1.09 -0.49,-1.46C6.32,7.96 5.88,7.78 5.32,7.78C5,7.78 4.7,7.85 4.42,8C4.15,8.14 3.93,8.33 3.76,8.56L2.28,7.92l0.6,-4.94h5.26v1.36H4.1L3.72,7.02l0.08,0.03C4,6.87 4.25,6.73 4.55,6.62c0.3,-0.12 0.63,-0.18 1.01,-0.18c0.6,0 1.13,0.14 1.6,0.41C7.62,7.11 7.98,7.5 8.24,8c0.27,0.5 0.41,1.1 0.41,1.79c0,0.66 -0.14,1.26 -0.43,1.78c-0.28,0.51 -0.67,0.92 -1.18,1.22C6.55,13.08 5.97,13.22 5.3,13.22z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M14.51,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83C10.19,9.95 10,9.03 10,7.99c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11l-1.47,0.39c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27s-0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6H17.6v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C15.85,13.07 15.24,13.22 14.51,13.22z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M23,7.39c-0.53,0 -0.94,-0.16 -1.25,-0.47C21.45,6.6 21.3,6.16 21.3,5.6V3h0.8v2.66c0,0.3 0.08,0.54 0.23,0.71C22.48,6.54 22.7,6.62 23,6.62c0.3,0 0.52,-0.08 0.67,-0.25c0.15,-0.17 0.23,-0.41 0.23,-0.71V3h0.8v2.6c0,0.36 -0.07,0.67 -0.2,0.94s-0.33,0.48 -0.58,0.62C23.65,7.32 23.35,7.39 23,7.39z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M22.99,13.1c-0.39,0 -0.73,-0.09 -1.03,-0.28c-0.3,-0.19 -0.53,-0.45 -0.7,-0.79C21.08,11.7 21,11.3 21,10.85c0,-0.46 0.08,-0.85 0.25,-1.19c0.17,-0.34 0.41,-0.6 0.71,-0.78c0.3,-0.18 0.65,-0.28 1.04,-0.28c0.31,0 0.59,0.05 0.86,0.16c0.26,0.11 0.48,0.27 0.65,0.48c0.18,0.21 0.28,0.48 0.32,0.8l-0.83,0.14c-0.06,-0.26 -0.17,-0.46 -0.35,-0.6C23.49,9.44 23.27,9.37 23,9.37c-0.22,0 -0.42,0.06 -0.61,0.17c-0.18,0.11 -0.32,0.28 -0.43,0.5c-0.1,0.22 -0.16,0.49 -0.16,0.81c0,0.32 0.05,0.58 0.16,0.8s0.25,0.39 0.43,0.5c0.18,0.11 0.38,0.17 0.61,0.17c0.26,0 0.47,-0.07 0.65,-0.21c0.18,-0.14 0.3,-0.34 0.35,-0.59l0.85,0.09c-0.06,0.29 -0.17,0.54 -0.32,0.77c-0.15,0.22 -0.36,0.39 -0.61,0.52C23.66,13.03 23.35,13.1 22.99,13.1z"/>
+</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_5g_uw_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_5g_uw_mobiledata.xml
new file mode 100644
index 000000000000..ca47b6ff2edb
--- /dev/null
+++ b/packages/SettingsLib/res/drawable/ic_5g_uw_mobiledata.xml
@@ -0,0 +1,33 @@
+<!--
+ Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="27dp"
+ android:height="16dp"
+ android:viewportWidth="27.0"
+ android:viewportHeight="16.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M5.3,13.22c-0.57,0 -1.1,-0.11 -1.58,-0.34c-0.48,-0.22 -0.87,-0.55 -1.18,-0.98C2.24,11.47 2.06,10.93 2,10.3l1.48,-0.2c0.07,0.5 0.25,0.92 0.56,1.25c0.32,0.32 0.74,0.48 1.26,0.48c0.57,0 1.02,-0.18 1.34,-0.55c0.33,-0.37 0.49,-0.87 0.49,-1.48c0,-0.61 -0.16,-1.09 -0.49,-1.46C6.32,7.96 5.88,7.78 5.32,7.78C5,7.78 4.7,7.85 4.42,8C4.15,8.14 3.93,8.33 3.76,8.56L2.28,7.92l0.6,-4.94h5.26v1.36H4.1L3.72,7.02l0.08,0.03C4,6.87 4.25,6.73 4.55,6.62c0.3,-0.12 0.63,-0.18 1.01,-0.18c0.6,0 1.13,0.14 1.6,0.41C7.62,7.11 7.98,7.5 8.24,8c0.27,0.5 0.41,1.1 0.41,1.79c0,0.66 -0.14,1.26 -0.43,1.78c-0.28,0.51 -0.67,0.92 -1.18,1.22C6.55,13.08 5.97,13.22 5.3,13.22z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M14.51,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83C10.19,9.95 10,9.03 10,7.99c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11l-1.47,0.39c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27s-0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6H17.6v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C15.85,13.07 15.24,13.22 14.51,13.22z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M23,7.39c-0.53,0 -0.94,-0.16 -1.25,-0.47C21.45,6.6 21.3,6.16 21.3,5.6V3h0.8v2.66c0,0.3 0.08,0.54 0.23,0.71C22.48,6.54 22.7,6.62 23,6.62c0.3,0 0.52,-0.08 0.67,-0.25c0.15,-0.17 0.23,-0.41 0.23,-0.71V3h0.8v2.6c0,0.36 -0.07,0.67 -0.2,0.94s-0.33,0.48 -0.58,0.62C23.65,7.32 23.35,7.39 23,7.39z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M21.41,13L20.3,8.7h0.73l0.64,2.78l0.07,0.38h0.04l0.09,-0.38l0.81,-2.78h0.66l0.79,2.78l0.09,0.37h0.04l0.07,-0.37l0.65,-2.78h0.72L24.59,13H23.9l-0.78,-2.84l-0.1,-0.41h-0.04l-0.1,0.41L22.08,13H21.41z"/>
+</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_carrier_wifi.xml b/packages/SettingsLib/res/drawable/ic_carrier_wifi.xml
index ed9d85e3cbe4..22bcf7b8c8a3 100644
--- a/packages/SettingsLib/res/drawable/ic_carrier_wifi.xml
+++ b/packages/SettingsLib/res/drawable/ic_carrier_wifi.xml
@@ -14,17 +14,14 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="38dp"
- android:height="24dp"
- android:viewportWidth="38.0"
- android:viewportHeight="24.0">
+ android:width="24dp"
+ android:height="16dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="16.0">
<path
android:fillColor="#FF000000"
- android:pathData="M9.45,14.48h1.8c-0.05,0.98 -0.24,1.82 -0.6,2.53c-0.35,0.7 -0.85,1.24 -1.51,1.62c-0.66,0.38 -1.48,0.57 -2.47,0.57c-0.71,0 -1.35,-0.14 -1.92,-0.42c-0.57,-0.28 -1.06,-0.68 -1.47,-1.2c-0.4,-0.53 -0.71,-1.16 -0.93,-1.89c-0.21,-0.74 -0.32,-1.56 -0.32,-2.48v-2.63c0,-0.91 0.11,-1.74 0.32,-2.47c0.22,-0.74 0.54,-1.36 0.95,-1.88C3.71,5.69 4.21,5.29 4.8,5.01c0.6,-0.28 1.28,-0.42 2.03,-0.42c0.92,0 1.71,0.19 2.34,0.56c0.64,0.36 1.14,0.9 1.48,1.61c0.35,0.7 0.55,1.57 0.59,2.59h-1.8C9.41,8.59 9.29,7.98 9.1,7.52C8.91,7.04 8.63,6.69 8.26,6.47C7.9,6.24 7.42,6.13 6.84,6.13c-0.52,0 -0.97,0.1 -1.36,0.31C5.1,6.65 4.79,6.95 4.54,7.34C4.3,7.72 4.12,8.19 3.99,8.74c-0.12,0.54 -0.18,1.15 -0.18,1.82v2.65c0,0.62 0.05,1.21 0.15,1.75c0.1,0.54 0.27,1.02 0.49,1.43c0.23,0.4 0.52,0.72 0.89,0.95c0.36,0.23 0.81,0.34 1.33,0.34c0.66,0 1.18,-0.11 1.56,-0.32c0.38,-0.21 0.67,-0.56 0.85,-1.03C9.27,15.85 9.39,15.23 9.45,14.48z"/>
+ android:pathData="M4.59,13L2,2.98h1.69l1.5,6.48l0.17,0.88h0.08l0.21,-0.88l1.89,-6.48h1.54l1.83,6.48l0.21,0.87h0.08l0.15,-0.87l1.51,-6.48h1.68L12.01,13H10.4L8.58,6.36L8.36,5.4H8.27L8.05,6.36L6.16,13H4.59z"/>
<path
android:fillColor="#FF000000"
- android:pathData="M24.87,4.78l-1.74,9.72l-0.2,1.64l-0.29,-1.44l-2.21,-9.92l-0.2,0l-1.06,0l-0.22,0l-2.28,9.92l-0.28,1.4l-0.18,-1.59l-1.78,-9.73l-1.79,0l2.83,14.22l0.34,0l0.92,0l0.35,0l2.48,-10.36l0.14,-0.84l0.15,0.84l2.36,10.36l0.36,0l0.92,0l0.34,0l2.82,-14.22z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M35.72,6.32l0,-1.54l-5.61,0l-0.34,0l-1.45,0l0,14.22l1.79,0l0,-6.28l4.8,0l0,-1.54l-4.8,0l0,-4.86z"/>
+ android:pathData="M15.77,9.85V8.56h2.46V6.1h1.3v2.46H22v1.29h-2.46v2.46h-1.3V9.85H15.77z"/>
</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_lte_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_lte_mobiledata.xml
index e6b4fb698242..739e29d886c2 100644
--- a/packages/SettingsLib/res/drawable/ic_lte_mobiledata.xml
+++ b/packages/SettingsLib/res/drawable/ic_lte_mobiledata.xml
@@ -14,20 +14,17 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="15.88dp"
- android:height="15dp"
- android:viewportWidth="18"
- android:viewportHeight="17">
-
- <path
- android:fillColor="#FFFFFFFF"
- android:pathData="M1.34,12.4h3.9v1.07H0.08V3.52h1.26V12.4z" />
+ android:width="26dp"
+ android:height="16dp"
+ android:viewportWidth="26.0"
+ android:viewportHeight="16.0">
<path
- android:fillColor="#FFFFFFFF"
- android:pathData="M11.1,4.6H8.48v8.88H7.23V4.6H4.62V3.52h6.48V4.6z" />
+ android:fillColor="#FF000000"
+ android:pathData="M2,13V2.98h1.53v8.57H8.3V13H2z"/>
<path
- android:fillColor="#FFFFFFFF"
- android:pathData="M17.34,8.88h-3.52v3.53h4.1v1.07h-5.35V3.52h5.28V4.6h-4.03V7.8h3.52V8.88z" />
+ android:fillColor="#FF000000"
+ android:pathData="M11.24,13V4.43H8.19V2.98h7.63v1.46h-3.05V13H11.24z"/>
<path
- android:pathData="M 0 0 H 18 V 17 H 0 V 0 Z" />
+ android:fillColor="#FF000000"
+ android:pathData="M17.41,13V2.98h6.36v1.46h-4.83v2.65h4.4v1.46h-4.4v3.01h4.83V13H17.41z"/>
</vector>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index c6472de22e8a..bcc22f6605a5 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -1405,6 +1405,8 @@
<string name="user_switch_to_user">Switch to <xliff:g id="user_name" example="John Doe">%s</xliff:g></string>
<!-- Dialog message when creating a new user [CHAR LIMIT=40] -->
<string name="creating_new_user_dialog_message">Creating new user…</string>
+ <!-- Text shown to notify that the creation of new user has failed. [CHAR LIMIT=40] -->
+ <string name="add_user_failed">Failed to create a new user</string>
<!-- Title for the preference to enter the nickname of the user to display in the user switcher [CHAR LIMIT=25]-->
<string name="user_nickname">Nickname</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
index 41ccb16f0374..8f7006e7dc83 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java
@@ -26,7 +26,6 @@ import android.net.NetworkKey;
import android.net.NetworkRequest;
import android.net.NetworkScoreManager;
import android.net.ScoredNetwork;
-import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkScoreCache;
@@ -81,6 +80,9 @@ public class WifiStatusTracker {
@Override
public void onCapabilitiesChanged(
Network network, NetworkCapabilities networkCapabilities) {
+ if (mDefaultNetwork != null && mDefaultNetwork.getNetId() != network.getNetId()) {
+ return;
+ }
if (!mNetworks.contains(network.getNetId())) {
// New network
boolean isVcnOverWifi =
@@ -115,6 +117,9 @@ public class WifiStatusTracker {
@Override
public void onLost(Network network) {
+ if (mDefaultNetwork != null && mDefaultNetwork.getNetId() != network.getNetId()) {
+ return;
+ }
String log = new StringBuilder()
.append(SSDF.format(System.currentTimeMillis())).append(",")
.append("onLost: ")
@@ -346,14 +351,6 @@ public class WifiStatusTracker {
if (ssid != null && !WifiManager.UNKNOWN_SSID.equals(ssid)) {
return ssid;
}
- // OK, it's not in the connectionInfo; we have to go hunting for it
- List<WifiConfiguration> networks = mWifiManager.getConfiguredNetworks();
- int length = networks.size();
- for (int i = 0; i < length; i++) {
- if (networks.get(i).networkId == info.getNetworkId()) {
- return networks.get(i).SSID;
- }
- }
return null;
}
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 47510957cb4d..b6b5ae5b6ce4 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -455,6 +455,12 @@
<!-- Permission required for CTS test - CtsAlarmManagerTestCases -->
<uses-permission android:name="android.permission.SCHEDULE_PRIORITIZED_ALARM" />
+ <!-- Permission required for CTS test - SystemMediaRouter2Test -->
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_ROUTING" />
+
+ <!-- Permission required for CTS test - CtsRotationResolverServiceDeviceTestCases -->
+ <uses-permission android:name="android.permission.MANAGE_ROTATION_RESOLVER" />
+
<application android:label="@string/app_label"
android:theme="@android:style/Theme.DeviceDefault.DayNight"
android:defaultToDeviceProtectedStorage="true"
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 9f6ef962330e..c9bd370cd49c 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -762,6 +762,17 @@
android:visibleToInstantApps="true">
</activity>
+ <activity android:name=".wallet.ui.WalletActivity"
+ android:label="@string/wallet_title"
+ android:theme="@style/Wallet.Theme"
+ android:excludeFromRecents="true"
+ android:showWhenLocked="true"
+ android:showForAllUsers="true"
+ android:launchMode="singleInstance"
+ android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboard|keyboardHidden"
+ android:visibleToInstantApps="true">
+ </activity>
+
<receiver android:name=".controls.management.ControlsRequestReceiver"
android:exported="true">
<intent-filter>
diff --git a/packages/SystemUI/docs/falsing.md b/packages/SystemUI/docs/falsing.md
index e224ca80616a..09215ac813b5 100644
--- a/packages/SystemUI/docs/falsing.md
+++ b/packages/SystemUI/docs/falsing.md
@@ -143,10 +143,10 @@ are ready to act on the owner's action, and then query the `FalsingManager`. The
will update its belief in pocket dialing based only on the last call made, so multiple calls per
gesture are not well defined.
-The `FalsingManager` does not update its belief in pocket-dialing until a new
-gesture starts. That is to say, if the owner makes a bad tap on your feature,
-the belief in pocket dialing will not incorporate this new data until the
-following gesture begins.
+The `FalsingManager` does not update its belief in pocket-dialing until after a gesture completes.
+That is to say, if the owner makes a bad tap on your feature, the "belief" in pocket dialing will
+not incorporate this new data after processing on the final `ACTION_UP` or `ACTION_CANCEL` event
+occurs.
If you expect a mix of taps, double taps, and swipes on your feature, segment them
accordingly. Figure out which `FalsingManager` method you need to call first, rather than relying
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSFactory.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSFactory.java
index 9dd081154159..cfe3be0acc00 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSFactory.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSFactory.java
@@ -14,6 +14,8 @@
package com.android.systemui.plugins.qs;
+import android.content.Context;
+
import com.android.systemui.plugins.Plugin;
import com.android.systemui.plugins.annotations.DependsOn;
import com.android.systemui.plugins.annotations.ProvidesInterface;
@@ -28,9 +30,18 @@ import com.android.systemui.plugins.annotations.ProvidesInterface;
public interface QSFactory extends Plugin {
String ACTION = "com.android.systemui.action.PLUGIN_QS_FACTORY";
- int VERSION = 1;
+ int VERSION = 2;
QSTile createTile(String tileSpec);
- QSTileView createTileView(QSTile tile, boolean collapsedView);
+
+ /**
+ * Create a view for a tile.
+ *
+ * @param context a themed context for inflating the view
+ * @param tile the tile for which the view is created
+ * @param collapsedView {@code true} if the view will live in QQS and {@code false} otherwise.
+ * @return a view for the tile
+ */
+ QSTileView createTileView(Context context, QSTile tile, boolean collapsedView);
}
diff --git a/packages/SystemUI/res/drawable/circle_wallet_primary_50dp.xml b/packages/SystemUI/res/drawable/circle_wallet_primary_50dp.xml
new file mode 100644
index 000000000000..de4d882daf53
--- /dev/null
+++ b/packages/SystemUI/res/drawable/circle_wallet_primary_50dp.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <size
+ android:height="50dp"
+ android:width="50dp" />
+ <solid android:color="#1A73E8" />
+</shape>
diff --git a/packages/SystemUI/res/drawable/global_actions_lite_background.xml b/packages/SystemUI/res/drawable/global_actions_lite_background.xml
new file mode 100644
index 000000000000..3fdce761b135
--- /dev/null
+++ b/packages/SystemUI/res/drawable/global_actions_lite_background.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright 2021, The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@color/global_actions_lite_background"/>
+ <corners android:radius="@dimen/global_actions_corner_radius" />
+</shape>
diff --git a/packages/SystemUI/res/drawable/global_actions_lite_button.xml b/packages/SystemUI/res/drawable/global_actions_lite_button.xml
new file mode 100644
index 000000000000..b0184e9bc207
--- /dev/null
+++ b/packages/SystemUI/res/drawable/global_actions_lite_button.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+* Copyright 2021, The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="@color/global_actions_lite_button_background"/>
+</shape>
diff --git a/packages/SystemUI/res/drawable/ic_fingerprint.xml b/packages/SystemUI/res/drawable/ic_fingerprint.xml
index e5f33602164e..91d72a7902c0 100644
--- a/packages/SystemUI/res/drawable/ic_fingerprint.xml
+++ b/packages/SystemUI/res/drawable/ic_fingerprint.xml
@@ -15,45 +15,25 @@
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="32dp"
- android:height="32dp"
+ android:width="72dp"
+ android:height="72dp"
android:tint="?attr/wallpaperTextColor"
- android:alpha=".75"
- android:viewportHeight="32.0"
- android:viewportWidth="32.0">
+ android:viewportWidth="72"
+ android:viewportHeight="72">
<path
- android:fillColor="#ffffff"
- android:pathData="M23.7,5.9c-0.1,0.0 -0.2,0.0 -0.3,-0.1C21.0,4.5 18.6,3.9 16.0,3.9c-2.5,0.0
- -4.6,0.6 -6.9,1.9C8.8,6.0 8.3,5.9 8.1,5.5C7.9,5.2 8.0,4.7 8.4,4.5c2.5,-1.4 4.9,-2.1 7.7,
- -2.1c2.8,0.0 5.4,0.7 8.0,2.1c0.4,0.2 0.5,0.6 0.3,1.0C24.2,5.7 24.0,5.9 23.7,5.9z" />
- <path
- android:fillColor="#ffffff"
- android:pathData="M5.3,13.2c-0.1,0.0 -0.3,0.0 -0.4,-0.1c-0.3,-0.2 -0.4,-0.7 -0.2,-1.0c1.3,
- -1.9 2.9,-3.4 4.9,-4.5c4.1,-2.2 9.3,-2.2 13.4,0.0c1.9,1.1 3.6,2.5 4.9,4.4c0.2,0.3 0.1,0.8
- -0.2,1.0c-0.3,0.2 -0.8,0.1 -1.0,-0.2c-1.2,-1.7 -2.6,-3.0 -4.3,-4.0c-3.7,-2.0 -8.3,-2.0
- -12.0,0.0c-1.7,0.9 -3.2,2.3 -4.3,4.0C5.7,13.1 5.5,13.2 5.3,13.2z" />
- <path
- android:fillColor="#ffffff"
- android:pathData="M13.3,29.6c-0.2,0.0 -0.4,-0.1 -0.5,-0.2c-1.1,-1.2 -1.7,-2.0 -2.6,
- -3.6c-0.9,-1.7 -1.4,-3.7 -1.4,-5.9c0.0,-4.1 3.3,-7.4 7.4,-7.4c4.1,0.0 7.4,3.3 7.4,7.4c0.0,
- 0.4 -0.3,0.7 -0.7,0.7s-0.7,-0.3 -0.7,-0.7c0.0,-3.3 -2.7,-5.9 -5.9,-5.9c-3.3,0.0 -5.9,
- 2.7 -5.9,5.9c0.0,2.0 0.4,3.8 1.2,5.2c0.8,1.6 1.4,2.2 2.4,3.3c0.3,0.3 0.3,0.8 0.0,1.0
- C13.7,29.5 13.5,29.6 13.3,29.6z" />
- <path
- android:fillColor="#ffffff"
- android:pathData="M22.6,27.1c-1.6,0.0 -2.9,-0.4 -4.1,-1.2c-1.9,-1.4 -3.1,-3.6 -3.1,
- -6.0c0.0,-0.4 0.3,-0.7 0.7,-0.7s0.7,0.3 0.7,0.7c0.0,1.9 0.9,3.7 2.5,4.8c0.9,0.6 1.9,
- 1.0 3.2,1.0c0.3,0.0 0.8,0.0 1.3,-0.1c0.4,-0.1 0.8,0.2 0.8,0.6c0.1,0.4 -0.2,0.8 -0.6,
- 0.8C23.4,27.1 22.8,27.1 22.6,27.1z" />
- <path
- android:fillColor="#ffffff"
- android:pathData="M20.0,29.9c-0.1,0.0 -0.1,0.0 -0.2,0.0c-2.1,-0.6 -3.4,-1.4 -4.8,-2.9c-1.8,
- -1.9 -2.8,-4.4 -2.8,-7.1c0.0,-2.2 1.8,-4.1 4.1,-4.1c2.2,0.0 4.1,1.8 4.1,4.1c0.0,1.4 1.2,
- 2.6 2.6,2.6c1.4,0.0 2.6,-1.2 2.6,-2.6c0.0,-5.1 -4.2,-9.3 -9.3,-9.3c-3.6,0.0 -6.9,2.1 -8.4,
- 5.4C7.3,17.1 7.0,18.4 7.0,19.8c0.0,1.1 0.1,2.7 0.9,4.9c0.1,0.4 -0.1,0.8 -0.4,0.9c-0.4,
- 0.1 -0.8,-0.1 -0.9,-0.4c-0.6,-1.8 -0.9,-3.6 -0.9,-5.4c0.0,-1.6 0.3,-3.1 0.9,-4.4c1.7,
- -3.8 5.6,-6.3 9.8,-6.3c5.9,0.0 10.7,4.8 10.7,10.7c0.0,2.2 -1.8,4.1 -4.1,4.1s-4.0,
- -1.8 -4.0,-4.1c0.0,-1.4 -1.2,-2.6 -2.6,-2.6c-1.4,0.0 -2.6,1.2 -2.6,2.6c0.0,2.3 0.9,
- 4.5 2.4,6.1c1.2,1.3 2.4,2.0 4.2,2.5c0.4,0.1 0.6,0.5 0.5,0.9C20.6,29.7 20.3,29.9 20.0,
- 29.9z" />
+ android:pathData=
+ "M25.5,16.3283C28.47,14.8433 31.9167,14 35.5834,14C39.2501,14 42.6968,
+ 14.8433 45.6668,16.3283
+ M20,28.6669C22.7683,24.3402 28.7084,21.3335 35.5834,21.3335C42.4585,
+ 21.3335 48.3985,24.3402 51.1669,28.6669
+ M22.8607,47.0002C21.834,44.3235 21.834,41.5002 21.834,41.5002C21.834,
+ 34.4051 27.7374,28.6667 35.5841,28.6667C43.4308,28.6667 49.3341,34.4051 49.3341,41.5002
+ M49.3344,41.5003V42.0319C49.3344,44.7636 47.1161,47.0003 44.3661,47.0003C41.9461,
+ 47.0003 39.8744,45.2403 39.471,42.857L38.9577,39.7769C38.591,37.5953 36.7027,
+ 36.0002 34.5027,36.0002C26.5826,36.0002 29.846,49.1087 35.291,50.6487
+ M44.9713,54.6267C42.5513,56.7167 39.2879,58.0001 35.5846,58.0001C32.2296,
+ 58.0001 29.2229,56.9551 26.8945,55.195"
+ android:strokeWidth="3"
+ android:strokeColor="#ffffff"
+ android:strokeLineCap="round"/>
</vector> \ No newline at end of file
diff --git a/packages/SystemUI/res/drawable/qs_customizer_toolbar.xml b/packages/SystemUI/res/drawable/qs_customizer_toolbar.xml
index 7cb44b3e1500..416583013e64 100644
--- a/packages/SystemUI/res/drawable/qs_customizer_toolbar.xml
+++ b/packages/SystemUI/res/drawable/qs_customizer_toolbar.xml
@@ -16,8 +16,5 @@
<inset xmlns:android="http://schemas.android.com/apk/res/android">
<shape>
<solid android:color="?android:attr/colorBackgroundFloating"/>
- <corners
- android:topLeftRadius="?android:attr/dialogCornerRadius"
- android:topRightRadius="?android:attr/dialogCornerRadius" />
</shape>
</inset>
diff --git a/packages/SystemUI/res/drawable/rounded_corners.xml b/packages/SystemUI/res/drawable/rounded_corners.xml
new file mode 100644
index 000000000000..a84f57501b57
--- /dev/null
+++ b/packages/SystemUI/res/drawable/rounded_corners.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
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+ <solid android:color="#202124"/>
+ <corners android:radius="10dp"/>
+</shape>
diff --git a/packages/SystemUI/res/drawable/stat_sys_roaming_large.xml b/packages/SystemUI/res/drawable/stat_sys_roaming_large.xml
index 1511659ea42f..48faeb22416f 100644
--- a/packages/SystemUI/res/drawable/stat_sys_roaming_large.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_roaming_large.xml
@@ -14,11 +14,11 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="@dimen/signal_icon_size"
- android:height="@dimen/signal_icon_size"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
+ android:width="16dp"
+ android:height="16dp"
+ android:viewportWidth="16.0"
+ android:viewportHeight="16.0">
<path
android:fillColor="#FF000000"
- android:pathData="M14.21,12.81c0.36,-0.16 0.69,-0.36 0.97,-0.61c0.41,-0.38 0.72,-0.83 0.94,-1.37c0.21,-0.54 0.32,-1.14 0.32,-1.79c0,-0.92 -0.16,-1.7 -0.49,-2.33c-0.32,-0.64 -0.79,-1.12 -1.43,-1.45c-0.62,-0.33 -1.4,-0.49 -2.32,-0.49H8.23V19h1.8v-5.76h2.5L15.06,19h1.92v-0.12L14.21,12.81zM10.03,11.71V6.32h2.18c0.59,0 1.06,0.11 1.42,0.34c0.36,0.22 0.62,0.54 0.78,0.95c0.16,0.41 0.24,0.89 0.24,1.44c0,0.49 -0.09,0.93 -0.27,1.34c-0.18,0.4 -0.46,0.73 -0.82,0.97c-0.36,0.23 -0.82,0.35 -1.37,0.35H10.03z"/>
+ android:pathData="M4.5,13.02V3h3.93c0.97,0 1.75,0.27 2.34,0.81c0.6,0.53 0.9,1.28 0.9,2.25c0,0.63 -0.19,1.2 -0.56,1.74c-0.37,0.53 -0.95,0.91 -1.74,1.12l2.45,4.02v0.08h-1.69L7.75,9.09H6.03v3.93H4.5zM8.46,4.44H6.03v3.23h2.44c0.49,0 0.9,-0.14 1.2,-0.41c0.31,-0.28 0.46,-0.69 0.46,-1.22s-0.15,-0.93 -0.45,-1.2C9.38,4.58 8.98,4.44 8.46,4.44z"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/wallet_button.xml b/packages/SystemUI/res/drawable/wallet_button.xml
new file mode 100644
index 000000000000..bf7625fa956f
--- /dev/null
+++ b/packages/SystemUI/res/drawable/wallet_button.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+-->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item>
+ <shape android:shape="rectangle">
+ <stroke
+ android:width="1dp"
+ android:color="@color/GM2_blue_600"/>
+ <solid android:color="@color/GM2_blue_600"/>
+ <corners android:radius="24dp"/>
+ </shape>
+ </item>
+</selector>
diff --git a/packages/SystemUI/res/drawable/wallet_empty_state_bg.xml b/packages/SystemUI/res/drawable/wallet_empty_state_bg.xml
new file mode 100644
index 000000000000..f52889adaa53
--- /dev/null
+++ b/packages/SystemUI/res/drawable/wallet_empty_state_bg.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:attr/colorControlHighlight">
+ <item android:id="@android:id/mask">
+ <shape android:shape="rectangle">
+ <solid android:color="#DADCE0" />
+ <corners android:radius="@dimen/wallet_empty_state_corner_radius" />
+ </shape>
+ </item>
+ <item>
+ <shape>
+ <stroke
+ android:width="1dp"
+ android:color="@color/GM2_grey_900" />
+ <corners android:radius="@dimen/wallet_empty_state_corner_radius" />
+ </shape>
+ </item>
+</ripple>
diff --git a/packages/SystemUI/res/layout/auth_biometric_contents.xml b/packages/SystemUI/res/layout/auth_biometric_contents.xml
index eef37ab20c69..99e8116cb681 100644
--- a/packages/SystemUI/res/layout/auth_biometric_contents.xml
+++ b/packages/SystemUI/res/layout/auth_biometric_contents.xml
@@ -44,7 +44,7 @@
<FrameLayout
android:id="@+id/biometric_icon_frame"
android:layout_width="match_parent"
- android:layout_height="match_parent"
+ android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<ImageView
@@ -80,7 +80,7 @@
android:layout_height="88dp"
style="?android:attr/buttonBarStyle"
android:orientation="horizontal"
- android:paddingTop="16dp">
+ android:paddingTop="24dp">
<Space android:id="@+id/leftSpacer"
android:layout_width="8dp"
diff --git a/packages/SystemUI/res/layout/auth_biometric_face_to_udfps_view.xml b/packages/SystemUI/res/layout/auth_biometric_face_to_udfps_view.xml
new file mode 100644
index 000000000000..87affde5c04b
--- /dev/null
+++ b/packages/SystemUI/res/layout/auth_biometric_face_to_udfps_view.xml
@@ -0,0 +1,25 @@
+<!--
+ ~ Copyright (C) 2021 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<com.android.systemui.biometrics.AuthBiometricFaceToUdfpsView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <include layout="@layout/auth_biometric_contents"/>
+
+</com.android.systemui.biometrics.AuthBiometricFaceToUdfpsView> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/disabled_udfps_view.xml b/packages/SystemUI/res/layout/disabled_udfps_view.xml
index aab86613ef45..13d3065d0860 100644
--- a/packages/SystemUI/res/layout/disabled_udfps_view.xml
+++ b/packages/SystemUI/res/layout/disabled_udfps_view.xml
@@ -16,9 +16,7 @@
-->
<com.android.keyguard.DisabledUdfpsView
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:systemui="http://schemas.android.com/apk/res-auto"
android:id="@+id/disabled_udfps_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:background="@drawable/circle_white"
/>
diff --git a/packages/SystemUI/res/layout/global_actions_grid_item_lite.xml b/packages/SystemUI/res/layout/global_actions_grid_item_lite.xml
new file mode 100644
index 000000000000..9ab1ac80f048
--- /dev/null
+++ b/packages/SystemUI/res/layout/global_actions_grid_item_lite.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<com.android.systemui.globalactions.GlobalActionsItem
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_weight="1"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:layout_gravity="center"
+ android:orientation="vertical"
+ android:stateListAnimator="@anim/control_state_list_animator">
+ <ImageView
+ android:id="@*android:id/icon"
+ android:layout_width="@dimen/global_actions_button_size"
+ android:layout_height="@dimen/global_actions_button_size"
+ android:layout_marginBottom="@dimen/global_actions_grid_container_bottom_margin"
+ android:padding="@dimen/global_actions_button_padding"
+ android:scaleType="centerInside"
+ android:tint="@color/global_actions_lite_text"
+ android:background="@drawable/global_actions_lite_button"/>
+ <TextView
+ android:id="@*android:id/message"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:ellipsize="end"
+ android:marqueeRepeatLimit="marquee_forever"
+ android:maxLines="2"
+ android:textSize="12sp"
+ android:gravity="center"
+ android:textColor="@color/global_actions_lite_text"
+ android:breakStrategy="high_quality"
+ android:hyphenationFrequency="full"
+ android:textAppearance="?android:attr/textAppearanceSmall" />
+</com.android.systemui.globalactions.GlobalActionsItem>
diff --git a/packages/SystemUI/res/layout/global_actions_grid_lite.xml b/packages/SystemUI/res/layout/global_actions_grid_lite.xml
new file mode 100644
index 000000000000..0df980054c0c
--- /dev/null
+++ b/packages/SystemUI/res/layout/global_actions_grid_lite.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/global_actions_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="center"
+ android:layout_gravity="center">
+ <com.android.systemui.globalactions.GlobalActionsLayoutLite
+ android:id="@id/global_actions_view"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:background="@drawable/global_actions_lite_background"
+ android:padding="@dimen/global_actions_lite_padding">
+ <androidx.constraintlayout.widget.ConstraintLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@android:id/list"
+ android:gravity="center"
+ android:translationZ="@dimen/global_actions_translate"
+ android:orientation="horizontal"
+ android:layoutDirection="ltr">
+ <androidx.constraintlayout.helper.widget.Flow
+ android:id="@+id/list_flow"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:flow_wrapMode="chain"
+ app:flow_maxElementsWrap="2"
+ app:flow_horizontalGap="@dimen/global_actions_lite_padding"
+ app:flow_verticalGap="@dimen/global_actions_lite_padding"
+ app:flow_horizontalStyle="packed"/>
+ </androidx.constraintlayout.widget.ConstraintLayout>
+ </com.android.systemui.globalactions.GlobalActionsLayoutLite>
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout/long_screenshot.xml b/packages/SystemUI/res/layout/long_screenshot.xml
index 6d44138c5354..8b2d4e0a44b9 100644
--- a/packages/SystemUI/res/layout/long_screenshot.xml
+++ b/packages/SystemUI/res/layout/long_screenshot.xml
@@ -42,6 +42,8 @@
android:padding="6dp"
android:src="@drawable/ic_screenshot_share"
android:layout_marginRight="8dp"
+ android:contentDescription="@*android:string/share"
+ android:tooltipText="@*android:string/share"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/preview" />
@@ -115,4 +117,3 @@
/>
</androidx.constraintlayout.widget.ConstraintLayout>
-
diff --git a/packages/SystemUI/res/layout/people_space_tile_view.xml b/packages/SystemUI/res/layout/people_space_tile_view.xml
index 8f64ddf7011d..3e901808e66a 100644
--- a/packages/SystemUI/res/layout/people_space_tile_view.xml
+++ b/packages/SystemUI/res/layout/people_space_tile_view.xml
@@ -35,15 +35,8 @@
<ImageView
android:id="@+id/tile_view_person_icon"
- android:layout_width="48dp"
- android:layout_height="48dp" />
-
- <ImageView
- android:id="@+id/tile_view_package_icon"
- android:layout_width="16dp"
- android:layout_marginStart="-8dp"
- android:layout_marginTop="32dp"
- android:layout_height="16dp" />
+ android:layout_width="52dp"
+ android:layout_height="52dp" />
<LinearLayout
android:orientation="horizontal"
diff --git a/packages/SystemUI/res/layout/qs_footer_impl_two_lines.xml b/packages/SystemUI/res/layout/qs_footer_impl_two_lines.xml
index 726e69f6e50c..343b398e3003 100644
--- a/packages/SystemUI/res/layout/qs_footer_impl_two_lines.xml
+++ b/packages/SystemUI/res/layout/qs_footer_impl_two_lines.xml
@@ -129,10 +129,10 @@
<com.android.systemui.statusbar.AlphaOptimizedImageView
android:id="@+id/tuner_icon"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingStart="36dp"
- android:paddingEnd="4dp"
+ android:layout_width="8dp"
+ android:layout_height="8dp"
+ android:layout_gravity="center_horizontal|bottom"
+ android:layout_marginBottom="@dimen/qs_footer_icon_padding"
android:src="@drawable/tuner"
android:tint="?android:attr/textColorTertiary"
android:visibility="invisible" />
diff --git a/packages/SystemUI/res/layout/quick_access_wallet.xml b/packages/SystemUI/res/layout/quick_access_wallet.xml
new file mode 100644
index 000000000000..688e1f252150
--- /dev/null
+++ b/packages/SystemUI/res/layout/quick_access_wallet.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<com.android.systemui.wallet.ui.WalletView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/wallet_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
diff --git a/packages/SystemUI/res/layout/wallet_card_view.xml b/packages/SystemUI/res/layout/wallet_card_view.xml
new file mode 100644
index 000000000000..5fd556d1fe25
--- /dev/null
+++ b/packages/SystemUI/res/layout/wallet_card_view.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+-->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content">
+ <com.android.systemui.wallet.ui.WalletCardView
+ android:id="@+id/card"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginHorizontal="@dimen/card_margin"
+ android:foreground="?android:attr/selectableItemBackground"
+ app:cardBackgroundColor="@android:color/transparent"
+ app:cardElevation="12dp">
+ <ImageView
+ android:id="@+id/card_image"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:adjustViewBounds="true"
+ android:contentDescription="@null"
+ android:scaleType="fitXY"/>
+ <ImageView
+ android:id="@+id/add_card_logo"
+ android:layout_width="28dp"
+ android:layout_height="28dp"
+ android:layout_gravity="center"
+ android:drawable="@drawable/ic_qs_plus"
+ android:contentDescription="@null"
+ android:scaleType="fitCenter"
+ android:visibility="gone"/>
+ </com.android.systemui.wallet.ui.WalletCardView>
+</FrameLayout>
diff --git a/packages/SystemUI/res/layout/wallet_empty_state.xml b/packages/SystemUI/res/layout/wallet_empty_state.xml
new file mode 100644
index 000000000000..3ca0f73c81c8
--- /dev/null
+++ b/packages/SystemUI/res/layout/wallet_empty_state.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2020, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+ <LinearLayout
+ android:id="@+id/wallet_empty_state"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginHorizontal="16dp"
+ android:layout_marginTop="48dp"
+ android:background="@drawable/wallet_empty_state_bg"
+ android:orientation="vertical"
+ android:paddingVertical="52dp"
+ android:theme="@style/Wallet.Theme"
+ android:clipChildren="false"
+ android:visibility="gone">
+ <ImageView
+ android:id="@+id/empty_state_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="28dp"
+ android:layout_gravity="center"
+ android:layout_marginBottom="8dp"
+ android:contentDescription="@null"
+ android:scaleType="fitCenter"/>
+ <TextView
+ style="@style/Wallet.TextAppearance"
+ android:id="@+id/empty_state_title"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"/>
+ </LinearLayout>
+</merge>
diff --git a/packages/SystemUI/res/layout/wallet_fullscreen.xml b/packages/SystemUI/res/layout/wallet_fullscreen.xml
new file mode 100644
index 000000000000..dc678481ea6e
--- /dev/null
+++ b/packages/SystemUI/res/layout/wallet_fullscreen.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2021 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<FrameLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:clipChildren="false">
+ <LinearLayout
+ android:id="@+id/card_carousel_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginTop="36dp"
+ android:orientation="vertical">
+ <ImageView
+ android:id="@+id/icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center_horizontal"
+ android:layout_marginVertical="10dp"
+ android:background="@drawable/circle_wallet_primary_50dp"
+ android:scaleType="center"
+ android:contentDescription="@null"/>
+ <TextView
+ android:id="@+id/label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ style="@style/Wallet.TextAppearance"
+ android:textAlignment="center"/>
+
+ <com.android.systemui.wallet.ui.WalletCardCarousel
+ android:id="@+id/card_carousel"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:transitionName="dotIndicator"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:layout_marginVertical="24dp"/>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"/>
+
+ <Button
+ android:id="@+id/wallet_button"
+ android:background="@drawable/wallet_button"
+ android:textColor="@color/wallet_white"
+ android:textAlignment="center"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingHorizontal="24dp"
+ android:paddingVertical="8dp"
+ android:layout_marginVertical="24dp"
+ android:layout_gravity="center_horizontal"/>
+
+ </LinearLayout>
+
+ <include layout="@layout/wallet_empty_state"/>
+
+ <TextView
+ android:id="@+id/error_view"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="80dp"
+ android:layout_marginHorizontal="40dp"
+ android:textSize="14sp"
+ android:textColor="#DADCE0"
+ android:elevation="7dp"
+ android:background="@drawable/rounded_corners"
+ android:gravity="center"
+ android:visibility="gone"/>
+</FrameLayout>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index e2f407ed2d7d..df215fad7bf5 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Die program of jou organisasie laat nie toe dat skermkiekies geneem word nie"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Wysig"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Wysig skermkiekie"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Vang meer vas"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Maak skermkiekie toe"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Skermkiekievoorskou"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Boonste grens"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Keer kleure om"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Kleurregstellingmodus"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Meer instellings"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Gebruikerinstellings"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Klaar"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Maak toe"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Gekoppel"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Gekoppel, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Koppel tans …"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Hierdie toestel behoort aan <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> en is gekoppel aan VPN\'e"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Jou organisasie kan netwerkverkeer in jou werkprofiel monitor"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kan netwerkverkeer in jou werkprofiel monitor"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Jou IT-admin kan netwerkaktiwiteit op jou werkprofiel sien"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Netwerk kan gemonitor word"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Hierdie toestel is gekoppel aan VPN\'e"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Jou werkprofiel is gekoppel aan <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Maak gesprek oop"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Gespreklegstukke"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tik op \'n gesprek om dit by jou tuisskerm te voeg"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> gelede"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Minder as <xliff:g id="DURATION">%1$s</xliff:g> gelede"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Meer as <xliff:g id="DURATION">%1$s</xliff:g> gelede"</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 335fa423dd92..da4431d01fcd 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ቅጽበታዊ ገጽ እይታዎችን ማንሳት በመተግበሪያው ወይም በእርስዎ ድርጅት አይፈቀድም"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"አርትዕ ያድርጉ"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"ቅጽበታዊ ገጽ ዕይታን አርትዕ ያድርጉ"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"ተጨማሪ ይቅረጹ"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ቅጽበታዊ ገጽ ዕይታን አሰናብት"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"የቅጽበታዊ ገጽ ዕይታ ቅድመ-ዕይታ"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"የላይኛው ወሰን"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"ቀለማትን ግልብጥ"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"የቀለም እርማት ሁነታ"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"ተጨማሪ ቅንብሮች"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"የተጠቃሚ ቅንብሮች"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"ተከናውኗል"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ዝጋ"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"ተገናኝቷል"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"ተገናኝቷል፣ ባትሪ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"በማገናኘት ላይ..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ይህ መሳሪያ ንብረትነቱ የ<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ሲሆን ከቪፒኤን ጋር ተገናኝቷል"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"የእርስዎ ድርጅት በእርስዎ የሥራ መገለጫ ያለን የአውታረ መረብ ትራፊክን ሊቆጣጠር ይችል ይሆናል"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> በእርስዎ የሥራ መገለጫ ውስጥ የአውታረ መረብ ትራፊክ ላይ ክትትል ሊያደርግ ይችላል"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"የስራ መገለጫ አውታረ መረብ እንቅስቃሴ ለአይቲ አስተዳዳሪዎ ይታያል"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"አውታረ መረብ ክትትል የሚደረግበት ሊሆን ይችላል"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ይህ መሳሪያ ከቪፒኤን ጋር ተገናኝቷል"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"የእርስዎ የሥራ መገለጫ ከ<xliff:g id="VPN_APP">%1$s</xliff:g> ጋር ተገናኝቷል።"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"ውይይት ይክፈቱ"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"የውይይት ምግብሮች"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"በመነሻ ማያ ገጽዎ ላይ ለማከል አንድ ውይይት መታ ያድርጉ"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"ከ<xliff:g id="DURATION">%1$s</xliff:g> በፊት"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"ከ <xliff:g id="DURATION">%1$s</xliff:g> በፊት"</string>
<string name="over_timestamp" msgid="4765793502859358634">"ከ <xliff:g id="DURATION">%1$s</xliff:g> በፊት"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index dbf49ac1dd4d..d100430c4edf 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -1124,6 +1124,14 @@
<string name="basic_status" msgid="2315371112182658176">"محادثة مفتوحة"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"أدوات المحادثة"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"انقر على محادثة لإضافتها إلى \"الشاشة الرئيسية\"."</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"قبل <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"قبل أقل من <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"قبل أكثر <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml
index 279a29224121..08824be444e5 100644
--- a/packages/SystemUI/res/values-as/strings.xml
+++ b/packages/SystemUI/res/values-as/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"এপটোৱে বা আপোনাৰ প্ৰতিষ্ঠানে স্ক্ৰীণশ্বট ল\'বলৈ অনুমতি নিদিয়ে"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"সম্পাদনা কৰক"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"স্ক্ৰীনশ্বট সম্পাদনা কৰক"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"অধিক কেপচাৰ কৰক"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"স্ক্ৰীনশ্বট অগ্ৰাহ্য কৰক"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"স্ক্ৰীনশ্বটৰ পূৰ্বদৰ্শন"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ওপৰৰ সীমাৰেখা"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"ৰং ওলোটা কৰক"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"ৰং শুধৰণী কৰা ম\'ড"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"অধিক ছেটিং"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ব্যৱহাৰকাৰীৰ ছেটিং"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"সম্পন্ন কৰা হ’ল"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"বন্ধ কৰক"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"সংযোগ কৰা হ’ল"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"সংযুক্ত, বেটাৰি <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"সংযোগ কৰি থকা হৈছে..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"এই ডিভাইচটো <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>ৰ আৰু এইটো VPNসমূহৰ সৈতে সংযুক্ত হৈ আছে"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"আপোনাৰ প্ৰতিষ্ঠানে আপোনাৰ কৰ্মস্থানৰ প্ৰ\'ফাইলৰ নেটৱৰ্ক ট্ৰেফিক পৰ্যবেক্ষণ কৰিব পাৰে"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>এ আপোনাৰ কৰ্মস্থানৰ প্ৰ\'ফাইলৰ নেটৱৰ্ক ট্ৰেফিক পৰ্যবেক্ষণ কৰিব পাৰে"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"কৰ্মস্থানৰ প্ৰ’ফাইলৰ নেটৱৰ্কৰ কাৰ্যকলাপ আপোনাৰ আইটি প্ৰশাসকৰ বাবে দৃশ্যমান হয়"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"নেটৱৰ্ক নিৰীক্ষণ কৰা হ\'ব পাৰে"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"এই ডিভাইচটো VPNসমূহৰ সৈতে সংযুক্ত হৈ আছে"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"আপোনাৰ কৰ্মস্থানৰ প্ৰ’ফাইলটো <xliff:g id="VPN_APP">%1$s</xliff:g>ৰ সৈতে সংযুক্ত হৈ আছে"</string>
@@ -953,7 +949,7 @@
<string name="notification_channel_hints" msgid="7703783206000346876">"ইংগিতবোৰ"</string>
<string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
<string name="instant_apps_title" msgid="8942706782103036910">"<xliff:g id="APP">%1$s</xliff:g> চলি আছে"</string>
- <string name="instant_apps_message" msgid="6112428971833011754">"ইনষ্ট\'ল নকৰাকৈয়েই এপটো খোলা হৈছে।"</string>
+ <string name="instant_apps_message" msgid="6112428971833011754">"এপ্‌টো ইনষ্ট\'ল নকৰাকৈ খোলা হৈছে।"</string>
<string name="instant_apps_message_with_help" msgid="1816952263531203932">"ইনষ্ট\'ল নকৰাকৈয়েই এপটো খোলা হৈছে। অধিক জানিবলৈ টিপক।"</string>
<string name="app_info" msgid="5153758994129963243">"এপৰ তথ্য"</string>
<string name="go_to_web" msgid="636673528981366511">"ব্ৰাউজাৰলৈ যাওক"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"বাৰ্তালাপ খোলক"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"বাৰ্তালাপ ৱিজেট"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"আপোনাৰ গৃহ স্ক্ৰীনত কোনো বাৰ্তালাপ যোগ দিবলৈ সেইটোত টিপক"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> পূৰ্বে"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g>তকৈ কম সময়ৰ পূৰ্বে"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g>তকৈ বেছি সময়ৰ পূৰ্বে"</string>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
index 2b511430e1bb..eb2f7aa1d02d 100644
--- a/packages/SystemUI/res/values-az/strings.xml
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Skrinşot çəkməyə tətbiq və ya təşkilat tərəfindən icazə verilmir"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Redaktə edin"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Skrinşota düzəliş edin"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Daha çoxunu əhatə edin"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ekran şəklini ötürün"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Ekran şəklinə önbaxış"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Yuxarı hüdud"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Rəngləri çevirin"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Rəng korreksiyası rejimi"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Digər ayarlar"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"İstifadəçi ayarları"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Hazır"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Bağlayın"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Qoşulu"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Qoşuldu, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> batareya"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Qoşulur..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Bu cihaz <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> təşkilatına məxsusdur və VPN şəbəkəsinə qoşulub"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Təşkilat iş profilində şəbəkə ötürülməsinə nəzarət edə bilər"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> iş profilində şəbəkə ötürülməsinə nəzarət edə bilər"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"İş profili şəbəkəsi fəalliyyətini IT admini görə bilir"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Şəbəkəyə nəzarət edilə bilər"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Bu cihaz VPN şəbəkəsinə qoşulub"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"İş profiliniz <xliff:g id="VPN_APP">%1$s</xliff:g> şəbəkəsinə qoşulub"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Açıq söhbət"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Söhbət vidcetləri"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Əsas ekranınıza əlavə etmək üçün söhbətə toxunun"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> əvvəl"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Maksimum <xliff:g id="DURATION">%1$s</xliff:g> əvvəl"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Minimum <xliff:g id="DURATION">%1$s</xliff:g> əvvəl"</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index 32a48d73fe45..2f2ca09c2d8d 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikacija ili organizacija ne dozvoljavaju pravljenje snimaka ekrana"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Izmeni"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Izmenite snimak ekrana"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Snimite još"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Odbacite snimak ekrana"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Pregled snimka ekrana"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Gornja granica"</string>
@@ -385,11 +384,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Obrni boje"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Režim korekcije boje"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Još podešavanja"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Korisnička podešavanja"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Gotovo"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zatvori"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Povezan"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Povezano, nivo baterije je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Povezuje se..."</string>
@@ -536,8 +533,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Ovaj uređaj pripada organizaciji <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> i povezan je sa VPN-ovima"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Organizacija može da prati mrežni saobraćaj na poslovnom profilu"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> može da nadgleda mrežni saobraćaj na poslovnom profilu"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Aktivnost na mreži poslovnog profila je vidljiva IT administratoru"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Mreža se možda nadgleda"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Ovaj uređaj je povezan sa VPN-ovima"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Poslovni profil je povezan sa aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1106,6 +1102,14 @@
<string name="basic_status" msgid="2315371112182658176">"Otvorite konverzaciju"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Vidžeti za konverzaciju"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Dodirnite konverzaciju da biste je dodali na početni ekran"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Pre <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Pre manje od <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Pre više od <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
index 11f7440c72ff..4386e554f729 100644
--- a/packages/SystemUI/res/values-be/strings.xml
+++ b/packages/SystemUI/res/values-be/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Рабіць здымкі экрана не дазваляе праграма ці ваша арганізацыя"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Змяніць"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Змяніць здымак экрана"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Зняць больш"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Адхіліць здымак экрана"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Перадпрагляд здымка экрана"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Верхняя граніца"</string>
@@ -386,11 +385,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Інвертаваць колеры"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Рэжым карэкцыі колеру"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Дадатковыя налады"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Налады карыстальніка"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Гатова"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Закрыць"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Падлучана"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Падключана, узровень зараду акумулятара: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Падлучэнне..."</string>
@@ -539,8 +536,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Гэта прылада належыць арганізацыі \"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>\" і падключана да VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Ваша арганізацыя можа сачыць за сеткавым трафікам у вашым працоўным профілі"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> можа сачыць за сеткавым трафікам у вашым працоўным профілі"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Дзеянні працоўнага профілю ў сетцы бачныя IT-адміністратару"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"За сеткай могуць сачыць"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Гэта прылада падключана да VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Ваш працоўны профіль падключаны да праграмы \"<xliff:g id="VPN_APP">%1$s</xliff:g>\""</string>
@@ -1112,6 +1108,14 @@
<string name="basic_status" msgid="2315371112182658176">"Адкрытая размова"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Віджэты размовы"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Націсніце на размову, каб дадаць яе на галоўны экран"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> таму"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Менш за <xliff:g id="DURATION">%1$s</xliff:g> таму"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Больш за <xliff:g id="DURATION">%1$s</xliff:g> таму"</string>
@@ -1126,8 +1130,7 @@
<string name="empty_user_name" msgid="3389155775773578300">"Сябры"</string>
<string name="empty_status" msgid="5938893404951307749">"Паразмаўляем у чаце!"</string>
<string name="missed_call" msgid="4228016077700161689">"Прапушчаны выклік"</string>
- <!-- no translation found for messages_count_overflow_indicator (7850934067082006043) -->
- <skip />
+ <string name="messages_count_overflow_indicator" msgid="7850934067082006043">"<xliff:g id="NUMBER">%d</xliff:g>+"</string>
<string name="people_tile_description" msgid="8154966188085545556">"Глядзець нядаўнія паведамленні, прапушчаныя выклікі і абнаўленні стану"</string>
<string name="people_tile_title" msgid="6589377493334871272">"Размова"</string>
<string name="battery_state_unknown_notification_title" msgid="8464703640483773454">"Праблема з чытаннем індыкатара зараду акумулятара"</string>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 01282f451424..929ec21526b0 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Правенето на екранни снимки не е разрешено от приложението или организацията ви"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Редактиране"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Редактиране на екранната снимка"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Заснемане на още"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Отхвърляне на екранната снимка"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Визуализация на екранната снимка"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Горна граница"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Инвертиране на цветовете"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Режим на коригиране на цветовете"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Още настройки"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Потребителски настройки"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Затваряне"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Установена е връзка"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Свързано, батерия: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Установява се връзка..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Това устройство принадлежи на <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> и е свързано с виртуални частни мрежи (VPN)"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Организацията ви може да наблюдава трафика в мрежата в служебния ви потребителски профил"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> може да наблюдава трафика в мрежата в служебния ви потребителски профил"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Мрежовата активност в служебния потребителски профил е видима за системния ви администратор"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Мрежата може да се наблюдава"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Това устройство е свързано с виртуални частни мрежи (VPN)"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Служебният ви потребителски профил е свързан с(ъс) <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Отворен разговор"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Приспособления за разговор"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Докоснете разговор, за да го добавите към началния си екран"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Преди <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Преди по-малко от <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Преди повече от <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml
index 199c368f53ab..cf68ab7332b6 100644
--- a/packages/SystemUI/res/values-bn/strings.xml
+++ b/packages/SystemUI/res/values-bn/strings.xml
@@ -1100,6 +1100,14 @@
<string name="basic_status" msgid="2315371112182658176">"খোলা কথোপকথন"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"কথোপকথন উইজেট"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"কোনও কথোপথন আপনার হোম স্ক্রিনে যোগ করার জন্য এতে ট্যাপ করুন"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ঘণ্টা আগে"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> থেকে কিছু কম সময় আগে"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> সপ্তাহেরও আগে"</string>
diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml
index 650bc9cafcfd..e22790daac50 100644
--- a/packages/SystemUI/res/values-bs/strings.xml
+++ b/packages/SystemUI/res/values-bs/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Ova aplikacija ili vaša organizacija ne dozvoljavaju snimanje ekrana"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Uredi"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Uredite snimak ekrana"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Snimite više"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Odbacite snimak ekrana"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Pregled snimka ekrana"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Gornja granica"</string>
@@ -385,11 +384,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inverzija boja"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Način rada za ispravku boje"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Više postavki"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Korisničke postavke"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Gotovo"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zatvori"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Povezano"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Povezano, baterija <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Povezivanje..."</string>
@@ -536,8 +533,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Ovaj uređaj pripada organizaciji <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> i povezan je VPN-ovima"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Vaša organizacija može pratiti mrežni saobraćaj na vašem profilu."</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> može pratiti mrežni saobraćaj na vašem radnom profilu"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Mrežna aktivnost radnog profila je vidljiva vašem IT administratoru"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Mreža može biti nadzirana"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Ovaj uređaj je povezan VPN-ovima"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Vaš radni profil je povezan s aplikacijom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1106,6 +1102,14 @@
<string name="basic_status" msgid="2315371112182658176">"Otvoreni razgovor"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Vidžeti za razgovor"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Dodirnite razgovor da ga dodate na početni ekran"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Prije <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Prije manje od <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Prije više od <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 52dab8127382..7e523b429bee 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"L\'aplicació o la teva organització no permeten fer captures de pantalla"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Edita"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Edita la captura de pantalla"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Captura més"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ignora la captura de pantalla"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Previsualització de la captura de pantalla"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Marge superior"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inverteix colors"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Mode de correcció de color"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Més opcions"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Configuració d\'usuari"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Fet"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Tanca"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Connectat"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Connectat (<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de bateria)"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"S\'està connectant..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Aquest dispositiu pertany a <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> i està connectat a xarxes VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"És possible que la teva organització supervisi el trànsit de xarxa al teu perfil de treball"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"És possible que <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> supervisi el trànsit de xarxa del teu perfil de treball"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"L\'administrador de TI pot veure l\'activitat de la xarxa del perfil de treball"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"És possible que la xarxa estigui supervisada"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Aquest dispositiu està connectat a xarxes VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"El teu perfil de treball està connectat a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Conversa oberta"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgets de conversa"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Toca una conversa per afegir-la a la teva pantalla d\'inici"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Fa <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Fa menys de: <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Fa més de: <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index e3dcc5738619..5cde6bb096f7 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikace nebo organizace zakazuje pořizování snímků obrazovky"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Upravit"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Upravit snímek obrazovky"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Zachytit více"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Zavřít snímek obrazovky"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Náhled snímku obrazovky"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Horní hranice"</string>
@@ -386,11 +385,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Převrátit barvy"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Režim korekce barev"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Další nastavení"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Uživatelské nastavení"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Hotovo"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zavřít"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Připojeno"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Připojeno, baterie: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Připojování..."</string>
@@ -539,8 +536,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Toto zařízení patří organizaci <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> a je připojené k sítím VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Organizace může ve vašem pracovním profilu sledovat síťový provoz"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> může ve vašem pracovním profilu sledovat síťový provoz"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Aktivitu pracovního profilu na síti vidí administrátor IT"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Síť může být sledována"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Toto zařízení je připojené k sítím VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Váš pracovní profil je připojen k síti <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1112,6 +1108,14 @@
<string name="basic_status" msgid="2315371112182658176">"Otevřít konverzaci"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgety konverzací"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Klepnutím na konverzaci ji přidáte na plochu"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Před <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Před méně než <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Před více než <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index 5c236277a9bf..50a68f9b8992 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Appen eller din organisation tillader ikke, at du tager screenshots"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Rediger"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Rediger screenshot"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Medtag mere"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Luk screenshot"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Forhåndsvisning af screenshot"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Øverste kant"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Byt om på farver"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Farvekorrigeringstilstand"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Flere indstillinger"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Brugerindstillinger"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Udfør"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Luk"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Tilsluttet"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Tilsluttet – batteriniveau <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Opretter forbindelse…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Denne enhed tilhører <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> og har forbindelse til VPN-netværk"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Din organisation kan overvåge netværkstrafikken på din arbejdsprofil"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kan overvåge netværkstrafik på din arbejdsprofil"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Din it-administrator kan se netværksaktivitet på din arbejdsprofil"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Netværket kan være overvåget"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Denne enhed har forbindelse til VPN-netværk"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Din arbejdsprofil har forbindelse til <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Åben samtale"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Samtalewidgets"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tryk på en samtale for at føje den til din startskærm"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"For <xliff:g id="DURATION">%1$s</xliff:g> siden"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"For mindre end <xliff:g id="DURATION">%1$s</xliff:g> siden"</string>
<string name="over_timestamp" msgid="4765793502859358634">"For mere end <xliff:g id="DURATION">%1$s</xliff:g> siden"</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 971752c36ed8..ef3cf2130064 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Die App oder deine Organisation lässt das Erstellen von Screenshots nicht zu"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Bearbeiten"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Screenshot bearbeiten"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Mehr aufnehmen"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Screenshot schließen"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Screenshotvorschau"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Oberer Rand"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Farben umkehren"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Farbkorrekturmodus"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Weitere Einstellungen"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Nutzereinstellungen"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Fertig"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Schließen"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Verbunden"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Verbunden, Akkustand: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Verbindung wird hergestellt…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Dieses Gerät gehört <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> und ist mit VPNs verbunden"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Deine Organisation kann den Netzwerkverkehr in deinem Arbeitsprofil überwachen"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kann den Netzwerkverkehr in deinem Arbeitsprofil überwachen"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Dein IT-Administrator kann die Netzwerkaktivitäten deines Arbeitsprofils sehen"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Das Netzwerk wird eventuell überwacht"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Dieses Gerät ist mit VPNs verbunden"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Dein Arbeitsprofil ist mit <xliff:g id="VPN_APP">%1$s</xliff:g> verbunden"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Offene Unterhaltung"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Unterhaltungs-Widgets"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tippe auf eine Unterhaltung, um sie deinem Startbildschirm hinzuzufügen"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Vor <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Vor weniger als <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Vor über <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 818980894c29..a49b6498f44e 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Η λήψη στιγμιότυπων οθόνης δεν επιτρέπεται από την εφαρμογή ή τον οργανισμό σας"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Επεξεργασία"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Επεξεργασία στιγμιότυπου οθόνης"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Λήψη περισσότερων"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Παράβλεψη στιγμιότυπου οθόνης"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Προεπισκόπηση στιγμιότυπου οθόνης"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Ανώτατο όριο"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Αντιστροφή χρωμάτων"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Λειτουργία διόρθωσης χρώματος"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Περισσότερες ρυθμίσεις"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Ρυθμίσεις χρήστη"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Τέλος"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Κλείσιμο"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Συνδέθηκε"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Συνδεδεμένη, μπαταρία <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Σύνδεση…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Αυτή η συσκευή ανήκει στον οργανισμό <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> και είναι συνδεδεμένη σε ορισμένα VPN."</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Ο οργανισμός σας μπορεί να παρακολουθεί την επισκεψιμότητα δικτύου στο προφίλ εργασίας σας"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Ο οργανισμός <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> μπορεί να παρακολουθεί την επισκεψιμότητα δικτύου στο προφίλ εργασίας σας"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Η δραστηριότητα δικτύου του προφίλ εργασίας είναι ορατή στον διαχειριστή IT σας"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Το δίκτυο ενδέχεται να παρακολουθείται"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Αυτή η συσκευή είναι συνδεδεμένη σε ορισμένα VPN."</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Το προφίλ εργασίας σας είναι συνδεδεμένο στην εφαρμογή <xliff:g id="VPN_APP">%1$s</xliff:g>."</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Άνοιγμα συνομιλίας"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Γραφικά στοιχεία συνομιλίας"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Πατήστε μια συνομιλία για να την προσθέσετε στην αρχική οθόνη"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> πριν"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Λιγότερο από <xliff:g id="DURATION">%1$s</xliff:g> πριν"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Περισσότερο από <xliff:g id="DURATION">%1$s</xliff:g> πριν"</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 6ce83ccec75c..bd9a0605cdeb 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -177,12 +177,9 @@
<string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"Dismiss"</string>
<string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Touch the fingerprint sensor"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="4465698996175640549">"Fingerprint icon"</string>
- <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (6178228876763024452) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_use_fingerprint (923777032861374285) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_cant_recognize_fp_use_screenlock (4805522676254378353) -->
- <skip />
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Can’t recognise face. Use fingerprint instead."</string>
+ <string name="fingerprint_dialog_use_fingerprint" msgid="923777032861374285">"Use your fingerprint to continue"</string>
+ <string name="fingerprint_dialog_cant_recognize_fp_use_screenlock" msgid="4805522676254378353">"Can’t recognise fingerprint. Use screen lock instead."</string>
<string name="face_dialog_looking_for_face" msgid="2656848512116189509">"Looking for you…"</string>
<string name="accessibility_face_dialog_face_icon" msgid="8335095612223716768">"Face icon"</string>
<string name="accessibility_compatibility_zoom_button" msgid="5845799798708790509">"Compatibility zoom button."</string>
@@ -1096,6 +1093,10 @@
<string name="basic_status" msgid="2315371112182658176">"Open conversation"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Conversation widgets"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tap a conversation to add it to your home screen"</string>
+ <string name="no_conversations_text" msgid="7362374212649891057">"Check back here once you get some messages"</string>
+ <string name="priority_conversations" msgid="3967482288896653039">"Priority conversations"</string>
+ <string name="recent_conversations" msgid="8531874684782574622">"Recent conversations"</string>
+ <string name="okay" msgid="6490552955618608554">"OK"</string>
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Less than <xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Over <xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml
index 9c7ce8759999..2158ed849858 100644
--- a/packages/SystemUI/res/values-en-rCA/strings.xml
+++ b/packages/SystemUI/res/values-en-rCA/strings.xml
@@ -177,12 +177,9 @@
<string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"Dismiss"</string>
<string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Touch the fingerprint sensor"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="4465698996175640549">"Fingerprint icon"</string>
- <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (6178228876763024452) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_use_fingerprint (923777032861374285) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_cant_recognize_fp_use_screenlock (4805522676254378353) -->
- <skip />
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Can’t recognise face. Use fingerprint instead."</string>
+ <string name="fingerprint_dialog_use_fingerprint" msgid="923777032861374285">"Use your fingerprint to continue"</string>
+ <string name="fingerprint_dialog_cant_recognize_fp_use_screenlock" msgid="4805522676254378353">"Can’t recognise fingerprint. Use screen lock instead."</string>
<string name="face_dialog_looking_for_face" msgid="2656848512116189509">"Looking for you…"</string>
<string name="accessibility_face_dialog_face_icon" msgid="8335095612223716768">"Face icon"</string>
<string name="accessibility_compatibility_zoom_button" msgid="5845799798708790509">"Compatibility zoom button."</string>
@@ -1096,6 +1093,10 @@
<string name="basic_status" msgid="2315371112182658176">"Open conversation"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Conversation widgets"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tap a conversation to add it to your home screen"</string>
+ <string name="no_conversations_text" msgid="7362374212649891057">"Check back here once you get some messages"</string>
+ <string name="priority_conversations" msgid="3967482288896653039">"Priority conversations"</string>
+ <string name="recent_conversations" msgid="8531874684782574622">"Recent conversations"</string>
+ <string name="okay" msgid="6490552955618608554">"OK"</string>
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Less than <xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Over <xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 6ce83ccec75c..bd9a0605cdeb 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -177,12 +177,9 @@
<string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"Dismiss"</string>
<string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Touch the fingerprint sensor"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="4465698996175640549">"Fingerprint icon"</string>
- <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (6178228876763024452) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_use_fingerprint (923777032861374285) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_cant_recognize_fp_use_screenlock (4805522676254378353) -->
- <skip />
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Can’t recognise face. Use fingerprint instead."</string>
+ <string name="fingerprint_dialog_use_fingerprint" msgid="923777032861374285">"Use your fingerprint to continue"</string>
+ <string name="fingerprint_dialog_cant_recognize_fp_use_screenlock" msgid="4805522676254378353">"Can’t recognise fingerprint. Use screen lock instead."</string>
<string name="face_dialog_looking_for_face" msgid="2656848512116189509">"Looking for you…"</string>
<string name="accessibility_face_dialog_face_icon" msgid="8335095612223716768">"Face icon"</string>
<string name="accessibility_compatibility_zoom_button" msgid="5845799798708790509">"Compatibility zoom button."</string>
@@ -1096,6 +1093,10 @@
<string name="basic_status" msgid="2315371112182658176">"Open conversation"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Conversation widgets"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tap a conversation to add it to your home screen"</string>
+ <string name="no_conversations_text" msgid="7362374212649891057">"Check back here once you get some messages"</string>
+ <string name="priority_conversations" msgid="3967482288896653039">"Priority conversations"</string>
+ <string name="recent_conversations" msgid="8531874684782574622">"Recent conversations"</string>
+ <string name="okay" msgid="6490552955618608554">"OK"</string>
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Less than <xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Over <xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 6ce83ccec75c..bd9a0605cdeb 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -177,12 +177,9 @@
<string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"Dismiss"</string>
<string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"Touch the fingerprint sensor"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="4465698996175640549">"Fingerprint icon"</string>
- <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (6178228876763024452) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_use_fingerprint (923777032861374285) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_cant_recognize_fp_use_screenlock (4805522676254378353) -->
- <skip />
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"Can’t recognise face. Use fingerprint instead."</string>
+ <string name="fingerprint_dialog_use_fingerprint" msgid="923777032861374285">"Use your fingerprint to continue"</string>
+ <string name="fingerprint_dialog_cant_recognize_fp_use_screenlock" msgid="4805522676254378353">"Can’t recognise fingerprint. Use screen lock instead."</string>
<string name="face_dialog_looking_for_face" msgid="2656848512116189509">"Looking for you…"</string>
<string name="accessibility_face_dialog_face_icon" msgid="8335095612223716768">"Face icon"</string>
<string name="accessibility_compatibility_zoom_button" msgid="5845799798708790509">"Compatibility zoom button."</string>
@@ -1096,6 +1093,10 @@
<string name="basic_status" msgid="2315371112182658176">"Open conversation"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Conversation widgets"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tap a conversation to add it to your home screen"</string>
+ <string name="no_conversations_text" msgid="7362374212649891057">"Check back here once you get some messages"</string>
+ <string name="priority_conversations" msgid="3967482288896653039">"Priority conversations"</string>
+ <string name="recent_conversations" msgid="8531874684782574622">"Recent conversations"</string>
+ <string name="okay" msgid="6490552955618608554">"OK"</string>
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Less than <xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Over <xliff:g id="DURATION">%1$s</xliff:g> ago"</string>
diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml
index c036c1bf0423..3ed7688ba9c0 100644
--- a/packages/SystemUI/res/values-en-rXC/strings.xml
+++ b/packages/SystemUI/res/values-en-rXC/strings.xml
@@ -177,12 +177,9 @@
<string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎Dismiss‎‏‎‎‏‎"</string>
<string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‎Touch the fingerprint sensor‎‏‎‎‏‎"</string>
<string name="accessibility_fingerprint_dialog_fingerprint_icon" msgid="4465698996175640549">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‎‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‎‏‎‏‎Fingerprint icon‎‏‎‎‏‎"</string>
- <!-- no translation found for fingerprint_dialog_use_fingerprint_instead (6178228876763024452) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_use_fingerprint (923777032861374285) -->
- <skip />
- <!-- no translation found for fingerprint_dialog_cant_recognize_fp_use_screenlock (4805522676254378353) -->
- <skip />
+ <string name="fingerprint_dialog_use_fingerprint_instead" msgid="6178228876763024452">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‎‏‎‎‎Can’t recognize face. Use fingerprint instead.‎‏‎‎‏‎"</string>
+ <string name="fingerprint_dialog_use_fingerprint" msgid="923777032861374285">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‏‏‎‏‎‎‏‏‎‏‎Use your fingerprint to continue‎‏‎‎‏‎"</string>
+ <string name="fingerprint_dialog_cant_recognize_fp_use_screenlock" msgid="4805522676254378353">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‎‎‏‎Can’t recognize fingerprint. Use screen lock instead.‎‏‎‎‏‎"</string>
<string name="face_dialog_looking_for_face" msgid="2656848512116189509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‎Looking for you…‎‏‎‎‏‎"</string>
<string name="accessibility_face_dialog_face_icon" msgid="8335095612223716768">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎Face icon‎‏‎‎‏‎"</string>
<string name="accessibility_compatibility_zoom_button" msgid="5845799798708790509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎Compatibility zoom button.‎‏‎‎‏‎"</string>
@@ -1096,6 +1093,10 @@
<string name="basic_status" msgid="2315371112182658176">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎Open conversation‎‏‎‎‏‎"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎Conversation widgets‎‏‎‎‏‎"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎Tap a conversation to add it to your Home screen‎‏‎‎‏‎"</string>
+ <string name="no_conversations_text" msgid="7362374212649891057">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‏‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‎‏‏‏‏‎‎‎‏‎Check back here once you get some messages‎‏‎‎‏‎"</string>
+ <string name="priority_conversations" msgid="3967482288896653039">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎Priority conversations‎‏‎‎‏‎"</string>
+ <string name="recent_conversations" msgid="8531874684782574622">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎Recent conversations‎‏‎‎‏‎"</string>
+ <string name="okay" msgid="6490552955618608554">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‎‎Okay‎‏‎‎‏‎"</string>
<string name="timestamp" msgid="6577851592534538533">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="DURATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ ago‎‏‎‎‏‎"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‎‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‎‏‎‏‎Less than ‎‏‎‎‏‏‎<xliff:g id="DURATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ ago‎‏‎‎‏‎"</string>
<string name="over_timestamp" msgid="4765793502859358634">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‎Over ‎‏‎‎‏‏‎<xliff:g id="DURATION">%1$s</xliff:g>‎‏‎‎‏‏‏‎ ago‎‏‎‎‏‎"</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 798448428215..6bb486da10f9 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"La app o tu organización no permiten las capturas de pantalla"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Editar"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Editar captura de pantalla"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Capturar más"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Descartar captura de pantalla"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Vista previa de la captura de pantalla"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Límite superior"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Invertir colores"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Modo de corrección de color"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Más configuraciones"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Configuración del usuario"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Listo"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Cerrar"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Conectado"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Conectado. Batería: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Conectando…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Este dispositivo pertenece a <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> y está conectado a VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Tu organización puede controlar el tráfico de red en tu perfil de trabajo"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Es posible que <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> controle el tráfico de red en tu perfil de trabajo"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"El administrador de IT puede ver la actividad de la red de tu perfil de trabajo"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Es posible que la red esté supervisada"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Este dispositivo está conectado a VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Tu perfil de trabajo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Conversación abierta"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgets de conversación"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Presiona una conversación para agregarla a tu pantalla principal"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Hace <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Hace menos de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Hace más de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index c80482ca92d1..9d6e3fa85a92 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"La aplicación o tu organización no permiten realizar capturas de pantalla"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Editar"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Editar captura de pantalla"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Capturar más"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Cerrar captura de pantalla"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Vista previa de captura de pantalla"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Margen superior"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Invertir colores"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Modo de corrección de color"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Más ajustes"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Ajustes de usuario"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Listo"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Cerrar"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Conectado"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Conectado (<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> de batería)"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Conectando..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Este dispositivo pertenece a <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> y está conectado a varias VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Tu organización puede supervisar el tráfico de red de tu perfil de trabajo"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> puede supervisar el tráfico de red de tu perfil de trabajo"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Tu administrador de TI puede ver la actividad de red del perfil de trabajo"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Puede que la red esté supervisada"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Este dispositivo está conectado a varias VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Tu perfil de trabajo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Conversación abierta"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgets de conversación"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Toca una conversación para añadirla a la pantalla de inicio"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Hace <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Hace menos de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Hace más de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
index 1500a315457b..14aed4ef7efd 100644
--- a/packages/SystemUI/res/values-et/strings.xml
+++ b/packages/SystemUI/res/values-et/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Rakendus või teie organisatsioon ei luba ekraanipilte jäädvustada"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Muutmine"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Ekraanipildi muutmine"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Jäädvustage rohkem"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ekraanipildist loobumine"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Ekraanipildi eelvaade"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Ülempiir"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Vaheta värve"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Värviparandusrežiim"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Rohkem seadeid"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Kasutaja seaded"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Valmis"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Sule"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Ühendatud"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Ühendatud, aku <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Ühenduse loomine ..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"See seade kuulub organisatsioonile <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ja on ühendatud VPN-idega"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Teie organisatsioon võib jälgida teie tööprofiilil võrguliiklust"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> võib jälgida võrguliiklust teie tööprofiilil"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Tööprofiili võrgutegevused on teie IT-administraatorile nähtavad"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Võrku võidakse jälgida"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"See seade on ühendatud VPN-idega"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Teie tööprofiil on ühendatud rakendusega <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Avage vestlus"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Vestlusvidinad"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Puudutage vestlust, et lisada see oma avakuvale"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> tagasi"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Vähem kui <xliff:g id="DURATION">%1$s</xliff:g> tagasi"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Üle <xliff:g id="DURATION">%1$s</xliff:g> tagasi"</string>
diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml
index 9e921fe90f85..2f1c7a585c07 100644
--- a/packages/SystemUI/res/values-eu/strings.xml
+++ b/packages/SystemUI/res/values-eu/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikazioak edo erakundeak ez du onartzen pantaila-argazkiak ateratzea"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Editatu"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Editatu pantaila-argazkia"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Atera eduki gehiago argazkian"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Baztertu pantaila-argazkia"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Pantaila-argazkiaren aurrebista"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Goiko ertza"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Alderantzikatu koloreak"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Koloreen zuzenketa modua"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Ezarpen gehiago"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Erabiltzaile-ezarpenak"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Eginda"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Itxi"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Konektatuta"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Konektatuta. Bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Konektatzen…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Gailu hau <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> erakundearena da, eta VPN sareetara dago konektatuta"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Baliteke erakundeak laneko profileko sareko trafikoa gainbegiratzea"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Baliteke <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> erakundeak laneko profilaren sareko trafikoa gainbegiratzea"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"IKT saileko administratzaileak laneko profilaren sarearen jarduera ikus dezake"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Baliteke sarea gainbegiratuta egotea"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Gailu hau VPN sareetara dago konektatuta"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"<xliff:g id="VPN_APP">%1$s</xliff:g> sarera konektatuta daukazu laneko profila"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Elkarrizketa irekia"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Elkarrizketa-widgetak"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Sakatu elkarrizketa bat hasierako pantailan gehitzeko"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Duela <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Duela <xliff:g id="DURATION">%1$s</xliff:g> baino gutxiago"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Duela <xliff:g id="DURATION">%1$s</xliff:g> baino gehiago"</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 20a4b831b9a5..6eba9af6690b 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"برنامه یا سازمان شما اجازه نمی‌دهند نماگرفت بگیرید."</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"ویرایش"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"ویرایش نماگرفت"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"ضبط محتوای بیشتر"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"رد کردن نماگرفت"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"پیش‌نمایش نماگرفت"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"مرز بالایی"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"برگردان رنگ‌ها"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"حالت تصحیح رنگ"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"تنظیمات بیشتر"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"تنظیمات کاربر"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"تمام"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"بستن"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"متصل"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"متصل، باتری <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"در حال اتصال..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"‏این دستگاه به <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> تعلق دارد و به VPN متصل است"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"ممکن است سازمان شما ترافیک شبکه را در نمایه کاری‌تان پایش کند"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ممکن است ترافیک شبکه را در نمایه کاری شما پایش کند"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"سرپرست سیستم می‌تواند فعالیت شبکه نمایه کاری را ببیند"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ممکن است شبکه پایش شود"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"‏این دستگاه به شبکه‌های VPN متصل است"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"نمایه کاری به <xliff:g id="VPN_APP">%1$s</xliff:g> متصل است"</string>
@@ -952,7 +948,7 @@
<string name="notification_channel_storage" msgid="2720725707628094977">"فضای ذخیره‌سازی"</string>
<string name="notification_channel_hints" msgid="7703783206000346876">"نکات"</string>
<string name="instant_apps" msgid="8337185853050247304">"برنامه‌های فوری"</string>
- <string name="instant_apps_title" msgid="8942706782103036910">"<xliff:g id="APP">%1$s</xliff:g> درحال اجرا"</string>
+ <string name="instant_apps_title" msgid="8942706782103036910">"‫‫<xliff:g id="APP">%1$s</xliff:g> درحال اجرا"</string>
<string name="instant_apps_message" msgid="6112428971833011754">"برنامه بدون نصب شدن باز شد."</string>
<string name="instant_apps_message_with_help" msgid="1816952263531203932">"برنامه بدون نصب شدن باز شد. برای اطلاعات بیشتر ضربه بزنید."</string>
<string name="app_info" msgid="5153758994129963243">"اطلاعات برنامه"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"باز کردن مکالمه"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"ابزارک‌های مکالمه"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"روی مکالمه‌ای ضربه بزنید تا به «صفحه اصلی» اضافه شود"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"‫<xliff:g id="DURATION">%1$s</xliff:g> پیش"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"کمتر از <xliff:g id="DURATION">%1$s</xliff:g> قبل"</string>
<string name="over_timestamp" msgid="4765793502859358634">"بیش‌از <xliff:g id="DURATION">%1$s</xliff:g> قبل"</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 339355015a60..31a54baf396a 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Sovellus tai organisaatio ei salli kuvakaappauksien tallentamista."</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Muuta"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Muokkaa kuvakaappausta"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Kuvaa enemmän"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Hylkää kuvakaappaus"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Kuvakaappauksen esikatselu"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Yläraja"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Käänteiset värit"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Värinkorjaustila"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Lisäasetukset"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Käyttäjäasetukset"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Valmis"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Sulje"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Yhdistetty"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Yhdistetty, akun varaus <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Yhdistetään…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> omistaa tämän laitteen, joka on yhdistetty VPN:iin"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Organisaatiosi voi valvoa työprofiilisi verkkoliikennettä."</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> voi valvoa työprofiilisi verkkoliikennettä."</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"IT-järjestelmänvalvoja näkee työprofiilin verkkotoiminnan"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Verkkoa saatetaan valvoa"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Tämä laite on yhdistetty VPN:iin"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Työprofiilisi on yhdistetty tähän: <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Avaa keskustelu"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Keskusteluwidgetit"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Lisää keskustelu aloitusnäytölle napauttamalla sitä"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> sitten"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Alle <xliff:g id="DURATION">%1$s</xliff:g> sitten"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Yli <xliff:g id="DURATION">%1$s</xliff:g> sitten"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 53ef194e8b8b..838b699b7882 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -1100,6 +1100,14 @@
<string name="basic_status" msgid="2315371112182658176">"Ouvrir la conversation"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgets de conversation"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Touchez une conversation pour l\'ajouter à votre écran d\'accueil"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Il y a <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Il y a moins de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Il y a plus de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index f40d6aaba741..cba45cd19f50 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Les captures d\'écran ne sont pas autorisées par l\'application ni par votre organisation"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Modifier"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Modifier la capture d\'écran"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Capturer plus"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Fermer la capture d\'écran"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Aperçu de la capture d\'écran"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Limite supérieure"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inverser les couleurs"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Mode de correction des couleurs"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Plus de paramètres"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Paramètres utilisateur"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"OK"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Fermer"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Connecté"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Connecté, batterie à <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Connexion en cours..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Cet appareil appartient à <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> et il est connecté à des VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Votre entreprise peut contrôler votre trafic réseau dans votre profil professionnel"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> peut contrôler votre trafic réseau dans votre profil professionnel"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Votre administrateur informatique peut voir l\'activité sur le réseau de votre profil professionnel"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Il est possible que le réseau soit surveillé"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Cet appareil est connecté à des VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Votre profil professionnel est connecté à <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Conversation ouverte"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgets de conversation"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Appuyez sur une conversation pour l\'ajouter à votre écran d\'accueil"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Il y a <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Il y a moins de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Il y a plus de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml
index 2ba0738e5bbf..ac792e375f1e 100644
--- a/packages/SystemUI/res/values-gl/strings.xml
+++ b/packages/SystemUI/res/values-gl/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"A aplicación ou a túa organización non permite realizar capturas de pantalla"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Editar"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Editar a captura de pantalla"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Capturar máis"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ignorar a captura de pantalla"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Vista previa da captura de pantalla"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Bordo superior"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inverter cores"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Modo de corrección de cor"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Máis opcións"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Configuración de usuario"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Feito"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Pechar"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Conectado"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Dispositivo conectado. Nivel de batería: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Conectando..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Este dispositivo pertence a <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> e está conectado a varias VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"A túa organización pode controlar o tráfico de rede do teu perfil de traballo"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> pode controlar o tráfico de rede do teu perfil de traballo"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"O teu administrador de TI pode ver a actividade que leves a cabo na rede co perfil de traballo"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"É posible que se controle a rede"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Este dispositivo está conectado a varias VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"O teu perfil de traballo está conectado a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -954,7 +950,7 @@
<string name="instant_apps" msgid="8337185853050247304">"Aplicacións Instantáneas"</string>
<string name="instant_apps_title" msgid="8942706782103036910">"Estase executando <xliff:g id="APP">%1$s</xliff:g>"</string>
<string name="instant_apps_message" msgid="6112428971833011754">"Abriuse a aplicación sen ter que instalala."</string>
- <string name="instant_apps_message_with_help" msgid="1816952263531203932">"Abriuse a aplicación sen ter que instalala. Tocar para obter máis información."</string>
+ <string name="instant_apps_message_with_help" msgid="1816952263531203932">"Abriuse a aplicación sen ter que instalala. Toca para obter máis información."</string>
<string name="app_info" msgid="5153758994129963243">"Información da aplicación"</string>
<string name="go_to_web" msgid="636673528981366511">"Ir ao navegador"</string>
<string name="mobile_data" msgid="4564407557775397216">"Datos móbiles"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Conversa aberta"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgets de conversa"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Toca unha conversa para engadila á pantalla de inicio"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Hai <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Hai menos de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Hai máis de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml
index dbcfe5e2d129..e178bb4104be 100644
--- a/packages/SystemUI/res/values-gu/strings.xml
+++ b/packages/SystemUI/res/values-gu/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ઍપ્લિકેશન કે તમારી સંસ્થા દ્વારા સ્ક્રીનશૉટ લેવાની મંજૂરી નથી"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"ફેરફાર કરો"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"સ્ક્રીનશૉટમાં ફેરફાર કરો"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"વધુ કૅપ્ચર કરો"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"સ્ક્રીનશૉટ છોડી દો"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"સ્ક્રીનશૉટનો પ્રીવ્યૂ"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"સ્ક્રીનશૉટની સૌથી ઉપરની બાજુની સીમા"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"રંગોને ઉલટાવો"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"રંગ સુધારણા મોડ"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"વધુ સેટિંગ"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"વપરાશકર્તા સેટિંગ"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"થઈ ગયું"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"બંધ કરો"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"કનેક્ટ થયેલ"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"કનેક્ટ કરેલ, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> બૅટરી"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"કનેક્ટ કરી રહ્યું છે..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"આ ડિવાઇસ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>ની માલિકીનું છે અને VPNsથી કનેક્ટ કરેલું છે"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"તમારી સંસ્થા તમારી કાર્ય પ્રોફાઇલમાં નેટવર્ક ટ્રાફિકનું નિયમન કરી શકે છે"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> તમારી કાર્ય પ્રોફાઇલમાં નેટવર્ક ટ્રાફિકનું નિયમન કરી શકે છે"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"ઑફિસ માટેની ઍપની નેટવર્ક પ્રવૃત્તિને તમારા IT વ્યવસ્થાપક જોઈ શકે છે"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"નેટવર્કનું નિયમન કરવામાં આવી શકે છે"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"આ ડિવાઇસ VPNsથી કનેક્ટ કરેલું છે"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"તમારી ઑફિસની પ્રોફાઇલ <xliff:g id="VPN_APP">%1$s</xliff:g>થી કનેક્ટ કરેલી છે"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"વાતચીત ખોલો"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"વાતચીતના વિજેટ"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"તમારી હોમ સ્ક્રીનમાં વાતચીત ઉમેરવા માટે તેના પર ટૅપ કરો"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> પહેલાં"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g>થી ઓછા સમય પહેલાં"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> કરતાં વધુ સમય પહેલાં"</string>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 53ea9dd0452c..54a56fcc8467 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ऐप्लिकेशन या आपका संगठन स्क्रीनशॉट लेने की अनुमति नहीं देता"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"बदलाव करें"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"स्क्रीनशॉट में बदलाव करें"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"ज़्यादा जानकारी कैप्चर करें"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"स्क्रीनशॉट को खारिज करें"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"स्क्रीनशॉट की झलक"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"स्क्रीनशॉट को ऊपर से काटने की सीमा"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"रंग उलटें"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"रंग सुधार मोड"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"और सेटिंग"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"उपयोगकर्ता सेटिंग"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"हो गया"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"बंद करें"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"कनेक्ट है"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"कनेक्ट किया गया, बैटरी <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> है"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"कनेक्ट हो रहा है..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"इस डिवाइस का मालिकाना हक <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> के पास है. इस डिवाइस को वीपीएन से कनेक्ट किया गया है"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"आपका संगठन आपकी वर्क प्रोफ़ाइल में नेटवर्क ट्रैफ़िक की निगरानी कर सकता है"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> आपकी वर्क प्रोफ़ाइल में नेटवर्क ट्रैफ़िक की निगरानी कर सकता है"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"आपका आईटी एडमिन आपकी वर्क प्रोफ़ाइल के नेटवर्क से जुड़ी गतिविधि देख सकता है"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"नेटवर्क की निगरानी की जा सकती है"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"इस डिवाइस को वीपीएन से कनेक्ट किया गया है"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"आपकी वर्क प्रोफ़ाइल <xliff:g id="VPN_APP">%1$s</xliff:g> से कनेक्ट की गई है"</string>
@@ -954,7 +950,7 @@
<string name="instant_apps" msgid="8337185853050247304">"Instant Apps"</string>
<string name="instant_apps_title" msgid="8942706782103036910">"<xliff:g id="APP">%1$s</xliff:g> चल रहा है"</string>
<string name="instant_apps_message" msgid="6112428971833011754">"ऐप्लिकेशन इंस्टॉल किए बिना ही खुल गया है."</string>
- <string name="instant_apps_message_with_help" msgid="1816952263531203932">"ऐप्लिकेशन इंस्टॉल किए बिना ही खुल गया है. ज़्यादा जानने के लिए टैप करें."</string>
+ <string name="instant_apps_message_with_help" msgid="1816952263531203932">"इस ऐप्लिकेशन को इंस्टॉल करने की ज़रूरत नहीं पड़ती. ज़्यादा जानकारी के लिए इस लिंक पर टैप करें."</string>
<string name="app_info" msgid="5153758994129963243">"ऐप्लिकेशन की जानकारी"</string>
<string name="go_to_web" msgid="636673528981366511">"ब्राउज़र पर जाएं"</string>
<string name="mobile_data" msgid="4564407557775397216">"मोबाइल डेटा"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"ऐसी बातचीत जिसमें इंटरैक्शन डेटा मौजूद नहीं है"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"बातचीत विजेट"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"किसी बातचीत को होम स्क्रीन पर जोड़ने के लिए, उस बातचीत पर टैप करें"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> पहले"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> से थोड़ा पहले"</string>
<string name="over_timestamp" msgid="4765793502859358634">"करीब <xliff:g id="DURATION">%1$s</xliff:g> से ज़्यादा"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index dfc2967560a7..abf4312302b8 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikacija ili vaša organizacija ne dopuštaju snimanje zaslona"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Uredi"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Uređivanje snimke zaslona"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Snimite više"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Odbacivanje snimke zaslona"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Pregled snimke zaslona"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Gornja granica"</string>
@@ -385,11 +384,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Zamjena boja"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Način korekcije boje"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Više postavki"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Korisničke postavke"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Gotovo"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zatvori"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Povezano"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Povezano, baterija <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Povezivanje..."</string>
@@ -536,8 +533,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Ovaj uređaj pripada organizaciji <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> i povezan je s VPN-ovima"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Vaša organizacija može nadzirati mrežni promet na vašem radnom profilu"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Organizacija <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> može nadzirati mrežni promet na vašem radnom profilu"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Mrežna aktivnost poslovnog profila vidljiva je vašem IT administratoru"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Mreža se možda nadzire"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Ovaj je uređaj povezan s VPN-ovima"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Vaš poslovni profil povezan je s mrežom <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1106,6 +1102,14 @@
<string name="basic_status" msgid="2315371112182658176">"Otvoreni razgovor"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgeti razgovora"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Dodirnite razgovor da biste ga dodali na početni zaslon"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Prije <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Prije manje od <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Prije više od <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index e6a4e3ce6e74..bd75c0839d52 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Az alkalmazás vagy az Ön szervezete nem engedélyezi képernyőkép készítését"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Szerkesztés"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Képernyőkép szerkesztése"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Több rögzítése"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Képernyőkép elvetése"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Képernyőkép előnézete"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Felső határ"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Színek invertálása"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Színjavítás mód"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"További beállítások"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Felhasználói beállítások"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Kész"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Bezárás"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Csatlakoztatva"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Csatlakoztatva; az akkumulátor töltöttségi szintje: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Csatlakozás…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Ez az eszköz a(z) <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> tulajdonában van, és VPN-ekhez van csatlakoztatva"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Szervezete figyelheti a munkaprofil hálózati forgalmát"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"A(z) <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> figyelheti a munkaprofil hálózati forgalmát"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Munkaprofilja hálózati tevékenységét láthatja a rendszergazdája"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Elképzelhető, hogy a hálózatot figyelik"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Ez az eszköz VPN-ekhez van csatlakoztatva"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Munkaprofilja össze van kapcsolva a(z) <xliff:g id="VPN_APP">%1$s</xliff:g> alkalmazással"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Beszélgetés megnyitása"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Beszélgetési modulok"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Koppintson a kívánt beszélgetésre a kezdőképernyőre való felvételhez"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Ennyi ideje: <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Kevesebb, mint ennyi ideje: <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Több, mint ennyi ideje: <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml
index b598f01a7fc8..282a2ae1111f 100644
--- a/packages/SystemUI/res/values-hy/strings.xml
+++ b/packages/SystemUI/res/values-hy/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Հավելվածը կամ ձեր կազմակերպությունը չի թույլատրում սքրինշոթի ստացումը"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Փոփոխել"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Փոփոխել սքրինշոթը"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Նկարեք ավելի մեծ տարածք"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Փակել սքրինշոթը"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Սքրինշոթի նախադիտում"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Վերևի սահմանագիծ"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Շրջել գույները"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Գունաշտկման ռեժիմ"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Հավելյալ կարգավորումներ"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Օգտատիրոջ կարգավորումներ"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Պատրաստ է"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Փակել"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Միացված է"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Միացված է, մարտկոցի լիցք՝ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Միանում է..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Այս սարքը պատկանում է «<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>» կազմակերպությանը և միացված է վիրտուալ մասնավոր ցանցերի"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Ձեր կազմակերպությունը կարող է վերահսկել ձեր աշխատանքային պրոֆիլի ցանցային թրաֆիկը"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> կազմակերպությունը կարող է վերահսկել ձեր աշխատանքային պրոֆիլի ցանցային թրաֆիկը"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Աշխատանքային պրոֆիլով կատարված գործողությունները տեսանելի են ձեր ՏՏ ադմինիստրատորին"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Ցանցը կարող է վերահսկվել"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Այս սարքը միացված է վիրտուալ մասնավոր ցանցերի"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Ձեր աշխատանքային պրոֆիլը միացված է <xliff:g id="VPN_APP">%1$s</xliff:g> ցանցին"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Բաց զրույց"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Զրույցի վիջեթներ"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Հպեք զրույցին՝ այն հիմնական էկրանին ավելացնելու համար"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> առաջ"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Առավելագույնը <xliff:g id="DURATION">%1$s</xliff:g> առաջ"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Ավելի քան <xliff:g id="DURATION">%1$s</xliff:g> առաջ"</string>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index a823822bb2e6..4872a6ebd7ed 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Mengambil screenshot tidak diizinkan oleh aplikasi atau organisasi"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Edit"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Mengedit screenshot"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Rekam lagi"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Menutup screenshot"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Pratinjau screenshot"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Batas atas"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inversi warna"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Mode koreksi warna"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Setelan lainnya"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Setelan pengguna"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Selesai"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Tutup"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Tersambung"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Terhubung, baterai <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Menyambung..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Perangkat ini milik <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> dan terhubung ke VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Organisasi dapat memantau traffic jaringan di profil kerja"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> mungkin memantau traffic jaringan di profil kerja Anda"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Aktivitas jaringan profil kerja dapat dilihat oleh admin IT Anda"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Jaringan mungkin dipantau"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Perangkat ini terhubung ke VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Profil kerja Anda terhubung ke <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -952,7 +948,7 @@
<string name="notification_channel_storage" msgid="2720725707628094977">"Penyimpanan"</string>
<string name="notification_channel_hints" msgid="7703783206000346876">"Petunjuk"</string>
<string name="instant_apps" msgid="8337185853050247304">"Aplikasi Instan"</string>
- <string name="instant_apps_title" msgid="8942706782103036910">"<xliff:g id="APP">%1$s</xliff:g> berjalan"</string>
+ <string name="instant_apps_title" msgid="8942706782103036910">"<xliff:g id="APP">%1$s</xliff:g> sedang berjalan"</string>
<string name="instant_apps_message" msgid="6112428971833011754">"Aplikasi dapat dibuka tanpa perlu diinstal."</string>
<string name="instant_apps_message_with_help" msgid="1816952263531203932">"Aplikasi dapat dibuka tanpa perlu diinstal. Ketuk untuk mempelajari lebih lanjut."</string>
<string name="app_info" msgid="5153758994129963243">"Info aplikasi"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Membuka percakapan"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widget Percakapan"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Ketuk percakapan untuk menambahkannya ke Layar utama"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> yang lalu"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Kurang dari <xliff:g id="DURATION">%1$s</xliff:g> yang lalu"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Lebih dari <xliff:g id="DURATION">%1$s</xliff:g> yang lalu"</string>
diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml
index 3dd9dfab4d4b..5915c41c9cda 100644
--- a/packages/SystemUI/res/values-is/strings.xml
+++ b/packages/SystemUI/res/values-is/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Forritið eða fyrirtækið þitt leyfir ekki skjámyndatöku"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Breyta"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Breyta skjámynd"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Mynda meira"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Loka skjámynd"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Forskoðun skjámyndar"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Efri mörk"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Umsnúa litum"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Litaleiðrétting"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Fleiri stillingar"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Notandastillingar"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Lokið"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Loka"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Tengt"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Tengt, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> rafhlaða"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Tengist..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Þetta tæki tilheyrir <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> og er tengt við VPN-net"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Fyrirtækið þitt kann að fylgjast með netnotkun á vinnusniðinu þínu"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kann að fylgjast með netnotkun á vinnusniðinu þínu"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Kerfisstjóri getur séð netvirkni á vinnusniðinu þínu"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Hugsanlega er fylgst með netinu"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Þetta tæki er tengt við VPN-net"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Vinnusniðið þitt er tengt við <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Opna samtal"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Samtalsgræjur"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Ýttu á samtal til að bæta því á heimaskjáinn"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Fyrir <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Fyrir minna en <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Fyrir meira en <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index 84b307b6f457..3adf868006e2 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"L\'acquisizione di screenshot non è consentita dall\'app o dall\'organizzazione"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Modifica"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Modifica screenshot"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Acquisisci di più"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ignora screenshot"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Anteprima screenshot"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Limite superiore"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inverti colori"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Modalità di correzione del colore"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Altre impostazioni"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Impostazioni utente"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Fine"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Chiudi"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Connesso"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Connesso, batteria al <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Connessione..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Questo dispositivo appartiene a <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ed è collegato a VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"La tua organizzazione potrebbe monitorare il traffico di rete nel tuo profilo di lavoro"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> potrebbe monitorare il traffico di rete nel tuo profilo di lavoro"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"L\'attività di rete del tuo profilo di lavoro è visibile all\'amministratore IT"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"La rete potrebbe essere monitorata"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Questo dispositivo è collegato a VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Il tuo profilo di lavoro è collegato a <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Apri conversazione"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widget di conversazione"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tocca una conversazione per aggiungerla alla schermata Home"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> fa"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Meno di <xliff:g id="DURATION">%1$s</xliff:g> fa"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Più di <xliff:g id="DURATION">%1$s</xliff:g> fa"</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 6699eeabad6a..e934e7bc4d05 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -29,7 +29,7 @@
<string name="battery_low_percent_format_hybrid" msgid="3985614339605686167">"נותרו <xliff:g id="PERCENTAGE">%1$s</xliff:g>, נשארו בערך <xliff:g id="TIME">%2$s</xliff:g> על סמך השימוש במכשיר"</string>
<string name="battery_low_percent_format_hybrid_short" msgid="5917433188456218857">"נותרו <xliff:g id="PERCENTAGE">%1$s</xliff:g>, נשארו בערך <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="4968468824040940688">"נותרו <xliff:g id="PERCENTAGE">%s</xliff:g>. התכונה \'חיסכון בסוללה\' הופעלה."</string>
- <string name="invalid_charger" msgid="4370074072117767416">"‏לא ניתן לטעון באמצעות USB. ניתן להשתמש במטען שצורף למכשיר שלך."</string>
+ <string name="invalid_charger" msgid="4370074072117767416">"‏לא ניתן לטעון באמצעות USB. אפשר להשתמש במטען שצורף למכשיר שלך."</string>
<string name="invalid_charger_title" msgid="938685362320735167">"‏לא ניתן לטעון באמצעות USB"</string>
<string name="invalid_charger_text" msgid="2339310107232691577">"שימוש במטען שסופק עם המכשיר"</string>
<string name="battery_low_why" msgid="2056750982959359863">"הגדרות"</string>
@@ -46,7 +46,7 @@
<string name="bluetooth_tethered" msgid="4171071193052799041">"‏ה-Bluetooth שותף"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="2972273031043777851">"הגדר שיטות קלט"</string>
<string name="status_bar_use_physical_keyboard" msgid="4849251850931213371">"מקלדת פיזית"</string>
- <string name="usb_device_permission_prompt" msgid="4414719028369181772">"האם לתת לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה אל <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
+ <string name="usb_device_permission_prompt" msgid="4414719028369181772">"לתת לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה אל <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
<string name="usb_device_permission_prompt_warn" msgid="2309129784984063656">"‏האם לאפשר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה אל <xliff:g id="USB_DEVICE">%2$s</xliff:g>?\nאפליקציה זו לא קיבלה הרשאה להקליט אך יכולה לתעד אודיו באמצעות מכשיר USB זה."</string>
<string name="usb_accessory_permission_prompt" msgid="717963550388312123">"האם לתת לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה אל <xliff:g id="USB_ACCESSORY">%2$s</xliff:g>?"</string>
<string name="usb_device_confirm_prompt" msgid="4091711472439910809">"האם לפתוח את <xliff:g id="APPLICATION">%1$s</xliff:g> כדי לעבוד עם <xliff:g id="USB_DEVICE">%2$s</xliff:g>?"</string>
@@ -78,19 +78,18 @@
<string name="compat_mode_off" msgid="7682459748279487945">"מתיחה למילוי של המסך"</string>
<string name="global_action_screenshot" msgid="2760267567509131654">"צילום מסך"</string>
<string name="remote_input_image_insertion_text" msgid="4850791636452521123">"נשלחה תמונה"</string>
- <string name="screenshot_saving_ticker" msgid="6519186952674544916">"שומר צילום מסך..."</string>
+ <string name="screenshot_saving_ticker" msgid="6519186952674544916">"צילום המסך נשמר..."</string>
<string name="screenshot_saving_title" msgid="2298349784913287333">"שומר צילום מסך..."</string>
<string name="screenshot_saved_title" msgid="8893267638659083153">"צילום המסך נשמר"</string>
<string name="screenshot_saved_text" msgid="7778833104901642442">"אפשר להקיש כדי להציג את צילום המסך"</string>
<string name="screenshot_failed_title" msgid="3259148215671936891">"לא ניתן היה לשמור צילום מסך"</string>
<string name="screenshot_failed_to_save_user_locked_text" msgid="6156607948256936920">"כדי שצילום המסך יישמר, צריך לבטל את הנעילה של המכשיר"</string>
- <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"יש לנסות שוב לבצע צילום מסך"</string>
+ <string name="screenshot_failed_to_save_unknown_text" msgid="1506621600548684129">"אפשר לצלם שוב את המסך"</string>
<string name="screenshot_failed_to_save_text" msgid="7232739948999195960">"לא ניתן לשמור את צילום המסך"</string>
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"האפליקציה או הארגון שלך אינם מתירים ליצור צילומי מסך"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"עריכה"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"עריכת צילום מסך"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"צילום תוכן נוסף"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"סגירת צילום מסך"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"תצוגה מקדימה של צילום מסך"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"הקצה העליון"</string>
@@ -148,7 +147,7 @@
<string name="biometric_dialog_confirm" msgid="2005978443007344895">"אישור"</string>
<string name="biometric_dialog_try_again" msgid="8575345628117768844">"ניסיון נוסף"</string>
<string name="biometric_dialog_empty_space_description" msgid="3330555462071453396">"יש להקיש כדי לבטל את האימות"</string>
- <string name="biometric_dialog_face_icon_description_idle" msgid="4351777022315116816">"עליך לנסות שוב"</string>
+ <string name="biometric_dialog_face_icon_description_idle" msgid="4351777022315116816">"יש לנסות שוב"</string>
<string name="biometric_dialog_face_icon_description_authenticating" msgid="3401633342366146535">"המערכת מחפשת את הפנים שלך"</string>
<string name="biometric_dialog_face_icon_description_authenticated" msgid="2242167416140740920">"זיהוי הפנים בוצע"</string>
<string name="biometric_dialog_face_icon_description_confirmed" msgid="7918067993953940778">"מאושר"</string>
@@ -173,7 +172,7 @@
<string name="biometric_dialog_last_pin_attempt_before_wipe_profile" msgid="545567685899091757">"הזנה של קוד אימות שגוי בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו."</string>
<string name="biometric_dialog_last_password_attempt_before_wipe_profile" msgid="8538032972389729253">"הזנת סיסמה שגויה בניסיון הבא תגרום למחיקת פרופיל העבודה והנתונים המשויכים אליו."</string>
<string name="biometric_dialog_failed_attempts_now_wiping_device" msgid="6585503524026243042">"נעשו יותר מדי ניסיונות שגויים. הנתונים במכשיר יימחקו."</string>
- <string name="biometric_dialog_failed_attempts_now_wiping_user" msgid="7015008539146949115">"נעשו יותר מדי ניסיונות שגויים. המשתמש הזה יימחק."</string>
+ <string name="biometric_dialog_failed_attempts_now_wiping_user" msgid="7015008539146949115">"בוצעו יותר מדי ניסיונות שגויים. המשתמש הזה יימחק."</string>
<string name="biometric_dialog_failed_attempts_now_wiping_profile" msgid="5239378521440749682">"נעשו יותר מדי ניסיונות שגויים. פרופיל העבודה הזה והנתונים המשויכים אליו יימחקו."</string>
<string name="biometric_dialog_now_wiping_dialog_dismiss" msgid="7189432882125106154">"סגירה"</string>
<string name="fingerprint_dialog_touch_sensor" msgid="2817887108047658975">"יש לגעת בחיישן טביעות האצבע"</string>
@@ -228,7 +227,7 @@
<string name="accessibility_no_sims" msgid="5711270400476534667">"‏אין כרטיס SIM."</string>
<string name="accessibility_battery_details" msgid="6184390274150865789">"פתיחת פרטי סוללה"</string>
<string name="accessibility_battery_level" msgid="5143715405241138822">"<xliff:g id="NUMBER">%d</xliff:g> אחוזים של סוללה."</string>
- <string name="accessibility_battery_level_with_estimate" msgid="4843119982547599452">"רמת הטעינה בסוללה: <xliff:g id="PERCENTAGE">%1$s</xliff:g> אחוזים, הזמן הנותר המשוער על סמך השימוש שלך:<xliff:g id="TIME">%2$s</xliff:g>"</string>
+ <string name="accessibility_battery_level_with_estimate" msgid="4843119982547599452">"רמת הטעינה בסוללה: <xliff:g id="PERCENTAGE">%1$s</xliff:g> אחוזים, הזמן הנותר המשוער על סמך השימוש שלך: <xliff:g id="TIME">%2$s</xliff:g>"</string>
<string name="accessibility_battery_level_charging" msgid="8892191177774027364">"הסוללה בטעינה, <xliff:g id="BATTERY_PERCENTAGE">%d</xliff:g>%%."</string>
<string name="accessibility_settings_button" msgid="2197034218538913880">"הגדרות מערכת"</string>
<string name="accessibility_notifications_button" msgid="3960913924189228831">"התראות"</string>
@@ -249,8 +248,8 @@
<string name="accessibility_desc_lock_screen" msgid="5983125095181194887">"מסך נעילה."</string>
<string name="accessibility_desc_settings" msgid="6728577365389151969">"הגדרות"</string>
<string name="accessibility_desc_recent_apps" msgid="1748675199348914194">"סקירה."</string>
- <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"מסך נעילה בעבודה"</string>
- <string name="accessibility_desc_close" msgid="8293708213442107755">"סגור"</string>
+ <string name="accessibility_desc_work_lock" msgid="4355620395354680575">"מסך נעילה של עבודה"</string>
+ <string name="accessibility_desc_close" msgid="8293708213442107755">"סגירה"</string>
<string name="accessibility_quick_settings_wifi" msgid="167707325133803052">"<xliff:g id="SIGNAL">%1$s</xliff:g>."</string>
<string name="accessibility_quick_settings_wifi_changed_off" msgid="2230487165558877262">"‏Wifi כבוי."</string>
<string name="accessibility_quick_settings_wifi_changed_on" msgid="1490362586009027611">"‏Wifi מופעל."</string>
@@ -337,7 +336,7 @@
<string name="quick_settings_dnd_none_label" msgid="8420869988472836354">"שקט מוחלט"</string>
<string name="quick_settings_bluetooth_label" msgid="7018763367142041481">"Bluetooth"</string>
<string name="quick_settings_bluetooth_multiple_devices_label" msgid="6595808498429809855">"‏Bluetooth ‏(<xliff:g id="NUMBER">%d</xliff:g> מכשירים)"</string>
- <string name="quick_settings_bluetooth_off_label" msgid="6375098046500790870">"‏Bluetooth מופסק"</string>
+ <string name="quick_settings_bluetooth_off_label" msgid="6375098046500790870">"‏Bluetooth כבוי"</string>
<string name="quick_settings_bluetooth_detail_empty_text" msgid="5760239584390514322">"אין מכשירים מותאמים זמינים"</string>
<string name="quick_settings_bluetooth_secondary_label_battery_level" msgid="4182034939479344093">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%s</xliff:g> סוללה"</string>
<string name="quick_settings_bluetooth_secondary_label_audio" msgid="780333390310051161">"אודיו"</string>
@@ -386,15 +385,13 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"היפוך צבעים"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"מצב תיקון צבע"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"הגדרות נוספות"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"הגדרות המשתמש"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"בוצע"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"סגירה"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"מחובר"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"מחובר, הסוללה ב-<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"מתחבר..."</string>
- <string name="quick_settings_tethering_label" msgid="5257299852322475780">"שיתוף אינטרנט בין ניידים"</string>
+ <string name="quick_settings_tethering_label" msgid="5257299852322475780">"שיתוף אינטרנט בין מכשירים"</string>
<string name="quick_settings_hotspot_label" msgid="1199196300038363424">"‏נקודת אינטרנט (hotspot)"</string>
<string name="quick_settings_hotspot_secondary_label_transient" msgid="7585604088079160564">"ההפעלה מתבצעת…"</string>
<string name="quick_settings_hotspot_secondary_label_data_saver_enabled" msgid="1280433136266439372">"חוסך הנתונים פועל"</string>
@@ -528,7 +525,7 @@
<string name="vpn_footer" msgid="3457155078010607471">"ייתכן שהרשת נמצאת במעקב"</string>
<string name="branded_vpn_footer" msgid="816930186313188514">"ייתכן שהרשת מנוטרת"</string>
<string name="quick_settings_disclosure_parental_controls" msgid="2114102871438223600">"המכשיר הזה מנוהל על ידי ההורה שלך"</string>
- <string name="quick_settings_disclosure_management_monitoring" msgid="8231336875820702180">"הארגון שלך הוא הבעלים של מכשיר זה והוא עשוי לנטר את התנועה ברשת"</string>
+ <string name="quick_settings_disclosure_management_monitoring" msgid="8231336875820702180">"הארגון שלך הוא הבעלים של המכשיר הזה והוא עשוי לנטר את התנועה ברשת"</string>
<string name="quick_settings_disclosure_named_management_monitoring" msgid="2831423806103479812">"הארגון <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> הוא הבעלים של המכשיר הזה והוא עשוי לנטר את התנועה ברשת"</string>
<string name="quick_settings_financed_disclosure_named_management" msgid="2307703784594859524">"המכשיר הזה התקבל מ-<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>"</string>
<string name="quick_settings_disclosure_management_named_vpn" msgid="6096715329056415588">"המכשיר הזה שייך לארגון שלך, והוא מחובר ל-<xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -539,8 +536,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"‏המכשיר הזה שייך לארגון <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> והוא מחובר לרשתות VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"הארגון שלך יכול לנטר את התנועה ברשת בפרופיל העבודה שלך"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"הארגון <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> עשוי לנטר את התנועה ברשת בפרופיל העבודה שלך"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"‏הפעילות ברשת של פרופיל עבודה גלויה למנהל ה-IT"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ייתכן שהרשת מנוטרת"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"‏המכשיר הזה מחובר לרשתות VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"פרופיל העבודה שלך מחובר ל-<xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -962,12 +958,12 @@
<string name="notification_channel_storage" msgid="2720725707628094977">"אחסון"</string>
<string name="notification_channel_hints" msgid="7703783206000346876">"טיפים"</string>
<string name="instant_apps" msgid="8337185853050247304">"אפליקציות ללא התקנה"</string>
- <string name="instant_apps_title" msgid="8942706782103036910">"<xliff:g id="APP">%1$s</xliff:g> פועלת"</string>
+ <string name="instant_apps_title" msgid="8942706782103036910">"האפליקציה <xliff:g id="APP">%1$s</xliff:g> פועלת"</string>
<string name="instant_apps_message" msgid="6112428971833011754">"האפליקציה נפתחת בלי התקנה."</string>
<string name="instant_apps_message_with_help" msgid="1816952263531203932">"האפליקציה נפתחת בלי התקנה. אפשר להקיש כדי לקבל מידע נוסף."</string>
<string name="app_info" msgid="5153758994129963243">"פרטי האפליקציה"</string>
<string name="go_to_web" msgid="636673528981366511">"מעבר אל הדפדפן"</string>
- <string name="mobile_data" msgid="4564407557775397216">"נתונים סלולריים"</string>
+ <string name="mobile_data" msgid="4564407557775397216">"חבילת גלישה"</string>
<string name="mobile_data_text_format" msgid="6806501540022589786">"<xliff:g id="ID_1">%1$s</xliff:g> ‏— <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="mobile_carrier_text_format" msgid="8912204177152950766">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g>, <xliff:g id="MOBILE_DATA_TYPE">%2$s</xliff:g>"</string>
<string name="wifi_is_off" msgid="5389597396308001471">"‏Wi-Fi כבוי"</string>
@@ -975,7 +971,7 @@
<string name="dnd_is_off" msgid="3185706903793094463">"מצב \'נא לא להפריע\' כבוי"</string>
<string name="qs_dnd_prompt_auto_rule" msgid="3535469468310002616">"מצב \'נא לא להפריע\' הופעל על ידי כלל אוטומטי (<xliff:g id="ID_1">%s</xliff:g>)."</string>
<string name="qs_dnd_prompt_app" msgid="4027984447935396820">"מצב \'נא לא להפריע\' הופעל על ידי אפליקציה (<xliff:g id="ID_1">%s</xliff:g>)."</string>
- <string name="qs_dnd_prompt_auto_rule_app" msgid="1841469944118486580">"מצב \'נא לא להפריע להפריע\' הופעל על ידי אפליקציה או על ידי כלל אוטומטי."</string>
+ <string name="qs_dnd_prompt_auto_rule_app" msgid="1841469944118486580">"מצב \'נא לא להפריע\' הופעל על ידי אפליקציה או על ידי כלל אוטומטי."</string>
<string name="qs_dnd_until" msgid="7844269319043747955">"עד <xliff:g id="ID_1">%s</xliff:g>"</string>
<string name="qs_dnd_keep" msgid="3829697305432866434">"שמירה"</string>
<string name="qs_dnd_replace" msgid="7712119051407052689">"החלף"</string>
@@ -1081,7 +1077,7 @@
<string name="controls_confirmation_confirming" msgid="2596071302617310665">"בתהליך אישור…"</string>
<string name="controls_confirmation_message" msgid="7744104992609594859">"יש לאשר את השינוי עבור <xliff:g id="DEVICE">%s</xliff:g>"</string>
<string name="controls_structure_tooltip" msgid="4355922222944447867">"יש להחליק כדי להציג עוד פריטים"</string>
- <string name="controls_seeding_in_progress" msgid="3033855341410264148">"בטעינת המלצות"</string>
+ <string name="controls_seeding_in_progress" msgid="3033855341410264148">"ההמלצות בטעינה"</string>
<string name="controls_media_title" msgid="1746947284862928133">"מדיה"</string>
<string name="controls_media_close_session" msgid="3957093425905475065">"הסתרת הסשן הנוכחי."</string>
<string name="controls_media_active_session" msgid="1984383994625845642">"לא ניתן להסתיר את הסשן הנוכחי."</string>
@@ -1097,7 +1093,7 @@
<string name="controls_error_generic" msgid="352500456918362905">"לא ניתן לטעון את הסטטוס"</string>
<string name="controls_error_failed" msgid="960228639198558525">"שגיאה, יש לנסות שוב"</string>
<string name="controls_in_progress" msgid="4421080500238215939">"בתהליך"</string>
- <string name="controls_added_tooltip" msgid="4842812921719153085">"ניתן ללחוץ על לחצן ההפעלה כדי להציג פקדים חדשים"</string>
+ <string name="controls_added_tooltip" msgid="4842812921719153085">"אפשר ללחוץ על לחצן ההפעלה כדי להציג פקדים חדשים"</string>
<string name="controls_menu_add" msgid="4447246119229920050">"הוספת פקדים"</string>
<string name="controls_menu_edit" msgid="890623986951347062">"עריכת פקדים"</string>
<string name="media_output_dialog_add_output" msgid="5642703238877329518">"הוספת מכשירי פלט"</string>
@@ -1112,6 +1108,14 @@
<string name="basic_status" msgid="2315371112182658176">"פתיחת שיחה"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"ווידג\'טים של שיחות"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"יש להקיש על שיחה כדי להוסיף אותה למסך הבית"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"לפני <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"לפני פחות מ-<xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"לפני יותר מ-<xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 742d1ae28f1e..980506d75fee 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"スクリーンショットの作成はアプリまたは組織で許可されていません"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"編集"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"スクリーンショットを編集します"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"キャプチャ範囲を拡大"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"スクリーンショットを閉じます"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"スクリーンショットのプレビュー"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"上部境界"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"色を反転"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"色補正モード"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"詳細設定"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ユーザー設定"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"完了"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"閉じる"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"接続済み"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"接続済み、電池 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"接続しています..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"これは <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> が所有するデバイスで、VPN に接続しています"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"組織は仕事用プロファイルのネットワーク トラフィックを監視することがあります"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> によってこの仕事用プロファイルのネットワーク トラフィックが監視されることもあります"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"仕事用プロファイルのネットワーク アクティビティは IT 管理者に公開されます"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ネットワークが監視されることもあります"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"このデバイスは VPN に接続しています"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"この仕事用プロファイルは <xliff:g id="VPN_APP">%1$s</xliff:g> に接続しています"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"空の会話"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"会話ウィジェット"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"会話をタップするとホーム画面に追加されます"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g>前"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g>前まで"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g>以上前"</string>
diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml
index 8e260ca44af8..8788defc0913 100644
--- a/packages/SystemUI/res/values-ka/strings.xml
+++ b/packages/SystemUI/res/values-ka/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ეკრანის ანაბეჭდების შექმნა არ არის ნებადართული აპის ან თქვენი ორგანიზაციის მიერ"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"რედაქტირება"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"ეკრანის ანაბეჭდის რედაქტირება"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"მეტის აღბეჭდვა"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ეკრანის ანაბეჭდის დახურვა"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"ეკრანის ანაბეჭდის გადახედვა"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ზედა საზღვარი"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"ფერების შებრუნება"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"ფერთა კორექციის რეჟიმი"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"დამატებითი პარამეტრები"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"მომხმარებლის პარამეტრები"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"დასრულდა"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"დახურვა"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"დაკავშირებულია"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"დაკავშირებულია. ბატარეის დონე: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"დაკავშირება..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ამ მოწყობილობას ფლობს <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> და ის დაკავშირებულია VPN-ებთან"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"თქვენს ორგანიზაციას სამსახურის პროფილში ქსელის ტრაფიკის მონიტორინგი შეუძლია"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>-ს სამსახურის პროფილში ქსელის ტრაფიკის მონიტორინგი შეუძლია"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"სამსახურის პროფილის ქსელის აქტივობა ხილულია თქვენი IT ადმინისტრატორისთვის"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ქსელზე შესაძლოა ხორციელდებოდეს მონიტორინგი"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ეს მოწყობილობა დაკავშირებულია VPN-ებთან"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"თქვენი სამსახურის პროფილი დაკავშირებულია <xliff:g id="VPN_APP">%1$s</xliff:g>-თან"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"მიმოწერის გახსნა"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"საუბრის ვიჯეტები"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"შეეხეთ საუბარს მის თქვენს მთავარ ეკრანზე დასამატებლად"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g>-ს წინ"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g>-ზე ნაკლები ხნის წინ"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g>-ზე მეტი ხნის წინ"</string>
diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml
index 4567410db766..2b7e908adfe0 100644
--- a/packages/SystemUI/res/values-kk/strings.xml
+++ b/packages/SystemUI/res/values-kk/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Қолданба немесе ұйым скриншоттар түсіруге рұқсат етпейді"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Өзгерту"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Скриншотты өзгерту"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Тағы суретке түсіру"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Скриншотты жабу"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Скриншотты алдын ала қарау"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Жоғарғы шектік сызық"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Түстерді инверсиялау"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Түсті түзету режимі"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Қосымша параметрлер"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Пайдаланушы параметрлері"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Дайын"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Жабу"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Қосылды"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Қосылды, батарея деңгейі: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Қосылуда…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Бұл құрылғы <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ұйымына тиесілі және VPN-дерге қосылған."</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Ұйымыңыз жұмыс профиліңіздегі желі трафигін бақылауы мүмкін"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> жұмыс профиліңіздегі желі трафигін бақылауы мүмкін"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Желіде жұмыс профилі арқылы не істелгені әкімшіге көрініп тұрады."</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Желі бақылануы мүмкін"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Бұл құрылғы VPN-дерге қосылған."</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Жұмыс профиліңіз <xliff:g id="VPN_APP">%1$s</xliff:g> қолданбасына қосылған."</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Ашық әңгіме"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Әңгіме виджеттері"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Негізгі экранға қосқыңыз келетін әңгімені түртіңіз."</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> бұрын"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Максимум <xliff:g id="DURATION">%1$s</xliff:g> бұрын"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Кемінде <xliff:g id="DURATION">%1$s</xliff:g> бұрын"</string>
diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml
index d79144d23a6a..a09b21614d96 100644
--- a/packages/SystemUI/res/values-km/strings.xml
+++ b/packages/SystemUI/res/values-km/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ការថត​រូបអេក្រង់​មិនត្រូវ​បាន​អនុញ្ញាត​ដោយ​កម្មវិធី​នេះ ឬ​ស្ថាប័ន​របស់អ្នក"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"កែ"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"កែ​រូបថត​អេក្រង់"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"ថត​ច្រើនទៀត"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ច្រានចោល​រូបថត​អេក្រង់"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"ការមើល​រូបថត​អេក្រង់​សាកល្បង"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"បន្ទាត់បែងចែក​ខាងលើ"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"ដាក់​​​បញ្ច្រាស​ពណ៌"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"របៀប​កែ​ពណ៌"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"ការ​កំណត់​ច្រើន​ទៀត"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ការកំណត់អ្នកប្រើប្រាស់"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"រួចរាល់"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"បិទ"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"បាន​ភ្ជាប់"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"បានភ្ជាប់ ហើយថ្មមានកម្រិត <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"កំពុង​តភ្ជាប់..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ឧបករណ៍​នេះគឺជា​កម្មសិទ្ធិរបស់ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> និងត្រូវបានភ្ជាប់ទៅ VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"ស្ថាប័ន​របស់អ្នក​អាចនឹង​តាមដាន​ចរាចរណ៍​បណ្តាញ​នៅក្នុង​កម្រងព័ត៌មាន​ការងារ​របស់អ្នក"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> អាចនឹង​តាមដាន​ចរាចរណ៍​បណ្តាញ​នៅក្នុង​កម្រងព័ត៌មាន​ការងារ​របស់​អ្នក"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"អ្នកគ្រប់គ្រង​ផ្នែកព័ត៌មានវិទ្យា​របស់អ្នក​អាចមើលឃើញ​សកម្មភាព​បណ្ដាញ​នៃកម្រងព័ត៌មាន​ការងារ"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"បណ្ដាញ​អាច​ត្រូវ​តាមដាន"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ឧបករណ៍នេះ​ត្រូវបានភ្ជាប់ទៅ VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"កម្រងព័ត៌មានការងារ​របស់អ្នក​ត្រូវបានភ្ជាប់ទៅ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"បើកការសន្ទនា"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"ធាតុ​ក្រាហ្វិកនៃការសន្ទនា"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"ចុចការសន្ទនា ដើម្បីបញ្ចូលវាទៅក្នុងអេក្រង់ដើមរបស់អ្នក"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> មុន"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"តិចជាង <xliff:g id="DURATION">%1$s</xliff:g> មុន"</string>
<string name="over_timestamp" msgid="4765793502859358634">"ជាង <xliff:g id="DURATION">%1$s</xliff:g> មុន"</string>
diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml
index bfc6d875af1f..a7a51050db47 100644
--- a/packages/SystemUI/res/values-kn/strings.xml
+++ b/packages/SystemUI/res/values-kn/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಸಂಸ್ಥೆಯು ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳನ್ನು ತೆಗೆಯುವುದನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"ಎಡಿಟ್ ಮಾಡಿ"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ ಅನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"ಇನ್ನಷ್ಟು ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಅನ್ನು ವಜಾಗೊಳಿಸಿ"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"ಸ್ಕ್ರೀನ್‍ಶಾಟ್‍ನ ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ಮೇಲಿನ ಗಡಿರೇಖೆ"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"ಬಣ್ಣಗಳನ್ನು ಇನ್ವರ್ಟ್ ಮಾಡಿ"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"ಬಣ್ಣ ತಿದ್ದುಪಡಿ ಮೋಡ್"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"ಹೆಚ್ಚಿನ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ಬಳಕೆದಾರರ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"ಮುಗಿದಿದೆ"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ಮುಚ್ಚಿರಿ"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"ಸಂಪರ್ಕಗೊಂಡಿದೆ, ಬ್ಯಾಟರಿ ಚಾರ್ಜ್‌ ಮಟ್ಟ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ಈ ಸಾಧನವು <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ಗೆ ಸೇರಿದೆ ಮತ್ತು VPN ಗಳಿಗೆ ಕನೆಕ್ಟ್ ಆಗಿದೆ"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"ನಿಮ್ಮ ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ನ ನೆಟ್‌ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"ನಿಮ್ಮ ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ನಲ್ಲಿ ನೆಟ್‌ವರ್ಕ್ ಟ್ರಾಫಿಕ್ ಅನ್ನು <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದು"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ ನೆಟ್‌ವರ್ಕ್ ಚಟುವಟಿಕೆ ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರಿಗೆ ಗೋಚರಿಸುತ್ತದೆ"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ನೆಟ್‌ವರ್ಕ್‌ನ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾಗಿದೆ"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ಈ ಸಾಧನವು VPN ಗಳಿಗೆ ಕನೆಕ್ಟ್ ಆಗಿದೆ"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"ನಿಮ್ಮ ಉದ್ಯೋಗದ ಪ್ರೊಫೈಲ್ <xliff:g id="VPN_APP">%1$s</xliff:g> ಗೆ ಕನೆಕ್ಟ್ ಆಗಿದೆ"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"ಸಂಭಾಷಣೆಯನ್ನು ತೆರೆಯಿರಿ"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"ಸಂಭಾಷಣೆ ವಿಜೆಟ್‌ಗಳು"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"ಸಂಭಾಷಣೆಯನ್ನು ಹೋಮ್ ಸ್ಕ್ರೀನ್‌ಗೆ ಸೇರಿಸಲು ಅದನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ಸಮಯದ ಹಿಂದೆ"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> ಗಿಂತ ಕಡಿಮೆ ಅವಧಿಯ ಹಿಂದೆ"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> ಗಿಂತ ಹೆಚ್ಚಿನ ಅವಧಿಯ ಹಿಂದೆ"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index e2193ee0ab7e..bac0570b370c 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"앱이나 조직에서 스크린샷 촬영을 허용하지 않습니다."</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"수정"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"스크린샷 수정"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"더 캡처하기"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"스크린샷 닫기"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"스크린샷 미리보기"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"상단 경계"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"색상 반전"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"색상 보정 모드"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"설정 더보기"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"사용자 설정"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"완료"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"닫기"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"연결됨"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"연결됨, 배터리 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"연결 중..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>에 속한 기기이며 VPN에 연결되었습니다."</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"조직에서 직장 프로필의 네트워크 트래픽을 모니터링할 수 있습니다."</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>에서 내 직장 프로필의 네트워크 트래픽을 모니터링할 수 있습니다."</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"직장 프로필의 네트워크 활동은 IT 관리자에게 공개됩니다."</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"네트워크가 모니터링될 수 있습니다."</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"기기가 VPN에 연결되었습니다."</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"직장 프로필이 <xliff:g id="VPN_APP">%1$s</xliff:g>에 연결되었습니다."</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"대화 열기"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"대화 위젯"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"대화를 탭하여 홈 화면에 추가하세요."</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> 전"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> 이내"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> 이상 경과"</string>
diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml
index e7a45b24491c..0f395363ed82 100644
--- a/packages/SystemUI/res/values-ky/strings.xml
+++ b/packages/SystemUI/res/values-ky/strings.xml
@@ -1100,6 +1100,14 @@
<string name="basic_status" msgid="2315371112182658176">"Маекти ачуу"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Маек виджеттери"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Маекти Башкы экранга кошуу үчүн таптап коюңуз"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> мурда"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> жетпеген убакыт мурда"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> ашуун мурда"</string>
diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml
index 2416dee4b58f..53cd88b55560 100644
--- a/packages/SystemUI/res/values-lo/strings.xml
+++ b/packages/SystemUI/res/values-lo/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ແອັບ ຫຼື ອົງກອນຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ຖ່າຍຮູບໜ້າຈໍ"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"ແກ້ໄຂ"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"ແກ້ໄຂຮູບໜ້າຈໍ"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"ບັນທຶກເພີ່ມເຕີມ"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ປິດຮູບໜ້າຈໍ"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"ຕົວຢ່າງຮູບໜ້າຈໍ"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ຂອບເຂດທາງເທິງ"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"ສະຫຼັບສີ"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"ໂໝດການແກ້ໄຂສີ"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"​ການ​ຕັ້ງ​ຄ່າ​ເພີ່ມ​ເຕີມ"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ຕັ້ງຄ່າຜູ້ໃຊ້"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"ແລ້ວໆ"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ປິດ"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"ເຊື່ອມ​ຕໍ່ແລ້ວ"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"ເຊື່ອມຕໍ່ແລ້ວ, ແບັດເຕີຣີ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"ກຳລັງເຊື່ອມຕໍ່..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ອຸປະກອນນີ້ເປັນຂອງ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ແລະ ເຊື່ອມຕໍ່ຫາ VPN ແລ້ວ"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"ອົງກອນຂອງທ່ານສາມາດຕິດຕາມທຣາບຟິກເຄືອຂ່າຍໃນໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານໄດ້"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ສາມາດຕິດຕາມທຣາບຟິກເຄືອຂ່າຍໃນໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານໄດ້"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"ການເຄື່ອນໄຫວເຄືອຂ່າຍ​ໂປຣ​ໄຟລ໌​ບ່ອນ​ເຮັດ​ວຽກແມ່ນສະແດງໃຫ້ຜູ້ເບິ່ງແຍງໄອທີຂອງທ່ານເຫັນໄດ້"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ເຄືອຂ່າຍອາດຖືກຕິດຕາມ"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ໂປຣໄຟລ໌ສ່ວນຕົວຂອງທ່ານເຊື່ອມຕໍ່ຫາ VPN ແລ້ວ"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກຂອງທ່ານເຊື່ອມຕໍ່ຫາ <xliff:g id="VPN_APP">%1$s</xliff:g> ແລ້ວ"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"ເປີດການສົນທະນາ"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"ວິດເຈັດການສົນທະນາ"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"ແຕະໃສ່ການສົນທະນາໃດໜຶ່ງເພື່ອເພີ່ມມັນໃສ່ໂຮມສະກຣີນຂອງທ່ານ"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ກ່ອນ"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"ບໍ່ຮອດ <xliff:g id="DURATION">%1$s</xliff:g> ກ່ອນ"</string>
<string name="over_timestamp" msgid="4765793502859358634">"ເກີນ <xliff:g id="DURATION">%1$s</xliff:g> ມາແລ້ວ"</string>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 698bc9fff516..fdfb954d41f5 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Jūsų organizacijoje arba naudojant šią programą neleidžiama daryti ekrano kopijų"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Redaguoti"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Redaguoti ekrano kopiją"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Fiksuoti daugiau"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Praleisti ekrano kopiją"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Ekrano kopijos peržiūra"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Viršutinė riba"</string>
@@ -386,11 +385,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Pakeisti spalvas"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Spalvų taisymo režimas"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Daugiau nustatymų"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Naudotojo nustatymai"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Atlikta"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Uždaryti"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Prijungtas"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Prijungta, akumuliatorius <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Prisijungiama..."</string>
@@ -539,8 +536,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Šis įrenginys priklauso „<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>“ ir yra prijungtas prie VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Jūsų organizacija darbo profilyje gali stebėti tinklo srautą"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"„<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>“ darbo profilyje gali stebėti tinklo srautą"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Darbo profilio tinklo veiklą mato jūsų IT administratorius"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Tinklas gali būti stebimas"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Šis įrenginys prijungtas prie VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Darbo profilis susietas su „<xliff:g id="VPN_APP">%1$s</xliff:g>“"</string>
@@ -1112,6 +1108,14 @@
<string name="basic_status" msgid="2315371112182658176">"Atidaryti pokalbį"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Pokalbio valdikliai"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Palieskite pokalbį, kad pridėtumėte jį prie pagrindinio ekrano"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Prieš <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Mažiau nei prieš <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Daugiau nei prieš <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index e7380cd33384..4f6764871fe8 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Lietotne vai jūsu organizācija neatļauj veikt ekrānuzņēmumus."</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Rediģēt"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Rediģēt ekrānuzņēmumu"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Tvert vairāk"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Nerādīt ekrānuzņēmumu"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Ekrānuzņēmuma priekšskatījums"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Augšējā robeža"</string>
@@ -385,11 +384,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Invertēt krāsas"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Krāsu korekcijas režīms"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Vairāk iestatījumu"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Lietotāja iestatījumi"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Gatavs"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Aizvērt"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Pievienota"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Savienojums izveidots, akumulatora uzlādes līmenis: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Notiek savienojuma izveide…"</string>
@@ -536,8 +533,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Šī ierīce pieder organizācijai<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> un ir savienota ar virtuālajiem privātajiem tīkliem."</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Jūsu organizācija var uzraudzīt jūsu darba profila tīkla datplūsmu."</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> var uzraudzīt jūsu profila tīkla datplūsmu."</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"IT administrators var skatīt tīklā veiktās darbības, kurām izmantojat darba profilu"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Var tikt pārraudzītas tīklā veiktās darbības."</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Šī ierīce ir saistīta ar virtuālajiem privātajiem tīkliem."</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Jūsu darba profils ir savienots ar: <xliff:g id="VPN_APP">%1$s</xliff:g>."</string>
@@ -1106,6 +1102,14 @@
<string name="basic_status" msgid="2315371112182658176">"Atvērt sarunu"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Sarunu logrīki"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Pieskarieties kādai sarunai, lai pievienotu to savam sākuma ekrānam."</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Pirms šāda laika: <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Pirms mazāk nekā: <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Pirms vairāk nekā: <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml
index fbf8b4706b5a..c72f6720c4e1 100644
--- a/packages/SystemUI/res/values-mk/strings.xml
+++ b/packages/SystemUI/res/values-mk/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Апликацијата или вашата организација не дозволува снимање слики од екранот"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Измени"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Изменете ја сликата од екранот"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Сними повеќе"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Отфрлете ја сликата од екранот"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Преглед на слика од екранот"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Горна граница"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Преврти ги боите"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Режим за корекција на бои"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Повеќе поставки"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Поставки на корисникот"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Затвори"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Поврзано"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Поврзан, ниво на батеријата <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Се поврзува..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Уредов е во сопственост на <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> и е поврзан со VPN-мрежи"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Вашата организација може да го следи мрежниот сообраќај на вашиот работен профил"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> може да го следи мрежниот сообраќај на вашиот работен профил"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Мрежната активност на работниот профил е видлива за вашиот IT-администратор"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Мрежата можеби се следи"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Уредов е поврзан со VPN-мрежи"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Вашиот работен профил е поврзан со <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Започни разговор"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Виџети за разговор"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Допрете на разговор за да го додадете на вашиот почетен екран"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Пред <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Пред помалку од <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Пред повеќе од <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml
index a0cd24dd9a12..47ea733c0c2b 100644
--- a/packages/SystemUI/res/values-ml/strings.xml
+++ b/packages/SystemUI/res/values-ml/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"സ്ക്രീൻഷോട്ടുകൾ എടുക്കുന്നത് ആപ്പോ നിങ്ങളുടെ സ്ഥാപനമോ അനുവദിക്കുന്നില്ല"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"എഡിറ്റ് ചെയ്യുക"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"സ്ക്രീൻഷോട്ട് എഡിറ്റ് ചെയ്യുക"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"കൂടുതൽ ക്യാപ്‌ചർ ചെയ്യുക"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"സ്ക്രീൻഷോട്ട് ഡിസ്‌മിസ് ചെയ്യുക"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"സ്‌ക്രീൻഷോട്ട് പ്രിവ്യു"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"മുകളിലുള്ള അതിർത്തി"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"നെഗറ്റീവ് ലുക്ക്"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"വർണ്ണം ശരിയാക്കൽ മോഡ്"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"കൂടുതൽ ക്രമീകരണങ്ങൾ"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ഉപയോക്തൃ ക്രമീകരണം"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"പൂർത്തിയാക്കി"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"അടയ്ക്കുക"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"കണക്‌റ്റുചെയ്‌തു"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"കണക്‌റ്റുചെയ്‌തു, ബാറ്ററി നില <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"കണക്റ്റുചെയ്യുന്നു..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ഈ ഉപകരണം <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> എന്ന സ്ഥാപനത്തിന്റേതാണ്, കൂടാതെ VPN-കളിലേക്ക് കണക്റ്റ് ചെയ്‌തിരിക്കുന്നു"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലിലെ നെറ്റ്‌വർക്ക് ട്രാഫിക്ക് നിരീക്ഷിക്കാൻ നിങ്ങളുടെ സ്ഥാപനത്തിന് കഴിഞ്ഞേക്കാം"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈലിലെ നെറ്റ്‌വർക്ക് ട്രാഫിക്ക് <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> നിരീക്ഷിച്ചേക്കാം"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"ഔദ്യോഗിക പ്രൊഫൈലിലെ നെറ്റ്‍വര്‍ക്ക് ആക്റ്റിവിറ്റി ഐടി അഡ്‌മിന് കാണാനാകും"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"നെറ്റ്‌വർക്ക് നിരീക്ഷിക്കപ്പെടാം"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ഈ ഉപകരണം VPN-കളിലേക്ക് കണക്റ്റ് ചെയ്തിരിക്കുന്നു"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"<xliff:g id="VPN_APP">%1$s</xliff:g> എന്നതിലേക്ക് നിങ്ങളുടെ ഔദ്യോഗിക പ്രൊഫൈൽ കണക്റ്റ് ചെയ്‌തിരിക്കുന്നു"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"സംഭാഷണം തുറക്കുക"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"സംഭാഷണ വിജറ്റുകൾ"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"നിങ്ങളുടെ ഹോം സ്‌ക്രീനിൽ ചേർക്കാൻ സംഭാഷണത്തിൽ ടാപ്പ് ചെയ്യുക"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> മുമ്പ്"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> എന്നതിൽ കുറവ്"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> മുമ്പ്"</string>
diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml
index 4642d3ddc5d3..a196280c7a1d 100644
--- a/packages/SystemUI/res/values-mn/strings.xml
+++ b/packages/SystemUI/res/values-mn/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Таны апп, байгууллагад дэлгэцийн зураг авахыг зөвшөөрдөггүй"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Засах"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Дэлгэцийн агшныг засах"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Ихийг багтаасан зураг авах"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Дэлгэцийн агшныг хаах"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Дэлгэцийн агшныг урьдчилан үзэх"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Дээд талын хязгаар"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Өнгийг урвуулах"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Өнгө залруулах горим"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Бусад тохиргоо"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Хэрэглэгчийн тохиргоо"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Дууссан"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Хаах"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Холбогдсон"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Холбогдсон, батерей <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Холбогдож байна..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Энэ төхөөрөмж <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>-д харьяалагддаг бөгөөд VPN-д холбогдсон байна"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Таны байгууллага таны ажлын профайлын сүлжээний ачааллыг хянадаг"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> таны ажлын профайлын сүлжээний ачааллыг хянадаг"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Таны IT админд ажлын профайлын сүлжээний үйл ажиллагаа харагдана"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Сүлжээг хянаж байж болзошгүй"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Энэ төхөөрөмж VPN-д холбогдсон байна"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Таны ажлын профайл <xliff:g id="VPN_APP">%1$s</xliff:g>-д холбогдсон байна"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Харилцан яриаг нээх"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Харилцан ярианы жижиг хэрэгслүүд"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Үндсэн нүүрэндээ нэмэх харилцан яриаг товшино уу"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g>-н өмнө"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g>-с бага хугацааны өмнө"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g>-с дээш хугацааны өмнө"</string>
diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml
index 0de9a97ff1d8..3df8b926037e 100644
--- a/packages/SystemUI/res/values-mr/strings.xml
+++ b/packages/SystemUI/res/values-mr/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"अ‍ॅप किंवा आपल्या संस्थेद्वारे स्क्रीनशॉट घेण्याची अनुमती नाही"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"संपादित करा"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"स्क्रीनशॉट संपादित करा"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"आणखी गोष्टी कॅप्चर करा"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"स्क्रीनशॉट डिसमिस करा"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"स्क्रीनशॉटचे पूर्वावलोकन"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"सर्वात वरची सीमा"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"रंग उलटे करा"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"रंग सुधारणा मोड"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"अधिक सेटिंग्ज"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"वापरकर्ता सेटिंग्ज"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"पूर्ण झाले"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"बंद करा"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"कनेक्ट केलेले"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"कनेक्ट केलेले आहे, बॅटरी <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"कनेक्ट करत आहे..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"हे डिव्हाइस <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> चे आहे आणि ते VPN ना कनेक्ट केले आहे"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"तुमची संस्था आपल्या कार्य प्रोफाइलमधील नेटवर्क रहदारीचे परीक्षण करू शकते"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> आपल्या कार्य प्रोफाइलमधील नेटवर्क रहदारीचे परीक्षण करू शकते"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"तुमच्या IT ॲडमिनला कार्य प्रोफाइलची नेटवर्क अ‍ॅक्टिव्हिटी दृश्यमान आहे"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"नेटवर्कचे परीक्षण केले जाऊ शकते"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"हे डिव्हाइस VPN ला कनेक्ट केले आहे"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"तुमची कार्य प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> ला कनेक्ट केली"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"संभाषण उघडा"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"संभाषण विजेट"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"तुमच्या होम स्क्रीन वर संभाषण जोडण्यासाठी त्यावर टॅप करा"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> पूर्वी"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> पेक्षा कमी"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> पेक्षा आधी"</string>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
index eb0ddd5d09f0..7095ac3b3303 100644
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ b/packages/SystemUI/res/values-ms/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Pengambilan tangkapan skrin tidak dibenarkan oleh apl atau organisasi anda"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Edit"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Edit tangkapan skrin"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Tangkap lebih banyak"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ketepikan tangkapan skrin"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Pratonton tangkapan skrin"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Sempadan atas"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Songsangkan warna"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Mod pembetulan warna"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Lagi tetapan"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Tetapan pengguna"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Selesai"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Tutup"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Disambungkan"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Disambungkan, bateri <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Menyambung..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Peranti ini milik <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> dan dihubungkan dengan VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Organisasi anda mungkin memantau trafik rangkaian dalam profil kerja anda"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> mungkin memantau trafik rangkaian dalam profil kerja anda"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Aktiviti rangkaian profil kerja boleh dilihat oleh pentadbir IT anda"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Rangkaian mungkin dipantau"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Peranti ini dihubungkan dengan VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Profil kerja anda dihubungkan dengan <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Buka perbualan"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widget perbualan"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Ketik perbualan untuk menambahkan perbualan itu pada skrin Utama anda"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> yang lalu"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Kurang daripada <xliff:g id="DURATION">%1$s</xliff:g> lalu"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Lebih <xliff:g id="DURATION">%1$s</xliff:g> yang lalu"</string>
diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml
index 5f8ae62858b5..eddf58b097e3 100644
--- a/packages/SystemUI/res/values-my/strings.xml
+++ b/packages/SystemUI/res/values-my/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ဖန်သားပြင်ဓာတ်ပုံရိုက်ကူးခြင်းကို ဤအက်ပ် သို့မဟုတ် သင်၏အဖွဲ့အစည်းက ခွင့်မပြုပါ"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"တည်းဖြတ်ရန်"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"ဖန်သားပြင်ဓာတ်ပုံကို တည်းဖြတ်သည်"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"နောက်ထပ် ရိုက်ကူးရန်"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ဖန်သားပြင်ဓာတ်ပုံကို ပယ်သည်"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"ဖန်သားပြင်ဓာတ်ပုံ အစမ်းကြည့်ရှုခြင်း"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ထိပ်ပိုင်းအနားသတ်"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"အရောင်ပြောင်းပြန်"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"အရောင် မှန်ကန်စေခြင်း အခြေအနေ"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"နောက်ထပ် ဆက်တင်များ"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"အသုံးပြုသူ ဆက်တင်များ"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"ပြီးပါပြီ"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ပိတ်ရန်"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"ချိတ်ဆက်ထား"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"ချိတ်ဆက်ပြီးပါပြီ၊ ဘက်ထရီ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"ဆက်သွယ်နေ..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ဤစက်ကို <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> က ပိုင်ဆိုင်ပြီး VPN များသို့ ချိတ်ဆက်ထားပါသည်"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"သင်၏ အဖွဲ့အစည်းက သင့်အလုပ်ပရိုဖိုင်ရှိ ကွန်ရက်ဒေတာ စီးဆင်းမှုကို စောင့်ကြည့်နိုင်သည်"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> သည် သင်၏ အလုပ်ပရိုဖိုင်ရှိ ကွန်ရက်ဒေတာ စီးဆင်းမှုကို စောင့်ကြည့်နိုင်ပါသည်"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"အလုပ်ပရိုဖိုင်ကွန်ရက် လုပ်ဆောင်ချက်ကို သင့် IT စီမံခန့်ခွဲသူက မြင်နိုင်သည်"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ကွန်ရက်ကို စောင့်ကြည့်နိုင်ပါသည်"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ဤစက်ကို VPN များသို့ ချိတ်ဆက်ထားပါသည်"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"သင်၏အလုပ်ပရိုဖိုင်သည် <xliff:g id="VPN_APP">%1$s</xliff:g> ကို ချိတ်ဆက်ထားပါသည်"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"စကားဝိုင်းကို ဖွင့်ရန်"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"စကားဝိုင်း ဝိဂျက်များ"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"စကားဝိုင်းကို သင်၏ ‘ပင်မစာမျက်နှာ’ သို့ထည့်ရန် တို့ပါ"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"ပြီးခဲ့သည့် <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"ပြီးခဲ့သော <xliff:g id="DURATION">%1$s</xliff:g> မပြည့်ခင်"</string>
<string name="over_timestamp" msgid="4765793502859358634">"ပြီးခဲ့သော <xliff:g id="DURATION">%1$s</xliff:g> ကျော်"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index b0c746539507..0262a7dab5a6 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Appen eller organisasjonen din tillater ikke at du tar skjermdumper"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Rediger"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Rediger skjermdumpen"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Ta bilde av mer"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Avvis skjermdumpen"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Forhåndsvisning av skjermdump"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Øvre grense"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inverter farger"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Modus for fargekorrigering"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Flere innstillinger"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Brukerinnstillinger"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Ferdig"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Lukk"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Tilkoblet"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Tilkoblet, batterinivå <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Kobler til …"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Denne enheten tilhører <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> og er koblet til VPN-er"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Organisasjonen din kan overvåke nettverkstrafikken i jobbprofilen din"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kan overvåke nettverkstrafikken i jobbprofilen din"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Nettverksaktiviteten i jobbprofilen er synlig for IT-administratoren din"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Nettverket kan bli overvåket"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Denne enheten er koblet til VPN-er"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Jobbprofilen din er koblet til <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Åpen samtale"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Samtalemoduler"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Trykk på en samtale for å legge den til på startskjermen"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"For <xliff:g id="DURATION">%1$s</xliff:g> siden"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"For mindre enn <xliff:g id="DURATION">%1$s</xliff:g> siden"</string>
<string name="over_timestamp" msgid="4765793502859358634">"For mer enn <xliff:g id="DURATION">%1$s</xliff:g> siden"</string>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
index e4fc4927bf57..e772622275d2 100644
--- a/packages/SystemUI/res/values-ne/strings.xml
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"उक्त एप वा तपाईंको संगठनले स्क्रिनसटहरू लिन दिँदैन"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"सम्पादन गर्नुहोस्"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"स्क्रिनसट सम्पादन गर्नुहोस्"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"अन्य कुराहरू खिच्नुहोस्"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"स्क्रिनसट हटाउनुहोस्"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"स्क्रिनसटको पूर्वावलोकन"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"सिरानको सीमा"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"रंग उल्टाउनुहोस्"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"रङ्ग सुधार मोड"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"थप सेटिङहरू"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"प्रयोगकर्तासम्बन्धी सेटिङ"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"भयो"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"बन्द गर्नुहोस्"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"जोडिएको"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"यन्त्र जडान भयो, ब्याट्रीको चार्ज स्तर <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"जडान हुँदै..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"यो यन्त्र <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> को स्वामित्वमा छ र VPN हरूमा कनेक्ट गरिएको छ"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"तपाईंको संगठनले तपाईंको कार्य प्रोफाइलमा नेटवर्कको ट्राफिकको अनुगमन गर्न पनि सक्छ"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ले तपाईंको कार्य प्रोफाइलमा नेटवर्क ट्राफिकको अनुगमन गर्न पनि सक्छ"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"तपाईंका IT एड्मिन कार्य प्रोफाइलमा गरिने नेटवर्कसम्बन्धी क्रियाकलाप देख्न सक्नुहुन्छ"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"नेटवर्कको अनुगमन हुनसक्छ"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"यो यन्त्र VPN हरूमा कनेक्ट गरिएको छ"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"तपाईंको कार्य प्रोफाइल <xliff:g id="VPN_APP">%1$s</xliff:g> मा कनेक्ट गरिएको छ"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"वार्तालाप खोल्नुहोस्"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"वार्तालापसम्बन्धी विजेटहरू"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"कुनै वार्तालाप होम स्क्रिनमा हाल्न उक्त वार्तालापमा ट्याप गर्नुहोस्"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> अघि"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> भन्दा कम समयअघि"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> भन्दा बढी समयअघि"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 32886c127036..5573f7da54ae 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Het maken van screenshots wordt niet toegestaan door de app of je organisatie"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Bewerken"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Screenshot bewerken"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Meer opnemen"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Screenshot sluiten"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Voorbeeld van screenshot"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Bovengrens"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Kleuren omkeren"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Modus voor kleurcorrectie"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Meer instellingen"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Gebruikersinstellingen"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Klaar"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Sluiten"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Verbonden"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Verbonden, batterij <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Verbinding maken…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Dit apparaat is eigendom van <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> en is verbonden met VPN\'s"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Je organisatie kan het netwerkverkeer in je werkprofiel bijhouden"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kan het netwerkverkeer in je werkprofiel bijhouden"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"De netwerkactiviteit van je werkprofiel is zichtbaar voor je IT-beheerder"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Netwerk kan worden bijgehouden"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Dit apparaat is verbonden met VPN\'s"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Je werkprofiel is verbonden met <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -648,7 +644,7 @@
<string name="output_title" msgid="3938776561655668350">"Media-uitvoer"</string>
<string name="output_calls_title" msgid="7085583034267889109">"Uitvoer van telefoongesprek"</string>
<string name="output_none_found" msgid="5488087293120982770">"Geen apparaten gevonden"</string>
- <string name="output_none_found_service_off" msgid="935667567681386368">"Geen apparaten gevonden. Probeer <xliff:g id="SERVICE">%1$s</xliff:g> in te schakelen."</string>
+ <string name="output_none_found_service_off" msgid="935667567681386368">"Geen apparaten gevonden. Probeer <xliff:g id="SERVICE">%1$s</xliff:g> aan te zetten."</string>
<string name="output_service_bt" msgid="4315362133973911687">"Bluetooth"</string>
<string name="output_service_wifi" msgid="9003667810868222134">"Wifi"</string>
<string name="output_service_bt_wifi" msgid="7186882540475524124">"Bluetooth en wifi"</string>
@@ -669,7 +665,7 @@
<string name="status_bar_airplane" msgid="4848702508684541009">"Vliegtuigmodus"</string>
<string name="add_tile" msgid="6239678623873086686">"Tegel toevoegen"</string>
<string name="broadcast_tile" msgid="5224010633596487481">"Tegel \'Uitzenden\'"</string>
- <string name="zen_alarm_warning_indef" msgid="5252866591716504287">"Je hoort je volgende wekker niet <xliff:g id="WHEN">%1$s</xliff:g> tenzij je dit voor die tijd uitschakelt"</string>
+ <string name="zen_alarm_warning_indef" msgid="5252866591716504287">"Je hoort je volgende wekker niet <xliff:g id="WHEN">%1$s</xliff:g> tenzij je dit voor die tijd uitzet"</string>
<string name="zen_alarm_warning" msgid="7844303238486849503">"Je hoort je volgende wekker niet <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template" msgid="2234991538018805736">"om <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template_far" msgid="3561752195856839456">"op <xliff:g id="WHEN">%1$s</xliff:g>"</string>
@@ -981,7 +977,7 @@
<string name="slice_permission_checkbox" msgid="4242888137592298523">"<xliff:g id="APP">%1$s</xliff:g> toestaan om segmenten van apps te tonen"</string>
<string name="slice_permission_allow" msgid="6340449521277951123">"Toestaan"</string>
<string name="slice_permission_deny" msgid="6870256451658176895">"Weigeren"</string>
- <string name="auto_saver_title" msgid="6873691178754086596">"Tikken om Batterijbesparing in te schakelen"</string>
+ <string name="auto_saver_title" msgid="6873691178754086596">"Tikken om Batterijbesparing aan te zetten"</string>
<string name="auto_saver_text" msgid="3214960308353838764">"Aanzetten als de batterij waarschijnlijk leeg raakt"</string>
<string name="no_auto_saver_action" msgid="7467924389609773835">"Nee"</string>
<string name="auto_saver_enabled_title" msgid="4294726198280286333">"Batterijbesparing staat aan"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Gesprek openen"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Gesprekswidgets"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tik op een gesprek om het toe te voegen aan je startscherm"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> geleden"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Minder dan <xliff:g id="DURATION">%1$s</xliff:g> geleden"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Meer dan <xliff:g id="DURATION">%1$s</xliff:g> geleden"</string>
diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml
index a14aa18f7f5b..811ae0b8d4bb 100644
--- a/packages/SystemUI/res/values-or/strings.xml
+++ b/packages/SystemUI/res/values-or/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ଆପ୍‍ କିମ୍ବା ସଂସ୍ଥା ଦ୍ୱାରା ସ୍କ୍ରୀନଶଟ୍‍ ନେବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"ଏଡିଟ୍ କରନ୍ତୁ"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"ସ୍କ୍ରିନସଟ୍ ଏଡିଟ୍ କରନ୍ତୁ"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"ଅଧିକ କ୍ୟାପଚର୍ କରନ୍ତୁ"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ସ୍କ୍ରିନସଟ୍ ଖାରଜ କରନ୍ତୁ"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"ସ୍କ୍ରିନସଟର ପ୍ରିଭ୍ୟୁ"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ଶୀର୍ଷ ସୀମାରେଖା"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"ରଙ୍ଗ ଇନଭାର୍ଟ୍ କରନ୍ତୁ"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"ରଙ୍ଗ ସଂଶୋଧନ ମୋଡ୍‍"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"ଅଧିକ ସେଟିଂସ୍"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ଉପଯୋଗକର୍ତ୍ତା ସେଟିଂସ୍"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"ହୋଇଗଲା"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"ସଂଯୁକ୍ତ"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"କନେକ୍ଟ ରହିଛି, ବ୍ୟାଟେରୀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"ସଂଯୋଗ କରୁଛି..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ଏହି ଡିଭାଇସଟି <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>ର ଅଟେ ଏବଂ ଏହା VPNଗୁଡ଼ିକ ସହ ସଂଯୁକ୍ତ ଅଛି"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"ଆପଣଙ୍କ ୱର୍କ ପ୍ରୋଫାଇଲରେ ଆପଣଙ୍କ ସଂସ୍ଥା ନେଟୱର୍କ ଟ୍ରାଫିକ୍‍ ନୀରିକ୍ଷଣ କରିପାରନ୍ତି"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ଆପଣଙ୍କ ୱର୍କ ପ୍ରୋଫାଇଲରେ ନେଟୱର୍କ ଟ୍ରାଫିକ୍‍ ନୀରିକ୍ଷଣ କରିପାରନ୍ତି"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"ୱାର୍କ ପ୍ରୋଫାଇଲ୍ ନେଟୱାର୍କ କାର୍ଯ୍ୟକଳାପ ଆପଣଙ୍କ IT ଆଡମିନଙ୍କୁ ଦେଖାଯିବ"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ନେଟୱର୍କ ନୀରିକ୍ଷଣ କରାଯାଇପାରେ"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ଏହି ଡିଭାଇସଟି VPNଗୁଡ଼ିକ ସହ ସଂଯୁକ୍ତ ଅଛି"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"ଆପଣଙ୍କ ୱାର୍କ ପ୍ରୋଫାଇଲ୍ <xliff:g id="VPN_APP">%1$s</xliff:g> ସହ ସଂଯୁକ୍ତ ଅଛି"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"ବାର୍ତ୍ତାଳାପ ଖୋଲନ୍ତୁ"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"ବାର୍ତ୍ତାଳାପ ୱିଜେଟଗୁଡ଼ିକ"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"ଏକ ବାର୍ତ୍ତାଳାପକୁ ଆପଣଙ୍କ ମୂଳସ୍କ୍ରିନରେ ଯୋଗ କରିବା ପାଇଁ ସେଥିରେ ଟାପ୍ କରନ୍ତୁ"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ପୂର୍ବେ"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g>ରୁ କମ୍ ସମୟ ପୂର୍ବେ"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g>ରୁ ଅଧିକ ସମୟ ପୂର୍ବେ"</string>
diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml
index 2b745df072a9..daae60d9e6e7 100644
--- a/packages/SystemUI/res/values-pa/strings.xml
+++ b/packages/SystemUI/res/values-pa/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ਐਪ ਜਾਂ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਸਕ੍ਰੀਨਸ਼ਾਟ ਲੈਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਹੈ"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"ਸੰਪਾਦਨ ਕਰੋ"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਦਾ ਸੰਪਾਦਨ ਕਰੋ"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"ਹੋਰ ਕੈਪਚਰ ਕਰੋ"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਖਾਰਜ ਕਰੋ"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"ਸਕ੍ਰੀਨਸ਼ਾਟ ਪੂਰਵ-ਝਲਕ"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ਉੱਪਰ ਦੀ ਸੀਮਾ"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"ਰੰਗ ਪਲਟਾਓ"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"ਰੰਗ ਸੰਸ਼ੋਧਨ ਮੋਡ"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"ਹੋਰ ਸੈਟਿੰਗਾਂ"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"ਵਰਤੋਂਕਾਰ ਸੈਟਿੰਗਾਂ"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"ਹੋ ਗਿਆ"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ਬੰਦ ਕਰੋ"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"ਕਨੈਕਟ ਕੀਤਾ"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"ਕਨੈਕਟ ਕੀਤੀ ਗਈ, ਬੈਟਰੀ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ਇਹ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ ਅਤੇ VPN ਨਾਲ ਕਨੈਕਟ ਹੈ"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ਤੁਹਾਡੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ ਨੈੱਟਵਰਕ ਟਰੈਫਿਕ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦੀ ਹੈ"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਨੈੱਟਵਰਕ ਸਰਗਰਮੀ ਤੁਹਾਡੇ ਆਈ.ਟੀ. ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਦਿਖਾਈ ਦਿੰਦੀ ਹੈ"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ਨੈੱਟਵਰਕ ਦੀ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ਇਹ ਡੀਵਾਈਸ VPN ਨਾਲ ਕਨੈਕਟ ਹੈ"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"ਤੁਹਾਡਾ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ <xliff:g id="VPN_APP">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"ਗੱਲਬਾਤ ਖੋਲ੍ਹੋ"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"ਗੱਲਬਾਤ ਵਿਜੇਟ"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"ਆਪਣੀ ਹੋਮ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਕੋਈ ਗੱਲਬਾਤ ਚੁਣੋ"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ਪਹਿਲਾਂ"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> ਤੋਂ ਘੱਟ ਸਮਾਂ ਪਹਿਲਾਂ"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> ਤੋਂ ਵੱਧ ਸਮਾਂ ਪਹਿਲਾਂ"</string>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index b0ee6e7790f6..2bd09c88c704 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Nie możesz wykonać zrzutu ekranu, bo nie zezwala na to aplikacja lub Twoja organizacja."</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Edytuj"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Edytuj zrzut ekranu"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Zarejestruj więcej danych"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Zamknij zrzut ekranu"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Podgląd zrzutu ekranu"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Górna granica"</string>
@@ -386,11 +385,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Odwróć kolory"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Tryb korekcji kolorów"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Więcej ustawień"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Ustawienia użytkownika"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Gotowe"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zamknij"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Połączono"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Połączono, bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Łączę..."</string>
@@ -539,8 +536,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"To urządzenie należy do organizacji <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> i jest połączone z sieciami VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Twoja organizacja może monitorować ruch w sieci w Twoim profilu służbowym"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Organizacja <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> może monitorować ruch w sieci w Twoim profilu służbowym"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Aktywność w sieci w profilu służbowym jest widoczna dla Twojego administratora IT"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Sieć może być monitorowana"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"To urządzenie jest połączone z sieciami VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Twój profil służbowy jest połączony z siecią <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1112,6 +1108,14 @@
<string name="basic_status" msgid="2315371112182658176">"Otwarta rozmowa"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widżety Rozmowa"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Kliknij rozmowę, aby dodać ją do ekranu głównego"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> temu"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Mniej niż <xliff:g id="DURATION">%1$s</xliff:g> temu"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Ponad <xliff:g id="DURATION">%1$s</xliff:g> temu"</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 48615490d3a1..805a673b209d 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -1096,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Conversa aberta"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgets de conversa"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Toque em uma conversa para adicioná-la à tela inicial"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> atrás"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Menos de <xliff:g id="DURATION">%1$s</xliff:g> atrás"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Mais de <xliff:g id="DURATION">%1$s</xliff:g> atrás"</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index d8fc15702598..5a6cdb64715f 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"A app ou a sua entidade não permitem tirar capturas de ecrã"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Editar"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Editar captura de ecrã"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Capturar mais"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ignorar captura de ecrã"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Pré-visualização da captura de ecrã"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Limite superior"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inverter cores"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Modo de correção de cor"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Mais definições"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Definições do utilizador"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Concluído"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Fechar"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Ligado"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Ligado, bateria: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"A ligar..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Este dispositivo pertence à entidade <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> e está ligado a VPNs."</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"A sua entidade pode monitorizar o tráfego de rede no seu perfil de trabalho"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"A <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> pode monitorizar o tráfego de rede no seu perfil de trabalho"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"A atividade da rede do perfil de trabalho fica visível para o administrador de TI"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"A rede pode ser monitorizada"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Este dispositivo está ligado a VPNs."</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"O seu perfil de trabalho está ligado a <xliff:g id="VPN_APP">%1$s</xliff:g>."</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Abrir conversa"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgets de conversa"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Toque numa conversa para a adicionar ao ecrã principal"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Há <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Há menos de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Há mais de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 48615490d3a1..805a673b209d 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -1096,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Conversa aberta"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgets de conversa"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Toque em uma conversa para adicioná-la à tela inicial"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> atrás"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Menos de <xliff:g id="DURATION">%1$s</xliff:g> atrás"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Mais de <xliff:g id="DURATION">%1$s</xliff:g> atrás"</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 81b41f928b55..de49c91c8144 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Crearea capturilor de ecran nu este permisă de aplicație sau de organizația dvs."</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Editați"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Editați captura de ecran"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Surprindeți mai mult"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Închideți captura de ecran"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Previzualizare a capturii de ecran"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Marginea superioară"</string>
@@ -385,11 +384,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inversați culorile"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Mod de corectare a culorilor"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Mai multe setări"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Setări de utilizator"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Terminat"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Închideți"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Conectat"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Conectat, bateria la <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Se conectează..."</string>
@@ -536,8 +533,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Dispozitivul aparține organizației <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> și este conectat la VPN-uri"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Este posibil ca organizația dvs. să monitorizeze traficul de rețea în profilul dvs. de serviciu"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Este posibil ca <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> să monitorizeze traficul de rețea din profilul dvs. de serviciu"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Activitatea din rețeaua de profiluri de serviciu este vizibilă pentru administratorul IT"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Este posibil ca rețeaua să fie monitorizată"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Dispozitivul este conectat la VPN-uri"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Profilul dvs. de serviciu este conectat la <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1106,6 +1102,14 @@
<string name="basic_status" msgid="2315371112182658176">"Deschideți conversația"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Widgeturi pentru conversație"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Atingeți o conversație ca să o adăugați pe ecranul de pornire"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Acum <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"În urmă cu mai puțin de <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"În urmă cu peste <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 8647aac904d4..3c4326616f5f 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Не удалось сделать скриншот: нет разрешения от приложения или организации."</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Изменить"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Изменить скриншот"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Увеличить площадь скриншота"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Закрыть скриншот"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Предварительный просмотр скриншота"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Верхняя граница"</string>
@@ -386,11 +385,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Обратные цвета"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Коррекция цвета"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Настройки"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Пользовательские настройки"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Закрыть"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Подключено"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Подключено, уровень заряда батареи: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Соединение..."</string>
@@ -539,8 +536,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Это устройство принадлежит организации \"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>\" и подключено к приложениям для VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Ваша организация может отслеживать сетевой трафик в рабочем профиле"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Организация \"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>\" может отслеживать сетевой трафик в вашем рабочем профиле"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Администратору доступна история действий в сети в рабочем аккаунте."</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Сеть может отслеживаться"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Это устройство подключено к приложениям для VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Ваш рабочий профиль подключен к приложению \"<xliff:g id="VPN_APP">%1$s</xliff:g>\""</string>
@@ -1112,6 +1108,14 @@
<string name="basic_status" msgid="2315371112182658176">"Открытый чат"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Виджеты чатов"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Нажмите на чат, чтобы добавить его на главный экран"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> назад"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Прошло не более чем <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Прошло более чем <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
index eb3494e242cb..02a20dbbfb70 100644
--- a/packages/SystemUI/res/values-si/strings.xml
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"තිර රූ ගැනීමට යෙදුම හෝ ඔබගේ සංවිධානය ඉඩ නොදේ"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"සංස්කරණය කරන්න"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"තිර රුව සංස්කරණය කරන්න"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"තව ග්‍රහණය කරන්න"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"තිර රුව ඉවත ලන්න"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"තිර රූ පෙර දසුන"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ඉහළම මායිම"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"වර්ණ යටිකුරු කරන්න"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"වර්ණ නිවැරදි කිරීමේ ප්‍රකාරය"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"තව සැකසීම්"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"පරිශීලක සැකසීම්"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"නිමයි"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"වසන්න"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"සම්බන්ධිත"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"සම්බන්ධිතයි, බැටරිය <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"සම්බන්ධ වෙමින්..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"මෙම උපාංගය <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> සංවිධානයට අයිති අතර VPNs වෙත සම්බන්ධ කර ඇත"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"ඔබගේ කාර්යාල පැතිකඩ තුළ ඔබේ සංවිධානය ජාල තදබදය නිරීක්ෂණය කිරීමට හැක"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ඔබේ කාර්යාල පැතිකඩ තුළ ජාල තදබදය නිරීක්ෂණය කළ හැක"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"කාර්යාල පැතිකඩ ජාල ක්‍රියාකාරකම් ඔබගේ IT පරිපාලකට දෘශ්‍යමානය"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"ඇතැම් විට ජාලය නිරීක්ෂණය විය හැක"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"මෙම උපාංගය VPNs වෙත සම්බන්ධ කර ඇත"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"ඔබේ කාර්යාල පැතිකඩ <xliff:g id="VPN_APP">%1$s</xliff:g> වෙත සම්බන්ධ කර ඇත"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"සංවාදය විවෘත කරන්න"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"සංවාද විජට්"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"ඔබගේ මුල් තිරයට එය එක් කිරීමට සංවාදයක් තට්ටු කරන්න"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g>කට පෙර"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g>කට වඩා අඩු කාලයකට පෙර"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g>කට වඩා පෙර"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 3abd28819bda..a645d210b155 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Vytváranie snímok obrazovky je zakázané aplikáciou alebo vašou organizáciou"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Upraviť"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Upraviť snímku obrazovky"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Nasnímať viac"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Zavrieť snímku obrazovky"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Ukážka snímky obrazovky"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Horná hranica"</string>
@@ -386,11 +385,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inverzia farieb"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Režim korekcie farieb"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Ďalšie nastavenia"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Používateľské nastavenia"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Hotovo"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zavrieť"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Pripojené"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Pripojené, stav batérie: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Pripája sa..."</string>
@@ -539,8 +536,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Toto zariadenie patrí organizácii <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> a je pripojené k sieťam VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Organizácia môže sledovať sieťovú premávku vo vašom pracovnom profile"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Organizácia <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> môže sledovať sieťovú premávku vo vašom pracovnom profile"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Aktivitu siete pracovného profilu vidí váš správca IT"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Sieť môže byť sledovaná"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Toto zariadenie je pripojené k sieťam VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Váš pracovný profil je pripojený k sieti <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1112,6 +1108,14 @@
<string name="basic_status" msgid="2315371112182658176">"Otvorená konverzácia"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Miniaplikácie konverzácií"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Klepnite na konverzáciu a pridajte ju tak na plochu"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Pred <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Pred menej ako <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Pred viac ako <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 180d65cce1b6..0d3ebe02cad8 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Aplikacija ali vaša organizacija ne dovoljuje posnetkov zaslona"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Uredi"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Urejanje posnetka zaslona"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Zajemi več"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Opusti posnetek zaslona"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Predogled posnetka zaslona"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Zgornji rob"</string>
@@ -386,11 +385,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Inverzija barv"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Način popravljanja barv"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Več nastavitev"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Uporabniške nastavitve"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Končano"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Zapri"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Povezava je vzpostavljena"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Povezava je vzpostavljena, raven napolnjenosti baterije je <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Vzpostavljanje povezave ..."</string>
@@ -539,8 +536,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Ta naprava pripada organizaciji <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> in je povezana v omrežja VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Vaša organizacija lahko nadzira omrežni promet v vašem delovnem profilu"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> lahko nadzira omrežni promet v vašem delovnem profilu"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Omrežna dejavnost delovnega profila je vidna skrbniku za IT."</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Omrežje je morda nadzorovano"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Ta naprava je povezana v omrežja VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Delovni profil je povezan v aplikacijo <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1112,6 +1108,14 @@
<string name="basic_status" msgid="2315371112182658176">"Odprt pogovor"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Pripomočki za pogovore"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Dotaknite se pogovora, da ga dodate na začetni zaslon."</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"pred <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Pred manj kot <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Pred več kot <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml
index cc62da3ebb83..4f0c942ab50e 100644
--- a/packages/SystemUI/res/values-sq/strings.xml
+++ b/packages/SystemUI/res/values-sq/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Nxjerrja e pamjeve të ekranit nuk lejohet nga aplikacioni ose organizata jote."</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Modifiko"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Modifiko pamjen e ekranit"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Shkrep më shumë"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Hiq pamjen e ekranit"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Pamja paraprake e imazhit"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Kufiri i sipërm"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Shkëmbe ngjyrat"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Modaliteti i korrigjimit të ngjyrës"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Cilësime të tjera"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Cilësimet e përdoruesit"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"U krye"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Mbyll"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"I lidhur"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"E lidhur, bateria <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Po lidhet..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Kjo pajisje i përket <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> dhe është e lidhur me rrjetet VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Organizata jote mund të monitorojë trafikun e rrjetit në profilin tënd të punës"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> mund të monitorojë trafikun e rrjetit në profilin tënd të punës"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Aktiviteti i rrjetit të profilit të punës është i dukshëm për administratorin tënd të teknologjisë së informacionit"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Rrjeti mund të jetë i monitoruar"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Kjo pajisje është e lidhur me rrjetet VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Profili yt i punës është i lidhur me <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Hap bisedën"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Miniaplikacionet e bisedave"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Trokit te një bisedë dhe shtoje në ekranin bazë"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> më parë"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Më pak se <xliff:g id="DURATION">%1$s</xliff:g> më parë"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Mbi <xliff:g id="DURATION">%1$s</xliff:g> më parë"</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 6975a45bfcf7..58939458f09d 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Апликација или организација не дозвољавају прављење снимака екрана"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Измени"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Измените снимак екрана"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Снимите још"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Одбаците снимак екрана"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Преглед снимка екрана"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Горња граница"</string>
@@ -385,11 +384,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Обрни боје"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Режим корекције боје"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Још подешавања"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Корисничка подешавања"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Затвори"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Повезан"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Повезано, ниво батерије је <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Повезује се..."</string>
@@ -536,8 +533,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Овај уређај припада организацији <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> и повезан је са VPN-овима"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Организација може да прати мрежни саобраћај на пословном профилу"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> може да надгледа мрежни саобраћај на пословном профилу"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Активност на мрежи пословног профила је видљива ИТ администратору"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Мрежа се можда надгледа"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Овај уређај је повезан са VPN-овима"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Пословни профил је повезан са апликацијом <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1106,6 +1102,14 @@
<string name="basic_status" msgid="2315371112182658176">"Отворите конверзацију"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Виџети за конверзацију"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Додирните конверзацију да бисте је додали на почетни екран"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"Пре <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Пре мање од <xliff:g id="DURATION">%1$s</xliff:g>"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Пре више од <xliff:g id="DURATION">%1$s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index f3ed80698b0f..ff1324cee8fd 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Appen eller organisationen tillåter inte att du tar skärmbilder"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Redigera"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Redigera skärmbild"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Fånga mer"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Stäng skärmbild"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Förhandsgranskning av skärmbild"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Övre gräns"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Invertera färger"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Färgkorrigeringsläge"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Fler inställningar"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Användarinställningar"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Klart"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Stäng"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Ansluten"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Ansluten, batterinivå <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Ansluter ..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Den här enheten tillhör <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> och är ansluten till VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Organisationen kan övervaka nätverkstrafik i jobbprofilen"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kan övervaka nätverkstrafiken i jobbprofilen"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Jobbprofilens nätverksaktivitet är synlig för IT-administratören"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Nätverket kan vara övervakat"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Den här enheten är ansluten till VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Jobbprofilen är ansluten till <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Öppen konversation"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Konversationswidgetar"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Tryck på en konversation för att lägga till den på startskärmen"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"För <xliff:g id="DURATION">%1$s</xliff:g> sedan"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Mindre än <xliff:g id="DURATION">%1$s</xliff:g> sedan"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Mer än <xliff:g id="DURATION">%1$s</xliff:g> sedan"</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 634cd9d0b3f2..f1904f473382 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Programu au shirika lako halikuruhusu kupiga picha za skrini"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Badilisha"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Badilisha picha ya skrini"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Nasa zaidi"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ondoa picha ya skrini"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Onyesho la kukagua picha ya skrini"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Mpaka wa sehemu ya juu"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Pindua rangi"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Hali ya kusahihisha rangi"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Mipangilio zaidi"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Mipangilio ya mtumiaji"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Nimemaliza"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Funga"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Imeunganishwa"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Imeunganishwa, kiwango cha betri ni <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Inaunganisha..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Kifaa hiki kinamilikiwa na <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> na kimeunganishwa kwenye VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Huenda shirika lako likafuatilia shughuli kwenye mtandao katika wasifu wako wa kazini"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Huenda <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ikafuatilia shughuli kwenye mtandao katika wasifu wako wa kazini"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Shughuli za mtandao za wasifu wa kazini zinaonekana kwa msimamizi wako wa TEHAMA."</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Huenda mtandao unafuatiliwa"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Kifaa hiki kimeunganishwa kwenye VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Wasifu wako wa kazini umeunganishwa kwenye <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -952,7 +948,7 @@
<string name="notification_channel_storage" msgid="2720725707628094977">"Hifadhi"</string>
<string name="notification_channel_hints" msgid="7703783206000346876">"Vidokezo"</string>
<string name="instant_apps" msgid="8337185853050247304">"Programu Zinazofunguka Papo Hapo"</string>
- <string name="instant_apps_title" msgid="8942706782103036910">"<xliff:g id="APP">%1$s</xliff:g> inaendelea kutumika"</string>
+ <string name="instant_apps_title" msgid="8942706782103036910">"Programu ya <xliff:g id="APP">%1$s</xliff:g> inatumika"</string>
<string name="instant_apps_message" msgid="6112428971833011754">"Programu inafunguka bila kusakinishwa."</string>
<string name="instant_apps_message_with_help" msgid="1816952263531203932">"Programu inafunguka bila kusakinishwa. Gusa ili upate maelezo zaidi."</string>
<string name="app_info" msgid="5153758994129963243">"Maelezo ya programu"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Fungua mazungumzo"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Wijeti za mazungumzo"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Gusa mazungumzo ili uyaweke kwenye Skrini yako ya kwanza"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> zilizopita"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Chini ya <xliff:g id="DURATION">%1$s</xliff:g> zilizopita"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Zaidi ya <xliff:g id="DURATION">%1$s</xliff:g> zilizopita"</string>
diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml
index a940304e56e9..79f2125808b3 100644
--- a/packages/SystemUI/res/values-ta/strings.xml
+++ b/packages/SystemUI/res/values-ta/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"ஸ்கிரீன் ஷாட்டுகளை எடுப்பதை, ஆப்ஸ் அல்லது உங்கள் நிறுவனம் அனுமதிக்கவில்லை"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"திருத்து"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"ஸ்கிரீன்ஷாட்டைத் திருத்தும்"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"கூடுதலாகப் படமெடு"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ஸ்கிரீன்ஷாட்டை நிராகரிக்கும்"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"ஸ்கிரீன்ஷாட்டின் மாதிரிக்காட்சி"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"மேற்புற எல்லை"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"வண்ணங்களை மாற்று"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"வண்ணத்தைச் சரிப்படுத்தும் முறை"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"அமைப்பில் மாற்று"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"பயனர் அமைப்புகள்"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"முடிந்தது"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"மூடுக"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"இணைக்கப்பட்டது"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"இணைக்கப்பட்டது, பேட்டரி <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"இணைக்கிறது..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"இந்த சாதனம் <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> நிறுவனத்துக்கு சொந்தமானது, அது VPNகளுடன் இணைக்கப்பட்டுள்ளது"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"உங்கள் நிறுவனம் பணிக் கணக்கில் நெட்வொர்க் ட்ராஃபிக்கைக் கண்காணிக்கலாம்"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> உங்கள் பணிக் கணக்கில் நெட்வொர்க் ட்ராஃபிக்கைக் கண்காணிக்கலாம்"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"பணிக் கணக்கின் நெட்வொர்க் செயல்பாட்டை IT நிர்வாகியால் பார்க்க முடியும்"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"நெட்வொர்க் கண்காணிக்கப்படலாம்"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"இந்த சாதனம் VPNகளுடன் இணைக்கப்பட்டுள்ளது"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"உங்கள் பணிக் கணக்கு <xliff:g id="VPN_APP">%1$s</xliff:g> உடன் இணைக்கப்பட்டுள்ளது"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"திறந்தநிலை உரையாடல்"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"உரையாடல் விட்ஜெட்டுகள்"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"ஓர் உரையாடலை உங்கள் முகப்புத் திரையில் சேர்க்க அந்த உரையாடலைத் தட்டுங்கள்"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g>க்கு முன்பு"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g>க்குக் குறைவாக"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g>க்கு முன்பு"</string>
diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml
index e76e1823f580..a735020b10a8 100644
--- a/packages/SystemUI/res/values-te/strings.xml
+++ b/packages/SystemUI/res/values-te/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"స్క్రీన్‌షాట్‌లు తీయడానికి యాప్ లేదా మీ సంస్థ అనుమతించలేదు"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"ఎడిట్ చేయండి"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"స్క్రీన్‌షాట్‌ను ఎడిట్ చేయండి"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"మరిన్ని క్యాప్చర్ చేయండి"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"స్క్రీన్‌షాట్‌ను విస్మరించు"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"స్క్రీన్‌షాట్ ప్రివ్యూ"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ఎగువ సరిహద్దు"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"కలర్ మార్పిడి"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"రంగు సవరణ మోడ్"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"మరిన్ని సెట్టింగ్‌లు"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"యూజర్ సెట్టింగ్‌లు"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"పూర్తయింది"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"మూసివేయి"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"కనెక్ట్ చేయబడినది"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"కనెక్ట్ చేయబడింది, బ్యాటరీ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"కనెక్ట్ అవుతోంది..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"ఈ పరికరం <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>కు చెందినది, ఇది VPNలకు కనెక్ట్ అయి ఉంది"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"మీ కార్యాలయ ప్రొఫైల్‌లోని నెట్‌వర్క్ ట్రాఫిక్‌ని మీ సంస్థ పర్యవేక్షించవచ్చు"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"మీ కార్యాలయ ప్రొఫైల్‌లోని నెట్‌వర్క్ ట్రాఫిక్‌ని <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> పర్యవేక్షించవచ్చు"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"వర్క్ ప్రొఫైల్ నెట్‌వర్క్ యాక్టివిటీ మీ IT అడ్మిన్‌కు కనిపిస్తుంది"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"నెట్‌వర్క్ పర్యవేక్షించబడవచ్చు"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"ఈ పరికరం VPNలకు కనెక్ట్ అయి ఉంది"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"మీ వర్క్ ప్రొఫైల్ <xliff:g id="VPN_APP">%1$s</xliff:g>కు కనెక్ట్ చేయబడింది"</string>
@@ -951,7 +947,7 @@
<string name="notification_channel_general" msgid="4384774889645929705">"సాధారణ సందేశాలు"</string>
<string name="notification_channel_storage" msgid="2720725707628094977">"నిల్వ"</string>
<string name="notification_channel_hints" msgid="7703783206000346876">"సూచనలు"</string>
- <string name="instant_apps" msgid="8337185853050247304">"తక్షణ యాప్‌లు"</string>
+ <string name="instant_apps" msgid="8337185853050247304">"ఇన్‌స్టంట్ యాప్‌లు"</string>
<string name="instant_apps_title" msgid="8942706782103036910">"<xliff:g id="APP">%1$s</xliff:g> అమలవుతోంది"</string>
<string name="instant_apps_message" msgid="6112428971833011754">"ఇన్‌స్టాల్ చేయకుండా యాప్ తెరవబడింది."</string>
<string name="instant_apps_message_with_help" msgid="1816952263531203932">"ఇన్‌స్టాల్ చేయకుండా యాప్ తెరవబడింది. మరింత తెలుసుకోవడానికి నొక్కండి."</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"సంభాషణను తెరవండి"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"సంభాషణ విడ్జెట్‌లు"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"దీనిని మీ మొదటి స్క్రీన్‌కు జోడించడానికి సంభాషణను ట్యాప్ చేయండి"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> క్రితం"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> కంటే ముందు"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> క్రితం"</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index be6eae45b3f5..e851b3d5fa39 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"แอปหรือองค์กรของคุณไม่อนุญาตให้จับภาพหน้าจอ"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"แก้ไข"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"แก้ไขภาพหน้าจอ"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"จับภาพได้มากขึ้น"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"ปิดภาพหน้าจอ"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"ตัวอย่างภาพหน้าจอ"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"ขอบเขตด้านบน"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"กลับสี"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"โหมดการแก้ไขสี"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"การตั้งค่าเพิ่มเติม"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"การตั้งค่าของผู้ใช้"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"เสร็จสิ้น"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"ปิด"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"เชื่อมต่อ"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"เชื่อมต่ออยู่ แบตเตอรี่ <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"กำลังเชื่อมต่อ..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> เป็นเจ้าของอุปกรณ์นี้ และอุปกรณ์เชื่อมต่ออยู่กับ VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"องค์กรของคุณอาจตรวจสอบการจราจรของข้อมูลในเครือข่ายในโปรไฟล์งาน"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> อาจตรวจสอบการจราจรของข้อมูลในเครือข่ายในโปรไฟล์งานของคุณ"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"ผู้ดูแลระบบไอทีจะเห็นกิจกรรมในเครือข่ายโปรไฟล์งาน"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"อาจมีการตรวจสอบเครือข่าย"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"อุปกรณ์นี้เชื่อมต่ออยู่กับ VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"โปรไฟล์งานของคุณเชื่อมต่ออยู่กับ <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"เปิดการสนทนา"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"วิดเจ็ตการสนทนา"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"แตะการสนทนาเพื่อเพิ่มไปยังหน้าจอหลัก"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g>ที่ผ่านมา"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"ไม่ถึง <xliff:g id="DURATION">%1$s</xliff:g>ที่ผ่านมา"</string>
<string name="over_timestamp" msgid="4765793502859358634">"นานกว่า <xliff:g id="DURATION">%1$s</xliff:g>ที่ผ่านมา"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 5847a687c870..41f039ba05b4 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Hindi pinahihintulutan ng app o ng iyong organisasyon ang pagkuha ng mga screenshot"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"I-edit"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"I-edit ang screenshot"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Mag-capture pa"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"I-dismiss ang screenshot"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Preview ng screenshot"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Pinakamataas na limitasyon"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"I-invert ang mga kulay"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Correction mode ng kulay"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Higit pang setting"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Mga setting ng user"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Tapos na"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Isara"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Nakakonekta"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Nakakonekta, baterya <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Kumokonekta..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Pagmamay-ari ng <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ang device na ito at nakakonekta ito sa mga VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Maaaring sumubaybay ang iyong organisasyon ng trapiko sa network sa profile sa trabaho mo"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Maaaring subaybayan ng <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ang trapiko sa network sa iyong profile sa trabaho"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Nakikita ng iyong IT admin ang aktibidad sa network ng profile sa trabaho"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Maaaring sinusubaybayan ang network"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Nakakonekta sa mga VPN ang device na ito"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Nakakonekta sa <xliff:g id="VPN_APP">%1$s</xliff:g> ang iyong profile sa trabaho"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Buksan ang pag-uusap"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Mga widget ng pag-uusap"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Mag-tap sa isang pag-uusap para idagdag ito sa iyong Home screen"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> ang nakalipas"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Wala pang <xliff:g id="DURATION">%1$s</xliff:g> ang nakalipas"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Mahigit <xliff:g id="DURATION">%1$s</xliff:g> ang nakalipas"</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index add02600f73f..b8201e66b390 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Uygulama veya kuruluşunuz, ekran görüntüsü alınmasına izin vermiyor."</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Düzenle"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Ekran görüntüsünü düzenle"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Daha fazla ekran görüntüsü al"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Ekran görüntüsünü kapat"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Ekran görüntüsü önizlemesi"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Üst sınır"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Renkleri çevir"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Renk düzeltme modu"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Diğer ayarlar"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Kullanıcı ayarları"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Bitti"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Kapat"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Bağlı"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Bağlandı, pil seviyesi <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Bağlanılıyor..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Bu cihaz <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> kuruluşuna ait olup VPN\'lere bağlı"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Kuruluşunuz, iş profilinizdeki ağ trafiğini izleyebilir"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>, iş profilinizdeki ağ trafiğini izleyebilir"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"BT yöneticiniz, iş profilinizin ağ etkinliğini görebilir"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Ağ trafiği izlenebilir"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Bu cihaz VPN\'lere bağlı"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"İş profiliniz <xliff:g id="VPN_APP">%1$s</xliff:g> uygulamasına bağlı"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Görüşmeyi aç"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Görüşme widget\'ları"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Ana ekranınıza eklemek için bir ileti dizisine dokunun"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> önce"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Henüz <xliff:g id="DURATION">%1$s</xliff:g> olmadı"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> üzerinde bir süre önce"</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 4c1f55b30188..7ee93772c2b2 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Додаток або адміністратор вашої організації не дозволяють робити знімки екрана"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Редагувати"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Редагувати знімок екрана"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Включити більше деталей"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Закрити знімок екрана"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Перегляд знімка екрана"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Верхня межа"</string>
@@ -386,11 +385,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Інвертовані кольори"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Режим коригування кольору"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Більше налаштувань"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Налаштування користувача"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Готово"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Закрити"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Під’єднано"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Під’єдано, заряд акумулятора: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"З’єднання…"</string>
@@ -539,8 +536,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Цей пристрій належить організації \"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>\". Його підключено до мереж VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Адміністратор вашої організації може відстежувати мережевий трафік у вашому робочому профілі"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"Адміністратор організації <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> мож відстежувати мережевий трафік у вашому робочому профілі"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Дії в мережі в робочому профілі може бачити ваш системний адміністратор"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Мережевий трафік може відстежуватися"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Цей пристрій підключено до мереж VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Ваш робочий профіль підключено до додатка <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1112,6 +1108,14 @@
<string name="basic_status" msgid="2315371112182658176">"Відкрита розмова"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Віджети розмов"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Натисніть розмову, щоб додати її на головний екран"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> тому"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Менше ніж <xliff:g id="DURATION">%1$s</xliff:g> тому"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Понад <xliff:g id="DURATION">%1$s</xliff:g> тому"</string>
diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml
index ab6ae70390ab..bdd6b1e893b5 100644
--- a/packages/SystemUI/res/values-ur/strings.xml
+++ b/packages/SystemUI/res/values-ur/strings.xml
@@ -1100,6 +1100,14 @@
<string name="basic_status" msgid="2315371112182658176">"گفتگو کھولیں"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"گفتگو ویجیٹس"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"اسے اپنے ہوم اسکرین پر شامل کرنے کے لیے گفتگو پر تھپتھپائیں"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> قبل"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g> سے کچھ کم وقت قبل"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g> سے زائد عرصہ قبل"</string>
diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml
index 7847967e906c..321f36c27d32 100644
--- a/packages/SystemUI/res/values-uz/strings.xml
+++ b/packages/SystemUI/res/values-uz/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Ilova yoki tashkilotingiz skrinshot olishni taqiqlagan"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Tahrirlash"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Skrinshotni tahrirlash"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Yana suratga olish"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Skrinshotni yopish"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Skrinshotga razm solish"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Yuqori chegara"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Teskari ranglar"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Rangni to‘g‘rilash usuli"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Boshqa sozlamalar"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Foydalanuvchi sozlamalari"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Tayyor"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Yopish"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Ulangan"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Ulangan, batareya quvvati: <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Ulanmoqda…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Bu qurilma <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> tashkilotiga tegishli va VPN tarmoqlarga ulangan"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Tashkilotingiz ishchi profilingizda tarmoq trafigini nazorat qilishi mumkin"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ishchi profilingizda tarmoq trafigini nazorat qilishi mumkin"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Ish profilida tarmoqqa oid harakatlar AT administratoriga koʻrinadi"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Tarmoq kuzatilishi mumkin"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Bu qurilma VPN tarmoqlarga ulangan"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Ish profilingiz <xliff:g id="VPN_APP">%1$s</xliff:g> tarmogʻiga ulangan"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Suhbatni ochish"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Suhbat vidjetlari"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Bosh ekranga chiqariladigan suhbat ustiga bosing"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> oldin"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"<xliff:g id="DURATION">%1$s</xliff:g>dan kam vaqt oldin"</string>
<string name="over_timestamp" msgid="4765793502859358634">"<xliff:g id="DURATION">%1$s</xliff:g>dan ortiq vaqt oldin"</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 54f5f403104b..6ef59c8655e4 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Ứng dụng hoặc tổ chức của bạn không cho phép chụp ảnh màn hình"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Chỉnh sửa"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Chỉnh sửa ảnh chụp màn hình"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Chụp được nhiều hơn"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Đóng ảnh chụp màn hình"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Xem trước ảnh chụp màn hình"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Ranh giới trên"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Đảo ngược màu"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Chế độ chỉnh màu"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Chế độ cài đặt khác"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Cài đặt người dùng"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Xong"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Đóng"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Đã kết nối"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Đã kết nối, mức pin <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Đang kết nối..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Thiết bị này thuộc về <xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> và đã kết nối với VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Tổ chức của bạn có thể giám sát lưu lượng truy cập mạng trong hồ sơ công việc của bạn"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> có thể giám sát lưu lượng truy cập mạng trong hồ sơ công việc của bạn"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Quản trị viên CNTT của bạn có thể xem hoạt động trên mạng của hồ sơ công việc"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Mạng có thể được giám sát"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Thiết bị này đã kết nối với VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Hồ sơ công việc của bạn đã kết nối với <xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Mở cuộc trò chuyện"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Tiện ích trò chuyện"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Nhấn vào một cuộc trò chuyện để thêm cuộc trò chuyện đó vào Màn hình chính"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> trước"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Chưa đầy <xliff:g id="DURATION">%1$s</xliff:g> trước"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Hơn <xliff:g id="DURATION">%1$s</xliff:g> trước"</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 71b1b6a80ce2..e87f4ddd3ca4 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"此应用或您所在的单位不允许进行屏幕截图"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"编辑"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"编辑屏幕截图"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"截取更多内容"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"关闭屏幕截图"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"屏幕截图预览"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"顶部边界"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"反色"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"颜色校正模式"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"更多设置"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"用户设置"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"完成"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"关闭"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"已连接"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"已连接,电池电量为 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"正在连接…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"此设备归<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>所有,且已连接到多个 VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"您所在的单位可能会监控您工作资料中的网络流量"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"“<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>”可能会监控您工作资料中的网络流量"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"IT 管理员可以看到工作资料网络活动记录"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"网络可能会受到监控"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"此设备已连接到多个 VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"您的工作资料已连接到“<xliff:g id="VPN_APP">%1$s</xliff:g>”"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"开放式对话"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"对话微件"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"点按对话即可将其添加到主屏幕"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g>前"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"最近 <xliff:g id="DURATION">%1$s</xliff:g>内"</string>
<string name="over_timestamp" msgid="4765793502859358634">"超过 <xliff:g id="DURATION">%1$s</xliff:g>前"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index 63a0febd04e8..8b984580cbde 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"應用程式或您的機構不允許擷取螢幕畫面"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"編輯"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"編輯螢幕截圖"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"擷取更大範圍的螢幕內容"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"關閉螢幕截圖"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"螢幕截圖預覽"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"上方邊界"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"反轉顏色"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"色彩校正模式"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"更多設定"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"使用者設定"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"完成"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"關閉"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"已連線"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"已連線,電量為 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"正在連線…"</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"此裝置屬於「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」,並已連結至 VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"您的機構可能監控您工作設定檔上的網絡流量"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>可能會監控您工作設定檔上的網絡流量"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"IT 管理員可以查看工作設定檔的網絡活動"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"網絡可能會受到監控"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"此裝置已連結至 VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"您的工作設定檔已連結至「<xliff:g id="VPN_APP">%1$s</xliff:g>」"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"開啟對話"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"對話小工具"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"輕按對話即可新增至主畫面"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g>前"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"最近 <xliff:g id="DURATION">%1$s</xliff:g>內"</string>
<string name="over_timestamp" msgid="4765793502859358634">"超過 <xliff:g id="DURATION">%1$s</xliff:g>前"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index c8ade67853a1..714e3e0feda0 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"這個應用程式或貴機構不允許擷取螢幕畫面"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"編輯"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"編輯螢幕截圖"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"擷取更大範圍的螢幕內容"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"關閉螢幕截圖"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"螢幕截圖預覽"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"頂端邊界"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"反轉顏色"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"色彩校正模式"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"更多設定"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"使用者設定"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"完成"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"關閉"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"已連線"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"已連線,電量為 <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"連線中..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"這部裝置的擁有者為「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」,並且已連線到 VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"貴機構可能會監控你工作資料夾的網路流量"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"「<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g>」可能會監控你工作資料夾的網路流量"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"IT 管理員可以查看工作資料夾的網路活動"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"網路可能會受到監控"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"這部裝置已連線到 VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"你的工作資料夾已連線到「<xliff:g id="VPN_APP">%1$s</xliff:g>」"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"開放式對話"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"對話小工具"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"輕觸對話即可新增至主畫面"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g>前"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"最近 <xliff:g id="DURATION">%1$s</xliff:g>內"</string>
<string name="over_timestamp" msgid="4765793502859358634">"超過 <xliff:g id="DURATION">%1$s</xliff:g>前"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 2c6c985ccb3e..6d2e37749362 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -89,8 +89,7 @@
<string name="screenshot_failed_to_capture_text" msgid="7818288545874407451">"Ukuthatha izithombe-skrini akuvunyelwe uhlelo lokusebenza noma inhlangano yakho"</string>
<string name="screenshot_edit_label" msgid="8754981973544133050">"Hlela"</string>
<string name="screenshot_edit_description" msgid="3333092254706788906">"Hlela isithombe-skrini"</string>
- <!-- no translation found for screenshot_scroll_label (2930198809899329367) -->
- <skip />
+ <string name="screenshot_scroll_label" msgid="2930198809899329367">"Thwebula okuningi"</string>
<string name="screenshot_dismiss_description" msgid="4702341245899508786">"Cashisa isithombe-skrini"</string>
<string name="screenshot_preview_description" msgid="7606510140714080474">"Ukubuka kuqala isithombe-skrini"</string>
<string name="screenshot_top_boundary" msgid="1500569103321300856">"Umngcele ophezulu"</string>
@@ -384,11 +383,9 @@
<string name="quick_settings_inversion_label" msgid="5078769633069667698">"Faka imibala"</string>
<string name="quick_settings_color_space_label" msgid="537528291083575559">"Imodi yokulungisa umbala"</string>
<string name="quick_settings_more_settings" msgid="2878235926753776694">"Izilungiselelo eziningi"</string>
- <!-- no translation found for quick_settings_more_user_settings (1064187451100861954) -->
- <skip />
+ <string name="quick_settings_more_user_settings" msgid="1064187451100861954">"Amasethingi womsebenzisi"</string>
<string name="quick_settings_done" msgid="2163641301648855793">"Kwenziwe"</string>
- <!-- no translation found for quick_settings_close_user_panel (5599724542275896849) -->
- <skip />
+ <string name="quick_settings_close_user_panel" msgid="5599724542275896849">"Vala"</string>
<string name="quick_settings_connected" msgid="3873605509184830379">"Ixhunyiwe"</string>
<string name="quick_settings_connected_battery_level" msgid="1322075669498906959">"Kuxhunyiwe, ibhethri elingu-<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="quick_settings_connecting" msgid="2381969772953268809">"Iyaxhuma..."</string>
@@ -533,8 +530,7 @@
<string name="quick_settings_disclosure_named_management_vpns" msgid="4046375645500668555">"Le divayisi ngeye-<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> futhi ixhunywe kuma-VPN"</string>
<string name="quick_settings_disclosure_managed_profile_monitoring" msgid="1423899084754272514">"Inhlangano yakho ingaqapha ithrafikhi yenethiwekhi kuphrofayela yakho yomsebenzi"</string>
<string name="quick_settings_disclosure_named_managed_profile_monitoring" msgid="8321469176706219860">"I-<xliff:g id="ORGANIZATION_NAME">%1$s</xliff:g> ingaqaphela ithrafikhi yenethiwekhi kuphrofayela yakho yomsebenzi"</string>
- <!-- no translation found for quick_settings_disclosure_managed_profile_network_activity (2636594621387832827) -->
- <skip />
+ <string name="quick_settings_disclosure_managed_profile_network_activity" msgid="2636594621387832827">"Umsebenzi wenethiwekhi yephrofayela yomsebenzi uyabonakala kumphathi wakho we-IT"</string>
<string name="quick_settings_disclosure_monitoring" msgid="8548019955631378680">"Inethiwekhi kungenzeka iqashiwe"</string>
<string name="quick_settings_disclosure_vpns" msgid="7213546797022280246">"Le divayisi ixhunywe kuma-VPN"</string>
<string name="quick_settings_disclosure_managed_profile_named_vpn" msgid="8117568745060010789">"Iphrofayela yakho yomsebenzi ixhunywe ku-<xliff:g id="VPN_APP">%1$s</xliff:g>"</string>
@@ -1100,6 +1096,14 @@
<string name="basic_status" msgid="2315371112182658176">"Vula ingxoxo"</string>
<string name="select_conversation_title" msgid="6716364118095089519">"Amawijethi wengxoxo"</string>
<string name="select_conversation_text" msgid="3376048251434956013">"Thepha ingxoxo ukuyengeza Kusikrini sakho sasekhaya"</string>
+ <!-- no translation found for no_conversations_text (7362374212649891057) -->
+ <skip />
+ <!-- no translation found for priority_conversations (3967482288896653039) -->
+ <skip />
+ <!-- no translation found for recent_conversations (8531874684782574622) -->
+ <skip />
+ <!-- no translation found for okay (6490552955618608554) -->
+ <skip />
<string name="timestamp" msgid="6577851592534538533">"<xliff:g id="DURATION">%1$s</xliff:g> edlule"</string>
<string name="less_than_timestamp" msgid="6598972791137724517">"Ngaphansi kwe-<xliff:g id="DURATION">%1$s</xliff:g> edlule"</string>
<string name="over_timestamp" msgid="4765793502859358634">"Ngaphezu kwe-<xliff:g id="DURATION">%1$s</xliff:g> edlule"</string>
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index e3bf12495a82..b21c3ae4c2cf 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -54,6 +54,13 @@
<color name="global_actions_emergency_background">@color/GM2_red_400</color>
<color name="global_actions_emergency_text">@color/GM2_grey_100</color>
+ <!-- Colors for Power Menu Lite -->
+ <color name="global_actions_lite_background">#191C18</color>
+ <color name="global_actions_lite_button_background">#303030</color>
+ <color name="global_actions_lite_text">#F0F0F0</color>
+ <color name="global_actions_lite_emergency_background">#F85D4D</color>
+ <color name="global_actions_lite_emergency_icon">@color/GM2_grey_900</color>
+
<color name="global_actions_shutdown_ui_text">@color/control_primary_text</color>
<!-- Tint color for the content on the notification overflow card. -->
@@ -281,4 +288,9 @@
<!-- Accessibility floating menu -->
<color name="accessibility_floating_menu_background">#CCFFFFFF</color> <!-- 80% -->
<color name="accessibility_floating_menu_stroke_dark">#26FFFFFF</color> <!-- 15% -->
+
+ <!-- Wallet screen -->
+ <color name="wallet_white">#FFFFFF</color>
+ <color name="wallet_card_border">#33FFFFFF</color>
+ <color name="wallet_primary_text">@color/GM2_grey_900</color>
</resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 53a42aeb2b87..bd92299f38cf 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -570,6 +570,10 @@
<!-- Max number of columns for power menu -->
<integer name="power_menu_max_columns">3</integer>
+ <!-- Max number of columns for power menu lite -->
+ <integer name="power_menu_lite_max_columns">2</integer>
+ <!-- Max number of rows for power menu lite -->
+ <integer name="power_menu_lite_max_rows">4</integer>
<!-- If the dp width of the available space is <= this value, potentially adjust the number
of columns-->
@@ -606,6 +610,21 @@
<!-- Determines whether the shell features all run on another thread. -->
<bool name="config_enableShellMainThread">false</bool>
+ <!-- Default udfps icon. Same path as ic_fingerprint.xml -->
+ <string name="config_udfpsIcon" translatable="false">
+ M25.5,16.3283C28.47,14.8433 31.9167,14 35.5834,14C39.2501,14 42.6968,14.8433 45.6668,16.3283
+ M20,28.6669C22.7683,24.3402 28.7084,21.3335 35.5834,21.3335C42.4585,21.3335 48.3985,
+ 24.3402 51.1669,28.6669
+ M22.8607,47.0002C21.834,44.3235 21.834,41.5002 21.834,41.5002C21.834,
+ 34.4051 27.7374,28.6667 35.5841,28.6667C43.4308,28.6667 49.3341,34.4051 49.3341,41.5002
+ M49.3344,41.5003V42.0319C49.3344,44.7636 47.1161,47.0003 44.3661,47.0003C41.9461,
+ 47.0003 39.8744,45.2403 39.471,42.857L38.9577,
+ 39.7769C38.591,37.5953 36.7027,36.0002 34.5027,
+ 36.0002C26.5826,36.0002 29.846,49.1087 35.291,50.6487
+ M44.9713,54.6267C42.5513,56.7167 39.2879,58.0001 35.5846,58.0001C32.2296,
+ 58.0001 29.2229,56.9551 26.8945,55.195
+ </string>
+
<!-- package name of a built-in camera app to use to restrict implicit intent resolution
when the double-press power gesture is used. Ignored if empty. -->
<string translatable="false" name="config_cameraGesturePackage"></string>
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 1bd12a3deca3..6b7c62821a5f 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -420,6 +420,8 @@
<!-- Padding on each QS Footer Icon to make the icons 20dpx20dp -->
<dimen name="qs_footer_icon_padding">14dp</dimen>
+ <!-- 3/4 of icon width 20dpx20dp -->
+ <dimen name="qs_footer_tuner_icon_translation">15dp</dimen>
<!-- The padding between the notifications and the quick settings container -->
<dimen name="qs_notification_padding">@dimen/notification_side_paddings</dimen>
@@ -1065,6 +1067,12 @@
<dimen name="global_actions_power_dialog_item_width">255dp</dimen>
<dimen name="global_actions_power_dialog_item_bottom_margin">45dp</dimen>
+ <!-- Power Menu Lite -->
+ <dimen name="global_actions_button_size">96dp</dimen>
+ <dimen name="global_actions_button_padding">38dp</dimen>
+ <dimen name="global_actions_corner_radius">28dp</dimen>
+ <dimen name="global_actions_lite_padding">24dp</dimen>
+
<!-- The maximum offset in either direction that elements are moved horizontally to prevent
burn-in on AOD. -->
<dimen name="burn_in_prevention_offset_x">8dp</dimen>
@@ -1085,7 +1093,7 @@
<!-- The maximum offset for the under-display fingerprint sensor (UDFPS) icon in either
direction that elements aer moved to prevent burn-in on AOD-->
- <dimen name="udfps_burn_in_offset_x">8dp</dimen>
+ <dimen name="udfps_burn_in_offset_x">2dp</dimen>
<dimen name="udfps_burn_in_offset_y">8dp</dimen>
<dimen name="corner_size">8dp</dimen>
@@ -1401,6 +1409,9 @@
<!-- rounded_slider_track_width / 2 -->
<dimen name="rounded_slider_track_corner_radius">4dp</dimen>
+ <!-- inset for ic_lock_open within a DisabledUdfpsView -->
+ <dimen name="udfps_unlock_icon_inset">16dp</dimen>
+
<!-- Location on the screen of the center of the physical power button. This is a reasonable
default that should be overridden by device-specific overlays. -->
<dimen name="physical_power_button_center_screen_location_y">620px</dimen>
@@ -1415,4 +1426,15 @@
For devices with sensors on the back of the device, this corresponds to the location on the
screen directly in front of the sensor. -->
<dimen name="physical_fingerprint_sensor_center_screen_location_y">610px</dimen>
+
+ <!-- Wallet activity screen specs -->
+ <dimen name="wallet_icon_size">36sp</dimen>
+ <dimen name="card_margin">16dp</dimen>
+ <dimen name="card_carousel_dot_offset">24dp</dimen>
+ <dimen name="card_carousel_dot_unselected_radius">2dp</dimen>
+ <dimen name="card_carousel_dot_selected_radius">3dp</dimen>
+ <dimen name="card_carousel_dot_margin">4dp</dimen>
+ <dimen name="min_wallet_empty_height">208dp</dimen>
+ <dimen name="wallet_card_border_width">1dp</dimen>
+ <dimen name="wallet_empty_state_corner_radius">24dp</dimen>
</resources>
diff --git a/packages/SystemUI/res/values/flags.xml b/packages/SystemUI/res/values/flags.xml
index 2f3fbe74d5fa..6af982ddad72 100644
--- a/packages/SystemUI/res/values/flags.xml
+++ b/packages/SystemUI/res/values/flags.xml
@@ -50,4 +50,6 @@
<bool name="flag_alarm_tile">false</bool>
<bool name="flag_charging_ripple">false</bool>
+
+ <bool name="flag_ongoing_call_status_bar_chip">false</bool>
</resources>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index f4b50eb71b39..8dad40b0cd69 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1633,8 +1633,14 @@
<!-- Wallet strings -->
<!-- Wallet empty state, title [CHAR LIMIT=32] -->
<string name="wallet_title">Wallet</string>
+ <!-- Label of the button underneath the card carousel when device is unlocked. [CHAR LIMIT=NONE] -->
+ <string name="wallet_button_label_device_unlocked">Show all</string>
+ <!-- Label of the button underneath the card carousel when device is locked. [CHAR LIMIT=NONE] -->
+ <string name="wallet_button_label_device_locked">Unlock to pay</string>
<!-- Secondary label of the quick access wallet tile. [CHAR LIMIT=32] -->
<string name="wallet_secondary_label">Ready</string>
+ <!-- Message shown when an unknown failure occurred when fetching cards. [CHAR LIMIT=NONE] -->
+ <string name="wallet_error_generic">There was a problem getting your cards, please try again later</string>
<!-- Name of the work status bar icon. -->
<string name="status_bar_work">Work profile</string>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index cb21245fa639..0eb4d08d7421 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -335,7 +335,7 @@
<item name="*android:isLightTheme">false</item>
</style>
- <style name="Theme.SystemUI.Light">
+ <style name="Theme.SystemUI.LightWallpaper">
<item name="wallpaperTextColor">@*android:color/primary_text_material_light</item>
<item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_light</item>
<item name="wallpaperTextColorAccent">@*android:color/system_accent2_600</item>
@@ -395,6 +395,13 @@
<item name="android:windowIsFloating">true</item>
</style>
+ <style name="Theme.SystemUI.Dialog.GlobalActionsLite" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar.Fullscreen">
+ <item name="android:windowIsFloating">true</item>
+ <item name="android:windowBackground">@android:color/transparent</item>
+ <item name="android:backgroundDimEnabled">true</item>
+ <item name="android:windowCloseOnTouchOutside">true</item>
+ </style>
+
<style name="Theme.SystemUI.Dialog.MediaOutput">
<item name="android:windowBackground">@drawable/media_output_dialog_background</item>
</style>
@@ -785,4 +792,18 @@
<item name="android:mirrorForRtl">false</item>
<item name="android:progressDrawable">@drawable/udfps_progress_bar</item>
</style>
+
+ <!-- Wallet styles -->
+ <style name="Wallet" />
+
+ <style name="Wallet.TextAppearance">
+ <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
+ <item name="android:textColor">@color/wallet_primary_text</item>
+ <item name="android:singleLine">true</item>
+ <item name="android:textSize">14sp</item>
+ </style>
+
+ <style name="Wallet.Theme">
+ <item name="android:colorControlHighlight">@*android:color/primary_text_material_dark</item>
+ </style>
</resources>
diff --git a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java b/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java
index 118f98da11e2..ed465de0e766 100644
--- a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java
+++ b/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsController.java
@@ -18,27 +18,31 @@ package com.android.keyguard;
import static android.hardware.biometrics.BiometricSourceType.FINGERPRINT;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.InsetDrawable;
import android.hardware.biometrics.BiometricSourceType;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
+import com.android.settingslib.Utils;
import com.android.systemui.Dumpable;
+import com.android.systemui.R;
import com.android.systemui.biometrics.AuthController;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
-import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.ViewController;
import java.io.FileDescriptor;
import java.io.PrintWriter;
/**
- * Controls when to show the DisabledUdfpsView to unlock the device on the lockscreen.
- * If the device is not authenticated, the bouncer will show.
+ * Controls when to show the DisabledUdfpsView affordance (unlock icon or circle) on lock screen.
*
- * This tap target will only show when:
+ * This view only exists when:
* - User has UDFPS enrolled
* - UDFPS is currently unavailable see {@link KeyguardUpdateMonitor#shouldListenForUdfps}
*/
@@ -47,21 +51,26 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
@NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@NonNull private final KeyguardViewController mKeyguardViewController;
@NonNull private final StatusBarStateController mStatusBarStateController;
+ @NonNull private final KeyguardStateController mKeyguardStateController;
+ @NonNull private final Drawable mButton;
+ @NonNull private final Drawable mUnlockIcon;
private boolean mIsDozing;
private boolean mIsBouncerShowing;
private boolean mIsKeyguardShowing;
private boolean mRunningFPS;
- private boolean mAuthenticated;
+ private boolean mCanDismissLockScreen;
private boolean mShowButton;
+ private boolean mShowUnlockIcon;
public DisabledUdfpsController(
@NonNull DisabledUdfpsView view,
@NonNull StatusBarStateController statusBarStateController,
@NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
@NonNull AuthController authController,
- @NonNull KeyguardViewController keyguardViewController
+ @NonNull KeyguardViewController keyguardViewController,
+ @NonNull KeyguardStateController keyguardStateController
) {
super(view);
mView.setOnClickListener(mOnClickListener);
@@ -70,25 +79,38 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
mStatusBarStateController = statusBarStateController;
mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mKeyguardViewController = keyguardViewController;
+ mKeyguardStateController = keyguardStateController;
+
+ final Context context = view.getContext();
+ mButton = context.getResources().getDrawable(
+ com.android.systemui.R.drawable.circle_white, context.getTheme());
+ mUnlockIcon = new InsetDrawable(context.getResources().getDrawable(
+ com.android.internal.R.drawable.ic_lock_open, context.getTheme()),
+ context.getResources().getDimensionPixelSize(
+ com.android.systemui.R.dimen.udfps_unlock_icon_inset));
}
@Override
protected void onViewAttached() {
mIsBouncerShowing = mKeyguardViewController.isBouncerShowing();
- mIsKeyguardShowing = mStatusBarStateController.getState() == StatusBarState.KEYGUARD;
+ mIsKeyguardShowing = mKeyguardStateController.isShowing();
mIsDozing = mStatusBarStateController.isDozing();
mRunningFPS = mKeyguardUpdateMonitor.isFingerprintDetectionRunning();
- mAuthenticated = false;
- updateButtonVisibility();
+ mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen();
+ mUnlockIcon.setTint(Utils.getColorAttrDefaultColor(mView.getContext(),
+ R.attr.wallpaperTextColorAccent));
+ updateVisibility();
mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
mStatusBarStateController.addCallback(mStatusBarStateListener);
+ mKeyguardStateController.addCallback(mKeyguardStateCallback);
}
@Override
protected void onViewDetached() {
mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback);
mStatusBarStateController.removeCallback(mStatusBarStateListener);
+ mKeyguardStateController.removeCallback(mKeyguardStateCallback);
}
/**
@@ -100,30 +122,41 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
}
}
- private void updateButtonVisibility() {
- mShowButton = !mAuthenticated && !mIsDozing && mIsKeyguardShowing
- && !mIsBouncerShowing && !mRunningFPS;
+ private void updateVisibility() {
+ mShowButton = !mCanDismissLockScreen && !mRunningFPS && isLockScreen();
+ mShowUnlockIcon = mCanDismissLockScreen && isLockScreen();
+
if (mShowButton) {
+ mView.setImageDrawable(mButton);
+ mView.setVisibility(View.VISIBLE);
+ } else if (mShowUnlockIcon) {
+ mView.setImageDrawable(mUnlockIcon);
mView.setVisibility(View.VISIBLE);
} else {
mView.setVisibility(View.INVISIBLE);
}
}
+ private boolean isLockScreen() {
+ return mIsKeyguardShowing && !mIsDozing && !mIsBouncerShowing;
+ }
+
@Override
public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
pw.println("DisabledUdfpsController state:");
pw.println(" mShowBouncerButton: " + mShowButton);
+ pw.println(" mShowUnlockIcon: " + mShowUnlockIcon);
pw.println(" mIsDozing: " + mIsDozing);
pw.println(" mIsKeyguardShowing: " + mIsKeyguardShowing);
pw.println(" mIsBouncerShowing: " + mIsBouncerShowing);
pw.println(" mRunningFPS: " + mRunningFPS);
- pw.println(" mAuthenticated: " + mAuthenticated);
+ pw.println(" mCanDismissLockScreen: " + mCanDismissLockScreen);
}
private final View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
+ // if the device is locked, shows bouncer, else goes to launcher
mKeyguardViewController.showBouncer(/* scrim */ true);
}
};
@@ -131,15 +164,9 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
private StatusBarStateController.StateListener mStatusBarStateListener =
new StatusBarStateController.StateListener() {
@Override
- public void onStateChanged(int newState) {
- mIsKeyguardShowing = newState == StatusBarState.KEYGUARD;
- updateButtonVisibility();
- }
-
- @Override
public void onDozingChanged(boolean isDozing) {
mIsDozing = isDozing;
- updateButtonVisibility();
+ updateVisibility();
}
};
@@ -148,7 +175,7 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
@Override
public void onKeyguardBouncerChanged(boolean bouncer) {
mIsBouncerShowing = bouncer;
- updateButtonVisibility();
+ updateVisibility();
}
@Override
@@ -157,21 +184,29 @@ public class DisabledUdfpsController extends ViewController<DisabledUdfpsView> i
if (biometricSourceType == FINGERPRINT) {
mRunningFPS = running;
}
- mAuthenticated &= !mRunningFPS;
- updateButtonVisibility();
- }
- @Override
- public void onBiometricAuthenticated(int userId,
- BiometricSourceType biometricSourceType, boolean isStrongBiometric) {
- mAuthenticated = true;
- updateButtonVisibility();
- }
-
- @Override
- public void onUserUnlocked() {
- mAuthenticated = true;
- updateButtonVisibility();
+ updateVisibility();
}
};
+
+ private final KeyguardStateController.Callback mKeyguardStateCallback =
+ new KeyguardStateController.Callback() {
+ @Override
+ public void onKeyguardShowingChanged() {
+ updateIsKeyguardShowing();
+ updateVisibility();
+ }
+
+ @Override
+ public void onUnlockedChanged() {
+ updateIsKeyguardShowing();
+ mCanDismissLockScreen = mKeyguardStateController.canDismissLockScreen();
+ updateVisibility();
+ }
+
+ private void updateIsKeyguardShowing() {
+ mIsKeyguardShowing = mKeyguardStateController.isShowing()
+ && !mKeyguardStateController.isKeyguardGoingAway();
+ }
+ };
}
diff --git a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsView.java b/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsView.java
index d8ab780eb6bd..8ae753e7f3f7 100644
--- a/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsView.java
+++ b/packages/SystemUI/src/com/android/keyguard/DisabledUdfpsView.java
@@ -22,14 +22,13 @@ import android.graphics.RectF;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.util.AttributeSet;
import android.view.Surface;
-import android.widget.Button;
import android.widget.FrameLayout;
+import android.widget.ImageView;
/**
- * A full screen view with an oval target where the UDFPS sensor is.
- * Controlled by {@link DisabledUdfpsController}.
+ * A view positioned in the area of the UDPFS sensor.
*/
-public class DisabledUdfpsView extends Button {
+public class DisabledUdfpsView extends ImageView {
@NonNull private final RectF mSensorRect;
@NonNull private final Context mContext;
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java
index 02a8958ef657..31f1332b265c 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardHostViewController.java
@@ -492,4 +492,11 @@ public class KeyguardHostViewController extends ViewController<KeyguardHostView>
mKeyguardSecurityContainerController.updateResources();
}
}
+
+ /** Update keyguard position based on a tapped X coordinate. */
+ public void updateKeyguardPosition(float x) {
+ if (mKeyguardSecurityContainerController != null) {
+ mKeyguardSecurityContainerController.updateKeyguardPosition(x);
+ }
+ }
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
index 708b2d55b75a..7ed63375a334 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -267,6 +267,13 @@ public class KeyguardSecurityContainer extends FrameLayout {
updateSecurityViewLocation(false);
}
+ /** Update keyguard position based on a tapped X coordinate. */
+ public void updateKeyguardPosition(float x) {
+ if (mOneHandedMode) {
+ moveBouncerForXCoordinate(x, /* animate= */false);
+ }
+ }
+
/** Return whether the one-handed keyguard should be enabled. */
private boolean canUseOneHandedBouncer() {
// Is it enabled?
@@ -488,9 +495,13 @@ public class KeyguardSecurityContainer extends FrameLayout {
return;
}
+ moveBouncerForXCoordinate(event.getX(), /* animate= */true);
+ }
+
+ private void moveBouncerForXCoordinate(float x, boolean animate) {
// Did the tap hit the "other" side of the bouncer?
- if ((mIsSecurityViewLeftAligned && (event.getX() > getWidth() / 2f))
- || (!mIsSecurityViewLeftAligned && (event.getX() < getWidth() / 2f))) {
+ if ((mIsSecurityViewLeftAligned && (x > getWidth() / 2f))
+ || (!mIsSecurityViewLeftAligned && (x < getWidth() / 2f))) {
mIsSecurityViewLeftAligned = !mIsSecurityViewLeftAligned;
Settings.Global.putInt(
@@ -499,7 +510,7 @@ public class KeyguardSecurityContainer extends FrameLayout {
mIsSecurityViewLeftAligned ? Settings.Global.ONE_HANDED_KEYGUARD_SIDE_LEFT
: Settings.Global.ONE_HANDED_KEYGUARD_SIDE_RIGHT);
- updateSecurityViewLocation(true);
+ updateSecurityViewLocation(animate);
}
}
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
index 760eaecae247..4827cab3b5c0 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSecurityContainerController.java
@@ -515,6 +515,11 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
}
}
+ /** Update keyguard position based on a tapped X coordinate. */
+ public void updateKeyguardPosition(float x) {
+ mView.updateKeyguardPosition(x);
+ }
+
static class Factory {
private final KeyguardSecurityContainer mView;
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 27a2ac379eee..621ca594393e 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -427,6 +427,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
public void onTrustChanged(boolean enabled, int userId, int flags) {
Assert.isMainThread();
mUserHasTrust.put(userId, enabled);
+ updateBiometricListeningState();
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
@@ -627,6 +628,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
// Don't send cancel if authentication succeeds
mFingerprintCancelSignal = null;
+ updateBiometricListeningState();
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
@@ -810,6 +812,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
}
// Don't send cancel if authentication succeeds
mFaceCancelSignal = null;
+ updateBiometricListeningState();
for (int i = 0; i < mCallbacks.size(); i++) {
KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
if (cb != null) {
@@ -2109,6 +2112,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
boolean shouldListenForUdfps() {
return shouldListenForFingerprint()
&& !mBouncer
+ && !getUserCanSkipBouncer(getCurrentUser())
+ && !isEncryptedOrLockdown(getCurrentUser())
&& mStrongAuthTracker.hasUserAuthenticatedSinceBoot();
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToUdfpsView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToUdfpsView.java
new file mode 100644
index 000000000000..197f35ba3e86
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceToUdfpsView.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics;
+
+import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE;
+import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FINGERPRINT;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.hardware.biometrics.BiometricAuthenticator;
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.systemui.R;
+
+/**
+ * Manages the layout of an auth dialog for devices with a face sensor and an under-display
+ * fingerprint sensor (UDFPS). Face authentication is attempted first, followed by fingerprint if
+ * the initial attempt is unsuccessful.
+ */
+public class AuthBiometricFaceToUdfpsView extends AuthBiometricFaceView {
+ private static final String TAG = "BiometricPrompt/AuthBiometricFaceToUdfpsView";
+
+ protected static class UdfpsIconController extends IconController {
+ protected UdfpsIconController(
+ @NonNull Context context, @NonNull ImageView iconView, @NonNull TextView textView) {
+ super(context, iconView, textView);
+ }
+
+ @Override
+ protected void updateState(int lastState, int newState) {
+ final boolean lastStateIsErrorIcon =
+ lastState == STATE_ERROR || lastState == STATE_HELP;
+
+ switch (newState) {
+ case STATE_IDLE:
+ case STATE_AUTHENTICATING_ANIMATING_IN:
+ case STATE_AUTHENTICATING:
+ case STATE_PENDING_CONFIRMATION:
+ case STATE_AUTHENTICATED:
+ if (lastStateIsErrorIcon) {
+ animateOnce(R.drawable.fingerprint_dialog_error_to_fp);
+ } else {
+ showStaticDrawable(R.drawable.fingerprint_dialog_fp_to_error);
+ }
+ mIconView.setContentDescription(mContext.getString(
+ R.string.accessibility_fingerprint_dialog_fingerprint_icon));
+ break;
+
+ case STATE_ERROR:
+ case STATE_HELP:
+ if (!lastStateIsErrorIcon) {
+ animateOnce(R.drawable.fingerprint_dialog_fp_to_error);
+ } else {
+ showStaticDrawable(R.drawable.fingerprint_dialog_error_to_fp);
+ }
+ mIconView.setContentDescription(mContext.getString(
+ R.string.biometric_dialog_try_again));
+ break;
+
+ default:
+ Log.e(TAG, "Unknown biometric dialog state: " + newState);
+ break;
+ }
+
+ mState = newState;
+ }
+ }
+
+ @BiometricAuthenticator.Modality private int mActiveSensorType = TYPE_FACE;
+
+ @Nullable UdfpsDialogMeasureAdapter mMeasureAdapter;
+ @Nullable private UdfpsIconController mUdfpsIconController;
+
+ public AuthBiometricFaceToUdfpsView(Context context) {
+ super(context);
+ }
+
+ public AuthBiometricFaceToUdfpsView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ void setFingerprintSensorProps(@NonNull FingerprintSensorPropertiesInternal sensorProps) {
+ if (mMeasureAdapter == null || mMeasureAdapter.getSensorProps() != sensorProps) {
+ mMeasureAdapter = new UdfpsDialogMeasureAdapter(this, sensorProps);
+ }
+ }
+
+ @Override
+ protected int getDelayAfterAuthenticatedDurationMs() {
+ return mActiveSensorType == TYPE_FINGERPRINT ? 0
+ : super.getDelayAfterAuthenticatedDurationMs();
+ }
+
+ @Override
+ protected boolean supportsManualRetry() {
+ return false;
+ }
+
+ @Override
+ @NonNull
+ protected IconController getIconController() {
+ if (mActiveSensorType == TYPE_FINGERPRINT) {
+ if (!(mIconController instanceof UdfpsIconController)) {
+ mIconController = new UdfpsIconController(getContext(), mIconView, mIndicatorView);
+ }
+ return mIconController;
+ }
+ return super.getIconController();
+ }
+
+ @Override
+ public void updateState(int newState) {
+ if (mState == STATE_HELP || mState == STATE_ERROR) {
+ mActiveSensorType = TYPE_FINGERPRINT;
+ setRequireConfirmation(false);
+ }
+ super.updateState(newState);
+ }
+
+ @Override
+ @NonNull
+ AuthDialog.LayoutParams onMeasureInternal(int width, int height) {
+ final AuthDialog.LayoutParams layoutParams = super.onMeasureInternal(width, height);
+ return mMeasureAdapter != null
+ ? mMeasureAdapter.onMeasureInternal(width, height, layoutParams)
+ : layoutParams;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceView.java
index 9b09cfd0dba6..4c5ca691939c 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricFaceView.java
@@ -16,6 +16,7 @@
package com.android.systemui.biometrics;
+import android.annotation.NonNull;
import android.content.Context;
import android.graphics.drawable.Animatable2;
import android.graphics.drawable.AnimatedVectorDrawable;
@@ -28,7 +29,6 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
-import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.R;
public class AuthBiometricFaceView extends AuthBiometricView {
@@ -38,15 +38,15 @@ public class AuthBiometricFaceView extends AuthBiometricView {
// Delay before dismissing after being authenticated/confirmed.
private static final int HIDE_DELAY_MS = 500;
- public static class IconController extends Animatable2.AnimationCallback {
- Context mContext;
- ImageView mIconView;
- TextView mTextView;
- Handler mHandler;
- boolean mLastPulseLightToDark; // false = dark to light, true = light to dark
- @BiometricState int mState;
+ protected static class IconController extends Animatable2.AnimationCallback {
+ protected Context mContext;
+ protected ImageView mIconView;
+ protected TextView mTextView;
+ protected Handler mHandler;
+ protected boolean mLastPulseLightToDark; // false = dark to light, true = light to dark
+ protected @BiometricState int mState;
- IconController(Context context, ImageView iconView, TextView textView) {
+ protected IconController(Context context, ImageView iconView, TextView textView) {
mContext = context;
mIconView = iconView;
mTextView = textView;
@@ -54,15 +54,15 @@ public class AuthBiometricFaceView extends AuthBiometricView {
showStaticDrawable(R.drawable.face_dialog_pulse_dark_to_light);
}
- void animateOnce(int iconRes) {
+ protected void animateOnce(int iconRes) {
animateIcon(iconRes, false);
}
- public void showStaticDrawable(int iconRes) {
+ protected void showStaticDrawable(int iconRes) {
mIconView.setImageDrawable(mContext.getDrawable(iconRes));
}
- void animateIcon(int iconRes, boolean repeat) {
+ protected void animateIcon(int iconRes, boolean repeat) {
final AnimatedVectorDrawable icon =
(AnimatedVectorDrawable) mContext.getDrawable(iconRes);
mIconView.setImageDrawable(icon);
@@ -73,12 +73,12 @@ public class AuthBiometricFaceView extends AuthBiometricView {
icon.start();
}
- void startPulsing() {
+ protected void startPulsing() {
mLastPulseLightToDark = false;
animateIcon(R.drawable.face_dialog_pulse_dark_to_light, true);
}
- void pulseInNextDirection() {
+ protected void pulseInNextDirection() {
int iconRes = mLastPulseLightToDark ? R.drawable.face_dialog_pulse_dark_to_light
: R.drawable.face_dialog_pulse_light_to_dark;
animateIcon(iconRes, true /* repeat */);
@@ -93,7 +93,7 @@ public class AuthBiometricFaceView extends AuthBiometricView {
}
}
- public void updateState(int lastState, int newState) {
+ protected void updateState(int lastState, int newState) {
final boolean lastStateIsErrorIcon =
lastState == STATE_ERROR || lastState == STATE_HELP;
@@ -138,7 +138,7 @@ public class AuthBiometricFaceView extends AuthBiometricView {
}
}
- @VisibleForTesting IconController mIconController;
+ protected IconController mIconController;
public AuthBiometricFaceView(Context context) {
this(context, null);
@@ -174,14 +174,21 @@ public class AuthBiometricFaceView extends AuthBiometricView {
}
@Override
- protected void onFinishInflate() {
- super.onFinishInflate();
- mIconController = new IconController(mContext, mIconView, mIndicatorView);
+ protected boolean supportsManualRetry() {
+ return true;
+ }
+
+ @NonNull
+ protected IconController getIconController() {
+ if (mIconController == null) {
+ mIconController = new IconController(mContext, mIconView, mIndicatorView);
+ }
+ return mIconController;
}
@Override
public void updateState(@BiometricState int newState) {
- mIconController.updateState(mState, newState);
+ getIconController().updateState(mState, newState);
if (newState == STATE_AUTHENTICATING_ANIMATING_IN ||
(newState == STATE_AUTHENTICATING && getSize() == AuthDialog.SIZE_MEDIUM)) {
@@ -195,11 +202,13 @@ public class AuthBiometricFaceView extends AuthBiometricView {
@Override
public void onAuthenticationFailed(String failureReason) {
if (getSize() == AuthDialog.SIZE_MEDIUM) {
- mTryAgainButton.setVisibility(View.VISIBLE);
- mConfirmButton.setVisibility(View.GONE);
+ if (supportsManualRetry()) {
+ mTryAgainButton.setVisibility(View.VISIBLE);
+ mConfirmButton.setVisibility(View.GONE);
+ }
}
- // Do this last since wa want to know if the button is being animated (in the case of
+ // Do this last since we want to know if the button is being animated (in the case of
// small -> medium dialog)
super.onAuthenticationFailed(failureReason);
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricUdfpsView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricUdfpsView.java
index 007080bc8603..376368fbf9d4 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricUdfpsView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricUdfpsView.java
@@ -16,33 +16,18 @@
package com.android.systemui.biometrics;
-import android.annotation.IdRes;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
-import android.graphics.Insets;
-import android.graphics.Rect;
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Surface;
-import android.view.View;
-import android.view.WindowInsets;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.systemui.R;
/**
* Manages the layout for under-display fingerprint sensors (UDFPS). Ensures that UI elements
* do not overlap with
*/
public class AuthBiometricUdfpsView extends AuthBiometricFingerprintView {
-
- private static final String TAG = "AuthBiometricUdfpsView";
-
- @Nullable private FingerprintSensorPropertiesInternal mSensorProps;
+ @Nullable private UdfpsDialogMeasureAdapter mMeasureAdapter;
public AuthBiometricUdfpsView(Context context) {
this(context, null /* attrs */);
@@ -52,269 +37,18 @@ public class AuthBiometricUdfpsView extends AuthBiometricFingerprintView {
super(context, attrs);
}
- void setSensorProps(@NonNull FingerprintSensorPropertiesInternal prop) {
- mSensorProps = prop;
+ void setSensorProps(@NonNull FingerprintSensorPropertiesInternal sensorProps) {
+ if (mMeasureAdapter == null || mMeasureAdapter.getSensorProps() != sensorProps) {
+ mMeasureAdapter = new UdfpsDialogMeasureAdapter(this, sensorProps);
+ }
}
@Override
@NonNull
AuthDialog.LayoutParams onMeasureInternal(int width, int height) {
- final int displayRotation = getDisplay().getRotation();
- switch (displayRotation) {
- case Surface.ROTATION_0:
- return onMeasureInternalPortrait(width, height);
- case Surface.ROTATION_90:
- case Surface.ROTATION_270:
- return onMeasureInternalLandscape(width, height);
- default:
- Log.e(TAG, "Unsupported display rotation: " + displayRotation);
- return super.onMeasureInternal(width, height);
- }
- }
-
- @NonNull
- private AuthDialog.LayoutParams onMeasureInternalPortrait(int width, int height) {
- // Get the height of the everything below the icon. Currently, that's the indicator and
- // button bar.
- final int textIndicatorHeight = getViewHeightPx(R.id.indicator);
- final int buttonBarHeight = getViewHeightPx(R.id.button_bar);
-
- // Figure out where the bottom of the sensor anim should be.
- // Navbar + dialogMargin + buttonBar + textIndicator + spacerHeight = sensorDistFromBottom
- final int dialogMargin = getDialogMarginPx();
- final WindowManager windowManager = getContext().getSystemService(WindowManager.class);
- final int displayHeight = getWindowBounds(windowManager).height();
- final Insets navbarInsets = getNavbarInsets(windowManager);
- final int bottomSpacerHeight = calculateBottomSpacerHeightForPortrait(
- mSensorProps, displayHeight, textIndicatorHeight, buttonBarHeight,
- dialogMargin, navbarInsets.bottom);
-
- // Go through each of the children and do the custom measurement.
- int totalHeight = 0;
- final int numChildren = getChildCount();
- final int sensorDiameter = mSensorProps.sensorRadius * 2;
- for (int i = 0; i < numChildren; i++) {
- final View child = getChildAt(i);
- if (child.getId() == R.id.biometric_icon_frame) {
- final FrameLayout iconFrame = (FrameLayout) child;
- final View icon = iconFrame.getChildAt(0);
-
- // Ensure that the icon is never larger than the sensor.
- icon.measure(
- MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.AT_MOST),
- MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.AT_MOST));
-
- // Create a frame that's exactly the height of the sensor circle.
- iconFrame.measure(
- MeasureSpec.makeMeasureSpec(
- child.getLayoutParams().width, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.EXACTLY));
- } else if (child.getId() == R.id.space_above_icon) {
- child.measure(
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(
- child.getLayoutParams().height, MeasureSpec.EXACTLY));
- } else if (child.getId() == R.id.button_bar) {
- child.measure(
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(child.getLayoutParams().height,
- MeasureSpec.EXACTLY));
- } else if (child.getId() == R.id.space_below_icon) {
- // Set the spacer height so the fingerprint icon is on the physical sensor area
- child.measure(
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(bottomSpacerHeight, MeasureSpec.EXACTLY));
- } else {
- child.measure(
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
- }
-
- if (child.getVisibility() != View.GONE) {
- totalHeight += child.getMeasuredHeight();
- }
- }
-
- return new AuthDialog.LayoutParams(width, totalHeight);
- }
-
- @NonNull
- private AuthDialog.LayoutParams onMeasureInternalLandscape(int width, int height) {
- // Find the spacer height needed to vertically align the icon with the sensor.
- final int titleHeight = getViewHeightPx(R.id.title);
- final int subtitleHeight = getViewHeightPx(R.id.subtitle);
- final int descriptionHeight = getViewHeightPx(R.id.description);
- final int topSpacerHeight = getViewHeightPx(R.id.space_above_icon);
- final int textIndicatorHeight = getViewHeightPx(R.id.indicator);
- final int buttonBarHeight = getViewHeightPx(R.id.button_bar);
- final WindowManager windowManager = getContext().getSystemService(WindowManager.class);
- final Insets navbarInsets = getNavbarInsets(windowManager);
- final int bottomSpacerHeight = calculateBottomSpacerHeightForLandscape(titleHeight,
- subtitleHeight, descriptionHeight, topSpacerHeight, textIndicatorHeight,
- buttonBarHeight, navbarInsets.bottom);
-
- // Find the spacer width needed to horizontally align the icon with the sensor.
- final int displayWidth = getWindowBounds(windowManager).width();
- final int dialogMargin = getDialogMarginPx();
- final int horizontalInset = navbarInsets.left + navbarInsets.right;
- final int horizontalSpacerWidth = calculateHorizontalSpacerWidthForLandscape(
- mSensorProps, displayWidth, dialogMargin, horizontalInset);
-
- final int sensorDiameter = mSensorProps.sensorRadius * 2;
- final int remeasuredWidth = sensorDiameter + 2 * horizontalSpacerWidth;
-
- int remeasuredHeight = 0;
- final int numChildren = getChildCount();
- for (int i = 0; i < numChildren; i++) {
- final View child = getChildAt(i);
- if (child.getId() == R.id.biometric_icon_frame) {
- final FrameLayout iconFrame = (FrameLayout) child;
- final View icon = iconFrame.getChildAt(0);
-
- // Ensure that the icon is never larger than the sensor.
- icon.measure(
- MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.AT_MOST),
- MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.AT_MOST));
-
- // Create a frame that's exactly the height of the sensor circle.
- iconFrame.measure(
- MeasureSpec.makeMeasureSpec(remeasuredWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.EXACTLY));
- } else if (child.getId() == R.id.space_above_icon || child.getId() == R.id.button_bar) {
- // Adjust the width of the top spacer and button bar while preserving their heights.
- child.measure(
- MeasureSpec.makeMeasureSpec(remeasuredWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(
- child.getLayoutParams().height, MeasureSpec.EXACTLY));
- } else if (child.getId() == R.id.space_below_icon) {
- // Adjust the bottom spacer height to align the fingerprint icon with the sensor.
- child.measure(
- MeasureSpec.makeMeasureSpec(remeasuredWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(bottomSpacerHeight, MeasureSpec.EXACTLY));
- } else {
- // Use the remeasured width for all other child views.
- child.measure(
- MeasureSpec.makeMeasureSpec(remeasuredWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
- }
-
- if (child.getVisibility() != View.GONE) {
- remeasuredHeight += child.getMeasuredHeight();
- }
- }
-
- return new AuthDialog.LayoutParams(remeasuredWidth, remeasuredHeight);
- }
-
- private int getViewHeightPx(@IdRes int viewId) {
- final View view = findViewById(viewId);
- return view != null ? view.getMeasuredHeight() : 0;
- }
-
- private int getDialogMarginPx() {
- return getResources().getDimensionPixelSize(R.dimen.biometric_dialog_border_padding);
- }
-
- @NonNull
- private static Insets getNavbarInsets(@Nullable WindowManager windowManager) {
- return windowManager != null && windowManager.getCurrentWindowMetrics() != null
- ? windowManager.getCurrentWindowMetrics().getWindowInsets()
- .getInsets(WindowInsets.Type.navigationBars())
- : Insets.NONE;
- }
-
- @NonNull
- private static Rect getWindowBounds(@Nullable WindowManager windowManager) {
- return windowManager != null && windowManager.getCurrentWindowMetrics() != null
- ? windowManager.getCurrentWindowMetrics().getBounds()
- : new Rect();
- }
-
- /**
- * For devices in portrait orientation where the sensor is too high up, calculates the amount of
- * padding necessary to center the biometric icon within the sensor's physical location.
- */
- @VisibleForTesting
- static int calculateBottomSpacerHeightForPortrait(
- @NonNull FingerprintSensorPropertiesInternal sensorProperties, int displayHeightPx,
- int textIndicatorHeightPx, int buttonBarHeightPx, int dialogMarginPx,
- int navbarBottomInsetPx) {
-
- final int sensorDistanceFromBottom = displayHeightPx
- - sensorProperties.sensorLocationY
- - sensorProperties.sensorRadius;
-
- final int spacerHeight = sensorDistanceFromBottom
- - textIndicatorHeightPx
- - buttonBarHeightPx
- - dialogMarginPx
- - navbarBottomInsetPx;
-
- Log.d(TAG, "Display height: " + displayHeightPx
- + ", Distance from bottom: " + sensorDistanceFromBottom
- + ", Bottom margin: " + dialogMarginPx
- + ", Navbar bottom inset: " + navbarBottomInsetPx
- + ", Bottom spacer height (portrait): " + spacerHeight);
-
- return spacerHeight;
- }
-
- /**
- * For devices in landscape orientation where the sensor is too high up, calculates the amount
- * of padding necessary to center the biometric icon within the sensor's physical location.
- */
- @VisibleForTesting
- static int calculateBottomSpacerHeightForLandscape(int titleHeightPx, int subtitleHeightPx,
- int descriptionHeightPx, int topSpacerHeightPx, int textIndicatorHeightPx,
- int buttonBarHeightPx, int navbarBottomInsetPx) {
-
- final int dialogHeightAboveIcon = titleHeightPx
- + subtitleHeightPx
- + descriptionHeightPx
- + topSpacerHeightPx;
-
- final int dialogHeightBelowIcon = textIndicatorHeightPx + buttonBarHeightPx;
-
- final int bottomSpacerHeight = dialogHeightAboveIcon
- - dialogHeightBelowIcon
- - navbarBottomInsetPx;
-
- Log.d(TAG, "Title height: " + titleHeightPx
- + ", Subtitle height: " + subtitleHeightPx
- + ", Description height: " + descriptionHeightPx
- + ", Top spacer height: " + topSpacerHeightPx
- + ", Text indicator height: " + textIndicatorHeightPx
- + ", Button bar height: " + buttonBarHeightPx
- + ", Navbar bottom inset: " + navbarBottomInsetPx
- + ", Bottom spacer height (landscape): " + bottomSpacerHeight);
-
- return bottomSpacerHeight;
- }
-
- /**
- * For devices in landscape orientation where the sensor is too left/right, calculates the
- * amount of padding necessary to center the biometric icon within the sensor's physical
- * location.
- */
- @VisibleForTesting
- static int calculateHorizontalSpacerWidthForLandscape(
- @NonNull FingerprintSensorPropertiesInternal sensorProperties, int displayWidthPx,
- int dialogMarginPx, int navbarHorizontalInsetPx) {
-
- final int sensorDistanceFromEdge = displayWidthPx
- - sensorProperties.sensorLocationY
- - sensorProperties.sensorRadius;
-
- final int horizontalPadding = sensorDistanceFromEdge
- - dialogMarginPx
- - navbarHorizontalInsetPx;
-
- Log.d(TAG, "Display width: " + displayWidthPx
- + ", Distance from edge: " + sensorDistanceFromEdge
- + ", Dialog margin: " + dialogMarginPx
- + ", Navbar horizontal inset: " + navbarHorizontalInsetPx
- + ", Horizontal spacer width (landscape): " + horizontalPadding);
-
- return horizontalPadding;
+ final AuthDialog.LayoutParams layoutParams = super.onMeasureInternal(width, height);
+ return mMeasureAdapter != null
+ ? mMeasureAdapter.onMeasureInternal(width, height, layoutParams)
+ : layoutParams;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java
index d59a865e2add..a40af70adb8f 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthBiometricView.java
@@ -379,7 +379,9 @@ public abstract class AuthBiometricView extends LinearLayout {
} else {
mNegativeButton.setVisibility(View.VISIBLE);
}
- mTryAgainButton.setVisibility(View.VISIBLE);
+ if (supportsManualRetry()) {
+ mTryAgainButton.setVisibility(View.VISIBLE);
+ }
if (!TextUtils.isEmpty(mSubtitleView.getText())) {
mSubtitleView.setVisibility(View.VISIBLE);
@@ -462,6 +464,10 @@ public abstract class AuthBiometricView extends LinearLayout {
Utils.notifyAccessibilityContentChanged(mAccessibilityManager, this);
}
+ protected boolean supportsManualRetry() {
+ return false;
+ }
+
public void updateState(@BiometricState int newState) {
Log.v(TAG, "newState: " + newState);
@@ -749,7 +755,9 @@ public abstract class AuthBiometricView extends LinearLayout {
for (int i = 0; i < numChildren; i++) {
final View child = getChildAt(i);
- if (child.getId() == R.id.space_above_icon) {
+ if (child.getId() == R.id.space_above_icon
+ || child.getId() == R.id.space_below_icon
+ || child.getId() == R.id.button_bar) {
child.measure(
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(child.getLayoutParams().height,
@@ -765,11 +773,6 @@ public abstract class AuthBiometricView extends LinearLayout {
child.measure(
MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST),
MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
- } else if (child.getId() == R.id.button_bar) {
- child.measure(
- MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(child.getLayoutParams().height,
- MeasureSpec.EXACTLY));
} else {
child.measure(
MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
index d05e9278762d..4e93f58dd51f 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/AuthContainerView.java
@@ -282,8 +282,9 @@ public class AuthContainerView extends LinearLayout
mPanelController = mInjector.getPanelController(mContext, mPanelView);
// Inflate biometric view only if necessary.
+ final int sensorCount = config.mSensorIds.length;
if (Utils.isBiometricAllowed(mConfig.mPromptInfo)) {
- if (config.mSensorIds.length == 1 || config.mSensorIds.length == 2) {
+ if (sensorCount == 1) {
final int singleSensorAuthId = config.mSensorIds[0];
if (Utils.containsSensorId(mFpProps, singleSensorAuthId)) {
FingerprintSensorPropertiesInternal sensorProps = null;
@@ -314,8 +315,54 @@ public class AuthContainerView extends LinearLayout
mBiometricScrollView = null;
return;
}
+ } else if (sensorCount == 2) {
+ int fingerprintSensorId = -1;
+ int faceSensorId = -1;
+ for (final int sensorId : config.mSensorIds) {
+ if (Utils.containsSensorId(mFpProps, sensorId)) {
+ fingerprintSensorId = sensorId;
+ continue;
+ } else if (Utils.containsSensorId(mFaceProps, sensorId)) {
+ faceSensorId = sensorId;
+ continue;
+ }
+
+ if (fingerprintSensorId != -1 && faceSensorId != -1) {
+ break;
+ }
+ }
+
+ if (fingerprintSensorId == -1 || faceSensorId == -1) {
+ Log.e(TAG, "Missing fingerprint or face for dual-sensor config");
+ mBiometricView = null;
+ mBackgroundView = null;
+ mBiometricScrollView = null;
+ return;
+ }
+
+ FingerprintSensorPropertiesInternal fingerprintSensorProps = null;
+ for (FingerprintSensorPropertiesInternal prop : mFpProps) {
+ if (prop.sensorId == fingerprintSensorId) {
+ fingerprintSensorProps = prop;
+ break;
+ }
+ }
+
+ if (fingerprintSensorProps != null && fingerprintSensorProps.isAnyUdfpsType()) {
+ final AuthBiometricFaceToUdfpsView faceToUdfpsView =
+ (AuthBiometricFaceToUdfpsView) factory.inflate(
+ R.layout.auth_biometric_face_to_udfps_view, null, false);
+ faceToUdfpsView.setFingerprintSensorProps(fingerprintSensorProps);
+ mBiometricView = faceToUdfpsView;
+ } else {
+ Log.e(TAG, "Fingerprint must be UDFPS for dual-sensor config");
+ mBiometricView = null;
+ mBackgroundView = null;
+ mBiometricScrollView = null;
+ return;
+ }
} else {
- Log.e(TAG, "Unsupported sensor array, length: " + config.mSensorIds.length);
+ Log.e(TAG, "Unsupported sensor array, length: " + sensorCount);
mBiometricView = null;
mBackgroundView = null;
mBiometricScrollView = null;
@@ -442,14 +489,18 @@ public class AuthContainerView extends LinearLayout
mPanelController.setPosition(AuthPanelController.POSITION_BOTTOM);
setScrollViewGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
break;
+
case Surface.ROTATION_90:
mPanelController.setPosition(AuthPanelController.POSITION_RIGHT);
setScrollViewGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT);
break;
+
case Surface.ROTATION_270:
mPanelController.setPosition(AuthPanelController.POSITION_LEFT);
setScrollViewGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
break;
+
+ case Surface.ROTATION_180:
default:
Log.e(TAG, "Unsupported display rotation: " + displayRotation);
mPanelController.setPosition(AuthPanelController.POSITION_BOTTOM);
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
index 078ec9fdfd1c..7b5d7cb5a525 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsController.java
@@ -45,6 +45,7 @@ import android.view.VelocityTracker;
import android.view.WindowManager;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R;
import com.android.systemui.biometrics.HbmTypes.HbmType;
import com.android.systemui.dagger.SysUISingleton;
@@ -88,6 +89,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
@NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager;
@NonNull private final DumpManager mDumpManager;
@NonNull private final AuthRippleController mAuthRippleController;
+ @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
// Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
// sensors, this, in addition to a lot of the code here, will be updated.
@VisibleForTesting final FingerprintSensorPropertiesInternal mSensorProps;
@@ -307,7 +309,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
@NonNull StatusBar statusBar,
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
@NonNull DumpManager dumpManager,
- @NonNull AuthRippleController authRippleController) {
+ @NonNull AuthRippleController authRippleController,
+ @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor) {
mContext = context;
mInflater = inflater;
// The fingerprint manager is queried for UDFPS before this class is constructed, so the
@@ -320,6 +323,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
mKeyguardViewManager = statusBarKeyguardViewManager;
mDumpManager = dumpManager;
mAuthRippleController = authRippleController;
+ mKeyguardUpdateMonitor = keyguardUpdateMonitor;
mSensorProps = findFirstUdfps();
// At least one UDFPS sensor exists
@@ -327,8 +331,7 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
mStatusBar.setSensorRect(getSensorLocation());
mCoreLayoutParams = new WindowManager.LayoutParams(
- // TODO(b/152419866): Use the UDFPS window type when it becomes available.
- WindowManager.LayoutParams.TYPE_BOOT_PROGRESS,
+ WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG,
WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
@@ -486,6 +489,8 @@ public class UdfpsController implements DozeReceiver, HbmCallback {
mStatusBarStateController,
mStatusBar,
mKeyguardViewManager,
+ mKeyguardUpdateMonitor,
+ mFgExecutor,
mDumpManager
);
case IUdfpsOverlayController.REASON_AUTH_BP:
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java
new file mode 100644
index 000000000000..1ad2b9ca856c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapter.java
@@ -0,0 +1,330 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics;
+
+import android.annotation.IdRes;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.Insets;
+import android.graphics.Rect;
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
+import android.util.Log;
+import android.view.Surface;
+import android.view.View;
+import android.view.View.MeasureSpec;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.R;
+
+/**
+ * Adapter that remeasures an auth dialog view to ensure that it matches the location of a physical
+ * under-display fingerprint sensor (UDFPS).
+ */
+public class UdfpsDialogMeasureAdapter {
+ private static final String TAG = "UdfpsDialogMeasurementAdapter";
+
+ @NonNull private final ViewGroup mView;
+ @NonNull private final FingerprintSensorPropertiesInternal mSensorProps;
+
+ @Nullable private WindowManager mWindowManager;
+
+ public UdfpsDialogMeasureAdapter(
+ @NonNull ViewGroup view, @NonNull FingerprintSensorPropertiesInternal sensorProps) {
+ mView = view;
+ mSensorProps = sensorProps;
+ }
+
+ @NonNull
+ FingerprintSensorPropertiesInternal getSensorProps() {
+ return mSensorProps;
+ }
+
+ @NonNull
+ AuthDialog.LayoutParams onMeasureInternal(
+ int width, int height, @NonNull AuthDialog.LayoutParams layoutParams) {
+
+ final int displayRotation = mView.getDisplay().getRotation();
+ switch (displayRotation) {
+ case Surface.ROTATION_0:
+ return onMeasureInternalPortrait(width, height);
+ case Surface.ROTATION_90:
+ case Surface.ROTATION_270:
+ return onMeasureInternalLandscape(width, height);
+ default:
+ Log.e(TAG, "Unsupported display rotation: " + displayRotation);
+ return layoutParams;
+ }
+ }
+
+ @NonNull
+ private AuthDialog.LayoutParams onMeasureInternalPortrait(int width, int height) {
+ // Get the height of the everything below the icon. Currently, that's the indicator and
+ // button bar.
+ final int textIndicatorHeight = getViewHeightPx(R.id.indicator);
+ final int buttonBarHeight = getViewHeightPx(R.id.button_bar);
+
+ // Figure out where the bottom of the sensor anim should be.
+ // Navbar + dialogMargin + buttonBar + textIndicator + spacerHeight = sensorDistFromBottom
+ final int dialogMargin = getDialogMarginPx();
+ final int displayHeight = getWindowBounds().height();
+ final Insets navbarInsets = getNavbarInsets();
+ final int bottomSpacerHeight = calculateBottomSpacerHeightForPortrait(
+ mSensorProps, displayHeight, textIndicatorHeight, buttonBarHeight,
+ dialogMargin, navbarInsets.bottom);
+
+ // Go through each of the children and do the custom measurement.
+ int totalHeight = 0;
+ final int numChildren = mView.getChildCount();
+ final int sensorDiameter = mSensorProps.sensorRadius * 2;
+ for (int i = 0; i < numChildren; i++) {
+ final View child = mView.getChildAt(i);
+ if (child.getId() == R.id.biometric_icon_frame) {
+ final FrameLayout iconFrame = (FrameLayout) child;
+ final View icon = iconFrame.getChildAt(0);
+
+ // Ensure that the icon is never larger than the sensor.
+ icon.measure(
+ MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.AT_MOST));
+
+ // Create a frame that's exactly the height of the sensor circle.
+ iconFrame.measure(
+ MeasureSpec.makeMeasureSpec(
+ child.getLayoutParams().width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.EXACTLY));
+ } else if (child.getId() == R.id.space_above_icon) {
+ child.measure(
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(
+ child.getLayoutParams().height, MeasureSpec.EXACTLY));
+ } else if (child.getId() == R.id.button_bar) {
+ child.measure(
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(child.getLayoutParams().height,
+ MeasureSpec.EXACTLY));
+ } else if (child.getId() == R.id.space_below_icon) {
+ // Set the spacer height so the fingerprint icon is on the physical sensor area
+ child.measure(
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(bottomSpacerHeight, MeasureSpec.EXACTLY));
+ } else {
+ child.measure(
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
+ }
+
+ if (child.getVisibility() != View.GONE) {
+ totalHeight += child.getMeasuredHeight();
+ }
+ }
+
+ return new AuthDialog.LayoutParams(width, totalHeight);
+ }
+
+ @NonNull
+ private AuthDialog.LayoutParams onMeasureInternalLandscape(int width, int height) {
+ // Find the spacer height needed to vertically align the icon with the sensor.
+ final int titleHeight = getViewHeightPx(R.id.title);
+ final int subtitleHeight = getViewHeightPx(R.id.subtitle);
+ final int descriptionHeight = getViewHeightPx(R.id.description);
+ final int topSpacerHeight = getViewHeightPx(R.id.space_above_icon);
+ final int textIndicatorHeight = getViewHeightPx(R.id.indicator);
+ final int buttonBarHeight = getViewHeightPx(R.id.button_bar);
+ final Insets navbarInsets = getNavbarInsets();
+ final int bottomSpacerHeight = calculateBottomSpacerHeightForLandscape(titleHeight,
+ subtitleHeight, descriptionHeight, topSpacerHeight, textIndicatorHeight,
+ buttonBarHeight, navbarInsets.bottom);
+
+ // Find the spacer width needed to horizontally align the icon with the sensor.
+ final int displayWidth = getWindowBounds().width();
+ final int dialogMargin = getDialogMarginPx();
+ final int horizontalInset = navbarInsets.left + navbarInsets.right;
+ final int horizontalSpacerWidth = calculateHorizontalSpacerWidthForLandscape(
+ mSensorProps, displayWidth, dialogMargin, horizontalInset);
+
+ final int sensorDiameter = mSensorProps.sensorRadius * 2;
+ final int remeasuredWidth = sensorDiameter + 2 * horizontalSpacerWidth;
+
+ int remeasuredHeight = 0;
+ final int numChildren = mView.getChildCount();
+ for (int i = 0; i < numChildren; i++) {
+ final View child = mView.getChildAt(i);
+ if (child.getId() == R.id.biometric_icon_frame) {
+ final FrameLayout iconFrame = (FrameLayout) child;
+ final View icon = iconFrame.getChildAt(0);
+
+ // Ensure that the icon is never larger than the sensor.
+ icon.measure(
+ MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.AT_MOST),
+ MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.AT_MOST));
+
+ // Create a frame that's exactly the height of the sensor circle.
+ iconFrame.measure(
+ MeasureSpec.makeMeasureSpec(remeasuredWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(sensorDiameter, MeasureSpec.EXACTLY));
+ } else if (child.getId() == R.id.space_above_icon || child.getId() == R.id.button_bar) {
+ // Adjust the width of the top spacer and button bar while preserving their heights.
+ child.measure(
+ MeasureSpec.makeMeasureSpec(remeasuredWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(
+ child.getLayoutParams().height, MeasureSpec.EXACTLY));
+ } else if (child.getId() == R.id.space_below_icon) {
+ // Adjust the bottom spacer height to align the fingerprint icon with the sensor.
+ child.measure(
+ MeasureSpec.makeMeasureSpec(remeasuredWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(bottomSpacerHeight, MeasureSpec.EXACTLY));
+ } else {
+ // Use the remeasured width for all other child views.
+ child.measure(
+ MeasureSpec.makeMeasureSpec(remeasuredWidth, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));
+ }
+
+ if (child.getVisibility() != View.GONE) {
+ remeasuredHeight += child.getMeasuredHeight();
+ }
+ }
+
+ return new AuthDialog.LayoutParams(remeasuredWidth, remeasuredHeight);
+ }
+
+ private int getViewHeightPx(@IdRes int viewId) {
+ final View view = mView.findViewById(viewId);
+ return view != null ? view.getMeasuredHeight() : 0;
+ }
+
+ private int getDialogMarginPx() {
+ return mView.getResources().getDimensionPixelSize(R.dimen.biometric_dialog_border_padding);
+ }
+
+ @NonNull
+ private Insets getNavbarInsets() {
+ final WindowManager windowManager = getWindowManager();
+ return windowManager != null && windowManager.getCurrentWindowMetrics() != null
+ ? windowManager.getCurrentWindowMetrics().getWindowInsets()
+ .getInsets(WindowInsets.Type.navigationBars())
+ : Insets.NONE;
+ }
+
+ @NonNull
+ private Rect getWindowBounds() {
+ final WindowManager windowManager = getWindowManager();
+ return windowManager != null && windowManager.getCurrentWindowMetrics() != null
+ ? windowManager.getCurrentWindowMetrics().getBounds()
+ : new Rect();
+ }
+
+ @Nullable
+ private WindowManager getWindowManager() {
+ if (mWindowManager == null) {
+ mWindowManager = mView.getContext().getSystemService(WindowManager.class);
+ }
+ return mWindowManager;
+ }
+
+ /**
+ * For devices in portrait orientation where the sensor is too high up, calculates the amount of
+ * padding necessary to center the biometric icon within the sensor's physical location.
+ */
+ @VisibleForTesting
+ static int calculateBottomSpacerHeightForPortrait(
+ @NonNull FingerprintSensorPropertiesInternal sensorProperties, int displayHeightPx,
+ int textIndicatorHeightPx, int buttonBarHeightPx, int dialogMarginPx,
+ int navbarBottomInsetPx) {
+
+ final int sensorDistanceFromBottom = displayHeightPx
+ - sensorProperties.sensorLocationY
+ - sensorProperties.sensorRadius;
+
+ final int spacerHeight = sensorDistanceFromBottom
+ - textIndicatorHeightPx
+ - buttonBarHeightPx
+ - dialogMarginPx
+ - navbarBottomInsetPx;
+
+ Log.d(TAG, "Display height: " + displayHeightPx
+ + ", Distance from bottom: " + sensorDistanceFromBottom
+ + ", Bottom margin: " + dialogMarginPx
+ + ", Navbar bottom inset: " + navbarBottomInsetPx
+ + ", Bottom spacer height (portrait): " + spacerHeight);
+
+ return spacerHeight;
+ }
+
+ /**
+ * For devices in landscape orientation where the sensor is too high up, calculates the amount
+ * of padding necessary to center the biometric icon within the sensor's physical location.
+ */
+ @VisibleForTesting
+ static int calculateBottomSpacerHeightForLandscape(int titleHeightPx, int subtitleHeightPx,
+ int descriptionHeightPx, int topSpacerHeightPx, int textIndicatorHeightPx,
+ int buttonBarHeightPx, int navbarBottomInsetPx) {
+
+ final int dialogHeightAboveIcon = titleHeightPx
+ + subtitleHeightPx
+ + descriptionHeightPx
+ + topSpacerHeightPx;
+
+ final int dialogHeightBelowIcon = textIndicatorHeightPx + buttonBarHeightPx;
+
+ final int bottomSpacerHeight = dialogHeightAboveIcon
+ - dialogHeightBelowIcon
+ - navbarBottomInsetPx;
+
+ Log.d(TAG, "Title height: " + titleHeightPx
+ + ", Subtitle height: " + subtitleHeightPx
+ + ", Description height: " + descriptionHeightPx
+ + ", Top spacer height: " + topSpacerHeightPx
+ + ", Text indicator height: " + textIndicatorHeightPx
+ + ", Button bar height: " + buttonBarHeightPx
+ + ", Navbar bottom inset: " + navbarBottomInsetPx
+ + ", Bottom spacer height (landscape): " + bottomSpacerHeight);
+
+ return bottomSpacerHeight;
+ }
+
+ /**
+ * For devices in landscape orientation where the sensor is too left/right, calculates the
+ * amount of padding necessary to center the biometric icon within the sensor's physical
+ * location.
+ */
+ @VisibleForTesting
+ static int calculateHorizontalSpacerWidthForLandscape(
+ @NonNull FingerprintSensorPropertiesInternal sensorProperties, int displayWidthPx,
+ int dialogMarginPx, int navbarHorizontalInsetPx) {
+
+ final int sensorDistanceFromEdge = displayWidthPx
+ - sensorProperties.sensorLocationY
+ - sensorProperties.sensorRadius;
+
+ final int horizontalPadding = sensorDistanceFromEdge
+ - dialogMarginPx
+ - navbarHorizontalInsetPx;
+
+ Log.d(TAG, "Display width: " + displayWidthPx
+ + ", Distance from edge: " + sensorDistanceFromEdge
+ + ", Dialog margin: " + dialogMarginPx
+ + ", Navbar horizontal inset: " + navbarHorizontalInsetPx
+ + ", Horizontal spacer width (landscape): " + horizontalPadding);
+
+ return horizontalPadding;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDrawable.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDrawable.java
index 18f54166ad28..55ed5aaff958 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDrawable.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsDrawable.java
@@ -18,9 +18,13 @@ package com.android.systemui.biometrics;
import android.content.Context;
import android.graphics.ColorFilter;
+import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.ShapeDrawable;
+import android.graphics.drawable.shapes.PathShape;
+import android.util.PathParser;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -32,15 +36,30 @@ import com.android.systemui.R;
* sensor area.
*/
public abstract class UdfpsDrawable extends Drawable {
- @NonNull protected final Context mContext;
- @NonNull protected final Drawable mFingerprintDrawable;
+ static final float DEFAULT_STROKE_WIDTH = 3f;
+
+ @NonNull final Context mContext;
+ @NonNull final ShapeDrawable mFingerprintDrawable;
+ private final Paint mPaint;
private boolean mIlluminationShowing;
int mAlpha = 255; // 0 - 255
public UdfpsDrawable(@NonNull Context context) {
mContext = context;
- mFingerprintDrawable = context.getResources().getDrawable(R.drawable.ic_fingerprint, null);
+ final String fpPath = context.getResources().getString(R.string.config_udfpsIcon);
+ mFingerprintDrawable = new ShapeDrawable(
+ new PathShape(PathParser.createPathFromPathData(fpPath), 72, 72));
mFingerprintDrawable.mutate();
+
+ mPaint = mFingerprintDrawable.getPaint();
+ mPaint.setStyle(Paint.Style.STROKE);
+ mPaint.setStrokeCap(Paint.Cap.ROUND);
+ setStrokeWidth(DEFAULT_STROKE_WIDTH);
+ }
+
+ void setStrokeWidth(float strokeWidth) {
+ mPaint.setStrokeWidth(strokeWidth);
+ invalidateSelf();
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardDrawable.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardDrawable.java
index 12c15a0882f9..71ed3f8c9b0a 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardDrawable.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardDrawable.java
@@ -18,6 +18,7 @@ package com.android.systemui.biometrics;
import static com.android.systemui.doze.util.BurnInHelperKt.getBurnInOffset;
+import android.animation.ValueAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
@@ -27,6 +28,7 @@ import androidx.annotation.NonNull;
import com.android.internal.graphics.ColorUtils;
import com.android.settingslib.Utils;
+import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.doze.DozeReceiver;
@@ -37,6 +39,7 @@ public class UdfpsKeyguardDrawable extends UdfpsDrawable implements DozeReceiver
private static final String TAG = "UdfpsAnimationKeyguard";
private final int mAmbientDisplayColor;
+ static final float DEFAULT_AOD_STROKE_WIDTH = 1f;
@NonNull private final Context mContext;
private int mLockScreenColor;
@@ -48,22 +51,31 @@ public class UdfpsKeyguardDrawable extends UdfpsDrawable implements DozeReceiver
private float mBurnInOffsetX;
private float mBurnInOffsetY;
+ private final ValueAnimator mHintAnimator = ValueAnimator.ofFloat(
+ UdfpsKeyguardDrawable.DEFAULT_STROKE_WIDTH,
+ .5f,
+ UdfpsKeyguardDrawable.DEFAULT_STROKE_WIDTH);
+
UdfpsKeyguardDrawable(@NonNull Context context) {
super(context);
mContext = context;
- // TODO: move burn-in to view
mMaxBurnInOffsetX = context.getResources()
.getDimensionPixelSize(R.dimen.udfps_burn_in_offset_x);
mMaxBurnInOffsetY = context.getResources()
.getDimensionPixelSize(R.dimen.udfps_burn_in_offset_y);
+ mHintAnimator.setDuration(2000);
+ mHintAnimator.setInterpolator(Interpolators.FAST_OUT_SLOW_IN);
+ mHintAnimator.addUpdateListener(anim -> setStrokeWidth((float) anim.getAnimatedValue()));
+
mLockScreenColor = Utils.getColorAttrDefaultColor(mContext, R.attr.wallpaperTextColor);
mAmbientDisplayColor = Color.WHITE;
- updateAodPositionAndColor();
+
+ updateIcon();
}
- private void updateAodPositionAndColor() {
+ private void updateIcon() {
mBurnInOffsetX = MathUtils.lerp(0f,
getBurnInOffset(mMaxBurnInOffsetX * 2, true /* xAxis */)
- mMaxBurnInOffsetX,
@@ -75,12 +87,14 @@ public class UdfpsKeyguardDrawable extends UdfpsDrawable implements DozeReceiver
mFingerprintDrawable.setTint(ColorUtils.blendARGB(mLockScreenColor,
mAmbientDisplayColor, mInterpolatedDarkAmount));
+ setStrokeWidth(MathUtils.lerp(DEFAULT_STROKE_WIDTH, DEFAULT_AOD_STROKE_WIDTH,
+ mInterpolatedDarkAmount));
invalidateSelf();
}
@Override
public void dozeTimeTick() {
- updateAodPositionAndColor();
+ updateIcon();
}
@Override
@@ -88,17 +102,25 @@ public class UdfpsKeyguardDrawable extends UdfpsDrawable implements DozeReceiver
if (isIlluminationShowing()) {
return;
}
+ canvas.save();
+ canvas.translate(mBurnInOffsetX, mBurnInOffsetY);
mFingerprintDrawable.draw(canvas);
+ canvas.restore();
+ }
+
+ void animateHint() {
+ mHintAnimator.start();
}
void onDozeAmountChanged(float linear, float eased) {
+ mHintAnimator.cancel();
mInterpolatedDarkAmount = eased;
- updateAodPositionAndColor();
+ updateIcon();
}
void setLockScreenColor(int color) {
if (mLockScreenColor == color) return;
mLockScreenColor = color;
- updateAodPositionAndColor();
+ updateIcon();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java
index e2748437c0c6..4590182ac870 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardView.java
@@ -85,7 +85,6 @@ public class UdfpsKeyguardView extends UdfpsAnimationView {
@Override
public boolean dozeTimeTick() {
- // TODO: burnin
mFingerprintDrawable.dozeTimeTick();
return true;
}
@@ -100,13 +99,16 @@ public class UdfpsKeyguardView extends UdfpsAnimationView {
void onDozeAmountChanged(float linear, float eased) {
mFingerprintDrawable.onDozeAmountChanged(linear, eased);
- invalidate();
+ }
+
+ void animateHint() {
+ mFingerprintDrawable.animateHint();
}
/**
* Animates in the bg protection circle behind the fp icon to highlight the icon.
*/
- void animateHighlightFp() {
+ void animateUdfpsBouncer() {
if (mBgProtection.getVisibility() == View.VISIBLE && mBgProtection.getAlpha() == 1f) {
// already fully highlighted, don't re-animate
return;
@@ -154,7 +156,7 @@ public class UdfpsKeyguardView extends UdfpsAnimationView {
/**
* Animates out the bg protection circle behind the fp icon to unhighlight the icon.
*/
- void animateUnhighlightFp(@Nullable Runnable onEndAnimation) {
+ void animateAwayUdfpsBouncer(@Nullable Runnable onEndAnimation) {
if (mBgProtection.getVisibility() == View.GONE) {
// already hidden
return;
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java
index 1f652dbfdaf2..9d846fa54e5b 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsKeyguardViewController.java
@@ -17,32 +17,53 @@
package com.android.systemui.biometrics;
import android.annotation.NonNull;
+import android.hardware.biometrics.BiometricSourceType;
+import androidx.annotation.Nullable;
+
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.util.concurrency.DelayableExecutor;
import java.io.FileDescriptor;
import java.io.PrintWriter;
/**
* Class that coordinates non-HBM animations during keyguard authentication.
+ *
+ * Highlights the udfps icon when:
+ * - Face authentication has failed
+ * - Face authentication has been run for > 2 seconds
*/
public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<UdfpsKeyguardView> {
+ private static final long AFTER_FACE_AUTH_HINT_DELAY = 2000;
+
@NonNull private final StatusBarKeyguardViewManager mKeyguardViewManager;
+ @NonNull private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ @NonNull private final DelayableExecutor mExecutor;
- private boolean mForceShow;
+ @Nullable private Runnable mCancelRunnable;
+ private boolean mShowBouncer;
private boolean mQsExpanded;
+ private boolean mFaceDetectRunning;
+ private boolean mHintShown;
protected UdfpsKeyguardViewController(
@NonNull UdfpsKeyguardView view,
@NonNull StatusBarStateController statusBarStateController,
@NonNull StatusBar statusBar,
@NonNull StatusBarKeyguardViewManager statusBarKeyguardViewManager,
+ @NonNull KeyguardUpdateMonitor keyguardUpdateMonitor,
+ @NonNull DelayableExecutor mainDelayableExecutor,
@NonNull DumpManager dumpManager) {
super(view, statusBarStateController, statusBar, dumpManager);
mKeyguardViewManager = statusBarKeyguardViewManager;
+ mKeyguardUpdateMonitor = keyguardUpdateMonitor;
+ mExecutor = mainDelayableExecutor;
}
@Override
@@ -53,6 +74,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
@Override
protected void onViewAttached() {
super.onViewAttached();
+ mHintShown = false;
+ mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
+ updateFaceDetectRunning(mKeyguardUpdateMonitor.isFaceDetectionRunning());
final float dozeAmount = mStatusBarStateController.getDozeAmount();
mStatusBarStateController.addCallback(mStateListener);
@@ -64,31 +88,40 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
@Override
protected void onViewDetached() {
super.onViewDetached();
+ mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback);
+ mFaceDetectRunning = false;
+
mStatusBarStateController.removeCallback(mStateListener);
- mAlternateAuthInterceptor.resetForceShow();
+ mAlternateAuthInterceptor.hideAlternateAuthBouncer();
mKeyguardViewManager.setAlternateAuthInterceptor(null);
+
+ if (mCancelRunnable != null) {
+ mCancelRunnable.run();
+ mCancelRunnable = null;
+ }
}
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
super.dump(fd, pw, args);
- pw.println("mForceShow=" + mForceShow);
+ pw.println("mShowBouncer=" + mShowBouncer);
+ pw.println("mFaceDetectRunning=" + mFaceDetectRunning);
}
/**
- * Overrides non-force show logic in shouldPauseAuth to still auth.
+ * Overrides non-bouncer show logic in shouldPauseAuth to still auth.
*/
- private void forceShow(boolean forceShow) {
- if (mForceShow == forceShow) {
+ private void showBouncer(boolean forceShow) {
+ if (mShowBouncer == forceShow) {
return;
}
- mForceShow = forceShow;
+ mShowBouncer = forceShow;
updatePauseAuth();
- if (mForceShow) {
- mView.animateHighlightFp();
+ if (mShowBouncer) {
+ mView.animateUdfpsBouncer();
} else {
- mView.animateUnhighlightFp(() -> mKeyguardViewManager.cancelPostAuthActions());
+ mView.animateAwayUdfpsBouncer(() -> mKeyguardViewManager.cancelPostAuthActions());
}
}
@@ -98,7 +131,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
* is expanded, so this can be overridden with the forceShow method.
*/
public boolean shouldPauseAuth() {
- if (mForceShow) {
+ if (mShowBouncer) {
return false;
}
@@ -109,12 +142,42 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
return super.shouldPauseAuth();
}
+ private void cancelDelayedHint() {
+ if (mCancelRunnable != null) {
+ mCancelRunnable.run();
+ mCancelRunnable = null;
+ }
+ }
+
+ private void updateFaceDetectRunning(boolean running) {
+ if (mFaceDetectRunning == running) {
+ return;
+ }
+
+ // show udfps hint a few seconds after face auth started running
+ if (!mFaceDetectRunning && running && !mHintShown && mCancelRunnable == null) {
+ // Face detect started running, show udfps hint after a delay
+ mCancelRunnable = mExecutor.executeDelayed(() -> showHint(false),
+ AFTER_FACE_AUTH_HINT_DELAY);
+ }
+
+ mFaceDetectRunning = running;
+ }
+
+ private void showHint(boolean forceShow) {
+ cancelDelayedHint();
+ if (!mHintShown || forceShow) {
+ mHintShown = true;
+ mView.animateHint();
+ }
+ }
+
private final StatusBarStateController.StateListener mStateListener =
new StatusBarStateController.StateListener() {
@Override
public void onDozeAmountChanged(float linear, float eased) {
mView.onDozeAmountChanged(linear, eased);
- if (linear != 0) forceShow(false);
+ if (linear != 0) showBouncer(false);
}
@Override
@@ -123,31 +186,56 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
}
};
+ private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
+ new KeyguardUpdateMonitorCallback() {
+ public void onBiometricRunningStateChanged(boolean running,
+ BiometricSourceType biometricSourceType) {
+ if (biometricSourceType == BiometricSourceType.FACE) {
+ updateFaceDetectRunning(running);
+ }
+ }
+
+ public void onBiometricAuthFailed(BiometricSourceType biometricSourceType) {
+ if (biometricSourceType == BiometricSourceType.FACE) {
+ // show udfps hint when face auth fails
+ showHint(true);
+ }
+ }
+
+ public void onBiometricAuthenticated(int userId,
+ BiometricSourceType biometricSourceType, boolean isStrongBiometric) {
+ if (biometricSourceType == BiometricSourceType.FACE) {
+ // cancel delayed hint if face auth succeeded
+ cancelDelayedHint();
+ }
+ }
+ };
+
private final StatusBarKeyguardViewManager.AlternateAuthInterceptor mAlternateAuthInterceptor =
new StatusBarKeyguardViewManager.AlternateAuthInterceptor() {
@Override
- public boolean showAlternativeAuthMethod() {
- if (mForceShow) {
+ public boolean showAlternateAuthBouncer() {
+ if (mShowBouncer) {
return false;
}
- forceShow(true);
+ showBouncer(true);
return true;
}
@Override
- public boolean resetForceShow() {
- if (!mForceShow) {
+ public boolean hideAlternateAuthBouncer() {
+ if (!mShowBouncer) {
return false;
}
- forceShow(false);
+ showBouncer(false);
return true;
}
@Override
- public boolean isShowingAlternateAuth() {
- return mForceShow;
+ public boolean isShowingAlternateAuthBouncer() {
+ return mShowBouncer;
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt b/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt
index 464bee18f030..f8a20023e47a 100644
--- a/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt
+++ b/packages/SystemUI/src/com/android/systemui/camera/CameraIntents.kt
@@ -23,11 +23,11 @@ import android.text.TextUtils
import com.android.systemui.R
-interface CameraIntents {
+class CameraIntents {
companion object {
- const val DEFAULT_SECURE_CAMERA_INTENT_ACTION =
+ val DEFAULT_SECURE_CAMERA_INTENT_ACTION =
MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE
- const val DEFAULT_INSECURE_CAMERA_INTENT_ACTION =
+ val DEFAULT_INSECURE_CAMERA_INTENT_ACTION =
MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA
@JvmStatic
@@ -59,13 +59,13 @@ interface CameraIntents {
}
@JvmStatic
- fun isSecureCameraIntent(intent: Intent): Boolean {
- return intent.getAction().equals(DEFAULT_SECURE_CAMERA_INTENT_ACTION)
+ fun isSecureCameraIntent(intent: Intent?): Boolean {
+ return intent?.getAction()?.equals(DEFAULT_SECURE_CAMERA_INTENT_ACTION) ?: false
}
@JvmStatic
- fun isInsecureCameraIntent(intent: Intent): Boolean {
- return intent.getAction().equals(DEFAULT_INSECURE_CAMERA_INTENT_ACTION)
+ fun isInsecureCameraIntent(intent: Intent?): Boolean {
+ return intent?.getAction()?.equals(DEFAULT_INSECURE_CAMERA_INTENT_ACTION) ?: false
}
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java
index bb037202d985..3871248eccd5 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollector.java
@@ -112,9 +112,21 @@ public interface FalsingCollector {
/** */
void onBouncerHidden();
- /** */
+ /**
+ * Call this to record a MotionEvent in the {@link com.android.systemui.plugins.FalsingManager}.
+ *
+ * Be sure to call {@link #onMotionEventComplete()} after the rest of SystemUI is done with the
+ * MotionEvent.
+ */
void onTouchEvent(MotionEvent ev);
+ /**
+ * Call this once SystemUI has completed all processing of a given MotionEvent.
+ *
+ * See {@link #onTouchEvent(MotionEvent)}.
+ */
+ void onMotionEventComplete();
+
/** */
void avoidGesture();
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java
index 939b45a2b4a5..28aac051c66d 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorFake.java
@@ -147,6 +147,10 @@ public class FalsingCollectorFake implements FalsingCollector {
}
@Override
+ public void onMotionEventComplete() {
+ }
+
+ @Override
public void avoidGesture() {
}
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java
index cf6169703dca..aaea9ce98359 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java
@@ -275,6 +275,11 @@ class FalsingCollectorImpl implements FalsingCollector {
}
@Override
+ public void onMotionEventComplete() {
+ mFalsingDataProvider.onMotionEventComplete();
+ }
+
+ @Override
public void avoidGesture() {
mAvoidGesture = true;
if (mPendingDownEvent != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java
index 1aaa139eb7ce..2e60a65c3bd1 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingDataProvider.java
@@ -81,8 +81,8 @@ public class FalsingDataProvider {
}
if (motionEvent.getActionMasked() == MotionEvent.ACTION_DOWN) {
+ // Ensure prior gesture was completed. May be a no-op.
completePriorGesture();
- mRecentMotionEvents = new TimeLimitedMotionEventBuffer(MOTION_EVENT_AGE_MS);
}
mRecentMotionEvents.addAll(motionEvents);
@@ -100,12 +100,23 @@ public class FalsingDataProvider {
mDirty = true;
}
+ void onMotionEventComplete() {
+ if (mRecentMotionEvents.isEmpty()) {
+ return;
+ }
+ int action = mRecentMotionEvents.get(mRecentMotionEvents.size() - 1).getActionMasked();
+ if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
+ completePriorGesture();
+ }
+ }
+
private void completePriorGesture() {
if (!mRecentMotionEvents.isEmpty()) {
mGestureFinalizedListeners.forEach(listener -> listener.onGestureFinalized(
mRecentMotionEvents.get(mRecentMotionEvents.size() - 1).getEventTime()));
mPriorMotionEvents = mRecentMotionEvents;
+ mRecentMotionEvents = new TimeLimitedMotionEventBuffer(MOTION_EVENT_AGE_MS);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
index 1a729295165c..187caf9c2b2e 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/DependencyProvider.java
@@ -31,7 +31,6 @@ import android.os.HandlerThread;
import android.os.Looper;
import android.os.ServiceManager;
import android.os.UserHandle;
-import android.service.quickaccesswallet.QuickAccessWalletClient;
import android.view.Choreographer;
import android.view.IWindowManager;
import android.view.LayoutInflater;
@@ -376,11 +375,4 @@ public class DependencyProvider {
public ModeSwitchesController providesModeSwitchesController(Context context) {
return new ModeSwitchesController(context);
}
-
- /** */
- @Provides
- @SysUISingleton
- public QuickAccessWalletClient provideQuickAccessWalletClient(Context context) {
- return QuickAccessWalletClient.create(context);
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
index 1c5715c0296d..fd80d50c2894 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/FrameworkServicesModule.java
@@ -59,6 +59,7 @@ import android.permission.PermissionManager;
import android.service.dreams.DreamService;
import android.service.dreams.IDreamManager;
import android.telecom.TelecomManager;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.view.IWindowManager;
import android.view.ViewConfiguration;
@@ -328,6 +329,12 @@ public class FrameworkServicesModule {
@Provides
@Singleton
+ static SubscriptionManager provideSubcriptionManager(Context context) {
+ return context.getSystemService(SubscriptionManager.class);
+ }
+
+ @Provides
+ @Singleton
@Nullable
static TelecomManager provideTelecomManager(Context context) {
return context.getSystemService(TelecomManager.class);
diff --git a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
index b67db03a743c..365a102b61dd 100644
--- a/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
+++ b/packages/SystemUI/src/com/android/systemui/dagger/SystemUIModule.java
@@ -73,6 +73,7 @@ import com.android.systemui.util.settings.SettingsUtilModule;
import com.android.systemui.util.time.SystemClock;
import com.android.systemui.util.time.SystemClockImpl;
import com.android.systemui.volume.dagger.VolumeModule;
+import com.android.systemui.wallet.dagger.WalletModule;
import com.android.systemui.wmshell.BubblesManager;
import com.android.wm.shell.bubbles.Bubbles;
@@ -109,7 +110,8 @@ import dagger.Provides;
TunerModule.class,
UserModule.class,
UtilModule.class,
- VolumeModule.class
+ VolumeModule.class,
+ WalletModule.class
},
subcomponents = {
StatusBarComponent.class,
diff --git a/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java b/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java
index 0673879758ad..37b8a2c953fe 100644
--- a/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java
+++ b/packages/SystemUI/src/com/android/systemui/fragments/FragmentService.java
@@ -23,6 +23,7 @@ import android.view.View;
import com.android.systemui.Dumpable;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.qs.QSFragment;
+import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment;
import com.android.systemui.statusbar.policy.ConfigurationController;
import java.io.FileDescriptor;
@@ -128,6 +129,9 @@ public class FragmentService implements Dumpable {
* Inject a QSFragment.
*/
QSFragment createQSFragment();
+
+ /** Inject a CollapsedStatusBarFragment. */
+ CollapsedStatusBarFragment createCollapsedStatusBarFragment();
}
private class FragmentHostState {
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
index 18627189f188..34d94d8e13bb 100644
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
@@ -15,16 +15,8 @@
package com.android.systemui.globalactions;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
-import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_GLOBAL_ACTIONS;
-import static android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN;
-import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
-
-import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST;
-import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED;
+
import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_BOOT;
-import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.AVAILABLE;
import static com.android.systemui.controls.dagger.ControlsComponent.Visibility.AVAILABLE_AFTER_UNLOCK;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_GLOBAL_ACTIONS_SHOWING;
@@ -34,92 +26,47 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.annotation.Nullable;
-import android.app.ActivityManager;
-import android.app.Dialog;
import android.app.IActivityManager;
import android.app.PendingIntent;
-import android.app.StatusBarManager;
-import android.app.WallpaperManager;
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
-import android.content.BroadcastReceiver;
import android.content.ComponentName;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.IntentFilter;
import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
-import android.content.pm.UserInfo;
-import android.content.res.ColorStateList;
-import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.ContentObserver;
-import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
-import android.net.ConnectivityManager;
-import android.os.Binder;
import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.RemoteException;
-import android.os.SystemProperties;
-import android.os.UserHandle;
import android.os.UserManager;
import android.os.Vibrator;
import android.provider.Settings;
import android.service.dreams.IDreamManager;
-import android.sysprop.TelephonyProperties;
import android.telecom.TelecomManager;
-import android.telephony.ServiceState;
-import android.telephony.TelephonyCallback;
-import android.telephony.TelephonyManager;
import android.transition.AutoTransition;
import android.transition.TransitionManager;
import android.transition.TransitionSet;
-import android.util.ArraySet;
import android.util.Log;
-import android.view.ContextThemeWrapper;
import android.view.IWindowManager;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowInsets;
import android.view.WindowManager;
-import android.view.accessibility.AccessibilityEvent;
-import android.widget.BaseAdapter;
import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.ImageView.ScaleType;
-import android.widget.LinearLayout;
-import android.widget.ListPopupWindow;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleOwner;
-import androidx.lifecycle.LifecycleRegistry;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.colorextraction.ColorExtractor;
-import com.android.internal.colorextraction.ColorExtractor.GradientColors;
-import com.android.internal.colorextraction.drawable.ScrimDrawable;
import com.android.internal.logging.MetricsLogger;
-import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.statusbar.IStatusBarService;
-import com.android.internal.util.EmergencyAffordanceManager;
-import com.android.internal.util.ScreenshotHelper;
import com.android.internal.view.RotationPolicy;
import com.android.internal.widget.LockPatternUtils;
import com.android.systemui.Interpolators;
-import com.android.systemui.MultiListLayout;
-import com.android.systemui.MultiListLayout.MultiListAdapter;
import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.controls.ControlsServiceInfo;
@@ -139,9 +86,10 @@ import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.telephony.TelephonyListenerManager;
-import com.android.systemui.util.EmergencyDialerConstants;
import com.android.systemui.util.RingerModeTracker;
import com.android.systemui.util.leak.RotationUtils;
+import com.android.systemui.util.settings.GlobalSettings;
+import com.android.systemui.util.settings.SecureSettings;
import java.util.ArrayList;
import java.util.Collections;
@@ -157,144 +105,37 @@ import javax.inject.Provider;
/**
* Helper to show the global actions dialog. Each item is an {@link Action} that may show depending
* on whether the keyguard is showing, and whether the device is provisioned.
+ * This version includes wallet and controls.
*/
-public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
+public class GlobalActionsDialog extends GlobalActionsDialogLite
+ implements DialogInterface.OnDismissListener,
DialogInterface.OnShowListener,
ConfigurationController.ConfigurationListener,
GlobalActionsPanelPlugin.Callbacks,
LifecycleOwner {
- public static final String SYSTEM_DIALOG_REASON_KEY = "reason";
- public static final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
- public static final String SYSTEM_DIALOG_REASON_DREAM = "dream";
-
private static final String TAG = "GlobalActionsDialog";
- private static final boolean SHOW_SILENT_TOGGLE = true;
-
- /* Valid settings for global actions keys.
- * see config.xml config_globalActionList */
- @VisibleForTesting
- static final String GLOBAL_ACTION_KEY_POWER = "power";
- private static final String GLOBAL_ACTION_KEY_AIRPLANE = "airplane";
- static final String GLOBAL_ACTION_KEY_BUGREPORT = "bugreport";
- private static final String GLOBAL_ACTION_KEY_SILENT = "silent";
- private static final String GLOBAL_ACTION_KEY_USERS = "users";
- private static final String GLOBAL_ACTION_KEY_SETTINGS = "settings";
- static final String GLOBAL_ACTION_KEY_LOCKDOWN = "lockdown";
- private static final String GLOBAL_ACTION_KEY_VOICEASSIST = "voiceassist";
- private static final String GLOBAL_ACTION_KEY_ASSIST = "assist";
- static final String GLOBAL_ACTION_KEY_RESTART = "restart";
- private static final String GLOBAL_ACTION_KEY_LOGOUT = "logout";
- static final String GLOBAL_ACTION_KEY_EMERGENCY = "emergency";
- static final String GLOBAL_ACTION_KEY_SCREENSHOT = "screenshot";
-
public static final String PREFS_CONTROLS_SEEDING_COMPLETED = "SeedingCompleted";
public static final String PREFS_CONTROLS_FILE = "controls_prefs";
private static final int SEEDING_MAX = 2;
- private final Context mContext;
- private final GlobalActionsManager mWindowManagerFuncs;
- private final AudioManager mAudioManager;
- private final IDreamManager mDreamManager;
- private final DevicePolicyManager mDevicePolicyManager;
private final LockPatternUtils mLockPatternUtils;
private final KeyguardStateController mKeyguardStateController;
- private final BroadcastDispatcher mBroadcastDispatcher;
- private final ContentResolver mContentResolver;
- private final Resources mResources;
- private final ConfigurationController mConfigurationController;
- private final UserManager mUserManager;
- private final TrustManager mTrustManager;
- private final IActivityManager mIActivityManager;
- private final TelecomManager mTelecomManager;
- private final MetricsLogger mMetricsLogger;
- private final UiEventLogger mUiEventLogger;
private final NotificationShadeDepthController mDepthController;
private final SysUiState mSysUiState;
-
- // Used for RingerModeTracker
- private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);
-
- @VisibleForTesting
- protected final ArrayList<Action> mItems = new ArrayList<>();
- @VisibleForTesting
- protected final ArrayList<Action> mOverflowItems = new ArrayList<>();
- @VisibleForTesting
- protected final ArrayList<Action> mPowerItems = new ArrayList<>();
-
- @VisibleForTesting
- protected ActionsDialog mDialog;
-
- private Action mSilentModeAction;
- private ToggleAction mAirplaneModeOn;
-
- private MyAdapter mAdapter;
- private MyOverflowAdapter mOverflowAdapter;
- private MyPowerOptionsAdapter mPowerAdapter;
-
- private boolean mKeyguardShowing = false;
- private boolean mDeviceProvisioned = false;
- private ToggleState mAirplaneState = ToggleState.Off;
- private boolean mIsWaitingForEcmExit = false;
- private boolean mHasTelephony;
- private boolean mHasVibrator;
- private final boolean mShowSilentToggle;
- private final EmergencyAffordanceManager mEmergencyAffordanceManager;
- private final ScreenshotHelper mScreenshotHelper;
private final ActivityStarter mActivityStarter;
private final SysuiColorExtractor mSysuiColorExtractor;
private final IStatusBarService mStatusBarService;
private final NotificationShadeWindowController mNotificationShadeWindowController;
private GlobalActionsPanelPlugin mWalletPlugin;
private Optional<ControlsUiController> mControlsUiControllerOptional;
- private final IWindowManager mIWindowManager;
- private final Executor mBackgroundExecutor;
private List<ControlsServiceInfo> mControlsServiceInfos = new ArrayList<>();
private ControlsComponent mControlsComponent;
private Optional<ControlsController> mControlsControllerOptional;
- private final RingerModeTracker mRingerModeTracker;
- private int mDialogPressDelay = DIALOG_PRESS_DELAY; // ms
- private Handler mMainHandler;
private UserContextProvider mUserContextProvider;
@VisibleForTesting
boolean mShowLockScreenCardsAndControls = false;
- private int mSmallestScreenWidthDp;
-
- @VisibleForTesting
- public enum GlobalActionsEvent implements UiEventLogger.UiEventEnum {
- @UiEvent(doc = "The global actions / power menu surface became visible on the screen.")
- GA_POWER_MENU_OPEN(337),
-
- @UiEvent(doc = "The global actions / power menu surface was dismissed.")
- GA_POWER_MENU_CLOSE(471),
-
- @UiEvent(doc = "The global actions bugreport button was pressed.")
- GA_BUGREPORT_PRESS(344),
-
- @UiEvent(doc = "The global actions bugreport button was long pressed.")
- GA_BUGREPORT_LONG_PRESS(345),
-
- @UiEvent(doc = "The global actions emergency button was pressed.")
- GA_EMERGENCY_DIALER_PRESS(346),
-
- @UiEvent(doc = "The global actions screenshot button was pressed.")
- GA_SCREENSHOT_PRESS(347),
-
- @UiEvent(doc = "The global actions screenshot button was long pressed.")
- GA_SCREENSHOT_LONG_PRESS(348);
-
- private final int mId;
-
- GlobalActionsEvent(int id) {
- mId = id;
- }
-
- @Override
- public int getId() {
- return mId;
- }
- }
/**
* @param context everything needs a context :(
@@ -304,9 +145,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
AudioManager audioManager, IDreamManager iDreamManager,
DevicePolicyManager devicePolicyManager, LockPatternUtils lockPatternUtils,
BroadcastDispatcher broadcastDispatcher,
- ConnectivityManager connectivityManager,
TelephonyListenerManager telephonyListenerManager,
- ContentResolver contentResolver, @Nullable Vibrator vibrator, @Main Resources resources,
+ GlobalSettings globalSettings, SecureSettings secureSettings,
+ @Nullable Vibrator vibrator, @Main Resources resources,
ConfigurationController configurationController, ActivityStarter activityStarter,
KeyguardStateController keyguardStateController, UserManager userManager,
TrustManager trustManager, IActivityManager iActivityManager,
@@ -320,83 +161,52 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
RingerModeTracker ringerModeTracker, SysUiState sysUiState, @Main Handler handler,
ControlsComponent controlsComponent,
UserContextProvider userContextProvider) {
- mContext = context;
- mWindowManagerFuncs = windowManagerFuncs;
- mAudioManager = audioManager;
- mDreamManager = iDreamManager;
- mDevicePolicyManager = devicePolicyManager;
+
+ super(context, windowManagerFuncs,
+ audioManager, iDreamManager,
+ devicePolicyManager, lockPatternUtils,
+ broadcastDispatcher, telephonyListenerManager,
+ globalSettings, secureSettings,
+ vibrator, resources,
+ configurationController,
+ keyguardStateController, userManager,
+ trustManager, iActivityManager,
+ telecomManager, metricsLogger,
+ depthController, colorExtractor,
+ statusBarService,
+ notificationShadeWindowController,
+ iWindowManager,
+ backgroundExecutor,
+ uiEventLogger,
+ ringerModeTracker, sysUiState, handler);
+
mLockPatternUtils = lockPatternUtils;
mKeyguardStateController = keyguardStateController;
- mBroadcastDispatcher = broadcastDispatcher;
- mContentResolver = contentResolver;
- mResources = resources;
- mConfigurationController = configurationController;
- mUserManager = userManager;
- mTrustManager = trustManager;
- mIActivityManager = iActivityManager;
- mTelecomManager = telecomManager;
- mMetricsLogger = metricsLogger;
- mUiEventLogger = uiEventLogger;
mDepthController = depthController;
mSysuiColorExtractor = colorExtractor;
mStatusBarService = statusBarService;
mNotificationShadeWindowController = notificationShadeWindowController;
mControlsComponent = controlsComponent;
mControlsUiControllerOptional = controlsComponent.getControlsUiController();
- mIWindowManager = iWindowManager;
- mBackgroundExecutor = backgroundExecutor;
- mRingerModeTracker = ringerModeTracker;
mControlsControllerOptional = controlsComponent.getControlsController();
mSysUiState = sysUiState;
- mMainHandler = handler;
mUserContextProvider = userContextProvider;
- mSmallestScreenWidthDp = mContext.getResources().getConfiguration().smallestScreenWidthDp;
-
- // receive broadcasts
- IntentFilter filter = new IntentFilter();
- filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
- filter.addAction(Intent.ACTION_SCREEN_OFF);
- filter.addAction(TelephonyManager.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
- mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter);
-
- mHasTelephony =
- context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
-
- // get notified of phone state changes
- telephonyListenerManager.addServiceStateListener(mPhoneStateListener);
- contentResolver.registerContentObserver(
- Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON), true,
- mAirplaneModeObserver);
- mHasVibrator = vibrator != null && vibrator.hasVibrator();
-
- mShowSilentToggle = SHOW_SILENT_TOGGLE && !resources.getBoolean(
- R.bool.config_useFixedVolume);
- if (mShowSilentToggle) {
- mRingerModeTracker.getRingerMode().observe(this, ringer ->
- mHandler.sendEmptyMessage(MESSAGE_REFRESH)
- );
- }
-
- mEmergencyAffordanceManager = new EmergencyAffordanceManager(context);
- mScreenshotHelper = new ScreenshotHelper(context);
-
- mConfigurationController.addCallback(this);
-
mActivityStarter = activityStarter;
keyguardStateController.addCallback(new KeyguardStateController.Callback() {
@Override
public void onUnlockedChanged() {
if (mDialog != null) {
+ ActionsDialog dialog = (ActionsDialog) mDialog;
boolean unlocked = mKeyguardStateController.isUnlocked();
- if (mDialog.mWalletViewController != null) {
- mDialog.mWalletViewController.onDeviceLockStateChanged(!unlocked);
+ if (dialog.mWalletViewController != null) {
+ dialog.mWalletViewController.onDeviceLockStateChanged(!unlocked);
}
- if (!mDialog.isShowingControls()
+ if (!dialog.isShowingControls()
&& mControlsComponent.getVisibility() == AVAILABLE) {
- mDialog.showControls(mControlsUiControllerOptional.get());
+ dialog.showControls(mControlsUiControllerOptional.get());
}
if (unlocked) {
- mDialog.hideLockMessage();
+ dialog.hideLockMessage();
}
}
}
@@ -409,11 +219,12 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
// This callback may occur after the dialog has been shown. If so, add
// controls into the already visible space or show the lock msg if needed.
if (mDialog != null) {
- if (!mDialog.isShowingControls()
+ ActionsDialog dialog = (ActionsDialog) mDialog;
+ if (!dialog.isShowingControls()
&& mControlsComponent.getVisibility() == AVAILABLE) {
- mDialog.showControls(mControlsUiControllerOptional.get());
- } else if (shouldShowLockMessage(mDialog)) {
- mDialog.showLockMessage();
+ dialog.showControls(mControlsUiControllerOptional.get());
+ } else if (shouldShowLockMessage(dialog)) {
+ dialog.showLockMessage();
}
}
});
@@ -421,10 +232,10 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
// Listen for changes to show controls on the power menu while locked
onPowerMenuLockScreenSettingsChanged();
- mContext.getContentResolver().registerContentObserver(
+ mGlobalSettings.registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT),
false /* notifyForDescendants */,
- new ContentObserver(mMainHandler) {
+ new ContentObserver(handler) {
@Override
public void onChange(boolean selfChange) {
onPowerMenuLockScreenSettingsChanged();
@@ -443,7 +254,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
return;
}
- String[] preferredControlsPackages = mContext.getResources()
+ String[] preferredControlsPackages = getContext().getResources()
.getStringArray(com.android.systemui.R.array.config_controlsPreferredPackages);
SharedPreferences prefs = mUserContextProvider.getUserContext()
@@ -498,67 +309,14 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
*/
public void showOrHideDialog(boolean keyguardShowing, boolean isDeviceProvisioned,
GlobalActionsPanelPlugin walletPlugin) {
- mKeyguardShowing = keyguardShowing;
- mDeviceProvisioned = isDeviceProvisioned;
mWalletPlugin = walletPlugin;
- if (mDialog != null && mDialog.isShowing()) {
- // In order to force global actions to hide on the same affordance press, we must
- // register a call to onGlobalActionsShown() first to prevent the default actions
- // menu from showing. This will be followed by a subsequent call to
- // onGlobalActionsHidden() on dismiss()
- mWindowManagerFuncs.onGlobalActionsShown();
- mDialog.dismiss();
- mDialog = null;
- } else {
- handleShow();
- }
+ super.showOrHideDialog(keyguardShowing, isDeviceProvisioned);
}
- /**
- * Dismiss the global actions dialog, if it's currently shown
- */
- public void dismissDialog() {
- mHandler.removeMessages(MESSAGE_DISMISS);
- mHandler.sendEmptyMessage(MESSAGE_DISMISS);
- }
-
- private void awakenIfNecessary() {
- if (mDreamManager != null) {
- try {
- if (mDreamManager.isDreaming()) {
- mDreamManager.awaken();
- }
- } catch (RemoteException e) {
- // we tried
- }
- }
- }
-
- private void handleShow() {
- awakenIfNecessary();
- mDialog = createDialog();
- prepareDialog();
+ @Override
+ protected void handleShow() {
seedFavorites();
-
- WindowManager.LayoutParams attrs = mDialog.getWindow().getAttributes();
- attrs.setTitle("ActionsDialog");
- attrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
- mDialog.getWindow().setAttributes(attrs);
- // Don't acquire soft keyboard focus, to avoid destroying state when capturing bugreports
- mDialog.getWindow().setFlags(FLAG_ALT_FOCUSABLE_IM, FLAG_ALT_FOCUSABLE_IM);
- mDialog.show();
- mWindowManagerFuncs.onGlobalActionsShown();
- }
-
- @VisibleForTesting
- protected boolean shouldShowAction(Action action) {
- if (mKeyguardShowing && !action.showDuringKeyguard()) {
- return false;
- }
- if (!mDeviceProvisioned && !action.showBeforeProvisioning()) {
- return false;
- }
- return action.shouldShow();
+ super.handleShow();
}
/**
@@ -566,134 +324,10 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
* layout is being used.
*/
@VisibleForTesting
+ @Override
protected int getMaxShownPowerItems() {
- return mResources.getInteger(com.android.systemui.R.integer.power_menu_max_columns);
- }
-
- /**
- * Add a power menu action item for to either the main or overflow items lists, depending on
- * whether controls are enabled and whether the max number of shown items has been reached.
- */
- private void addActionItem(Action action) {
- if (mItems.size() < getMaxShownPowerItems()) {
- mItems.add(action);
- } else {
- mOverflowItems.add(action);
- }
- }
-
- @VisibleForTesting
- protected String[] getDefaultActions() {
- return mResources.getStringArray(R.array.config_globalActionsList);
- }
-
- private void addIfShouldShowAction(List<Action> actions, Action action) {
- if (shouldShowAction(action)) {
- actions.add(action);
- }
- }
-
- @VisibleForTesting
- protected void createActionItems() {
- // Simple toggle style if there's no vibrator, otherwise use a tri-state
- if (!mHasVibrator) {
- mSilentModeAction = new SilentModeToggleAction();
- } else {
- mSilentModeAction = new SilentModeTriStateAction(mAudioManager, mHandler);
- }
- mAirplaneModeOn = new AirplaneModeAction();
- onAirplaneModeChanged();
-
- mItems.clear();
- mOverflowItems.clear();
- mPowerItems.clear();
- String[] defaultActions = getDefaultActions();
-
- ShutDownAction shutdownAction = new ShutDownAction();
- RestartAction restartAction = new RestartAction();
- ArraySet<String> addedKeys = new ArraySet<String>();
- List<Action> tempActions = new ArrayList<>();
- CurrentUserProvider currentUser = new CurrentUserProvider();
-
- // make sure emergency affordance action is first, if needed
- if (mEmergencyAffordanceManager.needsEmergencyAffordance()) {
- addIfShouldShowAction(tempActions, new EmergencyAffordanceAction());
- addedKeys.add(GLOBAL_ACTION_KEY_EMERGENCY);
- }
-
- for (int i = 0; i < defaultActions.length; i++) {
- String actionKey = defaultActions[i];
- if (addedKeys.contains(actionKey)) {
- // If we already have added this, don't add it again.
- continue;
- }
- if (GLOBAL_ACTION_KEY_POWER.equals(actionKey)) {
- addIfShouldShowAction(tempActions, shutdownAction);
- } else if (GLOBAL_ACTION_KEY_AIRPLANE.equals(actionKey)) {
- addIfShouldShowAction(tempActions, mAirplaneModeOn);
- } else if (GLOBAL_ACTION_KEY_BUGREPORT.equals(actionKey)) {
- if (shouldDisplayBugReport(currentUser.get())) {
- addIfShouldShowAction(tempActions, new BugReportAction());
- }
- } else if (GLOBAL_ACTION_KEY_SILENT.equals(actionKey)) {
- if (mShowSilentToggle) {
- addIfShouldShowAction(tempActions, mSilentModeAction);
- }
- } else if (GLOBAL_ACTION_KEY_USERS.equals(actionKey)) {
- if (SystemProperties.getBoolean("fw.power_user_switcher", false)) {
- addUserActions(tempActions, currentUser.get());
- }
- } else if (GLOBAL_ACTION_KEY_SETTINGS.equals(actionKey)) {
- addIfShouldShowAction(tempActions, getSettingsAction());
- } else if (GLOBAL_ACTION_KEY_LOCKDOWN.equals(actionKey)) {
- if (shouldDisplayLockdown(currentUser.get())) {
- addIfShouldShowAction(tempActions, new LockDownAction());
- }
- } else if (GLOBAL_ACTION_KEY_VOICEASSIST.equals(actionKey)) {
- addIfShouldShowAction(tempActions, getVoiceAssistAction());
- } else if (GLOBAL_ACTION_KEY_ASSIST.equals(actionKey)) {
- addIfShouldShowAction(tempActions, getAssistAction());
- } else if (GLOBAL_ACTION_KEY_RESTART.equals(actionKey)) {
- addIfShouldShowAction(tempActions, restartAction);
- } else if (GLOBAL_ACTION_KEY_SCREENSHOT.equals(actionKey)) {
- addIfShouldShowAction(tempActions, new ScreenshotAction());
- } else if (GLOBAL_ACTION_KEY_LOGOUT.equals(actionKey)) {
- if (mDevicePolicyManager.isLogoutEnabled()
- && currentUser.get() != null
- && currentUser.get().id != UserHandle.USER_SYSTEM) {
- addIfShouldShowAction(tempActions, new LogoutAction());
- }
- } else if (GLOBAL_ACTION_KEY_EMERGENCY.equals(actionKey)) {
- addIfShouldShowAction(tempActions, new EmergencyDialerAction());
- } else {
- Log.e(TAG, "Invalid global action key " + actionKey);
- }
- // Add here so we don't add more than one.
- addedKeys.add(actionKey);
- }
-
- // replace power and restart with a single power options action, if needed
- if (tempActions.contains(shutdownAction) && tempActions.contains(restartAction)
- && tempActions.size() > getMaxShownPowerItems()) {
- // transfer shutdown and restart to their own list of power actions
- int powerOptionsIndex = Math.min(tempActions.indexOf(restartAction),
- tempActions.indexOf(shutdownAction));
- tempActions.remove(shutdownAction);
- tempActions.remove(restartAction);
- mPowerItems.add(shutdownAction);
- mPowerItems.add(restartAction);
-
- // add the PowerOptionsAction after Emergency, if present
- tempActions.add(powerOptionsIndex, new PowerOptionsAction());
- }
- for (Action action : tempActions) {
- addActionItem(action);
- }
- }
-
- private void onRotate() {
- // re-allocate actions between main and overflow lists
- this.createActionItems();
+ return getContext().getResources().getInteger(
+ com.android.systemui.R.integer.power_menu_max_columns);
}
/**
@@ -701,23 +335,20 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
*
* @return A new dialog.
*/
- private ActionsDialog createDialog() {
- createActionItems();
-
- mAdapter = new MyAdapter();
- mOverflowAdapter = new MyOverflowAdapter();
- mPowerAdapter = new MyPowerOptionsAdapter();
+ @Override
+ protected ActionsDialogLite createDialog() {
+ initDialogItems();
mDepthController.setShowingHomeControls(true);
ControlsUiController uiController = null;
if (mControlsComponent.getVisibility() == AVAILABLE) {
uiController = mControlsUiControllerOptional.get();
}
- ActionsDialog dialog = new ActionsDialog(mContext, mAdapter, mOverflowAdapter,
+ ActionsDialog dialog = new ActionsDialog(getContext(), mAdapter, mOverflowAdapter,
this::getWalletViewController, mDepthController, mSysuiColorExtractor,
mStatusBarService, mNotificationShadeWindowController,
controlsAvailable(), uiController,
- mSysUiState, this::onRotate, mKeyguardShowing, mPowerAdapter);
+ mSysUiState, this::onRotate, isKeyguardShowing(), mPowerAdapter);
if (shouldShowLockMessage(dialog)) {
dialog.showLockMessage();
@@ -729,59 +360,6 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
return dialog;
}
- @VisibleForTesting
- boolean shouldDisplayLockdown(UserInfo user) {
- if (user == null) {
- return false;
- }
-
- int userId = user.id;
-
- // No lockdown option if it's not turned on in Settings
- if (Settings.Secure.getIntForUser(mContentResolver,
- Settings.Secure.LOCKDOWN_IN_POWER_MENU, 0, userId) == 0) {
- return false;
- }
-
- // Lockdown is meaningless without a place to go.
- if (!mKeyguardStateController.isMethodSecure()) {
- return false;
- }
-
- // Only show the lockdown button if the device isn't locked down (for whatever reason).
- int state = mLockPatternUtils.getStrongAuthForUser(userId);
- return (state == STRONG_AUTH_NOT_REQUIRED
- || state == SOME_AUTH_REQUIRED_AFTER_USER_REQUEST);
- }
-
- @VisibleForTesting
- boolean shouldDisplayBugReport(UserInfo currentUser) {
- return Settings.Global.getInt(
- mContentResolver, Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0
- && (currentUser == null || currentUser.isPrimary());
- }
-
- @Override
- public void onUiModeChanged() {
- mContext.getTheme().applyStyle(mContext.getThemeResId(), true);
- if (mDialog != null && mDialog.isShowing()) {
- mDialog.refreshDialog();
- }
- }
-
- @Override
- public void onConfigChanged(Configuration newConfig) {
- if (mDialog != null && mDialog.isShowing()
- && (newConfig.smallestScreenWidthDp != mSmallestScreenWidthDp)) {
- mSmallestScreenWidthDp = newConfig.smallestScreenWidthDp;
- mDialog.refreshDialog();
- }
- }
-
- public void destroy() {
- mConfigurationController.removeCallback(this);
- }
-
@Nullable
private GlobalActionsPanelPlugin.PanelViewController getWalletViewController() {
if (mWalletPlugin == null) {
@@ -792,15 +370,6 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
/**
* Implements {@link GlobalActionsPanelPlugin.Callbacks#dismissGlobalActionsMenu()}, which is
- * called when the quick access wallet requests dismissal.
- */
- @Override
- public void dismissGlobalActionsMenu() {
- dismissDialog();
- }
-
- /**
- * Implements {@link GlobalActionsPanelPlugin.Callbacks#dismissGlobalActionsMenu()}, which is
* called when the quick access wallet requests that an intent be started (with lock screen
* shown first if needed).
*/
@@ -809,1364 +378,39 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
mActivityStarter.startPendingIntentDismissingKeyguard(pendingIntent);
}
- @VisibleForTesting
- protected final class PowerOptionsAction extends SinglePressAction {
- private PowerOptionsAction() {
- super(com.android.systemui.R.drawable.ic_settings_power,
- R.string.global_action_power_options);
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return true;
- }
-
- @Override
- public void onPress() {
- if (mDialog != null) {
- mDialog.showPowerOptionsMenu();
- }
- }
- }
-
- @VisibleForTesting
- final class ShutDownAction extends SinglePressAction implements LongPressAction {
- private ShutDownAction() {
- super(R.drawable.ic_lock_power_off,
- R.string.global_action_power_off);
- }
-
- @Override
- public boolean onLongPress() {
- if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
- mWindowManagerFuncs.reboot(true);
- return true;
- }
- return false;
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return true;
- }
-
- @Override
- public void onPress() {
- // shutdown by making sure radio and power are handled accordingly.
- mWindowManagerFuncs.shutdown();
- }
- }
-
- @VisibleForTesting
- protected abstract class EmergencyAction extends SinglePressAction {
- EmergencyAction(int iconResId, int messageResId) {
- super(iconResId, messageResId);
- }
-
- @Override
- public boolean shouldBeSeparated() {
- return false;
- }
-
- @Override
- public View create(
- Context context, View convertView, ViewGroup parent, LayoutInflater inflater) {
- View v = super.create(context, convertView, parent, inflater);
- int textColor;
- v.setBackgroundTintList(ColorStateList.valueOf(v.getResources().getColor(
- com.android.systemui.R.color.global_actions_emergency_background)));
- textColor = v.getResources().getColor(
- com.android.systemui.R.color.global_actions_emergency_text);
- TextView messageView = v.findViewById(R.id.message);
- messageView.setTextColor(textColor);
- messageView.setSelected(true); // necessary for marquee to work
- ImageView icon = v.findViewById(R.id.icon);
- icon.getDrawable().setTint(textColor);
- return v;
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return true;
- }
- }
-
- private class EmergencyAffordanceAction extends EmergencyAction {
- EmergencyAffordanceAction() {
- super(R.drawable.emergency_icon,
- R.string.global_action_emergency);
- }
-
- @Override
- public void onPress() {
- mEmergencyAffordanceManager.performEmergencyCall();
- }
- }
-
- @VisibleForTesting
- class EmergencyDialerAction extends EmergencyAction {
- private EmergencyDialerAction() {
- super(com.android.systemui.R.drawable.ic_emergency_star,
- R.string.global_action_emergency);
- }
-
- @Override
- public void onPress() {
- mMetricsLogger.action(MetricsEvent.ACTION_EMERGENCY_DIALER_FROM_POWER_MENU);
- mUiEventLogger.log(GlobalActionsEvent.GA_EMERGENCY_DIALER_PRESS);
- if (mTelecomManager != null) {
- Intent intent = mTelecomManager.createLaunchEmergencyDialerIntent(
- null /* number */);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
- | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.putExtra(EmergencyDialerConstants.EXTRA_ENTRY_TYPE,
- EmergencyDialerConstants.ENTRY_TYPE_POWER_MENU);
- mContext.startActivityAsUser(intent, UserHandle.CURRENT);
- }
- }
- }
-
- @VisibleForTesting
- EmergencyDialerAction makeEmergencyDialerActionForTesting() {
- return new EmergencyDialerAction();
- }
-
- @VisibleForTesting
- final class RestartAction extends SinglePressAction implements LongPressAction {
- private RestartAction() {
- super(R.drawable.ic_restart, R.string.global_action_restart);
- }
-
- @Override
- public boolean onLongPress() {
- if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
- mWindowManagerFuncs.reboot(true);
- return true;
- }
- return false;
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return true;
- }
-
- @Override
- public void onPress() {
- mWindowManagerFuncs.reboot(false);
- }
- }
-
- @VisibleForTesting
- class ScreenshotAction extends SinglePressAction {
- final String KEY_SYSTEM_NAV_2BUTTONS = "system_nav_2buttons";
-
- public ScreenshotAction() {
- super(R.drawable.ic_screenshot, R.string.global_action_screenshot);
- }
-
- @Override
- public void onPress() {
- // Add a little delay before executing, to give the
- // dialog a chance to go away before it takes a
- // screenshot.
- // TODO: instead, omit global action dialog layer
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN, true, true,
- SCREENSHOT_GLOBAL_ACTIONS, mHandler, null);
- mMetricsLogger.action(MetricsEvent.ACTION_SCREENSHOT_POWER_MENU);
- mUiEventLogger.log(GlobalActionsEvent.GA_SCREENSHOT_PRESS);
- }
- }, mDialogPressDelay);
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return false;
- }
-
- @Override
- public boolean shouldShow() {
- // Include screenshot in power menu for legacy nav because it is not accessible
- // through Recents in that mode
- return is2ButtonNavigationEnabled();
- }
-
- boolean is2ButtonNavigationEnabled() {
- return NAV_BAR_MODE_2BUTTON == mContext.getResources().getInteger(
- com.android.internal.R.integer.config_navBarInteractionMode);
- }
- }
-
- @VisibleForTesting
- ScreenshotAction makeScreenshotActionForTesting() {
- return new ScreenshotAction();
- }
-
- @VisibleForTesting
- class BugReportAction extends SinglePressAction implements LongPressAction {
-
- public BugReportAction() {
- super(R.drawable.ic_lock_bugreport, R.string.bugreport_title);
- }
-
- @Override
- public void onPress() {
- // don't actually trigger the bugreport if we are running stability
- // tests via monkey
- if (ActivityManager.isUserAMonkey()) {
- return;
- }
- // Add a little delay before executing, to give the
- // dialog a chance to go away before it takes a
- // screenshot.
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- try {
- // Take an "interactive" bugreport.
- mMetricsLogger.action(
- MetricsEvent.ACTION_BUGREPORT_FROM_POWER_MENU_INTERACTIVE);
- mUiEventLogger.log(GlobalActionsEvent.GA_BUGREPORT_PRESS);
- if (!mIActivityManager.launchBugReportHandlerApp()) {
- Log.w(TAG, "Bugreport handler could not be launched");
- mIActivityManager.requestInteractiveBugReport();
- }
- } catch (RemoteException e) {
- }
- }
- }, mDialogPressDelay);
- }
-
- @Override
- public boolean onLongPress() {
- // don't actually trigger the bugreport if we are running stability
- // tests via monkey
- if (ActivityManager.isUserAMonkey()) {
- return false;
- }
- try {
- // Take a "full" bugreport.
- mMetricsLogger.action(MetricsEvent.ACTION_BUGREPORT_FROM_POWER_MENU_FULL);
- mUiEventLogger.log(GlobalActionsEvent.GA_BUGREPORT_LONG_PRESS);
- mIActivityManager.requestFullBugReport();
- } catch (RemoteException e) {
- }
- return false;
- }
-
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return false;
- }
- }
-
- @VisibleForTesting
- BugReportAction makeBugReportActionForTesting() {
- return new BugReportAction();
- }
-
- private final class LogoutAction extends SinglePressAction {
- private LogoutAction() {
- super(R.drawable.ic_logout, R.string.global_action_logout);
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return false;
- }
-
- @Override
- public void onPress() {
- // Add a little delay before executing, to give the dialog a chance to go away before
- // switching user
- mHandler.postDelayed(() -> {
- try {
- int currentUserId = getCurrentUser().id;
- mIActivityManager.switchUser(UserHandle.USER_SYSTEM);
- mIActivityManager.stopUser(currentUserId, true /*force*/, null);
- } catch (RemoteException re) {
- Log.e(TAG, "Couldn't logout user " + re);
- }
- }, mDialogPressDelay);
- }
- }
-
- private Action getSettingsAction() {
- return new SinglePressAction(R.drawable.ic_settings,
- R.string.global_action_settings) {
-
- @Override
- public void onPress() {
- Intent intent = new Intent(Settings.ACTION_SETTINGS);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mContext.startActivity(intent);
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return true;
- }
- };
- }
-
- private Action getAssistAction() {
- return new SinglePressAction(R.drawable.ic_action_assist_focused,
- R.string.global_action_assist) {
- @Override
- public void onPress() {
- Intent intent = new Intent(Intent.ACTION_ASSIST);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mContext.startActivity(intent);
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return true;
- }
- };
- }
-
- private Action getVoiceAssistAction() {
- return new SinglePressAction(R.drawable.ic_voice_search,
- R.string.global_action_voice_assist) {
- @Override
- public void onPress() {
- Intent intent = new Intent(Intent.ACTION_VOICE_ASSIST);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mContext.startActivity(intent);
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return true;
- }
- };
- }
-
- @VisibleForTesting
- class LockDownAction extends SinglePressAction {
- LockDownAction() {
- super(R.drawable.ic_lock_lockdown, R.string.global_action_lockdown);
- }
-
- @Override
- public void onPress() {
- mLockPatternUtils.requireStrongAuth(STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN,
- UserHandle.USER_ALL);
- try {
- mIWindowManager.lockNow(null);
- // Lock profiles (if any) on the background thread.
- mBackgroundExecutor.execute(() -> lockProfiles());
- } catch (RemoteException e) {
- Log.e(TAG, "Error while trying to lock device.", e);
- }
- }
-
- @Override
- public boolean showDuringKeyguard() {
- return true;
- }
-
- @Override
- public boolean showBeforeProvisioning() {
- return false;
- }
- }
-
- private void lockProfiles() {
- final int currentUserId = getCurrentUser().id;
- final int[] profileIds = mUserManager.getEnabledProfileIds(currentUserId);
- for (final int id : profileIds) {
- if (id != currentUserId) {
- mTrustManager.setDeviceLockedForUser(id, true);
- }
- }
- }
-
- private UserInfo getCurrentUser() {
- try {
- return mIActivityManager.getCurrentUser();
- } catch (RemoteException re) {
- return null;
- }
- }
-
- /**
- * Non-thread-safe current user provider that caches the result - helpful when a method needs
- * to fetch it an indeterminate number of times.
- */
- private class CurrentUserProvider {
- private UserInfo mUserInfo = null;
- private boolean mFetched = false;
-
- @Nullable
- UserInfo get() {
- if (!mFetched) {
- mFetched = true;
- mUserInfo = getCurrentUser();
- }
- return mUserInfo;
- }
- }
-
- private void addUserActions(List<Action> actions, UserInfo currentUser) {
- if (mUserManager.isUserSwitcherEnabled()) {
- List<UserInfo> users = mUserManager.getUsers();
- for (final UserInfo user : users) {
- if (user.supportsSwitchToByUser()) {
- boolean isCurrentUser = currentUser == null
- ? user.id == 0 : (currentUser.id == user.id);
- Drawable icon = user.iconPath != null ? Drawable.createFromPath(user.iconPath)
- : null;
- SinglePressAction switchToUser = new SinglePressAction(
- R.drawable.ic_menu_cc, icon,
- (user.name != null ? user.name : "Primary")
- + (isCurrentUser ? " \u2714" : "")) {
- public void onPress() {
- try {
- mIActivityManager.switchUser(user.id);
- } catch (RemoteException re) {
- Log.e(TAG, "Couldn't switch user " + re);
- }
- }
-
- public boolean showDuringKeyguard() {
- return true;
- }
-
- public boolean showBeforeProvisioning() {
- return false;
- }
- };
- addIfShouldShowAction(actions, switchToUser);
- }
- }
- }
- }
-
- private void prepareDialog() {
- refreshSilentMode();
- mAirplaneModeOn.updateState(mAirplaneState);
- mAdapter.notifyDataSetChanged();
- mLifecycle.setCurrentState(Lifecycle.State.RESUMED);
- }
-
- private void refreshSilentMode() {
- if (!mHasVibrator) {
- Integer value = mRingerModeTracker.getRingerMode().getValue();
- final boolean silentModeOn = value != null && value != AudioManager.RINGER_MODE_NORMAL;
- ((ToggleAction) mSilentModeAction).updateState(
- silentModeOn ? ToggleState.On : ToggleState.Off);
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public void onDismiss(DialogInterface dialog) {
- if (mDialog == dialog) {
- mDialog = null;
- }
- mUiEventLogger.log(GlobalActionsEvent.GA_POWER_MENU_CLOSE);
- mWindowManagerFuncs.onGlobalActionsHidden();
- mLifecycle.setCurrentState(Lifecycle.State.CREATED);
- }
-
- /**
- * {@inheritDoc}
- */
- public void onShow(DialogInterface dialog) {
- mMetricsLogger.visible(MetricsEvent.POWER_MENU);
- mUiEventLogger.log(GlobalActionsEvent.GA_POWER_MENU_OPEN);
- }
-
- /**
- * The adapter used for power menu items shown in the global actions dialog.
- */
- public class MyAdapter extends MultiListAdapter {
- private int countItems(boolean separated) {
- int count = 0;
- for (int i = 0; i < mItems.size(); i++) {
- final Action action = mItems.get(i);
-
- if (action.shouldBeSeparated() == separated) {
- count++;
- }
- }
- return count;
- }
-
- @Override
- public int countSeparatedItems() {
- return countItems(true);
- }
-
- @Override
- public int countListItems() {
- return countItems(false);
- }
-
- @Override
- public int getCount() {
- return countSeparatedItems() + countListItems();
- }
-
- @Override
- public boolean isEnabled(int position) {
- return getItem(position).isEnabled();
- }
-
- @Override
- public boolean areAllItemsEnabled() {
- return false;
- }
-
- @Override
- public Action getItem(int position) {
- int filteredPos = 0;
- for (int i = 0; i < mItems.size(); i++) {
- final Action action = mItems.get(i);
- if (!shouldShowAction(action)) {
- continue;
- }
- if (filteredPos == position) {
- return action;
- }
- filteredPos++;
- }
-
- throw new IllegalArgumentException("position " + position
- + " out of range of showable actions"
- + ", filtered count=" + getCount()
- + ", keyguardshowing=" + mKeyguardShowing
- + ", provisioned=" + mDeviceProvisioned);
- }
-
-
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- Action action = getItem(position);
- View view = action.create(mContext, convertView, parent, LayoutInflater.from(mContext));
- view.setOnClickListener(v -> onClickItem(position));
- if (action instanceof LongPressAction) {
- view.setOnLongClickListener(v -> onLongClickItem(position));
- }
- return view;
- }
-
- @Override
- public boolean onLongClickItem(int position) {
- final Action action = mAdapter.getItem(position);
- if (action instanceof LongPressAction) {
- if (mDialog != null) {
- mDialog.dismiss();
- } else {
- Log.w(TAG, "Action long-clicked while mDialog is null.");
- }
- return ((LongPressAction) action).onLongPress();
- }
- return false;
- }
-
- @Override
- public void onClickItem(int position) {
- Action item = mAdapter.getItem(position);
- if (!(item instanceof SilentModeTriStateAction)) {
- if (mDialog != null) {
- // don't dismiss the dialog if we're opening the power options menu
- if (!(item instanceof PowerOptionsAction)) {
- mDialog.dismiss();
- }
- } else {
- Log.w(TAG, "Action clicked while mDialog is null.");
- }
- item.onPress();
- }
- }
-
- @Override
- public boolean shouldBeSeparated(int position) {
- return getItem(position).shouldBeSeparated();
- }
- }
-
- /**
- * The adapter used for items in the overflow menu.
- */
- public class MyPowerOptionsAdapter extends BaseAdapter {
- @Override
- public int getCount() {
- return mPowerItems.size();
- }
-
- @Override
- public Action getItem(int position) {
- return mPowerItems.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- Action action = getItem(position);
- if (action == null) {
- Log.w(TAG, "No power options action found at position: " + position);
- return null;
- }
- int viewLayoutResource = com.android.systemui.R.layout.global_actions_power_item;
- View view = convertView != null ? convertView
- : LayoutInflater.from(mContext).inflate(viewLayoutResource, parent, false);
- view.setOnClickListener(v -> onClickItem(position));
- if (action instanceof LongPressAction) {
- view.setOnLongClickListener(v -> onLongClickItem(position));
- }
- ImageView icon = view.findViewById(R.id.icon);
- TextView messageView = view.findViewById(R.id.message);
- messageView.setSelected(true); // necessary for marquee to work
-
- icon.setImageDrawable(action.getIcon(mContext));
- icon.setScaleType(ScaleType.CENTER_CROP);
-
- if (action.getMessage() != null) {
- messageView.setText(action.getMessage());
- } else {
- messageView.setText(action.getMessageResId());
- }
- return view;
- }
-
- private boolean onLongClickItem(int position) {
- final Action action = getItem(position);
- if (action instanceof LongPressAction) {
- if (mDialog != null) {
- mDialog.dismiss();
- } else {
- Log.w(TAG, "Action long-clicked while mDialog is null.");
- }
- return ((LongPressAction) action).onLongPress();
- }
- return false;
- }
-
- private void onClickItem(int position) {
- Action item = getItem(position);
- if (!(item instanceof SilentModeTriStateAction)) {
- if (mDialog != null) {
- mDialog.dismiss();
- } else {
- Log.w(TAG, "Action clicked while mDialog is null.");
- }
- item.onPress();
- }
- }
- }
-
- /**
- * The adapter used for items in the power options menu, triggered by the PowerOptionsAction.
- */
- public class MyOverflowAdapter extends BaseAdapter {
- @Override
- public int getCount() {
- return mOverflowItems.size();
- }
-
- @Override
- public Action getItem(int position) {
- return mOverflowItems.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- Action action = getItem(position);
- if (action == null) {
- Log.w(TAG, "No overflow action found at position: " + position);
- return null;
- }
- int viewLayoutResource = com.android.systemui.R.layout.controls_more_item;
- View view = convertView != null ? convertView
- : LayoutInflater.from(mContext).inflate(viewLayoutResource, parent, false);
- TextView textView = (TextView) view;
- if (action.getMessageResId() != 0) {
- textView.setText(action.getMessageResId());
- } else {
- textView.setText(action.getMessage());
- }
- return textView;
- }
-
- private boolean onLongClickItem(int position) {
- final Action action = getItem(position);
- if (action instanceof LongPressAction) {
- if (mDialog != null) {
- mDialog.dismiss();
- } else {
- Log.w(TAG, "Action long-clicked while mDialog is null.");
- }
- return ((LongPressAction) action).onLongPress();
- }
- return false;
- }
-
- private void onClickItem(int position) {
- Action item = getItem(position);
- if (!(item instanceof SilentModeTriStateAction)) {
- if (mDialog != null) {
- mDialog.dismiss();
- } else {
- Log.w(TAG, "Action clicked while mDialog is null.");
- }
- item.onPress();
- }
- }
- }
-
- // note: the scheme below made more sense when we were planning on having
- // 8 different things in the global actions dialog. seems overkill with
- // only 3 items now, but may as well keep this flexible approach so it will
- // be easy should someone decide at the last minute to include something
- // else, such as 'enable wifi', or 'enable bluetooth'
-
- /**
- * What each item in the global actions dialog must be able to support.
- */
- public interface Action {
- /**
- * @return Text that will be announced when dialog is created. null for none.
- */
- CharSequence getLabelForAccessibility(Context context);
-
- View create(Context context, View convertView, ViewGroup parent, LayoutInflater inflater);
-
- void onPress();
-
- /**
- * @return whether this action should appear in the dialog when the keygaurd is showing.
- */
- boolean showDuringKeyguard();
-
- /**
- * @return whether this action should appear in the dialog before the
- * device is provisioned.f
- */
- boolean showBeforeProvisioning();
-
- boolean isEnabled();
-
- default boolean shouldBeSeparated() {
- return false;
- }
-
- /**
- * Return the id of the message associated with this action, or 0 if it doesn't have one.
- * @return
- */
- int getMessageResId();
-
- /**
- * Return the icon drawable for this action.
- */
- Drawable getIcon(Context context);
-
- /**
- * Return the message associated with this action, or null if it doesn't have one.
- * @return
- */
- CharSequence getMessage();
-
- default boolean shouldShow() {
- return true;
- }
- }
-
- /**
- * An action that also supports long press.
- */
- private interface LongPressAction extends Action {
- boolean onLongPress();
- }
-
- /**
- * A single press action maintains no state, just responds to a press and takes an action.
- */
-
- private abstract class SinglePressAction implements Action {
- private final int mIconResId;
- private final Drawable mIcon;
- private final int mMessageResId;
- private final CharSequence mMessage;
-
- protected SinglePressAction(int iconResId, int messageResId) {
- mIconResId = iconResId;
- mMessageResId = messageResId;
- mMessage = null;
- mIcon = null;
- }
-
- protected SinglePressAction(int iconResId, Drawable icon, CharSequence message) {
- mIconResId = iconResId;
- mMessageResId = 0;
- mMessage = message;
- mIcon = icon;
- }
-
- public boolean isEnabled() {
- return true;
- }
-
- public String getStatus() {
- return null;
- }
-
- abstract public void onPress();
-
- public CharSequence getLabelForAccessibility(Context context) {
- if (mMessage != null) {
- return mMessage;
- } else {
- return context.getString(mMessageResId);
- }
- }
-
- public int getMessageResId() {
- return mMessageResId;
- }
-
- public CharSequence getMessage() {
- return mMessage;
- }
-
- @Override
- public Drawable getIcon(Context context) {
- if (mIcon != null) {
- return mIcon;
- } else {
- return context.getDrawable(mIconResId);
- }
- }
-
- public View create(
- Context context, View convertView, ViewGroup parent, LayoutInflater inflater) {
- View v = inflater.inflate(com.android.systemui.R.layout.global_actions_grid_item_v2,
- parent, false /* attach */);
-
- ImageView icon = v.findViewById(R.id.icon);
- TextView messageView = v.findViewById(R.id.message);
- messageView.setSelected(true); // necessary for marquee to work
-
- icon.setImageDrawable(getIcon(context));
- icon.setScaleType(ScaleType.CENTER_CROP);
-
- if (mMessage != null) {
- messageView.setText(mMessage);
- } else {
- messageView.setText(mMessageResId);
- }
-
- return v;
- }
- }
-
- private enum ToggleState {
- Off(false),
- TurningOn(true),
- TurningOff(true),
- On(false);
-
- private final boolean mInTransition;
-
- ToggleState(boolean intermediate) {
- mInTransition = intermediate;
- }
-
- public boolean inTransition() {
- return mInTransition;
- }
- }
-
- /**
- * A toggle action knows whether it is on or off, and displays an icon and status message
- * accordingly.
- */
- private abstract class ToggleAction implements Action {
-
- protected ToggleState mState = ToggleState.Off;
-
- // prefs
- protected int mEnabledIconResId;
- protected int mDisabledIconResid;
- protected int mMessageResId;
- protected int mEnabledStatusMessageResId;
- protected int mDisabledStatusMessageResId;
-
- /**
- * @param enabledIconResId The icon for when this action is on.
- * @param disabledIconResid The icon for when this action is off.
- * @param message The general information message, e.g 'Silent Mode'
- * @param enabledStatusMessageResId The on status message, e.g 'sound disabled'
- * @param disabledStatusMessageResId The off status message, e.g. 'sound enabled'
- */
- public ToggleAction(int enabledIconResId,
- int disabledIconResid,
- int message,
- int enabledStatusMessageResId,
- int disabledStatusMessageResId) {
- mEnabledIconResId = enabledIconResId;
- mDisabledIconResid = disabledIconResid;
- mMessageResId = message;
- mEnabledStatusMessageResId = enabledStatusMessageResId;
- mDisabledStatusMessageResId = disabledStatusMessageResId;
- }
-
- /**
- * Override to make changes to resource IDs just before creating the View.
- */
- void willCreate() {
-
- }
-
- @Override
- public CharSequence getLabelForAccessibility(Context context) {
- return context.getString(mMessageResId);
- }
-
- private boolean isOn() {
- return mState == ToggleState.On || mState == ToggleState.TurningOn;
- }
-
- @Override
- public CharSequence getMessage() {
- return null;
- }
- @Override
- public int getMessageResId() {
- return isOn() ? mEnabledStatusMessageResId : mDisabledStatusMessageResId;
- }
-
- private int getIconResId() {
- return isOn() ? mEnabledIconResId : mDisabledIconResid;
- }
-
- @Override
- public Drawable getIcon(Context context) {
- return context.getDrawable(getIconResId());
- }
-
- public View create(Context context, View convertView, ViewGroup parent,
- LayoutInflater inflater) {
- willCreate();
-
- View v = inflater.inflate(com.android.systemui.R.layout.global_actions_grid_item_v2,
- parent, false /* attach */);
-
- ImageView icon = (ImageView) v.findViewById(R.id.icon);
- TextView messageView = (TextView) v.findViewById(R.id.message);
- final boolean enabled = isEnabled();
-
- if (messageView != null) {
- messageView.setText(getMessageResId());
- messageView.setEnabled(enabled);
- messageView.setSelected(true); // necessary for marquee to work
- }
-
- if (icon != null) {
- icon.setImageDrawable(context.getDrawable(getIconResId()));
- icon.setEnabled(enabled);
- }
-
- v.setEnabled(enabled);
-
- return v;
- }
-
- public final void onPress() {
- if (mState.inTransition()) {
- Log.w(TAG, "shouldn't be able to toggle when in transition");
- return;
- }
-
- final boolean nowOn = !(mState == ToggleState.On);
- onToggle(nowOn);
- changeStateFromPress(nowOn);
- }
-
- public boolean isEnabled() {
- return !mState.inTransition();
- }
-
- /**
- * Implementations may override this if their state can be in on of the intermediate states
- * until some notification is received (e.g airplane mode is 'turning off' until we know the
- * wireless connections are back online
- *
- * @param buttonOn Whether the button was turned on or off
- */
- protected void changeStateFromPress(boolean buttonOn) {
- mState = buttonOn ? ToggleState.On : ToggleState.Off;
- }
-
- abstract void onToggle(boolean on);
-
- public void updateState(ToggleState state) {
- mState = state;
- }
- }
-
- private class AirplaneModeAction extends ToggleAction {
- AirplaneModeAction() {
- super(
- R.drawable.ic_lock_airplane_mode,
- R.drawable.ic_lock_airplane_mode_off,
- R.string.global_actions_toggle_airplane_mode,
- R.string.global_actions_airplane_mode_on_status,
- R.string.global_actions_airplane_mode_off_status);
- }
-
- void onToggle(boolean on) {
- if (mHasTelephony && TelephonyProperties.in_ecm_mode().orElse(false)) {
- mIsWaitingForEcmExit = true;
- // Launch ECM exit dialog
- Intent ecmDialogIntent =
- new Intent(TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null);
- ecmDialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- mContext.startActivity(ecmDialogIntent);
- } else {
- changeAirplaneModeSystemSetting(on);
- }
- }
-
- @Override
- protected void changeStateFromPress(boolean buttonOn) {
- if (!mHasTelephony) return;
-
- // In ECM mode airplane state cannot be changed
- if (!TelephonyProperties.in_ecm_mode().orElse(false)) {
- mState = buttonOn ? ToggleState.TurningOn : ToggleState.TurningOff;
- mAirplaneState = mState;
- }
- }
-
- public boolean showDuringKeyguard() {
- return true;
- }
-
- public boolean showBeforeProvisioning() {
- return false;
- }
- }
-
- private class SilentModeToggleAction extends ToggleAction {
- public SilentModeToggleAction() {
- super(R.drawable.ic_audio_vol_mute,
- R.drawable.ic_audio_vol,
- R.string.global_action_toggle_silent_mode,
- R.string.global_action_silent_mode_on_status,
- R.string.global_action_silent_mode_off_status);
- }
-
- void onToggle(boolean on) {
- if (on) {
- mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
- } else {
- mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
- }
- }
-
- public boolean showDuringKeyguard() {
- return true;
- }
-
- public boolean showBeforeProvisioning() {
- return false;
- }
- }
-
- private static class SilentModeTriStateAction implements Action, View.OnClickListener {
-
- private final int[] ITEM_IDS = {R.id.option1, R.id.option2, R.id.option3};
-
- private final AudioManager mAudioManager;
- private final Handler mHandler;
-
- SilentModeTriStateAction(AudioManager audioManager, Handler handler) {
- mAudioManager = audioManager;
- mHandler = handler;
- }
-
- private int ringerModeToIndex(int ringerMode) {
- // They just happen to coincide
- return ringerMode;
- }
-
- private int indexToRingerMode(int index) {
- // They just happen to coincide
- return index;
- }
-
- @Override
- public CharSequence getLabelForAccessibility(Context context) {
- return null;
- }
-
- @Override
- public int getMessageResId() {
- return 0;
- }
-
- @Override
- public CharSequence getMessage() {
- return null;
- }
-
- @Override
- public Drawable getIcon(Context context) {
- return null;
- }
-
-
- public View create(Context context, View convertView, ViewGroup parent,
- LayoutInflater inflater) {
- View v = inflater.inflate(R.layout.global_actions_silent_mode, parent, false);
-
- int selectedIndex = ringerModeToIndex(mAudioManager.getRingerMode());
- for (int i = 0; i < 3; i++) {
- View itemView = v.findViewById(ITEM_IDS[i]);
- itemView.setSelected(selectedIndex == i);
- // Set up click handler
- itemView.setTag(i);
- itemView.setOnClickListener(this);
- }
- return v;
- }
-
- public void onPress() {
- }
-
- public boolean showDuringKeyguard() {
- return true;
- }
-
- public boolean showBeforeProvisioning() {
- return false;
- }
-
- public boolean isEnabled() {
- return true;
- }
-
- void willCreate() {
- }
-
- public void onClick(View v) {
- if (!(v.getTag() instanceof Integer)) return;
-
- int index = (Integer) v.getTag();
- mAudioManager.setRingerMode(indexToRingerMode(index));
- mHandler.sendEmptyMessageDelayed(MESSAGE_DISMISS, DIALOG_DISMISS_DELAY);
- }
- }
-
- private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)
- || Intent.ACTION_SCREEN_OFF.equals(action)) {
- String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
- if (!SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS.equals(reason)) {
- mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_DISMISS, reason));
- }
- } else if (TelephonyManager.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED.equals(action)) {
- // Airplane mode can be changed after ECM exits if airplane toggle button
- // is pressed during ECM mode
- if (!(intent.getBooleanExtra(TelephonyManager.EXTRA_PHONE_IN_ECM_STATE, false))
- && mIsWaitingForEcmExit) {
- mIsWaitingForEcmExit = false;
- changeAirplaneModeSystemSetting(true);
- }
- }
- }
- };
-
- private final TelephonyCallback.ServiceStateListener mPhoneStateListener =
- new TelephonyCallback.ServiceStateListener() {
- @Override
- public void onServiceStateChanged(ServiceState serviceState) {
- if (!mHasTelephony) return;
- final boolean inAirplaneMode = serviceState.getState() == ServiceState.STATE_POWER_OFF;
- mAirplaneState = inAirplaneMode ? ToggleState.On : ToggleState.Off;
- mAirplaneModeOn.updateState(mAirplaneState);
- mAdapter.notifyDataSetChanged();
- mOverflowAdapter.notifyDataSetChanged();
- mPowerAdapter.notifyDataSetChanged();
- }
- };
-
- private ContentObserver mAirplaneModeObserver = new ContentObserver(mMainHandler) {
- @Override
- public void onChange(boolean selfChange) {
- onAirplaneModeChanged();
- }
- };
-
- private static final int MESSAGE_DISMISS = 0;
- private static final int MESSAGE_REFRESH = 1;
- private static final int DIALOG_DISMISS_DELAY = 300; // ms
- private static final int DIALOG_PRESS_DELAY = 850; // ms
-
- @VisibleForTesting void setZeroDialogPressDelayForTesting() {
- mDialogPressDelay = 0; // ms
+ @Override
+ protected int getEmergencyTextColor(Context context) {
+ return context.getResources().getColor(
+ com.android.systemui.R.color.global_actions_emergency_text);
}
- private Handler mHandler = new Handler() {
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MESSAGE_DISMISS:
- if (mDialog != null) {
- if (SYSTEM_DIALOG_REASON_DREAM.equals(msg.obj)) {
- mDialog.completeDismiss();
- } else {
- mDialog.dismiss();
- }
- mDialog = null;
- }
- break;
- case MESSAGE_REFRESH:
- refreshSilentMode();
- mAdapter.notifyDataSetChanged();
- break;
- }
- }
- };
-
- private void onAirplaneModeChanged() {
- // Let the service state callbacks handle the state.
- if (mHasTelephony) return;
-
- boolean airplaneModeOn = Settings.Global.getInt(
- mContentResolver,
- Settings.Global.AIRPLANE_MODE_ON,
- 0) == 1;
- mAirplaneState = airplaneModeOn ? ToggleState.On : ToggleState.Off;
- mAirplaneModeOn.updateState(mAirplaneState);
+ @Override
+ protected int getEmergencyIconColor(Context context) {
+ return getContext().getResources().getColor(
+ com.android.systemui.R.color.global_actions_emergency_text);
}
- /**
- * Change the airplane mode system setting
- */
- private void changeAirplaneModeSystemSetting(boolean on) {
- Settings.Global.putInt(
- mContentResolver,
- Settings.Global.AIRPLANE_MODE_ON,
- on ? 1 : 0);
- Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
- intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
- intent.putExtra("state", on);
- mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
- if (!mHasTelephony) {
- mAirplaneState = on ? ToggleState.On : ToggleState.Off;
- }
+ @Override
+ protected int getEmergencyBackgroundColor(Context context) {
+ return getContext().getResources().getColor(
+ com.android.systemui.R.color.global_actions_emergency_background);
}
- @NonNull
@Override
- public Lifecycle getLifecycle() {
- return mLifecycle;
+ protected int getGridItemLayoutResource() {
+ return com.android.systemui.R.layout.global_actions_grid_item_v2;
}
@VisibleForTesting
- static final class ActionsDialog extends Dialog implements DialogInterface,
- ColorExtractor.OnColorsChangedListener {
-
- private final Context mContext;
- private final MyAdapter mAdapter;
- private final MyOverflowAdapter mOverflowAdapter;
- private final MyPowerOptionsAdapter mPowerOptionsAdapter;
- private final IStatusBarService mStatusBarService;
- private final IBinder mToken = new Binder();
- private MultiListLayout mGlobalActionsLayout;
- private Drawable mBackgroundDrawable;
- private final SysuiColorExtractor mColorExtractor;
+ static class ActionsDialog extends ActionsDialogLite {
+
private final Provider<GlobalActionsPanelPlugin.PanelViewController> mWalletFactory;
@Nullable private GlobalActionsPanelPlugin.PanelViewController mWalletViewController;
- private boolean mKeyguardShowing;
- private boolean mShowing;
- private float mScrimAlpha;
private ResetOrientationData mResetOrientationData;
- private final NotificationShadeWindowController mNotificationShadeWindowController;
- private final NotificationShadeDepthController mDepthController;
- private final SysUiState mSysUiState;
- private ListPopupWindow mOverflowPopup;
- private Dialog mPowerOptionsDialog;
- private final Runnable mOnRotateCallback;
private final boolean mControlsAvailable;
private ControlsUiController mControlsUiController;
private ViewGroup mControlsView;
- private ViewGroup mContainer;
@VisibleForTesting ViewGroup mLockMessageContainer;
private TextView mLockMessage;
@@ -2178,27 +422,16 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
boolean controlsAvailable, @Nullable ControlsUiController controlsUiController,
SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing,
MyPowerOptionsAdapter powerAdapter) {
- super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions);
- mContext = context;
- mAdapter = adapter;
- mOverflowAdapter = overflowAdapter;
- mPowerOptionsAdapter = powerAdapter;
- mDepthController = depthController;
- mColorExtractor = sysuiColorExtractor;
- mStatusBarService = statusBarService;
- mNotificationShadeWindowController = notificationShadeWindowController;
+ super(context, com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions,
+ adapter, overflowAdapter, depthController, sysuiColorExtractor,
+ statusBarService, notificationShadeWindowController, sysuiState,
+ onRotateCallback, keyguardShowing, powerAdapter);
mControlsAvailable = controlsAvailable;
mControlsUiController = controlsUiController;
- mSysUiState = sysuiState;
- mOnRotateCallback = onRotateCallback;
- mKeyguardShowing = keyguardShowing;
mWalletFactory = walletFactory;
- // Window initialization
+ // Update window attributes
Window window = getWindow();
- window.requestFeature(Window.FEATURE_NO_TITLE);
- // Inflate the decor view, so the attributes below are not overwritten by the theme.
- window.getDecorView();
window.getAttributes().systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
@@ -2211,10 +444,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
- window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY);
- window.getAttributes().setFitInsetsTypes(0 /* types */);
setTitle(R.string.global_actions);
-
initializeLayout();
}
@@ -2233,6 +463,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
private void initializeWalletView() {
+ if (mWalletFactory == null) {
+ return;
+ }
mWalletViewController = mWalletFactory.get();
if (!isWalletViewAvailable()) {
return;
@@ -2313,132 +546,24 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
}
- private ListPopupWindow createPowerOverflowPopup() {
- GlobalActionsPopupMenu popup = new GlobalActionsPopupMenu(
- new ContextThemeWrapper(
- mContext,
- com.android.systemui.R.style.Control_ListPopupWindow
- ), false /* isDropDownMode */);
- popup.setOnItemClickListener(
- (parent, view, position, id) -> mOverflowAdapter.onClickItem(position));
- popup.setOnItemLongClickListener(
- (parent, view, position, id) -> mOverflowAdapter.onLongClickItem(position));
- View overflowButton =
- findViewById(com.android.systemui.R.id.global_actions_overflow_button);
- popup.setAnchorView(overflowButton);
- popup.setAdapter(mOverflowAdapter);
- return popup;
- }
-
- public void showPowerOptionsMenu() {
- mPowerOptionsDialog = GlobalActionsPowerDialog.create(mContext, mPowerOptionsAdapter);
- mPowerOptionsDialog.show();
- }
-
- private void showPowerOverflowMenu() {
- mOverflowPopup = createPowerOverflowPopup();
- mOverflowPopup.show();
+ @Override
+ protected int getLayoutResource() {
+ return com.android.systemui.R.layout.global_actions_grid_v2;
}
- private void initializeLayout() {
- setContentView(com.android.systemui.R.layout.global_actions_grid_v2);
- fixNavBarClipping();
+ @Override
+ protected void initializeLayout() {
+ super.initializeLayout();
mControlsView = findViewById(com.android.systemui.R.id.global_actions_controls);
- mGlobalActionsLayout = findViewById(com.android.systemui.R.id.global_actions_view);
- mGlobalActionsLayout.setListViewAccessibilityDelegate(new View.AccessibilityDelegate() {
- @Override
- public boolean dispatchPopulateAccessibilityEvent(
- View host, AccessibilityEvent event) {
- // Populate the title here, just as Activity does
- event.getText().add(mContext.getString(R.string.global_actions));
- return true;
- }
- });
- mGlobalActionsLayout.setRotationListener(this::onRotate);
- mGlobalActionsLayout.setAdapter(mAdapter);
- mContainer = findViewById(com.android.systemui.R.id.global_actions_container);
mLockMessageContainer = requireViewById(
com.android.systemui.R.id.global_actions_lock_message_container);
mLockMessage = requireViewById(com.android.systemui.R.id.global_actions_lock_message);
-
- View overflowButton = findViewById(
- com.android.systemui.R.id.global_actions_overflow_button);
- if (overflowButton != null) {
- if (mOverflowAdapter.getCount() > 0) {
- overflowButton.setOnClickListener((view) -> showPowerOverflowMenu());
- LinearLayout.LayoutParams params =
- (LinearLayout.LayoutParams) mGlobalActionsLayout.getLayoutParams();
- params.setMarginEnd(0);
- mGlobalActionsLayout.setLayoutParams(params);
- } else {
- overflowButton.setVisibility(View.GONE);
- LinearLayout.LayoutParams params =
- (LinearLayout.LayoutParams) mGlobalActionsLayout.getLayoutParams();
- params.setMarginEnd(mContext.getResources().getDimensionPixelSize(
- com.android.systemui.R.dimen.global_actions_side_margin));
- mGlobalActionsLayout.setLayoutParams(params);
- }
- }
-
initializeWalletView();
- if (mBackgroundDrawable == null) {
- mBackgroundDrawable = new ScrimDrawable();
- mScrimAlpha = 1.0f;
- }
getWindow().setBackgroundDrawable(mBackgroundDrawable);
}
- private void fixNavBarClipping() {
- ViewGroup content = findViewById(android.R.id.content);
- content.setClipChildren(false);
- content.setClipToPadding(false);
- ViewGroup contentParent = (ViewGroup) content.getParent();
- contentParent.setClipChildren(false);
- contentParent.setClipToPadding(false);
- }
-
- @Override
- protected void onStart() {
- super.setCanceledOnTouchOutside(true);
- super.onStart();
- mGlobalActionsLayout.updateList();
-
- if (mBackgroundDrawable instanceof ScrimDrawable) {
- mColorExtractor.addOnColorsChangedListener(this);
- GradientColors colors = mColorExtractor.getNeutralColors();
- updateColors(colors, false /* animate */);
- }
- }
-
- /**
- * Updates background and system bars according to current GradientColors.
- *
- * @param colors Colors and hints to use.
- * @param animate Interpolates gradient if true, just sets otherwise.
- */
- private void updateColors(GradientColors colors, boolean animate) {
- if (!(mBackgroundDrawable instanceof ScrimDrawable)) {
- return;
- }
- ((ScrimDrawable) mBackgroundDrawable).setColor(Color.BLACK, animate);
- View decorView = getWindow().getDecorView();
- if (colors.supportsDarkText()) {
- decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR |
- View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
- } else {
- decorView.setSystemUiVisibility(0);
- }
- }
-
- @Override
- protected void onStop() {
- super.onStop();
- mColorExtractor.removeOnColorsChangedListener(this);
- }
-
@Override
- public void show() {
- super.show();
+ protected void showDialog() {
mShowing = true;
mNotificationShadeWindowController.setRequestTopUi(true, TAG);
mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, true)
@@ -2482,42 +607,9 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
@Override
- public void dismiss() {
- dismissWithAnimation(() -> {
- mContainer.setTranslationX(0);
- ObjectAnimator alphaAnimator =
- ObjectAnimator.ofFloat(mContainer, "alpha", 1f, 0f);
- alphaAnimator.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN);
- alphaAnimator.setDuration(233);
- alphaAnimator.addUpdateListener((animation) -> {
- float animatedValue = 1f - animation.getAnimatedFraction();
- int alpha = (int) (animatedValue * mScrimAlpha * 255);
- mBackgroundDrawable.setAlpha(alpha);
- mDepthController.updateGlobalDialogVisibility(animatedValue,
- mGlobalActionsLayout);
- });
-
- float xOffset = mGlobalActionsLayout.getAnimationOffsetX();
- ObjectAnimator xAnimator =
- ObjectAnimator.ofFloat(mContainer, "translationX", 0f, xOffset);
- xAnimator.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN);
- xAnimator.setDuration(350);
-
- AnimatorSet animatorSet = new AnimatorSet();
- animatorSet.playTogether(alphaAnimator, xAnimator);
- animatorSet.addListener(new AnimatorListenerAdapter() {
- public void onAnimationEnd(Animator animation) {
- completeDismiss();
- }
- });
-
- animatorSet.start();
-
- // close first, as popup windows will not fade during the animation
- dismissOverflow(false);
- dismissPowerOptions(false);
- if (mControlsUiController != null) mControlsUiController.closeDialogs(false);
- });
+ protected void dismissInternal() {
+ super.dismissInternal();
+ if (mControlsUiController != null) mControlsUiController.closeDialogs(false);
}
private void dismissForControlsActivity() {
@@ -2527,26 +619,12 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
});
}
- void dismissWithAnimation(Runnable animation) {
- if (!mShowing) {
- return;
- }
- mShowing = false;
- animation.run();
- }
-
- private void completeDismiss() {
- mShowing = false;
- resetOrientation();
+ @Override
+ protected void completeDismiss() {
dismissWallet();
- dismissOverflow(true);
- dismissPowerOptions(true);
if (mControlsUiController != null) mControlsUiController.hide();
- mNotificationShadeWindowController.setRequestTopUi(false, TAG);
- mDepthController.updateGlobalDialogVisibility(0, null /* view */);
- mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, false)
- .commitUpdate(mContext.getDisplayId());
- super.dismiss();
+ resetOrientation();
+ super.completeDismiss();
}
private void dismissWallet() {
@@ -2557,38 +635,6 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
}
- private void dismissOverflow(boolean immediate) {
- if (mOverflowPopup != null) {
- if (immediate) {
- mOverflowPopup.dismissImmediate();
- } else {
- mOverflowPopup.dismiss();
- }
- }
- }
-
- private void dismissPowerOptions(boolean immediate) {
- if (mPowerOptionsDialog != null) {
- if (immediate) {
- mPowerOptionsDialog.dismiss();
- } else {
- mPowerOptionsDialog.dismiss();
- }
- }
- }
-
- private void setRotationSuggestionsEnabled(boolean enabled) {
- try {
- final int userId = Binder.getCallingUserHandle().getIdentifier();
- final int what = enabled
- ? StatusBarManager.DISABLE2_NONE
- : StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS;
- mStatusBarService.disable2ForUser(what, mToken, mContext.getPackageName(), userId);
- } catch (RemoteException ex) {
- throw ex.rethrowFromSystemServer();
- }
- }
-
private void resetOrientation() {
if (mResetOrientationData != null) {
RotationPolicy.setRotationLockAtAngle(mContext, mResetOrientationData.locked,
@@ -2598,49 +644,20 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
@Override
- public void onColorsChanged(ColorExtractor extractor, int which) {
- if (mKeyguardShowing) {
- if ((WallpaperManager.FLAG_LOCK & which) != 0) {
- updateColors(extractor.getColors(WallpaperManager.FLAG_LOCK),
- true /* animate */);
- }
- } else {
- if ((WallpaperManager.FLAG_SYSTEM & which) != 0) {
- updateColors(extractor.getColors(WallpaperManager.FLAG_SYSTEM),
- true /* animate */);
- }
- }
- }
-
- public void setKeyguardShowing(boolean keyguardShowing) {
- mKeyguardShowing = keyguardShowing;
- }
-
public void refreshDialog() {
// ensure dropdown menus are dismissed before re-initializing the dialog
dismissWallet();
- dismissOverflow(true);
- dismissPowerOptions(true);
if (mControlsUiController != null) {
mControlsUiController.hide();
}
- // re-create dialog
- initializeLayout();
- mGlobalActionsLayout.updateList();
+ super.refreshDialog();
if (mControlsUiController != null) {
mControlsUiController.show(mControlsView, this::dismissForControlsActivity,
null /* activityContext */);
}
}
- public void onRotate(int from, int to) {
- if (mShowing) {
- mOnRotateCallback.run();
- refreshDialog();
- }
- }
-
void hideLockMessage() {
if (mLockMessageContainer.getVisibility() == View.VISIBLE) {
mLockMessageContainer.animate().alpha(0).setDuration(150).setListener(
@@ -2683,7 +700,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
private boolean controlsAvailable() {
- return mDeviceProvisioned
+ return isDeviceProvisioned()
&& mControlsComponent.isEnabled()
&& !mControlsServiceInfos.isEmpty();
}
@@ -2703,7 +720,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
}
private void onPowerMenuLockScreenSettingsChanged() {
- mShowLockScreenCardsAndControls = Settings.Secure.getInt(mContentResolver,
+ mShowLockScreenCardsAndControls = mSecureSettings.getInt(
Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT, 0) != 0;
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
new file mode 100644
index 000000000000..47ae145590b5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialogLite.java
@@ -0,0 +1,2391 @@
+/*
+ * Copyright 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.globalactions;
+
+import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
+import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
+import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_GLOBAL_ACTIONS;
+import static android.view.WindowManager.TAKE_SCREENSHOT_FULLSCREEN;
+import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON;
+
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_NOT_REQUIRED;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN;
+import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_GLOBAL_ACTIONS_SHOWING;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.annotation.Nullable;
+import android.app.ActivityManager;
+import android.app.Dialog;
+import android.app.IActivityManager;
+import android.app.StatusBarManager;
+import android.app.WallpaperManager;
+import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.content.res.ColorStateList;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.database.ContentObserver;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
+import android.media.AudioManager;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.os.Vibrator;
+import android.provider.Settings;
+import android.service.dreams.IDreamManager;
+import android.sysprop.TelephonyProperties;
+import android.telecom.TelecomManager;
+import android.telephony.ServiceState;
+import android.telephony.TelephonyCallback;
+import android.telephony.TelephonyManager;
+import android.util.ArraySet;
+import android.util.Log;
+import android.view.ContextThemeWrapper;
+import android.view.IWindowManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowInsets;
+import android.view.WindowManager;
+import android.view.accessibility.AccessibilityEvent;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+import android.widget.LinearLayout;
+import android.widget.ListPopupWindow;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleOwner;
+import androidx.lifecycle.LifecycleRegistry;
+
+import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.colorextraction.ColorExtractor;
+import com.android.internal.colorextraction.ColorExtractor.GradientColors;
+import com.android.internal.colorextraction.drawable.ScrimDrawable;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.UiEvent;
+import com.android.internal.logging.UiEventLogger;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.statusbar.IStatusBarService;
+import com.android.internal.util.EmergencyAffordanceManager;
+import com.android.internal.util.ScreenshotHelper;
+import com.android.internal.widget.LockPatternUtils;
+import com.android.systemui.Interpolators;
+import com.android.systemui.MultiListLayout;
+import com.android.systemui.MultiListLayout.MultiListAdapter;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.dagger.qualifiers.Background;
+import com.android.systemui.dagger.qualifiers.Main;
+import com.android.systemui.model.SysUiState;
+import com.android.systemui.plugins.GlobalActions.GlobalActionsManager;
+import com.android.systemui.plugins.GlobalActionsPanelPlugin;
+import com.android.systemui.statusbar.NotificationShadeDepthController;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.telephony.TelephonyListenerManager;
+import com.android.systemui.util.EmergencyDialerConstants;
+import com.android.systemui.util.RingerModeTracker;
+import com.android.systemui.util.settings.GlobalSettings;
+import com.android.systemui.util.settings.SecureSettings;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Executor;
+
+import javax.inject.Inject;
+
+/**
+ * Helper to show the global actions dialog. Each item is an {@link Action} that may show depending
+ * on whether the keyguard is showing, and whether the device is provisioned.
+ */
+public class GlobalActionsDialogLite implements DialogInterface.OnDismissListener,
+ DialogInterface.OnShowListener,
+ ConfigurationController.ConfigurationListener,
+ GlobalActionsPanelPlugin.Callbacks,
+ LifecycleOwner {
+
+ public static final String SYSTEM_DIALOG_REASON_KEY = "reason";
+ public static final String SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS = "globalactions";
+ public static final String SYSTEM_DIALOG_REASON_DREAM = "dream";
+
+ private static final String TAG = "GlobalActionsDialogLite";
+
+ private static final boolean SHOW_SILENT_TOGGLE = true;
+
+ /* Valid settings for global actions keys.
+ * see config.xml config_globalActionList */
+ @VisibleForTesting
+ static final String GLOBAL_ACTION_KEY_POWER = "power";
+ private static final String GLOBAL_ACTION_KEY_AIRPLANE = "airplane";
+ static final String GLOBAL_ACTION_KEY_BUGREPORT = "bugreport";
+ private static final String GLOBAL_ACTION_KEY_SILENT = "silent";
+ private static final String GLOBAL_ACTION_KEY_USERS = "users";
+ private static final String GLOBAL_ACTION_KEY_SETTINGS = "settings";
+ static final String GLOBAL_ACTION_KEY_LOCKDOWN = "lockdown";
+ private static final String GLOBAL_ACTION_KEY_VOICEASSIST = "voiceassist";
+ private static final String GLOBAL_ACTION_KEY_ASSIST = "assist";
+ static final String GLOBAL_ACTION_KEY_RESTART = "restart";
+ private static final String GLOBAL_ACTION_KEY_LOGOUT = "logout";
+ static final String GLOBAL_ACTION_KEY_EMERGENCY = "emergency";
+ static final String GLOBAL_ACTION_KEY_SCREENSHOT = "screenshot";
+
+ private final Context mContext;
+ private final GlobalActionsManager mWindowManagerFuncs;
+ private final AudioManager mAudioManager;
+ private final IDreamManager mDreamManager;
+ private final DevicePolicyManager mDevicePolicyManager;
+ private final LockPatternUtils mLockPatternUtils;
+ private final KeyguardStateController mKeyguardStateController;
+ private final BroadcastDispatcher mBroadcastDispatcher;
+ protected final GlobalSettings mGlobalSettings;
+ protected final SecureSettings mSecureSettings;
+ protected final Resources mResources;
+ private final ConfigurationController mConfigurationController;
+ private final UserManager mUserManager;
+ private final TrustManager mTrustManager;
+ private final IActivityManager mIActivityManager;
+ private final TelecomManager mTelecomManager;
+ private final MetricsLogger mMetricsLogger;
+ private final UiEventLogger mUiEventLogger;
+ private final NotificationShadeDepthController mDepthController;
+ private final SysUiState mSysUiState;
+
+ // Used for RingerModeTracker
+ private final LifecycleRegistry mLifecycle = new LifecycleRegistry(this);
+
+ @VisibleForTesting
+ protected final ArrayList<Action> mItems = new ArrayList<>();
+ @VisibleForTesting
+ protected final ArrayList<Action> mOverflowItems = new ArrayList<>();
+ @VisibleForTesting
+ protected final ArrayList<Action> mPowerItems = new ArrayList<>();
+
+ @VisibleForTesting
+ protected ActionsDialogLite mDialog;
+
+ private Action mSilentModeAction;
+ private ToggleAction mAirplaneModeOn;
+
+ protected MyAdapter mAdapter;
+ protected MyOverflowAdapter mOverflowAdapter;
+ protected MyPowerOptionsAdapter mPowerAdapter;
+
+ private boolean mKeyguardShowing = false;
+ private boolean mDeviceProvisioned = false;
+ private ToggleState mAirplaneState = ToggleState.Off;
+ private boolean mIsWaitingForEcmExit = false;
+ private boolean mHasTelephony;
+ private boolean mHasVibrator;
+ private final boolean mShowSilentToggle;
+ private final EmergencyAffordanceManager mEmergencyAffordanceManager;
+ private final ScreenshotHelper mScreenshotHelper;
+ private final SysuiColorExtractor mSysuiColorExtractor;
+ private final IStatusBarService mStatusBarService;
+ protected final NotificationShadeWindowController mNotificationShadeWindowController;
+ private final IWindowManager mIWindowManager;
+ private final Executor mBackgroundExecutor;
+ private final RingerModeTracker mRingerModeTracker;
+ private int mDialogPressDelay = DIALOG_PRESS_DELAY; // ms
+ protected Handler mMainHandler;
+ private int mSmallestScreenWidthDp;
+
+ @VisibleForTesting
+ public enum GlobalActionsEvent implements UiEventLogger.UiEventEnum {
+ @UiEvent(doc = "The global actions / power menu surface became visible on the screen.")
+ GA_POWER_MENU_OPEN(337),
+
+ @UiEvent(doc = "The global actions / power menu surface was dismissed.")
+ GA_POWER_MENU_CLOSE(471),
+
+ @UiEvent(doc = "The global actions bugreport button was pressed.")
+ GA_BUGREPORT_PRESS(344),
+
+ @UiEvent(doc = "The global actions bugreport button was long pressed.")
+ GA_BUGREPORT_LONG_PRESS(345),
+
+ @UiEvent(doc = "The global actions emergency button was pressed.")
+ GA_EMERGENCY_DIALER_PRESS(346),
+
+ @UiEvent(doc = "The global actions screenshot button was pressed.")
+ GA_SCREENSHOT_PRESS(347),
+
+ @UiEvent(doc = "The global actions screenshot button was long pressed.")
+ GA_SCREENSHOT_LONG_PRESS(348);
+
+ private final int mId;
+
+ GlobalActionsEvent(int id) {
+ mId = id;
+ }
+
+ @Override
+ public int getId() {
+ return mId;
+ }
+ }
+
+ /**
+ * @param context everything needs a context :(
+ */
+ @Inject
+ public GlobalActionsDialogLite(Context context, GlobalActionsManager windowManagerFuncs,
+ AudioManager audioManager, IDreamManager iDreamManager,
+ DevicePolicyManager devicePolicyManager, LockPatternUtils lockPatternUtils,
+ BroadcastDispatcher broadcastDispatcher,
+ TelephonyListenerManager telephonyListenerManager,
+ GlobalSettings globalSettings, SecureSettings secureSettings,
+ @Nullable Vibrator vibrator, @Main Resources resources,
+ ConfigurationController configurationController,
+ KeyguardStateController keyguardStateController, UserManager userManager,
+ TrustManager trustManager, IActivityManager iActivityManager,
+ @Nullable TelecomManager telecomManager, MetricsLogger metricsLogger,
+ NotificationShadeDepthController depthController, SysuiColorExtractor colorExtractor,
+ IStatusBarService statusBarService,
+ NotificationShadeWindowController notificationShadeWindowController,
+ IWindowManager iWindowManager,
+ @Background Executor backgroundExecutor,
+ UiEventLogger uiEventLogger,
+ RingerModeTracker ringerModeTracker, SysUiState sysUiState, @Main Handler handler) {
+ mContext = context;
+ mWindowManagerFuncs = windowManagerFuncs;
+ mAudioManager = audioManager;
+ mDreamManager = iDreamManager;
+ mDevicePolicyManager = devicePolicyManager;
+ mLockPatternUtils = lockPatternUtils;
+ mKeyguardStateController = keyguardStateController;
+ mBroadcastDispatcher = broadcastDispatcher;
+ mGlobalSettings = globalSettings;
+ mSecureSettings = secureSettings;
+ mResources = resources;
+ mConfigurationController = configurationController;
+ mUserManager = userManager;
+ mTrustManager = trustManager;
+ mIActivityManager = iActivityManager;
+ mTelecomManager = telecomManager;
+ mMetricsLogger = metricsLogger;
+ mUiEventLogger = uiEventLogger;
+ mDepthController = depthController;
+ mSysuiColorExtractor = colorExtractor;
+ mStatusBarService = statusBarService;
+ mNotificationShadeWindowController = notificationShadeWindowController;
+ mIWindowManager = iWindowManager;
+ mBackgroundExecutor = backgroundExecutor;
+ mRingerModeTracker = ringerModeTracker;
+ mSysUiState = sysUiState;
+ mMainHandler = handler;
+ mSmallestScreenWidthDp = mContext.getResources().getConfiguration().smallestScreenWidthDp;
+
+ // receive broadcasts
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+ filter.addAction(Intent.ACTION_SCREEN_OFF);
+ filter.addAction(TelephonyManager.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
+ mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter);
+
+ mHasTelephony =
+ context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
+
+ // get notified of phone state changes
+ telephonyListenerManager.addServiceStateListener(mPhoneStateListener);
+ mGlobalSettings.registerContentObserver(
+ Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON), true,
+ mAirplaneModeObserver);
+ mHasVibrator = vibrator != null && vibrator.hasVibrator();
+
+ mShowSilentToggle = SHOW_SILENT_TOGGLE && !resources.getBoolean(
+ R.bool.config_useFixedVolume);
+ if (mShowSilentToggle) {
+ mRingerModeTracker.getRingerMode().observe(this, ringer ->
+ mHandler.sendEmptyMessage(MESSAGE_REFRESH)
+ );
+ }
+
+ mEmergencyAffordanceManager = new EmergencyAffordanceManager(context);
+ mScreenshotHelper = new ScreenshotHelper(context);
+
+ mConfigurationController.addCallback(this);
+ }
+
+ protected Context getContext() {
+ return mContext;
+ }
+
+ /**
+ * Show the global actions dialog (creating if necessary)
+ *
+ * @param keyguardShowing True if keyguard is showing
+ */
+ public void showOrHideDialog(boolean keyguardShowing, boolean isDeviceProvisioned) {
+ mKeyguardShowing = keyguardShowing;
+ mDeviceProvisioned = isDeviceProvisioned;
+ if (mDialog != null && mDialog.isShowing()) {
+ // In order to force global actions to hide on the same affordance press, we must
+ // register a call to onGlobalActionsShown() first to prevent the default actions
+ // menu from showing. This will be followed by a subsequent call to
+ // onGlobalActionsHidden() on dismiss()
+ mWindowManagerFuncs.onGlobalActionsShown();
+ mDialog.dismiss();
+ mDialog = null;
+ } else {
+ handleShow();
+ }
+ }
+
+ protected boolean isKeyguardShowing() {
+ return mKeyguardShowing;
+ }
+
+ protected boolean isDeviceProvisioned() {
+ return mDeviceProvisioned;
+ }
+
+ /**
+ * Dismiss the global actions dialog, if it's currently shown
+ */
+ public void dismissDialog() {
+ mHandler.removeMessages(MESSAGE_DISMISS);
+ mHandler.sendEmptyMessage(MESSAGE_DISMISS);
+ }
+
+ protected void awakenIfNecessary() {
+ if (mDreamManager != null) {
+ try {
+ if (mDreamManager.isDreaming()) {
+ mDreamManager.awaken();
+ }
+ } catch (RemoteException e) {
+ // we tried
+ }
+ }
+ }
+
+ protected void handleShow() {
+ awakenIfNecessary();
+ mDialog = createDialog();
+ prepareDialog();
+
+ WindowManager.LayoutParams attrs = mDialog.getWindow().getAttributes();
+ attrs.setTitle("ActionsDialog");
+ attrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
+ mDialog.getWindow().setAttributes(attrs);
+ // Don't acquire soft keyboard focus, to avoid destroying state when capturing bugreports
+ mDialog.getWindow().setFlags(FLAG_ALT_FOCUSABLE_IM, FLAG_ALT_FOCUSABLE_IM);
+ mDialog.show();
+ mWindowManagerFuncs.onGlobalActionsShown();
+ }
+
+ @VisibleForTesting
+ protected boolean shouldShowAction(Action action) {
+ if (mKeyguardShowing && !action.showDuringKeyguard()) {
+ return false;
+ }
+ if (!mDeviceProvisioned && !action.showBeforeProvisioning()) {
+ return false;
+ }
+ return action.shouldShow();
+ }
+
+ /**
+ * Returns the maximum number of power menu items to show based on which GlobalActions
+ * layout is being used.
+ */
+ @VisibleForTesting
+ protected int getMaxShownPowerItems() {
+ return mResources.getInteger(com.android.systemui.R.integer.power_menu_lite_max_columns)
+ * mResources.getInteger(com.android.systemui.R.integer.power_menu_lite_max_rows);
+ }
+
+ /**
+ * Add a power menu action item for to either the main or overflow items lists, depending on
+ * whether controls are enabled and whether the max number of shown items has been reached.
+ */
+ private void addActionItem(Action action) {
+ if (mItems.size() < getMaxShownPowerItems()) {
+ mItems.add(action);
+ } else {
+ mOverflowItems.add(action);
+ }
+ }
+
+ @VisibleForTesting
+ protected String[] getDefaultActions() {
+ return mResources.getStringArray(R.array.config_globalActionsList);
+ }
+
+ private void addIfShouldShowAction(List<Action> actions, Action action) {
+ if (shouldShowAction(action)) {
+ actions.add(action);
+ }
+ }
+
+ @VisibleForTesting
+ protected void createActionItems() {
+ // Simple toggle style if there's no vibrator, otherwise use a tri-state
+ if (!mHasVibrator) {
+ mSilentModeAction = new SilentModeToggleAction();
+ } else {
+ mSilentModeAction = new SilentModeTriStateAction(mAudioManager, mHandler);
+ }
+ mAirplaneModeOn = new AirplaneModeAction();
+ onAirplaneModeChanged();
+
+ mItems.clear();
+ mOverflowItems.clear();
+ mPowerItems.clear();
+ String[] defaultActions = getDefaultActions();
+
+ ShutDownAction shutdownAction = new ShutDownAction();
+ RestartAction restartAction = new RestartAction();
+ ArraySet<String> addedKeys = new ArraySet<>();
+ List<Action> tempActions = new ArrayList<>();
+ CurrentUserProvider currentUser = new CurrentUserProvider();
+
+ // make sure emergency affordance action is first, if needed
+ if (mEmergencyAffordanceManager.needsEmergencyAffordance()) {
+ addIfShouldShowAction(tempActions, new EmergencyAffordanceAction());
+ addedKeys.add(GLOBAL_ACTION_KEY_EMERGENCY);
+ }
+
+ for (int i = 0; i < defaultActions.length; i++) {
+ String actionKey = defaultActions[i];
+ if (addedKeys.contains(actionKey)) {
+ // If we already have added this, don't add it again.
+ continue;
+ }
+ if (GLOBAL_ACTION_KEY_POWER.equals(actionKey)) {
+ addIfShouldShowAction(tempActions, shutdownAction);
+ } else if (GLOBAL_ACTION_KEY_AIRPLANE.equals(actionKey)) {
+ addIfShouldShowAction(tempActions, mAirplaneModeOn);
+ } else if (GLOBAL_ACTION_KEY_BUGREPORT.equals(actionKey)) {
+ if (shouldDisplayBugReport(currentUser.get())) {
+ addIfShouldShowAction(tempActions, new BugReportAction());
+ }
+ } else if (GLOBAL_ACTION_KEY_SILENT.equals(actionKey)) {
+ if (mShowSilentToggle) {
+ addIfShouldShowAction(tempActions, mSilentModeAction);
+ }
+ } else if (GLOBAL_ACTION_KEY_USERS.equals(actionKey)) {
+ if (SystemProperties.getBoolean("fw.power_user_switcher", false)) {
+ addUserActions(tempActions, currentUser.get());
+ }
+ } else if (GLOBAL_ACTION_KEY_SETTINGS.equals(actionKey)) {
+ addIfShouldShowAction(tempActions, getSettingsAction());
+ } else if (GLOBAL_ACTION_KEY_LOCKDOWN.equals(actionKey)) {
+ if (shouldDisplayLockdown(currentUser.get())) {
+ addIfShouldShowAction(tempActions, new LockDownAction());
+ }
+ } else if (GLOBAL_ACTION_KEY_VOICEASSIST.equals(actionKey)) {
+ addIfShouldShowAction(tempActions, getVoiceAssistAction());
+ } else if (GLOBAL_ACTION_KEY_ASSIST.equals(actionKey)) {
+ addIfShouldShowAction(tempActions, getAssistAction());
+ } else if (GLOBAL_ACTION_KEY_RESTART.equals(actionKey)) {
+ addIfShouldShowAction(tempActions, restartAction);
+ } else if (GLOBAL_ACTION_KEY_SCREENSHOT.equals(actionKey)) {
+ addIfShouldShowAction(tempActions, new ScreenshotAction());
+ } else if (GLOBAL_ACTION_KEY_LOGOUT.equals(actionKey)) {
+ if (mDevicePolicyManager.isLogoutEnabled()
+ && currentUser.get() != null
+ && currentUser.get().id != UserHandle.USER_SYSTEM) {
+ addIfShouldShowAction(tempActions, new LogoutAction());
+ }
+ } else if (GLOBAL_ACTION_KEY_EMERGENCY.equals(actionKey)) {
+ addIfShouldShowAction(tempActions, new EmergencyDialerAction());
+ } else {
+ Log.e(TAG, "Invalid global action key " + actionKey);
+ }
+ // Add here so we don't add more than one.
+ addedKeys.add(actionKey);
+ }
+
+ // replace power and restart with a single power options action, if needed
+ if (tempActions.contains(shutdownAction) && tempActions.contains(restartAction)
+ && tempActions.size() > getMaxShownPowerItems()) {
+ // transfer shutdown and restart to their own list of power actions
+ int powerOptionsIndex = Math.min(tempActions.indexOf(restartAction),
+ tempActions.indexOf(shutdownAction));
+ tempActions.remove(shutdownAction);
+ tempActions.remove(restartAction);
+ mPowerItems.add(shutdownAction);
+ mPowerItems.add(restartAction);
+
+ // add the PowerOptionsAction after Emergency, if present
+ tempActions.add(powerOptionsIndex, new PowerOptionsAction());
+ }
+ for (Action action : tempActions) {
+ addActionItem(action);
+ }
+ }
+
+ protected void onRotate() {
+ // re-allocate actions between main and overflow lists
+ this.createActionItems();
+ }
+
+ protected void initDialogItems() {
+ createActionItems();
+ mAdapter = new MyAdapter();
+ mOverflowAdapter = new MyOverflowAdapter();
+ mPowerAdapter = new MyPowerOptionsAdapter();
+ }
+
+ /**
+ * Create the global actions dialog.
+ *
+ * @return A new dialog.
+ */
+ protected ActionsDialogLite createDialog() {
+ initDialogItems();
+
+ mDepthController.setShowingHomeControls(false);
+ ActionsDialogLite dialog = new ActionsDialogLite(mContext,
+ com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActionsLite,
+ mAdapter, mOverflowAdapter,
+ mDepthController, mSysuiColorExtractor,
+ mStatusBarService, mNotificationShadeWindowController,
+ mSysUiState, this::onRotate, mKeyguardShowing, mPowerAdapter);
+
+ dialog.setCanceledOnTouchOutside(true);
+ dialog.setOnDismissListener(this);
+ dialog.setOnShowListener(this);
+
+ return dialog;
+ }
+
+ @VisibleForTesting
+ boolean shouldDisplayLockdown(UserInfo user) {
+ if (user == null) {
+ return false;
+ }
+
+ int userId = user.id;
+
+ // No lockdown option if it's not turned on in Settings
+ if (mSecureSettings.getIntForUser(Settings.Secure.LOCKDOWN_IN_POWER_MENU, 0, userId) == 0) {
+ return false;
+ }
+
+ // Lockdown is meaningless without a place to go.
+ if (!mKeyguardStateController.isMethodSecure()) {
+ return false;
+ }
+
+ // Only show the lockdown button if the device isn't locked down (for whatever reason).
+ int state = mLockPatternUtils.getStrongAuthForUser(userId);
+ return (state == STRONG_AUTH_NOT_REQUIRED
+ || state == SOME_AUTH_REQUIRED_AFTER_USER_REQUEST);
+ }
+
+ @VisibleForTesting
+ boolean shouldDisplayBugReport(UserInfo currentUser) {
+ return mGlobalSettings.getInt(Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0
+ && (currentUser == null || currentUser.isPrimary());
+ }
+
+ @Override
+ public void onUiModeChanged() {
+ mContext.getTheme().applyStyle(mContext.getThemeResId(), true);
+ if (mDialog != null && mDialog.isShowing()) {
+ mDialog.refreshDialog();
+ }
+ }
+
+ @Override
+ public void onConfigChanged(Configuration newConfig) {
+ if (mDialog != null && mDialog.isShowing()
+ && (newConfig.smallestScreenWidthDp != mSmallestScreenWidthDp)) {
+ mSmallestScreenWidthDp = newConfig.smallestScreenWidthDp;
+ mDialog.refreshDialog();
+ }
+ }
+
+ /**
+ * Clean up callbacks
+ */
+ public void destroy() {
+ mConfigurationController.removeCallback(this);
+ }
+
+ /**
+ * Implements {@link GlobalActionsPanelPlugin.Callbacks#dismissGlobalActionsMenu()}, which is
+ * called when the quick access wallet requests dismissal.
+ */
+ @Override
+ public void dismissGlobalActionsMenu() {
+ dismissDialog();
+ }
+
+ @VisibleForTesting
+ protected final class PowerOptionsAction extends SinglePressAction {
+ private PowerOptionsAction() {
+ super(com.android.systemui.R.drawable.ic_settings_power,
+ R.string.global_action_power_options);
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+
+ @Override
+ public void onPress() {
+ if (mDialog != null) {
+ mDialog.showPowerOptionsMenu();
+ }
+ }
+ }
+
+ @VisibleForTesting
+ final class ShutDownAction extends SinglePressAction implements LongPressAction {
+ private ShutDownAction() {
+ super(R.drawable.ic_lock_power_off,
+ R.string.global_action_power_off);
+ }
+
+ @Override
+ public boolean onLongPress() {
+ if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
+ mWindowManagerFuncs.reboot(true);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+
+ @Override
+ public void onPress() {
+ // shutdown by making sure radio and power are handled accordingly.
+ mWindowManagerFuncs.shutdown();
+ }
+ }
+
+ @VisibleForTesting
+ protected abstract class EmergencyAction extends SinglePressAction {
+ EmergencyAction(int iconResId, int messageResId) {
+ super(iconResId, messageResId);
+ }
+
+ @Override
+ public boolean shouldBeSeparated() {
+ return false;
+ }
+
+ @Override
+ public View create(
+ Context context, View convertView, ViewGroup parent, LayoutInflater inflater) {
+ View v = super.create(context, convertView, parent, inflater);
+ int textColor = getEmergencyTextColor(context);
+ int iconColor = getEmergencyIconColor(context);
+ int backgroundColor = getEmergencyBackgroundColor(context);
+ TextView messageView = v.findViewById(R.id.message);
+ messageView.setTextColor(textColor);
+ messageView.setSelected(true); // necessary for marquee to work
+ ImageView icon = v.findViewById(R.id.icon);
+ icon.getDrawable().setTint(iconColor);
+ icon.setBackgroundTintList(ColorStateList.valueOf(backgroundColor));
+ v.setBackgroundTintList(ColorStateList.valueOf(backgroundColor));
+ return v;
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+ }
+
+ protected int getEmergencyTextColor(Context context) {
+ return context.getResources().getColor(
+ com.android.systemui.R.color.global_actions_lite_text);
+ }
+
+ protected int getEmergencyIconColor(Context context) {
+ return context.getResources().getColor(
+ com.android.systemui.R.color.global_actions_lite_emergency_icon);
+ }
+
+ protected int getEmergencyBackgroundColor(Context context) {
+ return context.getResources().getColor(
+ com.android.systemui.R.color.global_actions_lite_emergency_background);
+ }
+
+ private class EmergencyAffordanceAction extends EmergencyAction {
+ EmergencyAffordanceAction() {
+ super(R.drawable.emergency_icon,
+ R.string.global_action_emergency);
+ }
+
+ @Override
+ public void onPress() {
+ mEmergencyAffordanceManager.performEmergencyCall();
+ }
+ }
+
+ @VisibleForTesting
+ class EmergencyDialerAction extends EmergencyAction {
+ private EmergencyDialerAction() {
+ super(com.android.systemui.R.drawable.ic_emergency_star,
+ R.string.global_action_emergency);
+ }
+
+ @Override
+ public void onPress() {
+ mMetricsLogger.action(MetricsEvent.ACTION_EMERGENCY_DIALER_FROM_POWER_MENU);
+ mUiEventLogger.log(GlobalActionsEvent.GA_EMERGENCY_DIALER_PRESS);
+ if (mTelecomManager != null) {
+ Intent intent = mTelecomManager.createLaunchEmergencyDialerIntent(
+ null /* number */);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+ | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ intent.putExtra(EmergencyDialerConstants.EXTRA_ENTRY_TYPE,
+ EmergencyDialerConstants.ENTRY_TYPE_POWER_MENU);
+ mContext.startActivityAsUser(intent, UserHandle.CURRENT);
+ }
+ }
+ }
+
+ @VisibleForTesting
+ EmergencyDialerAction makeEmergencyDialerActionForTesting() {
+ return new EmergencyDialerAction();
+ }
+
+ @VisibleForTesting
+ final class RestartAction extends SinglePressAction implements LongPressAction {
+ private RestartAction() {
+ super(R.drawable.ic_restart, R.string.global_action_restart);
+ }
+
+ @Override
+ public boolean onLongPress() {
+ if (!mUserManager.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
+ mWindowManagerFuncs.reboot(true);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+
+ @Override
+ public void onPress() {
+ mWindowManagerFuncs.reboot(false);
+ }
+ }
+
+ @VisibleForTesting
+ class ScreenshotAction extends SinglePressAction {
+ ScreenshotAction() {
+ super(R.drawable.ic_screenshot, R.string.global_action_screenshot);
+ }
+
+ @Override
+ public void onPress() {
+ // Add a little delay before executing, to give the
+ // dialog a chance to go away before it takes a
+ // screenshot.
+ // TODO: instead, omit global action dialog layer
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ mScreenshotHelper.takeScreenshot(TAKE_SCREENSHOT_FULLSCREEN, true, true,
+ SCREENSHOT_GLOBAL_ACTIONS, mHandler, null);
+ mMetricsLogger.action(MetricsEvent.ACTION_SCREENSHOT_POWER_MENU);
+ mUiEventLogger.log(GlobalActionsEvent.GA_SCREENSHOT_PRESS);
+ }
+ }, mDialogPressDelay);
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return false;
+ }
+
+ @Override
+ public boolean shouldShow() {
+ // Include screenshot in power menu for legacy nav because it is not accessible
+ // through Recents in that mode
+ return is2ButtonNavigationEnabled();
+ }
+
+ boolean is2ButtonNavigationEnabled() {
+ return NAV_BAR_MODE_2BUTTON == mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_navBarInteractionMode);
+ }
+ }
+
+ @VisibleForTesting
+ ScreenshotAction makeScreenshotActionForTesting() {
+ return new ScreenshotAction();
+ }
+
+ @VisibleForTesting
+ class BugReportAction extends SinglePressAction implements LongPressAction {
+
+ BugReportAction() {
+ super(R.drawable.ic_lock_bugreport, R.string.bugreport_title);
+ }
+
+ @Override
+ public void onPress() {
+ // don't actually trigger the bugreport if we are running stability
+ // tests via monkey
+ if (ActivityManager.isUserAMonkey()) {
+ return;
+ }
+ // Add a little delay before executing, to give the
+ // dialog a chance to go away before it takes a
+ // screenshot.
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ // Take an "interactive" bugreport.
+ mMetricsLogger.action(
+ MetricsEvent.ACTION_BUGREPORT_FROM_POWER_MENU_INTERACTIVE);
+ mUiEventLogger.log(GlobalActionsEvent.GA_BUGREPORT_PRESS);
+ if (!mIActivityManager.launchBugReportHandlerApp()) {
+ Log.w(TAG, "Bugreport handler could not be launched");
+ mIActivityManager.requestInteractiveBugReport();
+ }
+ } catch (RemoteException e) {
+ }
+ }
+ }, mDialogPressDelay);
+ }
+
+ @Override
+ public boolean onLongPress() {
+ // don't actually trigger the bugreport if we are running stability
+ // tests via monkey
+ if (ActivityManager.isUserAMonkey()) {
+ return false;
+ }
+ try {
+ // Take a "full" bugreport.
+ mMetricsLogger.action(MetricsEvent.ACTION_BUGREPORT_FROM_POWER_MENU_FULL);
+ mUiEventLogger.log(GlobalActionsEvent.GA_BUGREPORT_LONG_PRESS);
+ mIActivityManager.requestFullBugReport();
+ } catch (RemoteException e) {
+ }
+ return false;
+ }
+
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return false;
+ }
+ }
+
+ @VisibleForTesting
+ BugReportAction makeBugReportActionForTesting() {
+ return new BugReportAction();
+ }
+
+ private final class LogoutAction extends SinglePressAction {
+ private LogoutAction() {
+ super(R.drawable.ic_logout, R.string.global_action_logout);
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return false;
+ }
+
+ @Override
+ public void onPress() {
+ // Add a little delay before executing, to give the dialog a chance to go away before
+ // switching user
+ mHandler.postDelayed(() -> {
+ try {
+ int currentUserId = getCurrentUser().id;
+ mIActivityManager.switchUser(UserHandle.USER_SYSTEM);
+ mIActivityManager.stopUser(currentUserId, true /*force*/, null);
+ } catch (RemoteException re) {
+ Log.e(TAG, "Couldn't logout user " + re);
+ }
+ }, mDialogPressDelay);
+ }
+ }
+
+ private Action getSettingsAction() {
+ return new SinglePressAction(R.drawable.ic_settings,
+ R.string.global_action_settings) {
+
+ @Override
+ public void onPress() {
+ Intent intent = new Intent(Settings.ACTION_SETTINGS);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ mContext.startActivity(intent);
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+ };
+ }
+
+ private Action getAssistAction() {
+ return new SinglePressAction(R.drawable.ic_action_assist_focused,
+ R.string.global_action_assist) {
+ @Override
+ public void onPress() {
+ Intent intent = new Intent(Intent.ACTION_ASSIST);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ mContext.startActivity(intent);
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+ };
+ }
+
+ private Action getVoiceAssistAction() {
+ return new SinglePressAction(R.drawable.ic_voice_search,
+ R.string.global_action_voice_assist) {
+ @Override
+ public void onPress() {
+ Intent intent = new Intent(Intent.ACTION_VOICE_ASSIST);
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ mContext.startActivity(intent);
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+ };
+ }
+
+ @VisibleForTesting
+ class LockDownAction extends SinglePressAction {
+ LockDownAction() {
+ super(R.drawable.ic_lock_lockdown, R.string.global_action_lockdown);
+ }
+
+ @Override
+ public void onPress() {
+ mLockPatternUtils.requireStrongAuth(STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN,
+ UserHandle.USER_ALL);
+ try {
+ mIWindowManager.lockNow(null);
+ // Lock profiles (if any) on the background thread.
+ mBackgroundExecutor.execute(() -> lockProfiles());
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error while trying to lock device.", e);
+ }
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return false;
+ }
+ }
+
+ private void lockProfiles() {
+ final int currentUserId = getCurrentUser().id;
+ final int[] profileIds = mUserManager.getEnabledProfileIds(currentUserId);
+ for (final int id : profileIds) {
+ if (id != currentUserId) {
+ mTrustManager.setDeviceLockedForUser(id, true);
+ }
+ }
+ }
+
+ protected UserInfo getCurrentUser() {
+ try {
+ return mIActivityManager.getCurrentUser();
+ } catch (RemoteException re) {
+ return null;
+ }
+ }
+
+ /**
+ * Non-thread-safe current user provider that caches the result - helpful when a method needs
+ * to fetch it an indeterminate number of times.
+ */
+ private class CurrentUserProvider {
+ private UserInfo mUserInfo = null;
+ private boolean mFetched = false;
+
+ @Nullable
+ UserInfo get() {
+ if (!mFetched) {
+ mFetched = true;
+ mUserInfo = getCurrentUser();
+ }
+ return mUserInfo;
+ }
+ }
+
+ private void addUserActions(List<Action> actions, UserInfo currentUser) {
+ if (mUserManager.isUserSwitcherEnabled()) {
+ List<UserInfo> users = mUserManager.getUsers();
+ for (final UserInfo user : users) {
+ if (user.supportsSwitchToByUser()) {
+ boolean isCurrentUser = currentUser == null
+ ? user.id == 0 : (currentUser.id == user.id);
+ Drawable icon = user.iconPath != null ? Drawable.createFromPath(user.iconPath)
+ : null;
+ SinglePressAction switchToUser = new SinglePressAction(
+ R.drawable.ic_menu_cc, icon,
+ (user.name != null ? user.name : "Primary")
+ + (isCurrentUser ? " \u2714" : "")) {
+ public void onPress() {
+ try {
+ mIActivityManager.switchUser(user.id);
+ } catch (RemoteException re) {
+ Log.e(TAG, "Couldn't switch user " + re);
+ }
+ }
+
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ public boolean showBeforeProvisioning() {
+ return false;
+ }
+ };
+ addIfShouldShowAction(actions, switchToUser);
+ }
+ }
+ }
+ }
+
+ protected void prepareDialog() {
+ refreshSilentMode();
+ mAirplaneModeOn.updateState(mAirplaneState);
+ mAdapter.notifyDataSetChanged();
+ mLifecycle.setCurrentState(Lifecycle.State.RESUMED);
+ }
+
+ private void refreshSilentMode() {
+ if (!mHasVibrator) {
+ Integer value = mRingerModeTracker.getRingerMode().getValue();
+ final boolean silentModeOn = value != null && value != AudioManager.RINGER_MODE_NORMAL;
+ ((ToggleAction) mSilentModeAction).updateState(
+ silentModeOn ? ToggleState.On : ToggleState.Off);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onDismiss(DialogInterface dialog) {
+ if (mDialog == dialog) {
+ mDialog = null;
+ }
+ mUiEventLogger.log(GlobalActionsEvent.GA_POWER_MENU_CLOSE);
+ mWindowManagerFuncs.onGlobalActionsHidden();
+ mLifecycle.setCurrentState(Lifecycle.State.CREATED);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void onShow(DialogInterface dialog) {
+ mMetricsLogger.visible(MetricsEvent.POWER_MENU);
+ mUiEventLogger.log(GlobalActionsEvent.GA_POWER_MENU_OPEN);
+ }
+
+ /**
+ * The adapter used for power menu items shown in the global actions dialog.
+ */
+ public class MyAdapter extends MultiListAdapter {
+ private int countItems(boolean separated) {
+ int count = 0;
+ for (int i = 0; i < mItems.size(); i++) {
+ final Action action = mItems.get(i);
+
+ if (action.shouldBeSeparated() == separated) {
+ count++;
+ }
+ }
+ return count;
+ }
+
+ @Override
+ public int countSeparatedItems() {
+ return countItems(true);
+ }
+
+ @Override
+ public int countListItems() {
+ return countItems(false);
+ }
+
+ @Override
+ public int getCount() {
+ return countSeparatedItems() + countListItems();
+ }
+
+ @Override
+ public boolean isEnabled(int position) {
+ return getItem(position).isEnabled();
+ }
+
+ @Override
+ public boolean areAllItemsEnabled() {
+ return false;
+ }
+
+ @Override
+ public Action getItem(int position) {
+ int filteredPos = 0;
+ for (int i = 0; i < mItems.size(); i++) {
+ final Action action = mItems.get(i);
+ if (!shouldShowAction(action)) {
+ continue;
+ }
+ if (filteredPos == position) {
+ return action;
+ }
+ filteredPos++;
+ }
+
+ throw new IllegalArgumentException("position " + position
+ + " out of range of showable actions"
+ + ", filtered count=" + getCount()
+ + ", keyguardshowing=" + mKeyguardShowing
+ + ", provisioned=" + mDeviceProvisioned);
+ }
+
+ /**
+ * Get the row ID for an item
+ * @param position The position of the item within the adapter's data set
+ * @return
+ */
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ Action action = getItem(position);
+ View view = action.create(mContext, convertView, parent, LayoutInflater.from(mContext));
+ view.setOnClickListener(v -> onClickItem(position));
+ if (action instanceof LongPressAction) {
+ view.setOnLongClickListener(v -> onLongClickItem(position));
+ }
+ return view;
+ }
+
+ @Override
+ public boolean onLongClickItem(int position) {
+ final Action action = mAdapter.getItem(position);
+ if (action instanceof LongPressAction) {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ } else {
+ Log.w(TAG, "Action long-clicked while mDialog is null.");
+ }
+ return ((LongPressAction) action).onLongPress();
+ }
+ return false;
+ }
+
+ @Override
+ public void onClickItem(int position) {
+ Action item = mAdapter.getItem(position);
+ if (!(item instanceof SilentModeTriStateAction)) {
+ if (mDialog != null) {
+ // don't dismiss the dialog if we're opening the power options menu
+ if (!(item instanceof PowerOptionsAction)) {
+ mDialog.dismiss();
+ }
+ } else {
+ Log.w(TAG, "Action clicked while mDialog is null.");
+ }
+ item.onPress();
+ }
+ }
+
+ @Override
+ public boolean shouldBeSeparated(int position) {
+ return getItem(position).shouldBeSeparated();
+ }
+ }
+
+ /**
+ * The adapter used for items in the overflow menu.
+ */
+ public class MyPowerOptionsAdapter extends BaseAdapter {
+ @Override
+ public int getCount() {
+ return mPowerItems.size();
+ }
+
+ @Override
+ public Action getItem(int position) {
+ return mPowerItems.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ Action action = getItem(position);
+ if (action == null) {
+ Log.w(TAG, "No power options action found at position: " + position);
+ return null;
+ }
+ int viewLayoutResource = com.android.systemui.R.layout.global_actions_power_item;
+ View view = convertView != null ? convertView
+ : LayoutInflater.from(mContext).inflate(viewLayoutResource, parent, false);
+ view.setOnClickListener(v -> onClickItem(position));
+ if (action instanceof LongPressAction) {
+ view.setOnLongClickListener(v -> onLongClickItem(position));
+ }
+ ImageView icon = view.findViewById(R.id.icon);
+ TextView messageView = view.findViewById(R.id.message);
+ messageView.setSelected(true); // necessary for marquee to work
+
+ icon.setImageDrawable(action.getIcon(mContext));
+ icon.setScaleType(ScaleType.CENTER_CROP);
+
+ if (action.getMessage() != null) {
+ messageView.setText(action.getMessage());
+ } else {
+ messageView.setText(action.getMessageResId());
+ }
+ return view;
+ }
+
+ private boolean onLongClickItem(int position) {
+ final Action action = getItem(position);
+ if (action instanceof LongPressAction) {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ } else {
+ Log.w(TAG, "Action long-clicked while mDialog is null.");
+ }
+ return ((LongPressAction) action).onLongPress();
+ }
+ return false;
+ }
+
+ private void onClickItem(int position) {
+ Action item = getItem(position);
+ if (!(item instanceof SilentModeTriStateAction)) {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ } else {
+ Log.w(TAG, "Action clicked while mDialog is null.");
+ }
+ item.onPress();
+ }
+ }
+ }
+
+ /**
+ * The adapter used for items in the power options menu, triggered by the PowerOptionsAction.
+ */
+ public class MyOverflowAdapter extends BaseAdapter {
+ @Override
+ public int getCount() {
+ return mOverflowItems.size();
+ }
+
+ @Override
+ public Action getItem(int position) {
+ return mOverflowItems.get(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ Action action = getItem(position);
+ if (action == null) {
+ Log.w(TAG, "No overflow action found at position: " + position);
+ return null;
+ }
+ int viewLayoutResource = com.android.systemui.R.layout.controls_more_item;
+ View view = convertView != null ? convertView
+ : LayoutInflater.from(mContext).inflate(viewLayoutResource, parent, false);
+ TextView textView = (TextView) view;
+ if (action.getMessageResId() != 0) {
+ textView.setText(action.getMessageResId());
+ } else {
+ textView.setText(action.getMessage());
+ }
+ return textView;
+ }
+
+ protected boolean onLongClickItem(int position) {
+ final Action action = getItem(position);
+ if (action instanceof LongPressAction) {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ } else {
+ Log.w(TAG, "Action long-clicked while mDialog is null.");
+ }
+ return ((LongPressAction) action).onLongPress();
+ }
+ return false;
+ }
+
+ protected void onClickItem(int position) {
+ Action item = getItem(position);
+ if (!(item instanceof SilentModeTriStateAction)) {
+ if (mDialog != null) {
+ mDialog.dismiss();
+ } else {
+ Log.w(TAG, "Action clicked while mDialog is null.");
+ }
+ item.onPress();
+ }
+ }
+ }
+
+ // note: the scheme below made more sense when we were planning on having
+ // 8 different things in the global actions dialog. seems overkill with
+ // only 3 items now, but may as well keep this flexible approach so it will
+ // be easy should someone decide at the last minute to include something
+ // else, such as 'enable wifi', or 'enable bluetooth'
+
+ /**
+ * What each item in the global actions dialog must be able to support.
+ */
+ public interface Action {
+ /**
+ * @return Text that will be announced when dialog is created. null for none.
+ */
+ CharSequence getLabelForAccessibility(Context context);
+
+ /**
+ * Create the item's view
+ * @param context
+ * @param convertView
+ * @param parent
+ * @param inflater
+ * @return
+ */
+ View create(Context context, View convertView, ViewGroup parent, LayoutInflater inflater);
+
+ /**
+ * Handle a regular press
+ */
+ void onPress();
+
+ /**
+ * @return whether this action should appear in the dialog when the keygaurd is showing.
+ */
+ boolean showDuringKeyguard();
+
+ /**
+ * @return whether this action should appear in the dialog before the
+ * device is provisioned.f
+ */
+ boolean showBeforeProvisioning();
+
+ /**
+ * @return whether this action is enabled
+ */
+ boolean isEnabled();
+
+ /**
+ * @return whether this action should be in a separate section
+ */
+ default boolean shouldBeSeparated() {
+ return false;
+ }
+
+ /**
+ * Return the id of the message associated with this action, or 0 if it doesn't have one.
+ * @return
+ */
+ int getMessageResId();
+
+ /**
+ * Return the icon drawable for this action.
+ */
+ Drawable getIcon(Context context);
+
+ /**
+ * Return the message associated with this action, or null if it doesn't have one.
+ * @return
+ */
+ CharSequence getMessage();
+
+ /**
+ * @return whether the action should be visible
+ */
+ default boolean shouldShow() {
+ return true;
+ }
+ }
+
+ /**
+ * An action that also supports long press.
+ */
+ private interface LongPressAction extends Action {
+ boolean onLongPress();
+ }
+
+ /**
+ * A single press action maintains no state, just responds to a press and takes an action.
+ */
+
+ private abstract class SinglePressAction implements Action {
+ private final int mIconResId;
+ private final Drawable mIcon;
+ private final int mMessageResId;
+ private final CharSequence mMessage;
+
+ protected SinglePressAction(int iconResId, int messageResId) {
+ mIconResId = iconResId;
+ mMessageResId = messageResId;
+ mMessage = null;
+ mIcon = null;
+ }
+
+ protected SinglePressAction(int iconResId, Drawable icon, CharSequence message) {
+ mIconResId = iconResId;
+ mMessageResId = 0;
+ mMessage = message;
+ mIcon = icon;
+ }
+
+ public boolean isEnabled() {
+ return true;
+ }
+
+ public String getStatus() {
+ return null;
+ }
+
+ public abstract void onPress();
+
+ public CharSequence getLabelForAccessibility(Context context) {
+ if (mMessage != null) {
+ return mMessage;
+ } else {
+ return context.getString(mMessageResId);
+ }
+ }
+
+ public int getMessageResId() {
+ return mMessageResId;
+ }
+
+ public CharSequence getMessage() {
+ return mMessage;
+ }
+
+ @Override
+ public Drawable getIcon(Context context) {
+ if (mIcon != null) {
+ return mIcon;
+ } else {
+ return context.getDrawable(mIconResId);
+ }
+ }
+
+ public View create(
+ Context context, View convertView, ViewGroup parent, LayoutInflater inflater) {
+ View v = inflater.inflate(getGridItemLayoutResource(), parent, false /* attach */);
+ // ConstraintLayout flow needs an ID to reference
+ v.setId(View.generateViewId());
+
+ ImageView icon = v.findViewById(R.id.icon);
+ TextView messageView = v.findViewById(R.id.message);
+ messageView.setSelected(true); // necessary for marquee to work
+
+ icon.setImageDrawable(getIcon(context));
+ icon.setScaleType(ScaleType.CENTER_CROP);
+
+ if (mMessage != null) {
+ messageView.setText(mMessage);
+ } else {
+ messageView.setText(mMessageResId);
+ }
+
+ return v;
+ }
+ }
+
+ protected int getGridItemLayoutResource() {
+ return com.android.systemui.R.layout.global_actions_grid_item_lite;
+ }
+
+ private enum ToggleState {
+ Off(false),
+ TurningOn(true),
+ TurningOff(true),
+ On(false);
+
+ private final boolean mInTransition;
+
+ ToggleState(boolean intermediate) {
+ mInTransition = intermediate;
+ }
+
+ public boolean inTransition() {
+ return mInTransition;
+ }
+ }
+
+ /**
+ * A toggle action knows whether it is on or off, and displays an icon and status message
+ * accordingly.
+ */
+ private abstract class ToggleAction implements Action {
+
+ protected ToggleState mState = ToggleState.Off;
+
+ // prefs
+ protected int mEnabledIconResId;
+ protected int mDisabledIconResid;
+ protected int mMessageResId;
+ protected int mEnabledStatusMessageResId;
+ protected int mDisabledStatusMessageResId;
+
+ /**
+ * @param enabledIconResId The icon for when this action is on.
+ * @param disabledIconResid The icon for when this action is off.
+ * @param message The general information message, e.g 'Silent Mode'
+ * @param enabledStatusMessageResId The on status message, e.g 'sound disabled'
+ * @param disabledStatusMessageResId The off status message, e.g. 'sound enabled'
+ */
+ ToggleAction(int enabledIconResId,
+ int disabledIconResid,
+ int message,
+ int enabledStatusMessageResId,
+ int disabledStatusMessageResId) {
+ mEnabledIconResId = enabledIconResId;
+ mDisabledIconResid = disabledIconResid;
+ mMessageResId = message;
+ mEnabledStatusMessageResId = enabledStatusMessageResId;
+ mDisabledStatusMessageResId = disabledStatusMessageResId;
+ }
+
+ /**
+ * Override to make changes to resource IDs just before creating the View.
+ */
+ void willCreate() {
+
+ }
+
+ @Override
+ public CharSequence getLabelForAccessibility(Context context) {
+ return context.getString(mMessageResId);
+ }
+
+ private boolean isOn() {
+ return mState == ToggleState.On || mState == ToggleState.TurningOn;
+ }
+
+ @Override
+ public CharSequence getMessage() {
+ return null;
+ }
+ @Override
+ public int getMessageResId() {
+ return isOn() ? mEnabledStatusMessageResId : mDisabledStatusMessageResId;
+ }
+
+ private int getIconResId() {
+ return isOn() ? mEnabledIconResId : mDisabledIconResid;
+ }
+
+ @Override
+ public Drawable getIcon(Context context) {
+ return context.getDrawable(getIconResId());
+ }
+
+ public View create(Context context, View convertView, ViewGroup parent,
+ LayoutInflater inflater) {
+ willCreate();
+
+ View v = inflater.inflate(com.android.systemui.R.layout.global_actions_grid_item_v2,
+ parent, false /* attach */);
+ ViewGroup.LayoutParams p = v.getLayoutParams();
+ p.width = WRAP_CONTENT;
+ v.setLayoutParams(p);
+
+ ImageView icon = (ImageView) v.findViewById(R.id.icon);
+ TextView messageView = (TextView) v.findViewById(R.id.message);
+ final boolean enabled = isEnabled();
+
+ if (messageView != null) {
+ messageView.setText(getMessageResId());
+ messageView.setEnabled(enabled);
+ messageView.setSelected(true); // necessary for marquee to work
+ }
+
+ if (icon != null) {
+ icon.setImageDrawable(context.getDrawable(getIconResId()));
+ icon.setEnabled(enabled);
+ }
+
+ v.setEnabled(enabled);
+
+ return v;
+ }
+
+ public final void onPress() {
+ if (mState.inTransition()) {
+ Log.w(TAG, "shouldn't be able to toggle when in transition");
+ return;
+ }
+
+ final boolean nowOn = !(mState == ToggleState.On);
+ onToggle(nowOn);
+ changeStateFromPress(nowOn);
+ }
+
+ public boolean isEnabled() {
+ return !mState.inTransition();
+ }
+
+ /**
+ * Implementations may override this if their state can be in on of the intermediate states
+ * until some notification is received (e.g airplane mode is 'turning off' until we know the
+ * wireless connections are back online
+ *
+ * @param buttonOn Whether the button was turned on or off
+ */
+ protected void changeStateFromPress(boolean buttonOn) {
+ mState = buttonOn ? ToggleState.On : ToggleState.Off;
+ }
+
+ abstract void onToggle(boolean on);
+
+ public void updateState(ToggleState state) {
+ mState = state;
+ }
+ }
+
+ private class AirplaneModeAction extends ToggleAction {
+ AirplaneModeAction() {
+ super(
+ R.drawable.ic_lock_airplane_mode,
+ R.drawable.ic_lock_airplane_mode_off,
+ R.string.global_actions_toggle_airplane_mode,
+ R.string.global_actions_airplane_mode_on_status,
+ R.string.global_actions_airplane_mode_off_status);
+ }
+
+ void onToggle(boolean on) {
+ if (mHasTelephony && TelephonyProperties.in_ecm_mode().orElse(false)) {
+ mIsWaitingForEcmExit = true;
+ // Launch ECM exit dialog
+ Intent ecmDialogIntent =
+ new Intent(TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS, null);
+ ecmDialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ mContext.startActivity(ecmDialogIntent);
+ } else {
+ changeAirplaneModeSystemSetting(on);
+ }
+ }
+
+ @Override
+ protected void changeStateFromPress(boolean buttonOn) {
+ if (!mHasTelephony) return;
+
+ // In ECM mode airplane state cannot be changed
+ if (!TelephonyProperties.in_ecm_mode().orElse(false)) {
+ mState = buttonOn ? ToggleState.TurningOn : ToggleState.TurningOff;
+ mAirplaneState = mState;
+ }
+ }
+
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ public boolean showBeforeProvisioning() {
+ return false;
+ }
+ }
+
+ private class SilentModeToggleAction extends ToggleAction {
+ SilentModeToggleAction() {
+ super(R.drawable.ic_audio_vol_mute,
+ R.drawable.ic_audio_vol,
+ R.string.global_action_toggle_silent_mode,
+ R.string.global_action_silent_mode_on_status,
+ R.string.global_action_silent_mode_off_status);
+ }
+
+ void onToggle(boolean on) {
+ if (on) {
+ mAudioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
+ } else {
+ mAudioManager.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
+ }
+ }
+
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ public boolean showBeforeProvisioning() {
+ return false;
+ }
+ }
+
+ private static class SilentModeTriStateAction implements Action, View.OnClickListener {
+
+ private static final int[] ITEM_IDS = {R.id.option1, R.id.option2, R.id.option3};
+
+ private final AudioManager mAudioManager;
+ private final Handler mHandler;
+
+ SilentModeTriStateAction(AudioManager audioManager, Handler handler) {
+ mAudioManager = audioManager;
+ mHandler = handler;
+ }
+
+ private int ringerModeToIndex(int ringerMode) {
+ // They just happen to coincide
+ return ringerMode;
+ }
+
+ private int indexToRingerMode(int index) {
+ // They just happen to coincide
+ return index;
+ }
+
+ @Override
+ public CharSequence getLabelForAccessibility(Context context) {
+ return null;
+ }
+
+ @Override
+ public int getMessageResId() {
+ return 0;
+ }
+
+ @Override
+ public CharSequence getMessage() {
+ return null;
+ }
+
+ @Override
+ public Drawable getIcon(Context context) {
+ return null;
+ }
+
+
+ public View create(Context context, View convertView, ViewGroup parent,
+ LayoutInflater inflater) {
+ View v = inflater.inflate(R.layout.global_actions_silent_mode, parent, false);
+
+ int selectedIndex = ringerModeToIndex(mAudioManager.getRingerMode());
+ for (int i = 0; i < 3; i++) {
+ View itemView = v.findViewById(ITEM_IDS[i]);
+ itemView.setSelected(selectedIndex == i);
+ // Set up click handler
+ itemView.setTag(i);
+ itemView.setOnClickListener(this);
+ }
+ return v;
+ }
+
+ public void onPress() {
+ }
+
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ public boolean showBeforeProvisioning() {
+ return false;
+ }
+
+ public boolean isEnabled() {
+ return true;
+ }
+
+ void willCreate() {
+ }
+
+ public void onClick(View v) {
+ if (!(v.getTag() instanceof Integer)) return;
+
+ int index = (Integer) v.getTag();
+ mAudioManager.setRingerMode(indexToRingerMode(index));
+ mHandler.sendEmptyMessageDelayed(MESSAGE_DISMISS, DIALOG_DISMISS_DELAY);
+ }
+ }
+
+ private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)
+ || Intent.ACTION_SCREEN_OFF.equals(action)) {
+ String reason = intent.getStringExtra(SYSTEM_DIALOG_REASON_KEY);
+ if (!SYSTEM_DIALOG_REASON_GLOBAL_ACTIONS.equals(reason)) {
+ mHandler.sendMessage(mHandler.obtainMessage(MESSAGE_DISMISS, reason));
+ }
+ } else if (TelephonyManager.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED.equals(action)) {
+ // Airplane mode can be changed after ECM exits if airplane toggle button
+ // is pressed during ECM mode
+ if (!(intent.getBooleanExtra(TelephonyManager.EXTRA_PHONE_IN_ECM_STATE, false))
+ && mIsWaitingForEcmExit) {
+ mIsWaitingForEcmExit = false;
+ changeAirplaneModeSystemSetting(true);
+ }
+ }
+ }
+ };
+
+ private final TelephonyCallback.ServiceStateListener mPhoneStateListener =
+ new TelephonyCallback.ServiceStateListener() {
+ @Override
+ public void onServiceStateChanged(ServiceState serviceState) {
+ if (!mHasTelephony) return;
+ if (mAirplaneModeOn == null) {
+ Log.d(TAG, "Service changed before actions created");
+ return;
+ }
+ final boolean inAirplaneMode = serviceState.getState() == ServiceState.STATE_POWER_OFF;
+ mAirplaneState = inAirplaneMode ? ToggleState.On : ToggleState.Off;
+ mAirplaneModeOn.updateState(mAirplaneState);
+ mAdapter.notifyDataSetChanged();
+ mOverflowAdapter.notifyDataSetChanged();
+ mPowerAdapter.notifyDataSetChanged();
+ }
+ };
+
+ private ContentObserver mAirplaneModeObserver = new ContentObserver(mMainHandler) {
+ @Override
+ public void onChange(boolean selfChange) {
+ onAirplaneModeChanged();
+ }
+ };
+
+ private static final int MESSAGE_DISMISS = 0;
+ private static final int MESSAGE_REFRESH = 1;
+ private static final int DIALOG_DISMISS_DELAY = 300; // ms
+ private static final int DIALOG_PRESS_DELAY = 850; // ms
+
+ @VisibleForTesting void setZeroDialogPressDelayForTesting() {
+ mDialogPressDelay = 0; // ms
+ }
+
+ private Handler mHandler = new Handler() {
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MESSAGE_DISMISS:
+ if (mDialog != null) {
+ if (SYSTEM_DIALOG_REASON_DREAM.equals(msg.obj)) {
+ mDialog.completeDismiss();
+ } else {
+ mDialog.dismiss();
+ }
+ mDialog = null;
+ }
+ break;
+ case MESSAGE_REFRESH:
+ refreshSilentMode();
+ mAdapter.notifyDataSetChanged();
+ break;
+ }
+ }
+ };
+
+ private void onAirplaneModeChanged() {
+ // Let the service state callbacks handle the state.
+ if (mHasTelephony || mAirplaneModeOn == null) return;
+
+ boolean airplaneModeOn = mGlobalSettings.getInt(
+ Settings.Global.AIRPLANE_MODE_ON,
+ 0) == 1;
+ mAirplaneState = airplaneModeOn ? ToggleState.On : ToggleState.Off;
+ mAirplaneModeOn.updateState(mAirplaneState);
+ }
+
+ /**
+ * Change the airplane mode system setting
+ */
+ private void changeAirplaneModeSystemSetting(boolean on) {
+ mGlobalSettings.putInt(Settings.Global.AIRPLANE_MODE_ON, on ? 1 : 0);
+ Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
+ intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
+ intent.putExtra("state", on);
+ mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
+ if (!mHasTelephony) {
+ mAirplaneState = on ? ToggleState.On : ToggleState.Off;
+ }
+ }
+
+ @NonNull
+ @Override
+ public Lifecycle getLifecycle() {
+ return mLifecycle;
+ }
+
+ @VisibleForTesting
+ static class ActionsDialogLite extends Dialog implements DialogInterface,
+ ColorExtractor.OnColorsChangedListener {
+
+ protected final Context mContext;
+ protected MultiListLayout mGlobalActionsLayout;
+ protected final MyAdapter mAdapter;
+ protected final MyOverflowAdapter mOverflowAdapter;
+ protected final MyPowerOptionsAdapter mPowerOptionsAdapter;
+ protected final IStatusBarService mStatusBarService;
+ protected final IBinder mToken = new Binder();
+ protected Drawable mBackgroundDrawable;
+ protected final SysuiColorExtractor mColorExtractor;
+ private boolean mKeyguardShowing;
+ protected boolean mShowing;
+ protected float mScrimAlpha;
+ protected final NotificationShadeWindowController mNotificationShadeWindowController;
+ protected final NotificationShadeDepthController mDepthController;
+ protected final SysUiState mSysUiState;
+ private ListPopupWindow mOverflowPopup;
+ private Dialog mPowerOptionsDialog;
+ protected final Runnable mOnRotateCallback;
+
+ protected ViewGroup mContainer;
+
+ ActionsDialogLite(Context context, int themeRes, MyAdapter adapter,
+ MyOverflowAdapter overflowAdapter,
+ NotificationShadeDepthController depthController,
+ SysuiColorExtractor sysuiColorExtractor, IStatusBarService statusBarService,
+ NotificationShadeWindowController notificationShadeWindowController,
+ SysUiState sysuiState, Runnable onRotateCallback, boolean keyguardShowing,
+ MyPowerOptionsAdapter powerAdapter) {
+ super(context, themeRes);
+ mContext = context;
+ mAdapter = adapter;
+ mOverflowAdapter = overflowAdapter;
+ mPowerOptionsAdapter = powerAdapter;
+ mDepthController = depthController;
+ mColorExtractor = sysuiColorExtractor;
+ mStatusBarService = statusBarService;
+ mNotificationShadeWindowController = notificationShadeWindowController;
+ mSysUiState = sysuiState;
+ mOnRotateCallback = onRotateCallback;
+ mKeyguardShowing = keyguardShowing;
+
+ // Window initialization
+ Window window = getWindow();
+ window.requestFeature(Window.FEATURE_NO_TITLE);
+ // Inflate the decor view, so the attributes below are not overwritten by the theme.
+ window.getDecorView();
+ window.getAttributes().systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+ | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
+ window.setLayout(MATCH_PARENT, WRAP_CONTENT);
+ window.addFlags(
+ WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+ | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
+ | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
+ window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY);
+ window.getAttributes().setFitInsetsTypes(0 /* types */);
+ setTitle(R.string.global_actions);
+
+ initializeLayout();
+ }
+
+ private ListPopupWindow createPowerOverflowPopup() {
+ GlobalActionsPopupMenu popup = new GlobalActionsPopupMenu(
+ new ContextThemeWrapper(
+ mContext,
+ com.android.systemui.R.style.Control_ListPopupWindow
+ ), false /* isDropDownMode */);
+ popup.setOnItemClickListener(
+ (parent, view, position, id) -> mOverflowAdapter.onClickItem(position));
+ popup.setOnItemLongClickListener(
+ (parent, view, position, id) -> mOverflowAdapter.onLongClickItem(position));
+ View overflowButton =
+ findViewById(com.android.systemui.R.id.global_actions_overflow_button);
+ popup.setAnchorView(overflowButton);
+ popup.setAdapter(mOverflowAdapter);
+ return popup;
+ }
+
+ public void showPowerOptionsMenu() {
+ mPowerOptionsDialog = GlobalActionsPowerDialog.create(mContext, mPowerOptionsAdapter);
+ mPowerOptionsDialog.show();
+ }
+
+ protected void showPowerOverflowMenu() {
+ mOverflowPopup = createPowerOverflowPopup();
+ mOverflowPopup.show();
+ }
+
+ protected int getLayoutResource() {
+ return com.android.systemui.R.layout.global_actions_grid_lite;
+ }
+
+ protected void initializeLayout() {
+ setContentView(getLayoutResource());
+ fixNavBarClipping();
+
+ mGlobalActionsLayout = findViewById(com.android.systemui.R.id.global_actions_view);
+ mGlobalActionsLayout.setListViewAccessibilityDelegate(new View.AccessibilityDelegate() {
+ @Override
+ public boolean dispatchPopulateAccessibilityEvent(
+ View host, AccessibilityEvent event) {
+ // Populate the title here, just as Activity does
+ event.getText().add(mContext.getString(R.string.global_actions));
+ return true;
+ }
+ });
+ mGlobalActionsLayout.setRotationListener(this::onRotate);
+ mGlobalActionsLayout.setAdapter(mAdapter);
+ mContainer = findViewById(com.android.systemui.R.id.global_actions_container);
+
+ View overflowButton = findViewById(
+ com.android.systemui.R.id.global_actions_overflow_button);
+ if (overflowButton != null) {
+ if (mOverflowAdapter.getCount() > 0) {
+ overflowButton.setOnClickListener((view) -> showPowerOverflowMenu());
+ LinearLayout.LayoutParams params =
+ (LinearLayout.LayoutParams) mGlobalActionsLayout.getLayoutParams();
+ params.setMarginEnd(0);
+ mGlobalActionsLayout.setLayoutParams(params);
+ } else {
+ overflowButton.setVisibility(View.GONE);
+ LinearLayout.LayoutParams params =
+ (LinearLayout.LayoutParams) mGlobalActionsLayout.getLayoutParams();
+ params.setMarginEnd(mContext.getResources().getDimensionPixelSize(
+ com.android.systemui.R.dimen.global_actions_side_margin));
+ mGlobalActionsLayout.setLayoutParams(params);
+ }
+ }
+
+ if (mBackgroundDrawable == null) {
+ mBackgroundDrawable = new ScrimDrawable();
+ mScrimAlpha = 1.0f;
+ }
+ }
+
+ protected void fixNavBarClipping() {
+ ViewGroup content = findViewById(android.R.id.content);
+ content.setClipChildren(false);
+ content.setClipToPadding(false);
+ ViewGroup contentParent = (ViewGroup) content.getParent();
+ contentParent.setClipChildren(false);
+ contentParent.setClipToPadding(false);
+ }
+
+ @Override
+ protected void onStart() {
+ super.setCanceledOnTouchOutside(true);
+ super.onStart();
+ mGlobalActionsLayout.updateList();
+
+ if (mBackgroundDrawable instanceof ScrimDrawable) {
+ mColorExtractor.addOnColorsChangedListener(this);
+ GradientColors colors = mColorExtractor.getNeutralColors();
+ updateColors(colors, false /* animate */);
+ }
+ }
+
+ /**
+ * Updates background and system bars according to current GradientColors.
+ *
+ * @param colors Colors and hints to use.
+ * @param animate Interpolates gradient if true, just sets otherwise.
+ */
+ private void updateColors(GradientColors colors, boolean animate) {
+ if (!(mBackgroundDrawable instanceof ScrimDrawable)) {
+ return;
+ }
+ ((ScrimDrawable) mBackgroundDrawable).setColor(Color.BLACK, animate);
+ View decorView = getWindow().getDecorView();
+ if (colors.supportsDarkText()) {
+ decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR
+ | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ } else {
+ decorView.setSystemUiVisibility(0);
+ }
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ mColorExtractor.removeOnColorsChangedListener(this);
+ }
+
+ @Override
+ public void show() {
+ super.show();
+ // split this up so we can override but still call Dialog.show
+ showDialog();
+ }
+
+ protected void showDialog() {
+ mShowing = true;
+ mNotificationShadeWindowController.setRequestTopUi(true, TAG);
+ mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, true)
+ .commitUpdate(mContext.getDisplayId());
+
+ ViewGroup root = (ViewGroup) mGlobalActionsLayout.getRootView();
+ root.setOnApplyWindowInsetsListener((v, windowInsets) -> {
+ root.setPadding(windowInsets.getStableInsetLeft(),
+ windowInsets.getStableInsetTop(),
+ windowInsets.getStableInsetRight(),
+ windowInsets.getStableInsetBottom());
+ return WindowInsets.CONSUMED;
+ });
+
+ mBackgroundDrawable.setAlpha(0);
+ float xOffset = mGlobalActionsLayout.getAnimationOffsetX();
+ ObjectAnimator alphaAnimator =
+ ObjectAnimator.ofFloat(mContainer, "alpha", 0f, 1f);
+ alphaAnimator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
+ alphaAnimator.setDuration(183);
+ alphaAnimator.addUpdateListener((animation) -> {
+ float animatedValue = animation.getAnimatedFraction();
+ int alpha = (int) (animatedValue * mScrimAlpha * 255);
+ mBackgroundDrawable.setAlpha(alpha);
+ mDepthController.updateGlobalDialogVisibility(animatedValue, mGlobalActionsLayout);
+ });
+
+ ObjectAnimator xAnimator =
+ ObjectAnimator.ofFloat(mContainer, "translationX", xOffset, 0f);
+ xAnimator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN);
+ xAnimator.setDuration(350);
+
+ AnimatorSet animatorSet = new AnimatorSet();
+ animatorSet.playTogether(alphaAnimator, xAnimator);
+ animatorSet.start();
+ }
+
+ @Override
+ public void dismiss() {
+ dismissWithAnimation(() -> {
+ dismissInternal();
+ });
+ }
+
+ protected void dismissInternal() {
+ mContainer.setTranslationX(0);
+ ObjectAnimator alphaAnimator =
+ ObjectAnimator.ofFloat(mContainer, "alpha", 1f, 0f);
+ alphaAnimator.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN);
+ alphaAnimator.setDuration(233);
+ alphaAnimator.addUpdateListener((animation) -> {
+ float animatedValue = 1f - animation.getAnimatedFraction();
+ int alpha = (int) (animatedValue * mScrimAlpha * 255);
+ mBackgroundDrawable.setAlpha(alpha);
+ mDepthController.updateGlobalDialogVisibility(animatedValue, mGlobalActionsLayout);
+ });
+
+ float xOffset = mGlobalActionsLayout.getAnimationOffsetX();
+ ObjectAnimator xAnimator =
+ ObjectAnimator.ofFloat(mContainer, "translationX", 0f, xOffset);
+ xAnimator.setInterpolator(Interpolators.FAST_OUT_LINEAR_IN);
+ xAnimator.setDuration(350);
+
+ AnimatorSet animatorSet = new AnimatorSet();
+ animatorSet.playTogether(alphaAnimator, xAnimator);
+ animatorSet.addListener(new AnimatorListenerAdapter() {
+ public void onAnimationEnd(Animator animation) {
+ completeDismiss();
+ }
+ });
+
+ animatorSet.start();
+
+ // close first, as popup windows will not fade during the animation
+ dismissOverflow(false);
+ dismissPowerOptions(false);
+ }
+
+ void dismissWithAnimation(Runnable animation) {
+ if (!mShowing) {
+ return;
+ }
+ mShowing = false;
+ animation.run();
+ }
+
+ protected void completeDismiss() {
+ mShowing = false;
+ dismissOverflow(true);
+ dismissPowerOptions(true);
+ mNotificationShadeWindowController.setRequestTopUi(false, TAG);
+ mDepthController.updateGlobalDialogVisibility(0, null /* view */);
+ mSysUiState.setFlag(SYSUI_STATE_GLOBAL_ACTIONS_SHOWING, false)
+ .commitUpdate(mContext.getDisplayId());
+ super.dismiss();
+ }
+
+ protected final void dismissOverflow(boolean immediate) {
+ if (mOverflowPopup != null) {
+ if (immediate) {
+ mOverflowPopup.dismissImmediate();
+ } else {
+ mOverflowPopup.dismiss();
+ }
+ }
+ }
+
+ protected final void dismissPowerOptions(boolean immediate) {
+ if (mPowerOptionsDialog != null) {
+ if (immediate) {
+ mPowerOptionsDialog.dismiss();
+ } else {
+ mPowerOptionsDialog.dismiss();
+ }
+ }
+ }
+
+ protected final void setRotationSuggestionsEnabled(boolean enabled) {
+ try {
+ final int userId = Binder.getCallingUserHandle().getIdentifier();
+ final int what = enabled
+ ? StatusBarManager.DISABLE2_NONE
+ : StatusBarManager.DISABLE2_ROTATE_SUGGESTIONS;
+ mStatusBarService.disable2ForUser(what, mToken, mContext.getPackageName(), userId);
+ } catch (RemoteException ex) {
+ throw ex.rethrowFromSystemServer();
+ }
+ }
+
+ @Override
+ public void onColorsChanged(ColorExtractor extractor, int which) {
+ if (mKeyguardShowing) {
+ if ((WallpaperManager.FLAG_LOCK & which) != 0) {
+ updateColors(extractor.getColors(WallpaperManager.FLAG_LOCK),
+ true /* animate */);
+ }
+ } else {
+ if ((WallpaperManager.FLAG_SYSTEM & which) != 0) {
+ updateColors(extractor.getColors(WallpaperManager.FLAG_SYSTEM),
+ true /* animate */);
+ }
+ }
+ }
+
+ public void setKeyguardShowing(boolean keyguardShowing) {
+ mKeyguardShowing = keyguardShowing;
+ }
+
+ public void refreshDialog() {
+ // ensure dropdown menus are dismissed before re-initializing the dialog
+ dismissOverflow(true);
+ dismissPowerOptions(true);
+
+ // re-create dialog
+ initializeLayout();
+ mGlobalActionsLayout.updateList();
+ }
+
+ public void onRotate(int from, int to) {
+ if (mShowing) {
+ mOnRotateCallback.run();
+ refreshDialog();
+ }
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayoutLite.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayoutLite.java
new file mode 100644
index 000000000000..eb4cd6b449a2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsLayoutLite.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.globalactions;
+
+import static com.android.systemui.util.leak.RotationUtils.ROTATION_NONE;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+import androidx.constraintlayout.helper.widget.Flow;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.HardwareBgDrawable;
+import com.android.systemui.R;
+
+/**
+ * ConstraintLayout implementation of the button layout created by the global actions dialog.
+ */
+public class GlobalActionsLayoutLite extends GlobalActionsLayout {
+ private final int mMaxColumns;
+ private final int mMaxRows;
+
+ public GlobalActionsLayoutLite(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mMaxColumns = getResources().getInteger(
+ com.android.systemui.R.integer.power_menu_lite_max_columns);
+ mMaxRows = getResources().getInteger(
+ com.android.systemui.R.integer.power_menu_lite_max_rows);
+ }
+
+ @VisibleForTesting
+ @Override
+ protected boolean shouldReverseListItems() {
+ // Handled in XML
+ return false;
+ }
+
+ @Override
+ protected HardwareBgDrawable getBackgroundDrawable(int backgroundColor) {
+ return null;
+ }
+
+ @Override
+ public void onUpdateList() {
+ super.onUpdateList();
+ int nElementsWrap = (getCurrentRotation() == ROTATION_NONE) ? mMaxColumns : mMaxRows;
+ int nChildren = getListView().getChildCount() - 1; // don't count flow element
+ if (getCurrentRotation() != ROTATION_NONE && nChildren > mMaxRows) {
+ // up to 4 elements can fit in a row in landscape, otherwise limit for balance
+ nElementsWrap -= 1;
+ }
+ Flow flow = findViewById(R.id.list_flow);
+ flow.setMaxElementsWrap(nElementsWrap);
+ }
+
+ @Override
+ protected void addToListView(View v, boolean reverse) {
+ super.addToListView(v, reverse);
+ Flow flow = findViewById(R.id.list_flow);
+ flow.addView(v);
+ }
+
+ @Override
+ protected void removeAllListViews() {
+ View flow = findViewById(R.id.list_flow);
+ super.removeAllListViews();
+
+ // Add flow element back after clearing the list view
+ super.addToListView(flow, false);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ boolean anyTruncated = false;
+ ViewGroup listView = getListView();
+
+ // Check to see if any of the GlobalActionsItems have had their messages truncated
+ for (int i = 0; i < listView.getChildCount(); i++) {
+ View child = listView.getChildAt(i);
+ if (child instanceof GlobalActionsItem) {
+ GlobalActionsItem item = (GlobalActionsItem) child;
+ anyTruncated = anyTruncated || item.isTruncated();
+ }
+ }
+ // If any of the items have been truncated, set the all to single-line marquee
+ if (anyTruncated) {
+ for (int i = 0; i < listView.getChildCount(); i++) {
+ View child = listView.getChildAt(i);
+ if (child instanceof GlobalActionsItem) {
+ GlobalActionsItem item = (GlobalActionsItem) child;
+ item.setMarquee(true);
+ }
+ }
+ }
+ }
+
+ @VisibleForTesting
+ protected float getGridItemSize() {
+ return getContext().getResources().getDimension(R.dimen.global_actions_grid_item_height);
+ }
+
+ @VisibleForTesting
+ protected float getAnimationDistance() {
+ return getGridItemSize() / 2;
+ }
+
+ @Override
+ public float getAnimationOffsetX() {
+ return getAnimationDistance();
+ }
+
+ @Override
+ public float getAnimationOffsetY() {
+ return 0f;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java
index 743ac86cbdcb..d3ae9320d91d 100644
--- a/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/media/MediaControlPanel.java
@@ -16,6 +16,7 @@
package com.android.systemui.media;
+import static android.app.Notification.safeCharSequence;
import static android.provider.Settings.ACTION_MEDIA_CONTROLS_SETTINGS;
import android.app.PendingIntent;
@@ -266,7 +267,7 @@ public class MediaControlPanel {
// Song name
TextView titleText = mViewHolder.getTitleText();
- titleText.setText(data.getSong());
+ titleText.setText(safeCharSequence(data.getSong()));
// App title
TextView appName = mViewHolder.getAppName();
@@ -277,7 +278,7 @@ public class MediaControlPanel {
// Artist name
TextView artistText = mViewHolder.getArtistText();
- artistText.setText(data.getArtist());
+ artistText.setText(safeCharSequence(data.getArtist()));
// Transfer chip
mViewHolder.getSeamless().setVisibility(View.VISIBLE);
diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonView.java
index 531ccb4eb1cb..9ea938325659 100644
--- a/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonView.java
+++ b/packages/SystemUI/src/com/android/systemui/navigationbar/buttons/KeyButtonView.java
@@ -436,6 +436,9 @@ public class KeyButtonView extends ImageView implements ButtonInterface {
@Override
public void abortCurrentGesture() {
Log.d("b/63783866", "KeyButtonView.abortCurrentGesture");
+ if (mCode != KeyEvent.KEYCODE_UNKNOWN) {
+ sendEvent(KeyEvent.ACTION_UP, KeyEvent.FLAG_CANCELED);
+ }
setPressed(false);
mRipple.abortDelayedRipple();
mGestureAborted = true;
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java
index ba41d33bab92..02c12f6d51e5 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceActivity.java
@@ -19,6 +19,9 @@ package com.android.systemui.people;
import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID;
import static android.appwidget.AppWidgetManager.INVALID_APPWIDGET_ID;
+import static com.android.systemui.people.PeopleTileViewHelper.getPersonIconBitmap;
+import static com.android.systemui.people.PeopleTileViewHelper.getSizeInDp;
+
import android.app.Activity;
import android.app.INotificationManager;
import android.app.people.IPeopleManager;
@@ -149,11 +152,11 @@ public class PeopleSpaceActivity extends Activity {
/** Sets {@code tileView} with the data in {@code conversation}. */
private void setTileView(PeopleSpaceTileView tileView, PeopleSpaceTile tile) {
try {
- String pkg = tile.getPackageName();
-
tileView.setName(tile.getUserName().toString());
- tileView.setPackageIcon(mPackageManager.getApplicationIcon(pkg));
- tileView.setPersonIcon(tile.getUserIcon());
+ tileView.setPersonIcon(getPersonIconBitmap(mContext, tile,
+ getSizeInDp(mContext, R.dimen.avatar_size_for_medium,
+ mContext.getResources().getDisplayMetrics().density)));
+
tileView.setOnClickListener(v -> storeWidgetConfiguration(tile));
} catch (Exception e) {
Log.e(TAG, "Couldn't retrieve shortcut information", e);
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java
index e30ad80be3f6..36b435b04fd6 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleSpaceTileView.java
@@ -19,8 +19,7 @@ package com.android.systemui.people;
import android.app.people.PeopleSpaceTile;
import android.content.Context;
import android.content.pm.LauncherApps;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.Icon;
+import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -37,7 +36,6 @@ public class PeopleSpaceTileView extends LinearLayout {
private View mTileView;
private TextView mNameView;
- private ImageView mPackageIconView;
private ImageView mPersonIconView;
public PeopleSpaceTileView(Context context, ViewGroup view, String shortcutId, boolean isLast) {
@@ -56,7 +54,6 @@ public class PeopleSpaceTileView extends LinearLayout {
}
}
mNameView = mTileView.findViewById(R.id.tile_view_name);
- mPackageIconView = mTileView.findViewById(R.id.tile_view_package_icon);
mPersonIconView = mTileView.findViewById(R.id.tile_view_person_icon);
}
@@ -65,14 +62,9 @@ public class PeopleSpaceTileView extends LinearLayout {
mNameView.setText(name);
}
- /** Sets the package drawable on the tile. */
- public void setPackageIcon(Drawable drawable) {
- mPackageIconView.setImageDrawable(drawable);
- }
-
- /** Sets the person bitmap on the tile. */
- public void setPersonIcon(Icon icon) {
- mPersonIconView.setImageIcon(icon);
+ /** Sets the person and package drawable on the tile. */
+ public void setPersonIcon(Bitmap bitmap) {
+ mPersonIconView.setImageBitmap(bitmap);
}
/** Sets the click listener of the tile. */
diff --git a/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java b/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java
index 8d1b712e0807..96fbe6987562 100644
--- a/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/people/PeopleTileViewHelper.java
@@ -192,7 +192,11 @@ class PeopleTileViewHelper {
}
private int getSizeInDp(int dimenResourceId) {
- return (int) (mContext.getResources().getDimension(dimenResourceId) / mDensity);
+ return getSizeInDp(mContext, dimenResourceId, mDensity);
+ }
+
+ public static int getSizeInDp(Context context, int dimenResourceId, float density) {
+ return (int) (context.getResources().getDimension(dimenResourceId) / density);
}
private int getContentHeightForLayout(int lineHeight) {
@@ -278,24 +282,11 @@ class PeopleTileViewHelper {
} else {
views.setViewVisibility(R.id.availability, View.GONE);
}
- boolean hasNewStory =
- mTile.getStatuses() != null && mTile.getStatuses().stream().anyMatch(
- c -> c.getActivity() == ACTIVITY_NEW_STORY);
+
views.setTextViewText(R.id.name, mTile.getUserName().toString());
views.setBoolean(R.id.image, "setClipToOutline", true);
-
- Icon icon = mTile.getUserIcon();
- PeopleStoryIconFactory storyIcon = new PeopleStoryIconFactory(mContext,
- mContext.getPackageManager(),
- IconDrawableFactory.newInstance(mContext, false),
- maxAvatarSize);
- Drawable drawable = icon.loadDrawable(mContext);
- Drawable personDrawable = storyIcon.getPeopleTileDrawable(drawable,
- mTile.getPackageName(), getUserId(mTile), mTile.isImportantConversation(),
- hasNewStory);
- Bitmap bitmap = convertDrawableToBitmap(personDrawable);
- views.setImageViewBitmap(R.id.person_icon, bitmap);
-
+ views.setImageViewBitmap(R.id.person_icon,
+ getPersonIconBitmap(mContext, mTile, maxAvatarSize));
return views;
} catch (Exception e) {
Log.e(TAG, "Failed to set common fields: " + e);
@@ -583,4 +574,23 @@ class PeopleTileViewHelper {
return R.layout.people_tile_small;
}
}
+
+ /** Returns a bitmap with the user icon and package icon. */
+ public static Bitmap getPersonIconBitmap(
+ Context context, PeopleSpaceTile tile, int maxAvatarSize) {
+ boolean hasNewStory =
+ tile.getStatuses() != null && tile.getStatuses().stream().anyMatch(
+ c -> c.getActivity() == ACTIVITY_NEW_STORY);
+
+ Icon icon = tile.getUserIcon();
+ PeopleStoryIconFactory storyIcon = new PeopleStoryIconFactory(context,
+ context.getPackageManager(),
+ IconDrawableFactory.newInstance(context, false),
+ maxAvatarSize);
+ Drawable drawable = icon.loadDrawable(context);
+ Drawable personDrawable = storyIcon.getPeopleTileDrawable(drawable,
+ tile.getPackageName(), getUserId(tile), tile.isImportantConversation(),
+ hasNewStory);
+ return convertDrawableToBitmap(personDrawable);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
index d54d3f21f0b6..9a889e0ff088 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSDetail.java
@@ -210,6 +210,7 @@ public class QSDetail extends LinearLayout {
mDetailAdapter = adapter;
listener = mHideGridContentWhenDone;
setVisibility(View.VISIBLE);
+ updateDetailText();
} else {
if (wasShowingDetail) {
Dependency.get(MetricsLogger.class).hidden(mDetailAdapter.getMetricsCategory());
@@ -223,7 +224,6 @@ public class QSDetail extends LinearLayout {
mQsPanelController.setGridContentVisibility(true);
mQsPanelCallback.onScanStateChanged(false);
}
- updateDetailText();
sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
if (mShouldAnimate) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java
index 3d8784b29e4c..eb7b115700a7 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterView.java
@@ -75,6 +75,8 @@ public class QSFooterView extends FrameLayout {
private TouchAnimator mSettingsCogAnimator;
private View mActionsContainer;
+ private View mTunerIcon;
+ private int mTunerIconTranslation;
private OnClickListener mExpandClickListener;
@@ -107,6 +109,7 @@ public class QSFooterView extends FrameLayout {
mActionsContainer = requireViewById(R.id.qs_footer_actions_container);
mEditContainer = findViewById(R.id.qs_footer_actions_edit_container);
mBuildText = findViewById(R.id.build);
+ mTunerIcon = requireViewById(R.id.tuner_icon);
// RenderThread is doing more harm than good when touching the header (to expand quick
// settings), so disable it for this view
@@ -166,6 +169,9 @@ public class QSFooterView extends FrameLayout {
private void updateResources() {
updateFooterAnimator();
+ mTunerIconTranslation = mContext.getResources()
+ .getDimensionPixelOffset(R.dimen.qs_footer_tuner_icon_translation);
+ mTunerIcon.setTranslationX(isLayoutRtl() ? -mTunerIconTranslation : mTunerIconTranslation);
}
private void updateFooterAnimator() {
@@ -274,8 +280,7 @@ public class QSFooterView extends FrameLayout {
private void updateVisibilities(boolean isTunerEnabled) {
mSettingsContainer.setVisibility(mQsDisabled ? View.GONE : View.VISIBLE);
- mSettingsContainer.findViewById(R.id.tuner_icon).setVisibility(
- isTunerEnabled ? View.VISIBLE : View.INVISIBLE);
+ mTunerIcon.setVisibility(isTunerEnabled ? View.VISIBLE : View.INVISIBLE);
final boolean isDemo = UserManager.isDeviceInDemoMode(mContext);
mMultiUserSwitch.setVisibility(showUserSwitcher() ? View.VISIBLE : View.GONE);
if (mEditContainer != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java
index f1f4e16206a1..52e05a4fd6c5 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooterViewController.java
@@ -32,6 +32,7 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R;
+import com.android.systemui.globalactions.GlobalActionsDialogLite;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.settings.UserTracker;
@@ -68,6 +69,7 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
private final PageIndicator mPageIndicator;
private final View mPowerMenuLite;
private final boolean mShowPMLiteButton;
+ private GlobalActionsDialogLite mGlobalActionsDialog;
private final UserInfoController.OnUserInfoChangedListener mOnUserInfoChangedListener =
new UserInfoController.OnUserInfoChangedListener() {
@@ -115,6 +117,8 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
} else {
startSettingsActivity();
}
+ } else if (v == mPowerMenuLite) {
+ mGlobalActionsDialog.showOrHideDialog(false, true);
}
}
};
@@ -129,7 +133,8 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
QSPanelController qsPanelController, QSDetailDisplayer qsDetailDisplayer,
QuickQSPanelController quickQSPanelController,
TunerService tunerService, MetricsLogger metricsLogger,
- @Named(PM_LITE_ENABLED) boolean showPMLiteButton) {
+ @Named(PM_LITE_ENABLED) boolean showPMLiteButton,
+ GlobalActionsDialogLite globalActionsDialog) {
super(view);
mUserManager = userManager;
mUserInfoController = userInfoController;
@@ -149,11 +154,15 @@ public class QSFooterViewController extends ViewController<QSFooterView> impleme
mPageIndicator = mView.findViewById(R.id.footer_page_indicator);
mPowerMenuLite = mView.findViewById(R.id.pm_lite);
mShowPMLiteButton = showPMLiteButton;
+ mGlobalActionsDialog = globalActionsDialog;
}
@Override
protected void onViewAttached() {
- if (!mShowPMLiteButton) {
+ if (mShowPMLiteButton) {
+ mPowerMenuLite.setVisibility(View.VISIBLE);
+ mPowerMenuLite.setOnClickListener(mSettingsOnClickListener);
+ } else {
mPowerMenuLite.setVisibility(View.GONE);
}
mView.addOnLayoutChangeListener(
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
index 86836f935aba..e41a0389e8c1 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java
@@ -202,11 +202,10 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
private void addTile(final QSTile tile, boolean collapsedView) {
final TileRecord r = new TileRecord();
r.tile = tile;
- r.tileView = mHost.createTileView(tile, collapsedView);
+ r.tileView = mHost.createTileView(getContext(), tile, collapsedView);
mView.addTile(r);
mRecords.add(r);
mCachedSpecs = getTilesSpecs();
-
}
/** */
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
index 0a9c12fa4a13..faac196b75bc 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSTileHost.java
@@ -423,9 +423,15 @@ public class QSTileHost implements QSHost, Tunable, PluginListener<QSFactory>, D
return null;
}
- public QSTileView createTileView(QSTile tile, boolean collapsedView) {
+ /**
+ * Create a view for a tile, iterating over all possible {@link QSFactory}.
+ *
+ * @see QSFactory#createTileView
+ */
+ public QSTileView createTileView(Context themedContext, QSTile tile, boolean collapsedView) {
for (int i = 0; i < mQsFactories.size(); i++) {
- QSTileView view = mQsFactories.get(i).createTileView(tile, collapsedView);
+ QSTileView view = mQsFactories.get(i)
+ .createTileView(themedContext, tile, collapsedView);
if (view != null) {
return view;
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
index 8aaf84b7d9f9..b661e2b6ae57 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
@@ -17,9 +17,6 @@ package com.android.systemui.qs;
import static android.app.StatusBarManager.DISABLE2_QUICK_SETTINGS;
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
-import static com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN;
-import static com.android.systemui.statusbar.StatusBarIconView.STATE_ICON;
-
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -41,7 +38,7 @@ import com.android.systemui.BatteryMeterView;
import com.android.systemui.Interpolators;
import com.android.systemui.R;
import com.android.systemui.qs.QSDetail.Callback;
-import com.android.systemui.statusbar.StatusBarMobileView;
+import com.android.systemui.statusbar.StatusBarIconView;
import com.android.systemui.statusbar.phone.StatusBarIconController.TintedIconManager;
import com.android.systemui.statusbar.phone.StatusBarWindowView;
import com.android.systemui.statusbar.phone.StatusIconContainer;
@@ -91,7 +88,7 @@ public class QuickStatusBarHeader extends FrameLayout {
public QuickStatusBarHeader(Context context, AttributeSet attrs) {
super(context, attrs);
- mMobileSlotName = context.getString(com.android.internal.R.string.status_bar_mobile);
+ mMobileSlotName = context.getString(com.android.internal.R.string.status_bar_no_calling);
}
/**
@@ -221,8 +218,8 @@ public class QuickStatusBarHeader extends FrameLayout {
}
private void updateAlphaAnimator() {
- StatusBarMobileView icon =
- ((StatusBarMobileView) mIconContainer.getViewForSlot(mMobileSlotName));
+ StatusBarIconView icon =
+ ((StatusBarIconView) mIconContainer.getViewForSlot(mMobileSlotName));
TouchAnimator.Builder builder = new TouchAnimator.Builder()
.addFloat(mQSCarriers, "alpha", 0, 1)
.addFloat(mDatePrivacyView, "alpha", 0, mDatePrivacyAlpha);
@@ -231,14 +228,12 @@ public class QuickStatusBarHeader extends FrameLayout {
builder.setListener(new TouchAnimator.ListenerAdapter() {
@Override
public void onAnimationAtEnd() {
- icon.forceHidden(true);
- icon.setVisibleState(STATE_HIDDEN);
+ mIconContainer.addIgnoredSlot(mMobileSlotName);
}
@Override
public void onAnimationStarted() {
- icon.forceHidden(false);
- icon.setVisibleState(STATE_ICON);
+ mIconContainer.removeIgnoredSlot(mMobileSlotName);
}
});
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
index ce90fc107b82..b609df5e77fe 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/SignalTileView.java
@@ -134,8 +134,9 @@ public class SignalTileView extends QSIconViewImpl {
mSignal.setPaddingRelative(0, 0, 0, 0);
}
final boolean shouldAnimate = allowAnimations && isShown();
- setVisibility(mIn, shouldAnimate, s.activityIn);
- setVisibility(mOut, shouldAnimate, s.activityOut);
+ // Do not show activity indicators
+// setVisibility(mIn, shouldAnimate, s.activityIn);
+// setVisibility(mOut, shouldAnimate, s.activityOut);
}
private void setVisibility(View view, boolean shown, boolean visible) {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java
index ba349c6273d9..9b0536c595ad 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java
@@ -19,9 +19,7 @@ import static com.android.systemui.qs.dagger.QSFlagsModule.QS_LABELS_FLAG;
import android.content.Context;
import android.os.Build;
import android.util.Log;
-import android.view.ContextThemeWrapper;
-import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.plugins.qs.QSFactory;
import com.android.systemui.plugins.qs.QSIconView;
@@ -251,8 +249,7 @@ public class QSFactoryImpl implements QSFactory {
}
@Override
- public QSTileView createTileView(QSTile tile, boolean collapsedView) {
- Context context = new ContextThemeWrapper(mQsHostLazy.get().getContext(), R.style.qs_theme);
+ public QSTileView createTileView(Context context, QSTile tile, boolean collapsedView) {
QSIconView icon = tile.createTileView(context);
if (mSideLabels) {
return new QSTileViewHorizontal(context, icon, collapsedView);
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java
index 0d73a5a97706..5b986b6fece9 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CameraToggleTile.java
@@ -66,7 +66,7 @@ public class CameraToggleTile extends SensorPrivacyToggleTile {
return getHost().getContext().getPackageManager().hasSystemFeature(FEATURE_CAMERA_TOGGLE)
&& whitelistIpcs(() -> DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
"camera_toggle_enabled",
- false));
+ true));
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java
index b8d879226f55..42bd77b354bb 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/MicrophoneToggleTile.java
@@ -67,7 +67,7 @@ public class MicrophoneToggleTile extends SensorPrivacyToggleTile {
.hasSystemFeature(FEATURE_MICROPHONE_TOGGLE)
&& whitelistIpcs(() -> DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY,
"mic_toggle_enabled",
- false));
+ true));
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureClient.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureClient.java
index 926d5c4701aa..2863074bee0a 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureClient.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureClient.java
@@ -83,6 +83,13 @@ public class ScrollCaptureClient {
int getMaxTiles();
/**
+ * @return the maximum combined capture height for this session, in pixels.
+ */
+ default int getMaxHeight() {
+ return getMaxTiles() * getTileHeight();
+ }
+
+ /**
* @return the height of each image tile
*/
int getTileHeight();
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java
index d3dd048a989e..3dc8ae8ada9f 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/ScrollCaptureController.java
@@ -27,6 +27,7 @@ import android.view.ScrollCaptureResponse;
import androidx.concurrent.futures.CallbackToFutureAdapter;
import androidx.concurrent.futures.CallbackToFutureAdapter.Completer;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.screenshot.ScrollCaptureClient.CaptureResult;
import com.android.systemui.screenshot.ScrollCaptureClient.Session;
@@ -139,6 +140,11 @@ public class ScrollCaptureController {
mImageTileSet = imageTileSet;
}
+ @VisibleForTesting
+ float getTargetTopSizeRatio() {
+ return IDEAL_PORTION_ABOVE;
+ }
+
/**
* Run scroll capture. Performs a batch capture, collecting image tiles.
*
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java b/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java
index 90c3dfcee5bf..b937dad269e9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/FeatureFlags.java
@@ -98,4 +98,8 @@ public class FeatureFlags {
public boolean isChargingRippleEnabled() {
return mFlagReader.isEnabled(R.bool.flag_charging_ripple);
}
+
+ public boolean isOngoingCallStatusBarChipEnabled() {
+ return mFlagReader.isEnabled(R.bool.flag_ongoing_call_status_bar_chip);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGroupingUtil.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGroupingUtil.java
index e090d0b13205..1c5df4119a24 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGroupingUtil.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGroupingUtil.java
@@ -161,22 +161,22 @@ public class NotificationGroupingUtil {
private void sanitizeTopLineViews(ExpandableNotificationRow row) {
if (row.isSummaryWithChildren()) {
- sanitizeTopLine(row.getNotificationViewWrapper().getNotificationHeader());
+ sanitizeTopLine(row.getNotificationViewWrapper().getNotificationHeader(), row);
return;
}
final NotificationContentView layout = row.getPrivateLayout();
- sanitizeChild(layout.getContractedChild());
- sanitizeChild(layout.getHeadsUpChild());
- sanitizeChild(layout.getExpandedChild());
+ sanitizeChild(layout.getContractedChild(), row);
+ sanitizeChild(layout.getHeadsUpChild(), row);
+ sanitizeChild(layout.getExpandedChild(), row);
}
- private void sanitizeChild(View child) {
+ private void sanitizeChild(View child, ExpandableNotificationRow row) {
if (child != null) {
- sanitizeTopLine(child.findViewById(R.id.notification_top_line));
+ sanitizeTopLine(child.findViewById(R.id.notification_top_line), row);
}
}
- private void sanitizeTopLine(ViewGroup rowHeader) {
+ private void sanitizeTopLine(ViewGroup rowHeader, ExpandableNotificationRow row) {
if (rowHeader == null) {
return;
}
@@ -195,7 +195,7 @@ public class NotificationGroupingUtil {
}
// in case no view is visible we make sure the time is visible
int timeVisibility = !hasVisibleText
- || mRow.getEntry().getSbn().getNotification().showsTime()
+ || row.getEntry().getSbn().getNotification().showsTime()
? View.VISIBLE : View.GONE;
time.setVisibility(timeVisibility);
View left = null;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt
index 2f198d500299..77b418670ca6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/charging/ChargingRippleView.kt
@@ -20,13 +20,14 @@ import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.animation.ValueAnimator
import android.content.Context
+import android.content.res.Configuration
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.PointF
import android.util.AttributeSet
import android.view.View
-private const val RIPPLE_SPARKLE_STRENGTH: Float = 0.4f
+private const val RIPPLE_SPARKLE_STRENGTH: Float = 0.3f
/**
* Expanding ripple effect that shows when charging begins.
@@ -51,6 +52,16 @@ class ChargingRippleView(context: Context?, attrs: AttributeSet?) : View(context
visibility = View.GONE
}
+ override fun onConfigurationChanged(newConfig: Configuration?) {
+ rippleShader.pixelDensity = resources.displayMetrics.density
+ super.onConfigurationChanged(newConfig)
+ }
+
+ override fun onAttachedToWindow() {
+ rippleShader.pixelDensity = resources.displayMetrics.density
+ super.onAttachedToWindow()
+ }
+
fun startRipple() {
if (rippleInProgress) {
return // Ignore if ripple effect is already playing
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt
index 296868a20dad..146046b33375 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt
@@ -42,6 +42,7 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) {
uniform float in_fadeCircle;
uniform float in_fadeRing;
uniform float in_blur;
+ uniform float in_pixelDensity;
uniform vec4 in_color;
uniform float in_sparkle_strength;"""
private const val SHADER_LIB = """float triangleNoise(vec2 n) {
@@ -60,12 +61,13 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) {
float n = triangleNoise(uv);
float s = 0.0;
for (float i = 0; i < 4; i += 1) {
- float l = i * 0.25;
- float h = l + 0.005;
- float o = abs(sin(0.1 * PI * (t + i)));
- s += threshold(n + o, l, h);
+ float l = i * 0.01;
+ float h = l + 0.1;
+ float o = smoothstep(n - l, h, n);
+ o *= abs(sin(PI * o * (t + 0.55 * i)));
+ s += o;
}
- return saturate(s);
+ return s;
}
float softCircle(vec2 uv, vec2 xy, float radius, float blur) {
@@ -96,10 +98,11 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) {
// Draw shapes
float sparkleRing = softRing(p_distorted, in_origin, in_radius, in_blur);
- float sparkle = sparkles(p, in_time * 0.000033) * sparkleRing * in_fadeSparkle;
+ float sparkle = sparkles(p - mod(p, in_pixelDensity * 0.8), in_time * 0.00175)
+ * sparkleRing * in_fadeSparkle;
float circle = softCircle(p_distorted, in_origin, in_radius * 1.2, in_blur);
float rippleAlpha = max(circle * in_fadeCircle,
- softRing(p_distorted, in_origin, in_radius, in_blur) * in_fadeRing) * 0.36;
+ softRing(p_distorted, in_origin, in_radius, in_blur) * in_fadeRing) * 0.45;
vec4 ripple = in_color * rippleAlpha;
return mix(ripple, vec4(sparkle), sparkle * in_sparkle_strength);
}"""
@@ -139,12 +142,12 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) {
field = value
setUniform("in_progress", value)
setUniform("in_radius",
- (1 - (1 - value) * (1 - value) * (1 - value))* 1.2f * radius)
+ (1 - (1 - value) * (1 - value) * (1 - value))* radius)
setUniform("in_blur", MathUtils.lerp(1.25f, 0.5f, value))
val fadeIn = subProgress(0f, 0.1f, value)
- val fadeOutNoise = subProgress(0.8f, 1f, value)
- val fadeOutRipple = subProgress(0.4f, 1f, value)
+ val fadeOutNoise = subProgress(0.4f, 1f, value)
+ val fadeOutRipple = subProgress(0.3f, 1f, value)
val fadeCircle = subProgress(0f, 0.2f, value)
setUniform("in_fadeSparkle", Math.min(fadeIn, 1 - fadeOutNoise))
setUniform("in_fadeCircle", 1 - fadeCircle)
@@ -191,4 +194,10 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) {
setUniform("in_distort_radial", 75 * progress * value)
setUniform("in_distort_xy", 75 * value)
}
+
+ var pixelDensity: Float = 1.0f
+ set(value) {
+ field = value
+ setUniform("in_pixelDensity", value)
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java
index efd0519d6608..14c73b5cbb4c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/dagger/StatusBarDependenciesModule.java
@@ -49,6 +49,7 @@ import com.android.systemui.statusbar.notification.collection.NotifPipeline;
import com.android.systemui.statusbar.notification.collection.inflation.LowPriorityInflationHelper;
import com.android.systemui.statusbar.notification.collection.legacy.NotificationGroupManagerLegacy;
import com.android.systemui.statusbar.notification.collection.legacy.VisualStabilityManager;
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection;
import com.android.systemui.statusbar.notification.stack.ForegroundServiceSectionController;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.ManagedProfileController;
@@ -57,6 +58,7 @@ import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl;
import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback;
+import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.policy.RemoteInputUriController;
import com.android.systemui.tracing.ProtoTracer;
import com.android.systemui.util.DeviceConfigProxy;
@@ -226,4 +228,16 @@ public interface StatusBarDependenciesModule {
@Binds
StatusBarIconController provideStatusBarIconController(
StatusBarIconControllerImpl controllerImpl);
+
+ /**
+ */
+ @Provides
+ @SysUISingleton
+ static OngoingCallController provideOngoingCallController(
+ CommonNotifCollection notifCollection, FeatureFlags featureFlags) {
+ OngoingCallController ongoingCallController =
+ new OngoingCallController(notifCollection, featureFlags);
+ ongoingCallController.init();
+ return ongoingCallController;
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java
index 75d772e8a1c5..db0c1745f565 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionListener.java
@@ -57,7 +57,7 @@ public interface NotifCollectionListener {
* Called whenever a notification with the same key as an existing notification is posted. By
* the time this listener is called, the entry's SBN and Ranking will already have been updated.
*/
- default void onEntryUpdated(NotificationEntry entry) {
+ default void onEntryUpdated(@NonNull NotificationEntry entry) {
}
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
index 1d307364d661..5f3933b827c4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationChildrenContainer.java
@@ -105,7 +105,6 @@ public class NotificationChildrenContainer extends ViewGroup {
private ViewGroup mCurrentHeader;
private boolean mIsConversation;
- private boolean mTintWithThemeAccent;
private boolean mShowGroupCountInExpander;
private boolean mShowDividersWhenExpanded;
private boolean mHideDividersDuringExpand;
@@ -149,8 +148,6 @@ public class NotificationChildrenContainer extends ViewGroup {
com.android.internal.R.dimen.notification_content_margin);
mEnableShadowOnChildNotifications =
res.getBoolean(R.bool.config_enableShadowOnChildNotifications);
- mTintWithThemeAccent =
- res.getBoolean(com.android.internal.R.bool.config_tintNotificationsWithTheme);
mShowGroupCountInExpander =
res.getBoolean(R.bool.config_showNotificationGroupCountInExpander);
mShowDividersWhenExpanded =
@@ -1223,14 +1220,11 @@ public class NotificationChildrenContainer extends ViewGroup {
return;
}
int color = mContainingNotification.getNotificationColor();
- if (mTintWithThemeAccent) {
- // We're using the theme accent, color with the accent color instead of the notif color
- Resources.Theme theme = new ContextThemeWrapper(mContext,
- com.android.internal.R.style.Theme_DeviceDefault_DayNight).getTheme();
- TypedArray ta = theme.obtainStyledAttributes(
- new int[]{com.android.internal.R.attr.colorAccent});
+ Resources.Theme theme = new ContextThemeWrapper(mContext,
+ com.android.internal.R.style.Theme_DeviceDefault_DayNight).getTheme();
+ try (TypedArray ta = theme.obtainStyledAttributes(
+ new int[]{com.android.internal.R.attr.colorAccent})) {
color = ta.getColor(0, color);
- ta.recycle();
}
mHybridGroupManager.setOverflowNumberColor(mOverflowNumber, color);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
index 562d0ec06a63..f64a0e03698a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java
@@ -37,6 +37,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager;
+import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.policy.EncryptionHelper;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.NetworkController;
@@ -45,6 +46,8 @@ import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
import java.util.ArrayList;
import java.util.List;
+import javax.inject.Inject;
+
/**
* Contains the collapsed status bar and handles hiding/showing based on disable flags
* and keyguard state. Also manages lifecycle to make sure the views it contains are being
@@ -72,6 +75,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
private DarkIconManager mDarkIconManager;
private View mOperatorNameFrame;
private CommandQueue mCommandQueue;
+ private OngoingCallController mOngoingCallController;
private List<String> mBlockedIcons = new ArrayList<>();
@@ -82,6 +86,11 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
}
};
+ @Inject
+ public CollapsedStatusBarFragment(OngoingCallController ongoingCallController) {
+ mOngoingCallController = ongoingCallController;
+ }
+
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -110,7 +119,6 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
mDarkIconManager.setShouldLog(true);
mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_volume));
mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_alarm_clock));
- mBlockedIcons.add(getString(com.android.internal.R.string.status_bar_call_strength));
mDarkIconManager.setBlockList(mBlockedIcons);
Dependency.get(StatusBarIconController.class).addIconGroup(mDarkIconManager);
mSystemIconArea = mStatusBar.findViewById(R.id.system_icon_area);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
index 6b69103f6030..5ff9b703924e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -555,6 +555,13 @@ public class KeyguardBouncer {
pw.println(" mIsAnimatingAway: " + mIsAnimatingAway);
}
+ /** Update keyguard position based on a tapped X coordinate. */
+ public void updateKeyguardPosition(float x) {
+ if (mKeyguardViewController != null) {
+ mKeyguardViewController.updateKeyguardPosition(x);
+ }
+ }
+
public interface BouncerExpansionCallback {
void onFullyShown();
void onStartingToHide();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt
index 242bd0a29d2f..707135c3d95b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBypassController.kt
@@ -124,7 +124,7 @@ open class KeyguardBypassController : Dumpable {
biometricSourceType: BiometricSourceType,
isStrongBiometric: Boolean
): Boolean {
- if (bypassEnabled) {
+ if (biometricSourceType == BiometricSourceType.FACE && bypassEnabled) {
val can = canBypass()
if (!can && (isPulseExpanding || qSExpanded)) {
pendingUnlock = PendingUnlock(biometricSourceType, isStrongBiometric)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
index 2d760e6fc176..3f8e9d372d82 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
@@ -189,7 +189,6 @@ public class KeyguardStatusBarView extends RelativeLayout
Resources r = getResources();
mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_volume));
mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_alarm_clock));
- mBlockedIcons.add(r.getString(com.android.internal.R.string.status_bar_call_strength));
}
private void updateVisibilities() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
index d7148b01a44f..555df5c37ee3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelViewController.java
@@ -3494,6 +3494,12 @@ public class NotificationPanelViewController extends PanelViewController {
updateHorizontalPanelPosition(event.getX());
handled = true;
}
+
+ if (event.getActionMasked() == MotionEvent.ACTION_DOWN && isFullyExpanded()
+ && mStatusBarKeyguardViewManager.isShowing()) {
+ mStatusBarKeyguardViewManager.updateKeyguardPosition(event.getX());
+ }
+
handled |= super.onTouch(v, event);
return !mDozing || mPulsing || handled || showingOrAnimatingAltAuth;
}
@@ -3537,7 +3543,8 @@ public class NotificationPanelViewController extends PanelViewController {
mStatusBarStateController,
mUpdateMonitor,
mAuthController,
- mStatusBarKeyguardViewManager);
+ mStatusBarKeyguardViewManager,
+ mKeyguardStateController);
mDisabledUdfpsController.init();
} else if (mDisabledUdfpsController != null && !udfpsEnrolled) {
mDisabledUdfpsController.destroy();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java
index af595b60daa1..72f169564c10 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowView.java
@@ -49,7 +49,6 @@ import android.view.WindowInsets;
import android.view.WindowInsetsController;
import android.widget.FrameLayout;
-import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.view.FloatingActionMode;
import com.android.internal.widget.FloatingToolbar;
import com.android.systemui.R;
@@ -174,7 +173,11 @@ public class NotificationShadeWindowView extends FrameLayout {
public boolean dispatchTouchEvent(MotionEvent ev) {
Boolean result = mInteractionEventHandler.handleDispatchTouchEvent(ev);
- return result != null ? result : super.dispatchTouchEvent(ev);
+ result = result != null ? result : super.dispatchTouchEvent(ev);
+
+ mInteractionEventHandler.dispatchTouchEventComplete();
+
+ return result;
}
@Override
@@ -346,6 +349,12 @@ public class NotificationShadeWindowView extends FrameLayout {
Boolean handleDispatchTouchEvent(MotionEvent ev);
/**
+ * Called after all dispatching is done.
+ */
+
+ void dispatchTouchEventComplete();
+
+ /**
* Returns if the view should intercept the touch event.
*
* The touch event may still be interecepted if
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
index 5595ae7ed820..2ff7c9933edf 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationShadeWindowViewController.java
@@ -292,6 +292,11 @@ public class NotificationShadeWindowViewController {
}
@Override
+ public void dispatchTouchEventComplete() {
+ mFalsingCollector.onMotionEventComplete();
+ }
+
+ @Override
public boolean shouldInterceptTouchEvent(MotionEvent ev) {
if (mStatusBarStateController.isDozing() && !mService.isPulsing()
&& !mDockManager.isDocked()) {
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 012439e448c3..aa0be8a39716 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -225,6 +225,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationStackScroll
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
import com.android.systemui.statusbar.phone.dagger.StatusBarPhoneModule;
+import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BrightnessMirrorController;
import com.android.systemui.statusbar.policy.ConfigurationController;
@@ -424,6 +425,7 @@ public class StatusBar extends SystemUI implements DemoMode,
private final DismissCallbackRegistry mDismissCallbackRegistry;
private final DemoModeController mDemoModeController;
private NotificationsController mNotificationsController;
+ private final OngoingCallController mOngoingCallController;
// expanded notifications
// the sliding/resizing panel within the notification window
@@ -788,6 +790,7 @@ public class StatusBar extends SystemUI implements DemoMode,
NotificationIconAreaController notificationIconAreaController,
BrightnessSlider.Factory brightnessSliderFactory,
WiredChargingRippleController chargingRippleAnimationController,
+ OngoingCallController ongoingCallController,
FeatureFlags featureFlags) {
super(context);
mNotificationsController = notificationsController;
@@ -867,6 +870,7 @@ public class StatusBar extends SystemUI implements DemoMode,
mNotificationIconAreaController = notificationIconAreaController;
mBrightnessSliderFactory = brightnessSliderFactory;
mChargingRippleAnimationController = chargingRippleAnimationController;
+ mOngoingCallController = ongoingCallController;
mFeatureFlags = featureFlags;
mExpansionChangedListeners = new ArrayList<>();
@@ -1153,7 +1157,8 @@ public class StatusBar extends SystemUI implements DemoMode,
checkBarModes();
}).getFragmentManager()
.beginTransaction()
- .replace(R.id.status_bar_container, new CollapsedStatusBarFragment(),
+ .replace(R.id.status_bar_container,
+ new CollapsedStatusBarFragment(mOngoingCallController),
CollapsedStatusBarFragment.TAG)
.commit();
@@ -2608,7 +2613,8 @@ public class StatusBar extends SystemUI implements DemoMode,
" (auto: " + UiModeManager.MODE_NIGHT_AUTO +
", yes: " + UiModeManager.MODE_NIGHT_YES +
", no: " + UiModeManager.MODE_NIGHT_NO + ")");
- final boolean lightWpTheme = mContext.getThemeResId() == R.style.Theme_SystemUI_Light;
+ final boolean lightWpTheme = mContext.getThemeResId()
+ == R.style.Theme_SystemUI_LightWallpaper;
pw.println(" light wallpaper theme: " + lightWpTheme);
if (mKeyguardIndicationController != null) {
@@ -3489,7 +3495,8 @@ public class StatusBar extends SystemUI implements DemoMode,
// Lock wallpaper defines the color of the majority of the views, hence we'll use it
// to set our default theme.
final boolean lockDarkText = mColorExtractor.getNeutralColors().supportsDarkText();
- final int themeResId = lockDarkText ? R.style.Theme_SystemUI_Light : R.style.Theme_SystemUI;
+ final int themeResId = lockDarkText ? R.style.Theme_SystemUI_LightWallpaper
+ : R.style.Theme_SystemUI;
if (mContext.getThemeResId() != themeResId) {
mContext.setTheme(themeResId);
mConfigurationController.notifyThemeChanged();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
index 93b83d3cbcbd..89e701606c1a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java
@@ -74,10 +74,6 @@ public interface StatusBarIconController {
/**
* Display the no calling & SMS icons.
*/
- void setCallStrengthIcons(String slot, List<CallIndicatorIconState> states);
- /**
- * Display the no calling & SMS icons.
- */
void setNoCallingIcons(String slot, List<CallIndicatorIconState> states);
public void setIconVisibility(String slot, boolean b);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
index 75900a2bffa1..068ded32bbdb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java
@@ -224,33 +224,6 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu
}
/**
- * Accept a list of CallIndicatorIconStates, and show the call strength icons.
- * @param slot StatusBar slot for the call strength icons
- * @param states All of the no Calling & SMS icon states
- */
- @Override
- public void setCallStrengthIcons(String slot, List<CallIndicatorIconState> states) {
- Slot callStrengthSlot = getSlot(slot);
- int callStrengthSlotIndex = getSlotIndex(slot);
- Collections.reverse(states);
- for (CallIndicatorIconState state : states) {
- if (!state.isNoCalling) {
- StatusBarIconHolder holder = callStrengthSlot.getHolderForTag(state.subId);
- if (holder == null) {
- holder = StatusBarIconHolder.fromCallIndicatorState(mContext, state);
- setIcon(callStrengthSlotIndex, holder);
- } else {
- holder.setIcon(new StatusBarIcon(UserHandle.SYSTEM, mContext.getPackageName(),
- Icon.createWithResource(mContext, state.callStrengthResId), 0, 0,
- state.callStrengthDescription));
- setIcon(callStrengthSlotIndex, holder);
- }
- }
- setIconVisibility(slot, !state.isNoCalling, state.subId);
- }
- }
-
- /**
* Accept a list of CallIndicatorIconStates, and show the no calling icons.
* @param slot StatusBar slot for the no calling icons
* @param states All of the no Calling & SMS icon states
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java
index af342dd31a76..4ca71f081c0e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java
@@ -86,11 +86,9 @@ public class StatusBarIconHolder {
Context context,
CallIndicatorIconState state) {
StatusBarIconHolder holder = new StatusBarIconHolder();
- int resId = state.isNoCalling ? state.noCallingResId : state.callStrengthResId;
- String contentDescription = state.isNoCalling
- ? state.noCallingDescription : state.callStrengthDescription;
holder.mIcon = new StatusBarIcon(UserHandle.SYSTEM, context.getPackageName(),
- Icon.createWithResource(context, resId), 0, 0, contentDescription);
+ Icon.createWithResource(context, state.noCallingResId),
+ 0, 0, state.noCallingDescription);
holder.mTag = state.subId;
return holder;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index 7ee7aa4100d4..ef2444eba814 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -479,7 +479,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
if (mAlternateAuthInterceptor != null) {
mAfterKeyguardGoneAction = r;
mKeyguardGoneCancelAction = cancelAction;
- if (mAlternateAuthInterceptor.showAlternativeAuthMethod()) {
+ if (mAlternateAuthInterceptor.showAlternateAuthBouncer()) {
mStatusBar.updateScrimController();
}
return;
@@ -529,7 +529,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
* Stop showing any alternate auth methods
*/
public void resetAlternateAuth() {
- if (mAlternateAuthInterceptor != null && mAlternateAuthInterceptor.resetForceShow()) {
+ if (mAlternateAuthInterceptor != null
+ && mAlternateAuthInterceptor.hideAlternateAuthBouncer()) {
mStatusBar.updateScrimController();
}
}
@@ -1141,15 +1142,22 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
public boolean isShowingAlternateAuth() {
return mAlternateAuthInterceptor != null
- && mAlternateAuthInterceptor.isShowingAlternateAuth();
+ && mAlternateAuthInterceptor.isShowingAlternateAuthBouncer();
}
public boolean isShowingAlternateAuthOrAnimating() {
return mAlternateAuthInterceptor != null
- && (mAlternateAuthInterceptor.isShowingAlternateAuth()
+ && (mAlternateAuthInterceptor.isShowingAlternateAuthBouncer()
|| mAlternateAuthInterceptor.isAnimating());
}
+ /** Update keyguard position based on a tapped X coordinate. */
+ public void updateKeyguardPosition(float x) {
+ if (mBouncer != null) {
+ mBouncer.updateKeyguardPosition(x);
+ }
+ }
+
private static class DismissWithActionRequest {
final OnDismissAction dismissAction;
final Runnable cancelAction;
@@ -1167,24 +1175,25 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
/**
* Delegate used to send show/reset events to an alternate authentication method instead of the
- * bouncer.
+ * regular pin/pattern/password bouncer.
*/
public interface AlternateAuthInterceptor {
/**
- * @return whether alternative auth method was newly shown
+ * Show alternate authentication bouncer.
+ * @return whether alternate auth method was newly shown
*/
- boolean showAlternativeAuthMethod();
+ boolean showAlternateAuthBouncer();
/**
- * reset the state to the default (only keyguard showing, no auth methods showing)
- * @return whether alternative auth method was newly hidden
+ * Hide alternate authentication bouncer
+ * @return whether the alternate auth method was newly hidden
*/
- boolean resetForceShow();
+ boolean hideAlternateAuthBouncer();
/**
- * @return true if alternative auth method is showing
+ * @return true if the alternate auth bouncer is showing
*/
- boolean isShowingAlternateAuth();
+ boolean isShowingAlternateAuthBouncer();
/**
* print information for the alternate auth interceptor registered
@@ -1192,12 +1201,12 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
void dump(PrintWriter pw);
/**
- * @return true if the new auth method is currently animating in or out.
+ * @return true if the new auth method bouncer is currently animating in or out.
*/
boolean isAnimating();
/**
- * Set whether qs is currently expanded
+ * Set whether qs is currently expanded.
*/
void setQsExpanded(boolean expanded);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
index 3445826eefbe..b57d8766854e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java
@@ -22,7 +22,6 @@ import android.telephony.SubscriptionInfo;
import android.util.ArraySet;
import android.util.Log;
-import com.android.settingslib.mobile.TelephonyIcons;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.NetworkController;
@@ -50,7 +49,6 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
private final String mSlotEthernet;
private final String mSlotVpn;
private final String mSlotNoCalling;
- private final String mSlotCallStrength;
private final Context mContext;
private final StatusBarIconController mIconController;
@@ -84,8 +82,6 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
mSlotEthernet = mContext.getString(com.android.internal.R.string.status_bar_ethernet);
mSlotVpn = mContext.getString(com.android.internal.R.string.status_bar_vpn);
mSlotNoCalling = mContext.getString(com.android.internal.R.string.status_bar_no_calling);
- mSlotCallStrength =
- mContext.getString(com.android.internal.R.string.status_bar_call_strength);
mActivityEnabled = mContext.getResources().getBoolean(R.bool.config_showActivity);
mIconController = iconController;
@@ -211,14 +207,9 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
if (statusIcon.icon == R.drawable.ic_qs_no_calling_sms) {
state.isNoCalling = statusIcon.visible;
state.noCallingDescription = statusIcon.contentDescription;
- } else {
- state.callStrengthResId = statusIcon.icon;
- state.callStrengthDescription = statusIcon.contentDescription;
+ mIconController.setNoCallingIcons(mSlotNoCalling,
+ CallIndicatorIconState.copyStates(mCallIndicatorStates));
}
- mIconController.setCallStrengthIcons(mSlotCallStrength,
- CallIndicatorIconState.copyStates(mCallIndicatorStates));
- mIconController.setNoCallingIcons(mSlotNoCalling,
- CallIndicatorIconState.copyStates(mCallIndicatorStates));
}
@Override
@@ -305,7 +296,6 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
mIconController.removeAllIconsForSlot(mSlotMobile);
mIconController.removeAllIconsForSlot(mSlotNoCalling);
- mIconController.removeAllIconsForSlot(mSlotCallStrength);
mMobileStates.clear();
List<CallIndicatorIconState> noCallingStates = new ArrayList<CallIndicatorIconState>();
noCallingStates.addAll(mCallIndicatorStates);
@@ -420,15 +410,12 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
public static class CallIndicatorIconState {
public boolean isNoCalling;
public int noCallingResId;
- public int callStrengthResId;
public int subId;
public String noCallingDescription;
- public String callStrengthDescription;
private CallIndicatorIconState(int subId) {
this.subId = subId;
this.noCallingResId = R.drawable.ic_qs_no_calling_sms;
- this.callStrengthResId = TelephonyIcons.MOBILE_CALL_STRENGTH_ICONS[0];
}
@Override
@@ -440,26 +427,21 @@ public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallba
CallIndicatorIconState that = (CallIndicatorIconState) o;
return isNoCalling == that.isNoCalling
&& noCallingResId == that.noCallingResId
- && callStrengthResId == that.callStrengthResId
&& subId == that.subId
- && noCallingDescription == that.noCallingDescription
- && callStrengthDescription == that.callStrengthDescription;
+ && noCallingDescription == that.noCallingDescription;
}
@Override
public int hashCode() {
- return Objects.hash(isNoCalling, noCallingResId,
- callStrengthResId, subId, noCallingDescription, callStrengthDescription);
+ return Objects.hash(isNoCalling, noCallingResId, subId, noCallingDescription);
}
private void copyTo(CallIndicatorIconState other) {
other.isNoCalling = isNoCalling;
other.noCallingResId = noCallingResId;
- other.callStrengthResId = callStrengthResId;
other.subId = subId;
other.noCallingDescription = noCallingDescription;
- other.callStrengthDescription = callStrengthDescription;
}
private static List<CallIndicatorIconState> copyStates(
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java
index 4f32712e81fa..785d98ccd8dc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/dagger/StatusBarPhoneModule.java
@@ -90,6 +90,7 @@ import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.phone.StatusBarNotificationActivityStarter;
import com.android.systemui.statusbar.phone.StatusBarTouchableRegionManager;
+import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -206,6 +207,7 @@ public interface StatusBarPhoneModule {
NotificationIconAreaController notificationIconAreaController,
BrightnessSlider.Factory brightnessSliderFactory,
WiredChargingRippleController chargingRippleAnimationController,
+ OngoingCallController ongoingCallController,
FeatureFlags featureFlags) {
return new StatusBar(
context,
@@ -288,6 +290,7 @@ public interface StatusBarPhoneModule {
notificationIconAreaController,
brightnessSliderFactory,
chargingRippleAnimationController,
+ ongoingCallController,
featureFlags);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt
new file mode 100644
index 000000000000..60d3ea3a7093
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ongoingcall/OngoingCallController.kt
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.phone.ongoingcall
+
+import android.app.Notification
+import android.app.Notification.CallStyle.CALL_TYPE_ONGOING
+import android.util.Log
+import com.android.systemui.dagger.SysUISingleton
+import com.android.systemui.statusbar.FeatureFlags
+import com.android.systemui.statusbar.notification.collection.NotificationEntry
+import com.android.systemui.statusbar.notification.collection.notifcollection.CommonNotifCollection
+import com.android.systemui.statusbar.notification.collection.notifcollection.NotifCollectionListener
+import javax.inject.Inject
+
+/**
+ * A controller to handle the ongoing call chip in the collapsed status bar.
+ */
+@SysUISingleton
+class OngoingCallController @Inject constructor(
+ private val notifCollection: CommonNotifCollection,
+ private val featureFlags: FeatureFlags
+) {
+
+ private val notifListener = object : NotifCollectionListener {
+ override fun onEntryUpdated(entry: NotificationEntry) {
+ if (isOngoingCallNotification(entry) && DEBUG) {
+ Log.d(TAG, "Ongoing call notification updated")
+ }
+ }
+
+ override fun onEntryRemoved(entry: NotificationEntry, reason: Int) {
+ if (isOngoingCallNotification(entry) && DEBUG) {
+ Log.d(TAG, "Ongoing call notification removed")
+ }
+ }
+ }
+
+ fun init() {
+ if (featureFlags.isOngoingCallStatusBarChipEnabled) {
+ notifCollection.addCollectionListener(notifListener)
+ }
+ }
+}
+
+private fun isOngoingCallNotification(entry: NotificationEntry): Boolean {
+ val extras = entry.sbn.notification.extras
+ val callStyleTemplateName = Notification.CallStyle::class.java.name
+ return extras.getString(Notification.EXTRA_TEMPLATE) == callStyleTemplateName &&
+ extras.getInt(Notification.EXTRA_CALL_TYPE, -1) == CALL_TYPE_ONGOING
+}
+
+private const val TAG = "OngoingCallController"
+private val DEBUG = Log.isLoggable(TAG, Log.DEBUG)
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
index b96cb5e36c82..7ac6d63430d6 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
@@ -21,6 +21,7 @@ import android.os.Message;
import android.telephony.SubscriptionInfo;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
@@ -32,6 +33,8 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
+import javax.inject.Inject;
+
/**
* Implements network listeners and forwards the calls along onto other listeners but on
@@ -60,12 +63,9 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa
private int mHistoryIndex;
private String mLastCallback;
- public CallbackHandler() {
- super(Looper.getMainLooper());
- }
-
+ @Inject
@VisibleForTesting
- CallbackHandler(Looper looper) {
+ CallbackHandler(@Main Looper looper) {
super(looper);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
index 499d1e420272..97d344ad6b63 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Clock.java
@@ -322,7 +322,7 @@ public class Clock extends TextView implements
// Update text color based when shade scrim changes color.
public void onColorsChanged(boolean lightTheme) {
final Context context = new ContextThemeWrapper(mContext,
- lightTheme ? R.style.Theme_SystemUI_Light : R.style.Theme_SystemUI);
+ lightTheme ? R.style.Theme_SystemUI_LightWallpaper : R.style.Theme_SystemUI);
setTextColor(Utils.getColorAttrDefaultColor(context, R.attr.wallpaperTextColor));
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index cfaeb0edec53..f683603c9cd5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -85,6 +85,7 @@ import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Locale;
+import java.util.concurrent.Executor;
import javax.inject.Inject;
@@ -171,6 +172,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
private NetworkCapabilities mLastDefaultNetworkCapabilities;
// Handler that all broadcasts are received on.
private final Handler mReceiverHandler;
+ private final Looper mBgLooper;
+ private final Executor mBgExecutor;
// Handler that all callbacks are made on.
private final CallbackHandler mCallbackHandler;
@@ -198,6 +201,9 @@ public class NetworkControllerImpl extends BroadcastReceiver
public NetworkControllerImpl(
Context context,
@Background Looper bgLooper,
+ @Background Executor bgExecutor,
+ SubscriptionManager subscriptionManager,
+ CallbackHandler callbackHandler,
DeviceProvisionedController deviceProvisionedController,
BroadcastDispatcher broadcastDispatcher,
ConnectivityManager connectivityManager,
@@ -212,8 +218,11 @@ public class NetworkControllerImpl extends BroadcastReceiver
telephonyListenerManager,
wifiManager,
networkScoreManager,
- SubscriptionManager.from(context), Config.readConfig(context), bgLooper,
- new CallbackHandler(),
+ subscriptionManager,
+ Config.readConfig(context),
+ bgLooper,
+ bgExecutor,
+ callbackHandler,
accessPointController,
new DataUsageController(context),
new SubscriptionDefaults(),
@@ -230,6 +239,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
WifiManager wifiManager,
NetworkScoreManager networkScoreManager,
SubscriptionManager subManager, Config config, Looper bgLooper,
+ Executor bgExecutor,
CallbackHandler callbackHandler,
AccessPointControllerImpl accessPointController,
DataUsageController dataUsageController,
@@ -241,6 +251,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
mTelephonyListenerManager = telephonyListenerManager;
mConfig = config;
mReceiverHandler = new Handler(bgLooper);
+ mBgLooper = bgLooper;
+ mBgExecutor = bgExecutor;
mCallbackHandler = callbackHandler;
mDataSaverController = new DataSaverControllerImpl(context);
mBroadcastDispatcher = broadcastDispatcher;
@@ -377,21 +389,23 @@ public class NetworkControllerImpl extends BroadcastReceiver
// TODO: Move off of the deprecated CONNECTIVITY_ACTION broadcast and rely on callbacks
// exclusively for status bar icons.
mConnectivityManager.registerDefaultNetworkCallback(callback, mReceiverHandler);
- // Register the listener on our bg looper
+ // Run the listener on our bg looper
mPhoneStateListener = subId -> {
- // For data switching from A to B, we assume B is validated for up to 2 seconds iff:
- // 1) A and B are in the same subscription group e.g. CBRS data switch. And
- // 2) A was validated before the switch.
- // This is to provide smooth transition for UI without showing cross during data
- // switch.
- if (keepCellularValidationBitInSwitch(mActiveMobileDataSubscription, subId)) {
- if (DEBUG) Log.d(TAG, ": mForceCellularValidated to true.");
- mForceCellularValidated = true;
- mReceiverHandler.removeCallbacks(mClearForceValidated);
- mReceiverHandler.postDelayed(mClearForceValidated, 2000);
- }
- mActiveMobileDataSubscription = subId;
- doUpdateMobileControllers();
+ mBgExecutor.execute(() -> {
+ // For data switching from A to B, we assume B is validated for up to 2 seconds if:
+ // 1) A and B are in the same subscription group e.g. CBRS data switch. And
+ // 2) A was validated before the switch.
+ // This is to provide smooth transition for UI without showing cross during data
+ // switch.
+ if (keepCellularValidationBitInSwitch(mActiveMobileDataSubscription, subId)) {
+ if (DEBUG) Log.d(TAG, ": mForceCellularValidated to true.");
+ mForceCellularValidated = true;
+ mReceiverHandler.removeCallbacks(mClearForceValidated);
+ mReceiverHandler.postDelayed(mClearForceValidated, 2000);
+ }
+ mActiveMobileDataSubscription = subId;
+ doUpdateMobileControllers();
+ });
};
mDemoModeController.addCallback(this);
@@ -428,7 +442,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
mobileSignalController.registerListener();
}
if (mSubscriptionListener == null) {
- mSubscriptionListener = new SubListener();
+ mSubscriptionListener = new SubListener(mBgLooper);
}
mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener);
mTelephonyListenerManager.addActiveDataSubscriptionIdListener(mPhoneStateListener);
@@ -1336,6 +1350,10 @@ public class NetworkControllerImpl extends BroadcastReceiver
}
private class SubListener extends OnSubscriptionsChangedListener {
+ SubListener(Looper looper) {
+ super(looper);
+ }
+
@Override
public void onSubscriptionsChanged() {
updateMobileControllers();
@@ -1346,10 +1364,5 @@ public class NetworkControllerImpl extends BroadcastReceiver
* Used to register listeners from the BG Looper, this way the PhoneStateListeners that
* get created will also run on the BG Looper.
*/
- private final Runnable mRegisterListeners = new Runnable() {
- @Override
- public void run() {
- registerListeners();
- }
- };
+ private final Runnable mRegisterListeners = () -> registerListeners();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java
index 9eaee22b54ec..f42e3885fe62 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserInfoControllerImpl.java
@@ -143,7 +143,7 @@ public class UserInfoControllerImpl implements UserInfoController {
final int userId = userInfo.id;
final boolean isGuest = userInfo.isGuest();
final String userName = userInfo.name;
- final boolean lightIcon = mContext.getThemeResId() != R.style.Theme_SystemUI_Light;
+ final boolean lightIcon = mContext.getThemeResId() != R.style.Theme_SystemUI_LightWallpaper;
final Resources res = mContext.getResources();
final int avatarSize = Math.max(
diff --git a/packages/SystemUI/src/com/android/systemui/telephony/TelephonyCallback.java b/packages/SystemUI/src/com/android/systemui/telephony/TelephonyCallback.java
index 95216c559420..728907fd2d36 100644
--- a/packages/SystemUI/src/com/android/systemui/telephony/TelephonyCallback.java
+++ b/packages/SystemUI/src/com/android/systemui/telephony/TelephonyCallback.java
@@ -54,9 +54,11 @@ class TelephonyCallback extends android.telephony.TelephonyCallback
@Override
public void onActiveDataSubscriptionIdChanged(int subId) {
- mActiveDataSubscriptionIdListeners.forEach(listener -> {
- listener.onActiveDataSubscriptionIdChanged(subId);
- });
+ List<ActiveDataSubscriptionIdListener> listeners;
+ synchronized (mActiveDataSubscriptionIdListeners) {
+ listeners = new ArrayList<>(mActiveDataSubscriptionIdListeners);
+ }
+ listeners.forEach(listener -> listener.onActiveDataSubscriptionIdChanged(subId));
}
void addActiveDataSubscriptionIdListener(ActiveDataSubscriptionIdListener listener) {
@@ -69,9 +71,11 @@ class TelephonyCallback extends android.telephony.TelephonyCallback
@Override
public void onCallStateChanged(int state) {
- mCallStateListeners.forEach(listener -> {
- listener.onCallStateChanged(state);
- });
+ List<CallStateListener> listeners;
+ synchronized (mCallStateListeners) {
+ listeners = new ArrayList<>(mCallStateListeners);
+ }
+ listeners.forEach(listener -> listener.onCallStateChanged(state));
}
void addCallStateListener(CallStateListener listener) {
@@ -84,9 +88,11 @@ class TelephonyCallback extends android.telephony.TelephonyCallback
@Override
public void onServiceStateChanged(@NonNull ServiceState serviceState) {
- mServiceStateListeners.forEach(listener -> {
- listener.onServiceStateChanged(serviceState);
- });
+ List<ServiceStateListener> listeners;
+ synchronized (mServiceStateListeners) {
+ listeners = new ArrayList<>(mServiceStateListeners);
+ }
+ listeners.forEach(listener -> listener.onServiceStateChanged(serviceState));
}
void addServiceStateListener(ServiceStateListener listener) {
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/dagger/WalletModule.java b/packages/SystemUI/src/com/android/systemui/wallet/dagger/WalletModule.java
new file mode 100644
index 000000000000..c1f5516f02bb
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/dagger/WalletModule.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.dagger;
+
+import android.app.Activity;
+import android.content.Context;
+import android.service.quickaccesswallet.QuickAccessWalletClient;
+
+import com.android.systemui.dagger.SysUISingleton;
+import com.android.systemui.wallet.ui.WalletActivity;
+
+import dagger.Binds;
+import dagger.Module;
+import dagger.Provides;
+import dagger.multibindings.ClassKey;
+import dagger.multibindings.IntoMap;
+
+
+/**
+ * Module for injecting classes in Wallet.
+ */
+@Module
+public abstract class WalletModule {
+
+ /** */
+ @Binds
+ @IntoMap
+ @ClassKey(WalletActivity.class)
+ public abstract Activity provideWalletActivity(WalletActivity activity);
+
+ /** */
+ @SysUISingleton
+ @Provides
+ public static QuickAccessWalletClient provideQuickAccessWalletClient(Context context) {
+ return QuickAccessWalletClient.create(context);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/DotIndicatorDecoration.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/DotIndicatorDecoration.java
new file mode 100644
index 000000000000..644addfef1d1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/DotIndicatorDecoration.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.ui;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.text.TextPaint;
+import android.util.MathUtils;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.ColorInt;
+import androidx.core.content.ContextCompat;
+import androidx.core.graphics.ColorUtils;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.systemui.R;
+
+final class DotIndicatorDecoration extends RecyclerView.ItemDecoration {
+ private final int mUnselectedRadius;
+ private final int mSelectedRadius;
+ private final int mDotMargin;
+ @ColorInt private final int mUnselectedColor;
+ @ColorInt private final int mSelectedColor;
+ private final Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ private final TextPaint mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
+ private WalletCardCarousel mCardCarousel;
+
+ DotIndicatorDecoration(Context context) {
+ super();
+
+ mUnselectedRadius =
+ context.getResources().getDimensionPixelSize(
+ R.dimen.card_carousel_dot_unselected_radius);
+ mSelectedRadius =
+ context.getResources().getDimensionPixelSize(
+ R.dimen.card_carousel_dot_selected_radius);
+ mDotMargin = context.getResources().getDimensionPixelSize(R.dimen.card_carousel_dot_margin);
+
+ TextView textView = new TextView(context);
+ mTextPaint.set(textView.getPaint());
+ // Text color is not copied from text appearance.
+ mTextPaint.setColor(ContextCompat.getColor(context, R.color.GM2_blue_600));
+
+ mUnselectedColor = ContextCompat.getColor(context, R.color.GM2_grey_300);
+ mSelectedColor = ContextCompat.getColor(context, R.color.GM2_blue_600);
+ }
+
+ @Override
+ public void getItemOffsets(
+ Rect rect, View view, RecyclerView recyclerView, RecyclerView.State state) {
+ super.getItemOffsets(rect, view, recyclerView, state);
+ if (recyclerView.getAdapter().getItemCount() > 1) {
+ rect.bottom =
+ view.getResources().getDimensionPixelSize(R.dimen.card_carousel_dot_offset);
+ }
+ }
+
+ @Override
+ public void onDrawOver(Canvas canvas, RecyclerView recyclerView, RecyclerView.State state) {
+ super.onDrawOver(canvas, recyclerView, state);
+
+ mCardCarousel = (WalletCardCarousel) recyclerView;
+ int itemCount = recyclerView.getAdapter().getItemCount();
+ if (itemCount <= 1) {
+ // Only shown if there are at least 2 items, and it's not a shimmer loader
+ return;
+ }
+ canvas.save();
+
+ float animationStartOffset = recyclerView.getWidth() / 6f;
+ // 0 when a card is still very prominent, ie. edgeToCenterDistance is greater than
+ // animationStartOffset
+ // 1 when the two cards are equidistant from the center ie. edgeToCenterDistance == 0
+ float interpolatedProgress =
+ 1 - Math.min(Math.abs(mCardCarousel.mEdgeToCenterDistance), animationStartOffset)
+ / animationStartOffset;
+
+ float totalWidth =
+ mDotMargin * (itemCount - 1)
+ + 2 * mUnselectedRadius * (itemCount - 2)
+ + 2 * mSelectedRadius;
+ // Translate the canvas so the drawing can always start at (0, 0) coordinates.
+ canvas.translate(
+ (recyclerView.getWidth() - totalWidth) / 2f,
+ recyclerView.getHeight() - mDotMargin);
+
+ int itemsDrawn = 0;
+ while (itemsDrawn < itemCount) {
+ // count up from 0 to itemCount - 1 if LTR; count down from itemCount - 1 to 0 if RTL.
+ int i = isLayoutLtr() ? itemsDrawn : itemCount - itemsDrawn - 1;
+
+ if (isSelectedItem(i)) {
+ drawSelectedDot(canvas, interpolatedProgress, i);
+ } else if (isNextItemInScrollingDirection(i)) {
+ drawFadingUnselectedDot(canvas, interpolatedProgress, i);
+ } else {
+ drawUnselectedDot(canvas);
+ }
+ canvas.translate(mDotMargin, 0);
+ itemsDrawn++;
+ }
+
+ canvas.restore();
+ this.mCardCarousel = null; // No need to hold a reference.
+ }
+
+ private void drawSelectedDot(Canvas canvas, float progress, int position) {
+ // Divide progress by 2 because the other half of the animation is done by
+ // drawFadingUnselectedDot.
+ mPaint.setColor(
+ getTransitionAdjustedColor(
+ ColorUtils.blendARGB(mSelectedColor, mUnselectedColor, progress / 2)));
+ float radius = MathUtils.lerp(mSelectedRadius, mUnselectedRadius, progress / 2);
+ canvas.drawCircle(radius, 0, radius, mPaint);
+ canvas.translate(radius * 2, 0);
+ }
+
+ private void drawFadingUnselectedDot(Canvas canvas, float progress, int position) {
+ // Divide progress by 2 because the first half of the animation is done by drawSelectedDot.
+ int blendedColor =
+ ColorUtils.blendARGB(
+ mUnselectedColor, mSelectedColor, progress / 2);
+ mPaint.setColor(getTransitionAdjustedColor(blendedColor));
+ float radius = MathUtils.lerp(mSelectedRadius, mUnselectedRadius, progress / 2);
+ canvas.drawCircle(radius, 0, radius, mPaint);
+ canvas.translate(radius * 2, 0);
+ }
+
+ private void drawUnselectedDot(Canvas canvas) {
+ mPaint.setColor(mUnselectedColor);
+ canvas.drawCircle(mUnselectedRadius, 0, mUnselectedRadius, mPaint);
+ canvas.translate(mUnselectedRadius * 2, 0);
+ }
+
+ private int getTransitionAdjustedColor(int color) {
+ int transitionAlphaOverride = 0xff;
+ return ColorUtils.setAlphaComponent(color, transitionAlphaOverride);
+ }
+
+ private boolean isSelectedItem(int position) {
+ return mCardCarousel.mCenteredAdapterPosition == position;
+ }
+
+ private boolean isNextItemInScrollingDirection(int position) {
+ if (isLayoutLtr()) {
+ return (mCardCarousel.mCenteredAdapterPosition + 1 == position
+ && mCardCarousel.mEdgeToCenterDistance >= 0f)
+ || (mCardCarousel.mCenteredAdapterPosition - 1 == position
+ && mCardCarousel.mEdgeToCenterDistance < 0f);
+ }
+ return (mCardCarousel.mCenteredAdapterPosition - 1 == position
+ && mCardCarousel.mEdgeToCenterDistance >= 0f)
+ || (mCardCarousel.mCenteredAdapterPosition + 1 == position
+ && mCardCarousel.mEdgeToCenterDistance < 0f);
+ }
+
+ private boolean isLayoutLtr() {
+ if (mCardCarousel == null) {
+ // Shouldn't happen, but assume LTR for now.
+ return true;
+ }
+ return mCardCarousel.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java
new file mode 100644
index 000000000000..ba063a8ba303
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletActivity.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.ui;
+
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Bundle;
+import android.os.Handler;
+import android.service.quickaccesswallet.QuickAccessWalletClient;
+import android.view.MenuItem;
+import android.view.Window;
+
+import androidx.annotation.NonNull;
+
+import com.android.systemui.R;
+import com.android.systemui.dagger.qualifiers.Background;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.settings.UserTracker;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.util.LifecycleActivity;
+
+import java.util.concurrent.Executor;
+
+import javax.inject.Inject;
+
+/**
+ * Displays Wallet carousel screen inside an activity.
+ */
+public class WalletActivity extends LifecycleActivity {
+
+ private final QuickAccessWalletClient mQuickAccessWalletClient;
+ private final KeyguardStateController mKeyguardStateController;
+ private final ActivityStarter mActivityStarter;
+ private final Executor mExecutor;
+ private final Handler mHandler;
+ private final UserTracker mUserTracker;
+ private WalletScreenController mWalletScreenController;
+
+ @Inject
+ public WalletActivity(
+ QuickAccessWalletClient quickAccessWalletClient,
+ KeyguardStateController keyguardStateController,
+ ActivityStarter activityStarter,
+ @Background Executor executor,
+ @Background Handler handler,
+ UserTracker userTracker) {
+ mQuickAccessWalletClient = quickAccessWalletClient;
+ mKeyguardStateController = keyguardStateController;
+ mActivityStarter = activityStarter;
+ mExecutor = executor;
+ mHandler = handler;
+ mUserTracker = userTracker;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.quick_access_wallet);
+
+ getWindow().getDecorView().setBackgroundColor(getColor(R.color.wallet_white));
+ setTitle("");
+ getActionBar().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ getActionBar().setHomeAsUpIndicator(R.drawable.ic_close);
+ getActionBar().setHomeActionContentDescription(R.string.accessibility_desc_close);
+ WalletView walletView = requireViewById(R.id.wallet_view);
+ mWalletScreenController = new WalletScreenController(
+ this,
+ walletView,
+ mQuickAccessWalletClient,
+ mActivityStarter,
+ mExecutor,
+ mHandler,
+ mUserTracker,
+ !mKeyguardStateController.isUnlocked());
+ walletView.getWalletButton().setOnClickListener(
+ v -> mActivityStarter.startActivity(
+ mQuickAccessWalletClient.createWalletIntent(), true));
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(@NonNull MenuItem item) {
+ int itemId = item.getItemId();
+ if (itemId == android.R.id.home) {
+ finish();
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ @Override
+ protected void onDestroy() {
+ mWalletScreenController.onDismissed();
+ super.onDestroy();
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardCarousel.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardCarousel.java
new file mode 100644
index 000000000000..21e55496d3e6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardCarousel.java
@@ -0,0 +1,473 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.ui;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.view.HapticFeedbackConstants;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.widget.ImageView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.cardview.widget.CardView;
+import androidx.core.view.ViewCompat;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.LinearSmoothScroller;
+import androidx.recyclerview.widget.PagerSnapHelper;
+import androidx.recyclerview.widget.RecyclerView;
+import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate;
+
+import com.android.systemui.R;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Card Carousel for displaying Quick Access Wallet cards.
+ */
+public class WalletCardCarousel extends RecyclerView {
+
+ // A negative card margin is required because card shrinkage pushes the cards too far apart
+ private static final float CARD_MARGIN_RATIO = -.03f;
+ // Size of the unselected card as a ratio to size of selected card.
+ private static final float UNSELECTED_CARD_SCALE = .83f;
+ private static final float CORNER_RADIUS_RATIO = 25f / 700f;
+ private static final float CARD_ASPECT_RATIO = 700f / 440f;
+ private static final float CARD_VIEW_WIDTH_RATIO = 0.69f;
+
+
+ static final int CARD_ANIM_ALPHA_DURATION = 100;
+ static final int CARD_ANIM_ALPHA_DELAY = 50;
+
+ private final Rect mSystemGestureExclusionZone = new Rect();
+ private WalletCardCarouselAdapter mWalletCardCarouselAdapter;
+ private int mExpectedViewWidth;
+ private int mCardMarginPx;
+ private int mCardWidthPx;
+ private int mCardHeightPx;
+ private float mCornerRadiusPx;
+ private int mTotalCardWidth;
+ private float mCardEdgeToCenterDistance;
+
+ private OnSelectionListener mSelectionListener;
+ private OnCardScrollListener mCardScrollListener;
+ // Adapter position of the child that is closest to the center of the recycler view, will also
+ // be used in DotIndicatorDecoration.
+ int mCenteredAdapterPosition = RecyclerView.NO_POSITION;
+ // Pixel distance, along y-axis, from the center of the recycler view to the nearest child, will
+ // also be used in DotIndicatorDecoration.
+ float mEdgeToCenterDistance = Float.MAX_VALUE;
+ private float mCardCenterToScreenCenterDistancePx = Float.MAX_VALUE;
+ // When card data is loaded, this many cards should be animated as data is bound to them.
+ private int mNumCardsToAnimate;
+ // When card data is loaded, this is the position of the leftmost card to be animated.
+ private int mCardAnimationStartPosition;
+ // When card data is loaded, the animations may be delayed so that other animations can complete
+ private int mExtraAnimationDelay;
+
+ interface OnSelectionListener {
+ /**
+ * The card was moved to the center, thus selecting it.
+ */
+ void onCardSelected(@NonNull WalletCardViewInfo card);
+
+ /**
+ * The card was clicked.
+ */
+ void onCardClicked(@NonNull WalletCardViewInfo card);
+
+ /**
+ * Cards should be re-queried due to a layout change
+ */
+ void queryWalletCards();
+ }
+
+ interface OnCardScrollListener {
+ void onCardScroll(WalletCardViewInfo centerCard, WalletCardViewInfo nextCard,
+ float percentDistanceFromCenter);
+ }
+
+ public WalletCardCarousel(Context context) {
+ this(context, null);
+ }
+
+ public WalletCardCarousel(Context context, @Nullable AttributeSet attributeSet) {
+ super(context, attributeSet);
+
+ setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
+ addOnScrollListener(new CardCarouselScrollListener());
+ new CarouselSnapHelper().attachToRecyclerView(this);
+ mWalletCardCarouselAdapter = new WalletCardCarouselAdapter();
+ mWalletCardCarouselAdapter.setHasStableIds(true);
+ setAdapter(mWalletCardCarouselAdapter);
+ ViewCompat.setAccessibilityDelegate(this, new CardCarouselAccessibilityDelegate(this));
+
+ addItemDecoration(new DotIndicatorDecoration(getContext()));
+ }
+
+ /**
+ * We need to know the card width before we query cards. Card width depends on layout width.
+ * But the carousel isn't laid out until set to visible, which only happens after cards are
+ * returned. Setting the expected view width breaks the chicken-and-egg problem.
+ */
+ void setExpectedViewWidth(int width) {
+ if (mExpectedViewWidth == width) {
+ return;
+ }
+ mExpectedViewWidth = width;
+ Resources res = getResources();
+ DisplayMetrics metrics = res.getDisplayMetrics();
+ int screenWidth = Math.min(metrics.widthPixels, metrics.heightPixels);
+ mCardWidthPx = Math.round(Math.min(width, screenWidth) * CARD_VIEW_WIDTH_RATIO);
+ mCardHeightPx = Math.round(mCardWidthPx / CARD_ASPECT_RATIO);
+ mCornerRadiusPx = mCardWidthPx * CORNER_RADIUS_RATIO;
+ mCardMarginPx = Math.round(mCardWidthPx * CARD_MARGIN_RATIO);
+ mTotalCardWidth = mCardWidthPx + res.getDimensionPixelSize(R.dimen.card_margin) * 2;
+ mCardEdgeToCenterDistance = mTotalCardWidth / 2f;
+ updatePadding(width);
+ if (mSelectionListener != null) {
+ mSelectionListener.queryWalletCards();
+ }
+ }
+
+ @Override
+ public void onViewAdded(View child) {
+ super.onViewAdded(child);
+ LayoutParams layoutParams = (LayoutParams) child.getLayoutParams();
+ layoutParams.leftMargin = mCardMarginPx;
+ layoutParams.rightMargin = mCardMarginPx;
+ child.addOnLayoutChangeListener((v, l, t, r, b, ol, ot, or, ob) -> updateCardView(child));
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ int width = getWidth();
+ if (mWalletCardCarouselAdapter.getItemCount() > 1 && width < mTotalCardWidth * 1.5) {
+ // When 2 or more cards are available but only one whole card can be shown on screen at
+ // a time, the entire carousel is opted out from system gesture to help users swipe
+ // between cards without accidentally performing the 'back' gesture. When there is only
+ // one card or when the carousel is large enough to accommodate several whole cards,
+ // there is no need to disable the back gesture since either the user can't swipe or has
+ // plenty of room with which to do so.
+ mSystemGestureExclusionZone.set(0, 0, width, getHeight());
+ setSystemGestureExclusionRects(Collections.singletonList(mSystemGestureExclusionZone));
+ }
+ if (width != mExpectedViewWidth) {
+ updatePadding(width);
+ }
+ }
+
+ void setExtraAnimationDelay(int extraAnimationDelay) {
+ mExtraAnimationDelay = extraAnimationDelay;
+ }
+
+ void setSelectionListener(OnSelectionListener selectionListener) {
+ mSelectionListener = selectionListener;
+ }
+
+ void setCardScrollListener(OnCardScrollListener scrollListener) {
+ mCardScrollListener = scrollListener;
+ }
+
+ int getCardWidthPx() {
+ return mCardWidthPx;
+ }
+
+ int getCardHeightPx() {
+ return mCardHeightPx;
+ }
+
+ /**
+ * Set card data. Returns true if carousel was empty, indicating that views will be animated
+ */
+ boolean setData(List<WalletCardViewInfo> data, int selectedIndex) {
+ boolean wasEmpty = mWalletCardCarouselAdapter.getItemCount() == 0;
+ mWalletCardCarouselAdapter.setData(data);
+ if (wasEmpty) {
+ scrollToPosition(selectedIndex);
+ mNumCardsToAnimate = numCardsOnScreen(data.size(), selectedIndex);
+ mCardAnimationStartPosition = Math.max(selectedIndex - 1, 0);
+ }
+ WalletCardViewInfo selectedCard = data.get(selectedIndex);
+ mCardScrollListener.onCardScroll(selectedCard, selectedCard, 0);
+ return wasEmpty;
+ }
+
+ @Override
+ public void scrollToPosition(int position) {
+ super.scrollToPosition(position);
+ mSelectionListener.onCardSelected(mWalletCardCarouselAdapter.mData.get(position));
+ }
+
+ /**
+ * The number of cards shown on screen when one of the cards is position in the center. This is
+ * also the num
+ */
+ private static int numCardsOnScreen(int numCards, int selectedIndex) {
+ if (numCards <= 2) {
+ return numCards;
+ }
+ // When there are 3 or more cards, 3 cards will be shown unless the first or last card is
+ // centered on screen.
+ return selectedIndex > 0 && selectedIndex < (numCards - 1) ? 3 : 2;
+ }
+
+ /**
+ * The padding pushes the first and last cards in the list to the center when they are
+ * selected.
+ */
+ private void updatePadding(int viewWidth) {
+ int paddingHorizontal = (viewWidth - mTotalCardWidth) / 2 - mCardMarginPx;
+ paddingHorizontal = Math.max(0, paddingHorizontal); // just in case
+ setPadding(paddingHorizontal, getPaddingTop(), paddingHorizontal, getPaddingBottom());
+
+ // re-center selected card after changing padding (if card is selected)
+ if (mWalletCardCarouselAdapter != null
+ && mWalletCardCarouselAdapter.getItemCount() > 0
+ && mCenteredAdapterPosition != NO_POSITION) {
+ ViewHolder viewHolder = findViewHolderForAdapterPosition(mCenteredAdapterPosition);
+ if (viewHolder != null) {
+ View cardView = viewHolder.itemView;
+ int cardCenter = (cardView.getLeft() + cardView.getRight()) / 2;
+ int viewCenter = (getLeft() + getRight()) / 2;
+ int scrollX = cardCenter - viewCenter;
+ scrollBy(scrollX, 0);
+ }
+ }
+ }
+
+ private void updateCardView(View view) {
+ WalletCardViewHolder viewHolder = (WalletCardViewHolder) view.getTag();
+ CardView cardView = viewHolder.mCardView;
+ float center = (float) getWidth() / 2f;
+ float viewCenter = (view.getRight() + view.getLeft()) / 2f;
+ float viewWidth = view.getWidth();
+ float position = (viewCenter - center) / viewWidth;
+ float scaleFactor = Math.max(UNSELECTED_CARD_SCALE, 1f - Math.abs(position));
+
+ cardView.setScaleX(scaleFactor);
+ cardView.setScaleY(scaleFactor);
+
+ // a card is the "centered card" until its edge has moved past the center of the recycler
+ // view. note that we also need to factor in the negative margin.
+ // Find the edge that is closer to the center.
+ int edgePosition =
+ viewCenter < center ? view.getRight() + mCardMarginPx
+ : view.getLeft() - mCardMarginPx;
+
+ if (Math.abs(viewCenter - center) < mCardCenterToScreenCenterDistancePx) {
+ int childAdapterPosition = getChildAdapterPosition(view);
+ if (childAdapterPosition == RecyclerView.NO_POSITION) {
+ return;
+ }
+ mCenteredAdapterPosition = getChildAdapterPosition(view);
+ mEdgeToCenterDistance = edgePosition - center;
+ mCardCenterToScreenCenterDistancePx = Math.abs(viewCenter - center);
+ }
+ }
+
+ private class CardCarouselScrollListener extends OnScrollListener {
+
+ private int mOldState = -1;
+
+ @Override
+ public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
+ if (newState == RecyclerView.SCROLL_STATE_IDLE && newState != mOldState) {
+ performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
+ }
+ mOldState = newState;
+ }
+
+ /**
+ * Callback method to be invoked when the RecyclerView has been scrolled. This will be
+ * called after the scroll has completed.
+ *
+ * <p>This callback will also be called if visible item range changes after a layout
+ * calculation. In that case, dx and dy will be 0.
+ *
+ * @param recyclerView The RecyclerView which scrolled.
+ * @param dx The amount of horizontal scroll.
+ * @param dy The amount of vertical scroll.
+ */
+ @Override
+ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
+ mCenteredAdapterPosition = RecyclerView.NO_POSITION;
+ mEdgeToCenterDistance = Float.MAX_VALUE;
+ mCardCenterToScreenCenterDistancePx = Float.MAX_VALUE;
+ for (int i = 0; i < getChildCount(); i++) {
+ updateCardView(getChildAt(i));
+ }
+ if (mCenteredAdapterPosition == RecyclerView.NO_POSITION || dx == 0) {
+ return;
+ }
+
+ int nextAdapterPosition =
+ mCenteredAdapterPosition + (mEdgeToCenterDistance > 0 ? 1 : -1);
+ if (nextAdapterPosition < 0
+ || nextAdapterPosition >= mWalletCardCarouselAdapter.mData.size()) {
+ return;
+ }
+
+ // Update the label text based on the currently selected card and the next one
+ WalletCardViewInfo centerCard =
+ mWalletCardCarouselAdapter.mData.get(mCenteredAdapterPosition);
+ WalletCardViewInfo nextCard = mWalletCardCarouselAdapter.mData.get(nextAdapterPosition);
+ float percentDistanceFromCenter =
+ Math.abs(mEdgeToCenterDistance) / mCardEdgeToCenterDistance;
+ mCardScrollListener.onCardScroll(centerCard, nextCard, percentDistanceFromCenter);
+ }
+ }
+
+ private class CarouselSnapHelper extends PagerSnapHelper {
+
+ private static final float MILLISECONDS_PER_INCH = 200.0F;
+ private static final int MAX_SCROLL_ON_FLING_DURATION = 80; // ms
+
+ @Override
+ public View findSnapView(LayoutManager layoutManager) {
+ View view = super.findSnapView(layoutManager);
+ if (view == null) {
+ // implementation decides not to snap
+ return null;
+ }
+ WalletCardViewHolder viewHolder = (WalletCardViewHolder) view.getTag();
+ WalletCardViewInfo card = viewHolder.mCardViewInfo;
+ mSelectionListener.onCardSelected(card);
+ mCardScrollListener.onCardScroll(card, card, 0);
+ return view;
+ }
+
+ /**
+ * The default SnapScroller is a little sluggish
+ */
+ @Override
+ protected LinearSmoothScroller createScroller(LayoutManager layoutManager) {
+ return new LinearSmoothScroller(getContext()) {
+ @Override
+ protected void onTargetFound(View targetView, State state, Action action) {
+ int[] snapDistances = calculateDistanceToFinalSnap(layoutManager, targetView);
+ final int dx = snapDistances[0];
+ final int dy = snapDistances[1];
+ final int time = calculateTimeForDeceleration(
+ Math.max(Math.abs(dx), Math.abs(dy)));
+ if (time > 0) {
+ action.update(dx, dy, time, mDecelerateInterpolator);
+ }
+ }
+
+ @Override
+ protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
+ return MILLISECONDS_PER_INCH / displayMetrics.densityDpi;
+ }
+
+ @Override
+ protected int calculateTimeForScrolling(int dx) {
+ return Math.min(MAX_SCROLL_ON_FLING_DURATION,
+ super.calculateTimeForScrolling(dx));
+ }
+ };
+ }
+ }
+
+ private class WalletCardCarouselAdapter extends Adapter<WalletCardViewHolder> {
+
+ private List<WalletCardViewInfo> mData = Collections.EMPTY_LIST;
+
+ @NonNull
+ @Override
+ public WalletCardViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
+ LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
+ View view = inflater.inflate(R.layout.wallet_card_view, viewGroup, false);
+ WalletCardViewHolder viewHolder = new WalletCardViewHolder(view);
+ CardView cardView = viewHolder.mCardView;
+ cardView.setRadius(mCornerRadiusPx);
+ ViewGroup.LayoutParams layoutParams = cardView.getLayoutParams();
+ layoutParams.width = mCardWidthPx;
+ layoutParams.height = mCardHeightPx;
+ view.setTag(viewHolder);
+ return viewHolder;
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull WalletCardViewHolder viewHolder, int position) {
+ WalletCardViewInfo cardViewInfo = mData.get(position);
+ viewHolder.mCardViewInfo = cardViewInfo;
+ if (cardViewInfo.getCardId().isEmpty()) {
+ viewHolder.mImageView.setScaleType(ImageView.ScaleType.CENTER);
+ }
+ viewHolder.mImageView.setImageDrawable(cardViewInfo.getCardDrawable());
+ viewHolder.mCardView.setContentDescription(cardViewInfo.getContentDescription());
+ viewHolder.mCardView.setOnClickListener(
+ v -> {
+ if (position != mCenteredAdapterPosition) {
+ smoothScrollToPosition(position);
+ } else {
+ mSelectionListener.onCardClicked(cardViewInfo);
+ }
+ });
+ if (mNumCardsToAnimate > 0 && (position - mCardAnimationStartPosition < 2)) {
+ mNumCardsToAnimate--;
+ int startDelay = (position - mCardAnimationStartPosition) * CARD_ANIM_ALPHA_DELAY
+ + mExtraAnimationDelay;
+ viewHolder.itemView.setAlpha(0f);
+ viewHolder.itemView.animate().alpha(1f)
+ .setStartDelay(Math.max(0, startDelay))
+ .setDuration(CARD_ANIM_ALPHA_DURATION).start();
+ }
+ }
+
+ @Override
+ public int getItemCount() {
+ return mData.size();
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return mData.get(position).getCardId().hashCode();
+ }
+
+ void setData(List<WalletCardViewInfo> data) {
+ mData = data;
+ notifyDataSetChanged();
+ }
+ }
+
+ private class CardCarouselAccessibilityDelegate extends RecyclerViewAccessibilityDelegate {
+
+ private CardCarouselAccessibilityDelegate(@NonNull RecyclerView recyclerView) {
+ super(recyclerView);
+ }
+
+ @Override
+ public boolean onRequestSendAccessibilityEvent(
+ ViewGroup viewGroup, View view, AccessibilityEvent accessibilityEvent) {
+ int eventType = accessibilityEvent.getEventType();
+ if (eventType == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED) {
+ scrollToPosition(getChildAdapterPosition(view));
+ }
+ return super.onRequestSendAccessibilityEvent(viewGroup, view, accessibilityEvent);
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardView.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardView.java
new file mode 100644
index 000000000000..fc1adc37d09b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardView.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.ui;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.cardview.widget.CardView;
+
+import com.android.systemui.R;
+
+/** Customized card view of the wallet card carousel. */
+public class WalletCardView extends CardView {
+ private final Paint mBorderPaint;
+
+ public WalletCardView(@NonNull Context context) {
+ this(context, null);
+ }
+
+ public WalletCardView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ mBorderPaint = new Paint();
+ mBorderPaint.setColor(context.getColor(R.color.wallet_card_border));
+ mBorderPaint.setStrokeWidth(
+ context.getResources().getDimension(R.dimen.wallet_card_border_width));
+ mBorderPaint.setStyle(Paint.Style.STROKE);
+ mBorderPaint.setAntiAlias(true);
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ super.draw(canvas);
+ float radius = getRadius();
+ canvas.drawRoundRect(0, 0, getWidth(), getHeight(), radius, radius, mBorderPaint);
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewHolder.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewHolder.java
new file mode 100644
index 000000000000..3197976456e3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewHolder.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.ui;
+
+import android.view.View;
+import android.widget.ImageView;
+
+import androidx.cardview.widget.CardView;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.systemui.R;
+
+/**
+ * View holder for the quick access wallet card.
+ */
+class WalletCardViewHolder extends RecyclerView.ViewHolder {
+
+ final CardView mCardView;
+ final ImageView mImageView;
+ WalletCardViewInfo mCardViewInfo;
+
+ WalletCardViewHolder(View view) {
+ super(view);
+ mCardView = view.requireViewById(R.id.card);
+ mImageView = mCardView.requireViewById(R.id.card_image);
+ }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewInfo.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewInfo.java
new file mode 100644
index 000000000000..669d6664b305
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletCardViewInfo.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.ui;
+
+import android.graphics.drawable.Drawable;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+interface WalletCardViewInfo {
+ String getCardId();
+
+ /**
+ * Image of the card.
+ */
+ @NonNull
+ Drawable getCardDrawable();
+
+ /**
+ * Content description for the card.
+ */
+ @Nullable
+ CharSequence getContentDescription();
+
+ /**
+ * Icon shown above the card.
+ */
+ @Nullable
+ Drawable getIcon();
+
+ /**
+ * Text shown above the card.
+ */
+ @NonNull
+ CharSequence getLabel();
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
new file mode 100644
index 000000000000..a93f0f0ba165
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
@@ -0,0 +1,330 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.ui;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.os.Handler;
+import android.service.quickaccesswallet.GetWalletCardsError;
+import android.service.quickaccesswallet.GetWalletCardsRequest;
+import android.service.quickaccesswallet.GetWalletCardsResponse;
+import android.service.quickaccesswallet.QuickAccessWalletClient;
+import android.service.quickaccesswallet.SelectWalletCardRequest;
+import android.service.quickaccesswallet.WalletCard;
+import android.service.quickaccesswallet.WalletServiceEvent;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import androidx.annotation.NonNull;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.R;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.settings.UserTracker;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+
+/** Controller for the wallet card carousel screen. */
+public class WalletScreenController implements
+ WalletCardCarousel.OnSelectionListener,
+ QuickAccessWalletClient.OnWalletCardsRetrievedCallback,
+ QuickAccessWalletClient.WalletServiceEventListener {
+
+ private static final String TAG = "WalletScreenCtrl";
+ private static final String PREFS_HAS_CARDS = "has_cards";
+ private static final String PREFS_WALLET_VIEW_HEIGHT = "wallet_view_height";
+ private static final int MAX_CARDS = 10;
+ private static final long SELECTION_DELAY_MILLIS = TimeUnit.SECONDS.toMillis(30);
+
+ private Context mContext;
+ private final QuickAccessWalletClient mWalletClient;
+ private final ActivityStarter mActivityStarter;
+ private final Executor mExecutor;
+ private final Handler mHandler;
+ private final Runnable mSelectionRunnable = this::selectCard;
+ private final SharedPreferences mPrefs;
+ private final WalletView mWalletView;
+ private final WalletCardCarousel mCardCarousel;
+
+ @VisibleForTesting String mSelectedCardId;
+ @VisibleForTesting boolean mIsDismissed;
+ private boolean mIsDeviceLocked;
+ private boolean mHasRegisteredListener;
+
+ public WalletScreenController(
+ Context context,
+ WalletView walletView,
+ QuickAccessWalletClient walletClient,
+ ActivityStarter activityStarter,
+ Executor executor,
+ Handler handler,
+ UserTracker userTracker,
+ boolean isDeviceLocked) {
+ mContext = context;
+ mWalletClient = walletClient;
+ mActivityStarter = activityStarter;
+ mExecutor = executor;
+ mHandler = handler;
+ mPrefs = userTracker.getUserContext().getSharedPreferences(TAG, Context.MODE_PRIVATE);
+ mWalletView = walletView;
+ mWalletView.setMinimumHeight(getExpectedMinHeight());
+ mWalletView.setLayoutParams(
+ new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+ mCardCarousel = mWalletView.getCardCarousel();
+ if (mCardCarousel != null) {
+ mCardCarousel.setSelectionListener(this);
+ }
+
+ if (!mPrefs.getBoolean(PREFS_HAS_CARDS, false)) {
+ // The empty state view is shown preemptively when cards were not returned last time
+ // to decrease perceived latency.
+ showEmptyStateView();
+ }
+ mIsDeviceLocked = isDeviceLocked;
+ }
+
+ /**
+ * Implements {@link QuickAccessWalletClient.OnWalletCardsRetrievedCallback}. Called when cards
+ * are retrieved successfully from the service. This is called on {@link #mExecutor}.
+ */
+ @Override
+ public void onWalletCardsRetrieved(@NonNull GetWalletCardsResponse response) {
+ if (mIsDismissed) {
+ return;
+ }
+ List<WalletCard> walletCards = response.getWalletCards();
+ List<WalletCardViewInfo> data = new ArrayList<>(walletCards.size());
+ for (WalletCard card : walletCards) {
+ data.add(new QAWalletCardViewInfo(mContext, card));
+ }
+ mHandler.post(() -> {
+ if (data.isEmpty()) {
+ showEmptyStateView();
+ } else {
+ mWalletView.showCardCarousel(data, response.getSelectedIndex(), mIsDeviceLocked);
+ }
+ // The empty state view will not be shown preemptively next time if cards were returned
+ mPrefs.edit().putBoolean(PREFS_HAS_CARDS, !data.isEmpty()).apply();
+ removeMinHeightAndRecordHeightOnLayout();
+ });
+ }
+
+ /**
+ * Implements {@link QuickAccessWalletClient.OnWalletCardsRetrievedCallback}. Called when there
+ * is an error during card retrieval. This will be run on the {@link #mExecutor}.
+ */
+ @Override
+ public void onWalletCardRetrievalError(@NonNull GetWalletCardsError error) {
+ if (mIsDismissed) {
+ return;
+ }
+ mHandler.post(() -> {
+ mWalletView.showErrorMessage(error.getMessage());
+ });
+ }
+
+ /**
+ * Implements {@link QuickAccessWalletClient.WalletServiceEventListener}. Called when the wallet
+ * application propagates an event, such as an NFC tap, to the quick access wallet view.
+ */
+ @Override
+ public void onWalletServiceEvent(WalletServiceEvent event) {
+ if (mIsDismissed) {
+ return;
+ }
+ switch (event.getEventType()) {
+ case WalletServiceEvent.TYPE_NFC_PAYMENT_STARTED:
+ onDismissed();
+ break;
+ case WalletServiceEvent.TYPE_WALLET_CARDS_UPDATED:
+ queryWalletCards();
+ break;
+ default:
+ Log.w(TAG, "onWalletServiceEvent: Unknown event type");
+ }
+ }
+
+ @Override
+ public void onCardSelected(@NonNull WalletCardViewInfo card) {
+ if (mIsDismissed) {
+ return;
+ }
+ mSelectedCardId = card.getCardId();
+ selectCard();
+ }
+
+ private void selectCard() {
+ mHandler.removeCallbacks(mSelectionRunnable);
+ String selectedCardId = mSelectedCardId;
+ if (mIsDismissed || selectedCardId == null) {
+ return;
+ }
+ mWalletClient.selectWalletCard(new SelectWalletCardRequest(selectedCardId));
+ // Re-selecting the card keeps the connection bound so we continue to get service events
+ // even if the user keeps it open for a long time.
+ mHandler.postDelayed(mSelectionRunnable, SELECTION_DELAY_MILLIS);
+ }
+
+
+
+ @Override
+ public void onCardClicked(@NonNull WalletCardViewInfo cardInfo) {
+ if (!(cardInfo instanceof QAWalletCardViewInfo)
+ || ((QAWalletCardViewInfo) cardInfo).mWalletCard == null
+ || ((QAWalletCardViewInfo) cardInfo).mWalletCard.getPendingIntent() == null) {
+ return;
+ }
+ mActivityStarter.startActivity(
+ ((QAWalletCardViewInfo) cardInfo).mWalletCard.getPendingIntent().getIntent(),
+ true);
+ }
+
+ @Override
+ public void queryWalletCards() {
+ if (mIsDismissed) {
+ return;
+ }
+ if (!mHasRegisteredListener) {
+ // Listener is registered even when device is locked. Should only be registered once.
+ mWalletClient.addWalletServiceEventListener(this);
+ mHasRegisteredListener = true;
+ }
+
+ mWalletView.show();
+ mWalletView.hideErrorMessage();
+ int iconSizePx = mContext.getResources().getDimensionPixelSize(R.dimen.wallet_icon_size);
+ int cardWidthPx = mCardCarousel.getCardWidthPx();
+ int cardHeightPx = mCardCarousel.getCardHeightPx();
+ GetWalletCardsRequest request =
+ new GetWalletCardsRequest(cardWidthPx, cardHeightPx, iconSizePx, MAX_CARDS);
+ mWalletClient.getWalletCards(mExecutor, request, this);
+ }
+
+ void onDismissed() {
+ if (mIsDismissed) {
+ return;
+ }
+ mIsDismissed = true;
+ mSelectedCardId = null;
+ mHandler.removeCallbacks(mSelectionRunnable);
+ mWalletClient.notifyWalletDismissed();
+ mWalletClient.removeWalletServiceEventListener(this);
+ mWalletView.animateDismissal();
+ // clear refs to the Wallet Activity
+ mContext = null;
+ }
+
+ private void showEmptyStateView() {
+ Drawable logo = mWalletClient.getLogo();
+ CharSequence logoContentDesc = mWalletClient.getServiceLabel();
+ CharSequence label = mWalletClient.getShortcutLongLabel();
+ Intent intent = mWalletClient.createWalletIntent();
+ if (logo == null
+ || TextUtils.isEmpty(logoContentDesc)
+ || TextUtils.isEmpty(label)
+ || intent == null) {
+ Log.w(TAG, "QuickAccessWalletService manifest entry mis-configured");
+ // Issue is not likely to be resolved until manifest entries are enabled.
+ // Hide wallet feature until then.
+ mWalletView.hide();
+ mPrefs.edit().putInt(PREFS_WALLET_VIEW_HEIGHT, 0).apply();
+ } else {
+ logo.setTint(mContext.getColor(R.color.GM2_grey_900));
+ mWalletView.showEmptyStateView(
+ logo,
+ logoContentDesc,
+ label,
+ v -> mActivityStarter.startActivity(intent, true));
+ }
+ }
+
+ private int getExpectedMinHeight() {
+ int expectedHeight = mPrefs.getInt(PREFS_WALLET_VIEW_HEIGHT, -1);
+ if (expectedHeight == -1) {
+ Resources res = mContext.getResources();
+ expectedHeight = res.getDimensionPixelSize(R.dimen.min_wallet_empty_height);
+ }
+ return expectedHeight;
+ }
+
+ private void removeMinHeightAndRecordHeightOnLayout() {
+ mWalletView.setMinimumHeight(0);
+ mWalletView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+ @Override
+ public void onLayoutChange(View v, int left, int top, int right, int bottom,
+ int oldLeft, int oldTop, int oldRight, int oldBottom) {
+ mWalletView.removeOnLayoutChangeListener(this);
+ mPrefs.edit().putInt(PREFS_WALLET_VIEW_HEIGHT, bottom - top).apply();
+ }
+ });
+ }
+
+ @VisibleForTesting
+ static class QAWalletCardViewInfo implements WalletCardViewInfo {
+
+ private final WalletCard mWalletCard;
+ private final Drawable mCardDrawable;
+ private final Drawable mIconDrawable;
+
+ /**
+ * Constructor is called on background executor, so it is safe to load drawables
+ * synchronously.
+ */
+ QAWalletCardViewInfo(Context context, WalletCard walletCard) {
+ mWalletCard = walletCard;
+ mCardDrawable = mWalletCard.getCardImage().loadDrawable(context);
+ Icon icon = mWalletCard.getCardIcon();
+ mIconDrawable = icon == null ? null : icon.loadDrawable(context);
+ }
+
+ @Override
+ public String getCardId() {
+ return mWalletCard.getCardId();
+ }
+
+ @Override
+ public Drawable getCardDrawable() {
+ return mCardDrawable;
+ }
+
+ @Override
+ public CharSequence getContentDescription() {
+ return mWalletCard.getContentDescription();
+ }
+
+ @Override
+ public Drawable getIcon() {
+ return mIconDrawable;
+ }
+
+ @Override
+ public CharSequence getLabel() {
+ return mWalletCard.getCardLabel();
+ }
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java
new file mode 100644
index 000000000000..d2f0720fa66b
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletView.java
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.ui;
+
+import static com.android.systemui.wallet.ui.WalletCardCarousel.CARD_ANIM_ALPHA_DELAY;
+import static com.android.systemui.wallet.ui.WalletCardCarousel.CARD_ANIM_ALPHA_DURATION;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.ViewGroup;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+import android.widget.Button;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.systemui.R;
+
+import java.util.List;
+
+/** Layout for the wallet screen. */
+public class WalletView extends FrameLayout implements WalletCardCarousel.OnCardScrollListener {
+
+ private static final int CAROUSEL_IN_ANIMATION_DURATION = 300;
+ private static final int CAROUSEL_OUT_ANIMATION_DURATION = 200;
+ private static final int CARD_LABEL_ANIM_DELAY = 133;
+ private static final int CONTACTLESS_ICON_SIZE = 90;
+
+ private final WalletCardCarousel mCardCarousel;
+ private final ImageView mIcon;
+ private final TextView mCardLabel;
+ private final Button mWalletButton;
+ private final Interpolator mInInterpolator;
+ private final Interpolator mOutInterpolator;
+ private final float mAnimationTranslationX;
+ private final ViewGroup mCardCarouselContainer;
+ private final TextView mErrorView;
+ private final ViewGroup mEmptyStateView;
+ private CharSequence mCenterCardText;
+
+ public WalletView(Context context) {
+ this(context, null);
+ }
+
+ public WalletView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ inflate(context, R.layout.wallet_fullscreen, this);
+ mCardCarouselContainer = requireViewById(R.id.card_carousel_container);
+ mCardCarousel = requireViewById(R.id.card_carousel);
+ mCardCarousel.setCardScrollListener(this);
+ mIcon = requireViewById(R.id.icon);
+ mCardLabel = requireViewById(R.id.label);
+ mWalletButton = requireViewById(R.id.wallet_button);
+ mErrorView = requireViewById(R.id.error_view);
+ mEmptyStateView = requireViewById(R.id.wallet_empty_state);
+ mInInterpolator =
+ AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in);
+ mOutInterpolator =
+ AnimationUtils.loadInterpolator(context, android.R.interpolator.accelerate_cubic);
+ mAnimationTranslationX = mCardCarousel.getCardWidthPx() / 4f;
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ super.onLayout(changed, left, top, right, bottom);
+ mCardCarousel.setExpectedViewWidth(getWidth());
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ // Forward touch events to card carousel to allow for swiping outside carousel bounds.
+ return mCardCarousel.onTouchEvent(event) || super.onTouchEvent(event);
+ }
+
+ @Override
+ public void onCardScroll(WalletCardViewInfo centerCard, WalletCardViewInfo nextCard,
+ float percentDistanceFromCenter) {
+ CharSequence centerCardText = centerCard.getLabel();
+ Drawable icon = centerCard.getIcon();
+ if (icon != null) {
+ mIcon.setImageDrawable(resizeDrawable(getResources(), icon));
+ mIcon.setVisibility(VISIBLE);
+ } else {
+ mIcon.setVisibility(INVISIBLE);
+ }
+ if (!TextUtils.equals(mCenterCardText, centerCardText)) {
+ mCenterCardText = centerCardText;
+ mCardLabel.setText(centerCardText);
+ }
+ if (TextUtils.equals(centerCardText, nextCard.getLabel())) {
+ mCardLabel.setAlpha(1f);
+ } else {
+ mCardLabel.setAlpha(percentDistanceFromCenter);
+ mIcon.setAlpha(percentDistanceFromCenter);
+ }
+ }
+
+ void showCardCarousel(
+ List<WalletCardViewInfo> data, int selectedIndex, boolean isDeviceLocked) {
+ boolean shouldAnimate = mCardCarousel.setData(data, selectedIndex);
+ mCardCarouselContainer.setVisibility(VISIBLE);
+ mErrorView.setVisibility(GONE);
+ if (isDeviceLocked) {
+ // TODO(b/182964813): Add click action to prompt device unlock.
+ mWalletButton.setText(R.string.wallet_button_label_device_locked);
+ } else {
+ mWalletButton.setText(R.string.wallet_button_label_device_unlocked);
+ }
+ if (shouldAnimate) {
+ // If the empty state is visible, animate it away and delay the card carousel animation
+ int emptyStateAnimDelay = 0;
+ if (mEmptyStateView.getVisibility() == VISIBLE) {
+ emptyStateAnimDelay = CARD_ANIM_ALPHA_DURATION;
+ mEmptyStateView.animate()
+ .alpha(0)
+ .setDuration(emptyStateAnimDelay)
+ .setListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mEmptyStateView.setVisibility(GONE);
+ }
+ })
+ .start();
+ }
+ mCardLabel.setAlpha(0f);
+ mCardLabel.animate().alpha(1f)
+ .setStartDelay(CARD_LABEL_ANIM_DELAY + emptyStateAnimDelay)
+ .setDuration(CARD_ANIM_ALPHA_DURATION)
+ .start();
+ mCardCarousel.setExtraAnimationDelay(emptyStateAnimDelay);
+ mCardCarousel.setTranslationX(mAnimationTranslationX);
+ mCardCarousel.animate().translationX(0)
+ .setInterpolator(mInInterpolator)
+ .setDuration(CAROUSEL_IN_ANIMATION_DURATION)
+ .setStartDelay(emptyStateAnimDelay)
+ .start();
+ }
+ }
+
+ void animateDismissal() {
+ if (mCardCarouselContainer.getVisibility() != VISIBLE) {
+ return;
+ }
+ mCardCarousel.animate().translationX(mAnimationTranslationX)
+ .setInterpolator(mOutInterpolator)
+ .setDuration(CAROUSEL_OUT_ANIMATION_DURATION)
+ .start();
+ mCardCarouselContainer.animate()
+ .alpha(0f)
+ .setDuration(CARD_ANIM_ALPHA_DURATION)
+ .setStartDelay(CARD_ANIM_ALPHA_DELAY)
+ .start();
+ }
+
+ void showEmptyStateView(Drawable logo, CharSequence logoContentDescription, CharSequence label,
+ OnClickListener clickListener) {
+ mEmptyStateView.setVisibility(VISIBLE);
+ mErrorView.setVisibility(GONE);
+ mCardCarouselContainer.setVisibility(GONE);
+ ImageView logoView = mEmptyStateView.requireViewById(R.id.empty_state_icon);
+ logoView.setImageDrawable(logo);
+ logoView.setContentDescription(logoContentDescription);
+ mEmptyStateView.<TextView>requireViewById(R.id.empty_state_title).setText(label);
+ mEmptyStateView.setOnClickListener(clickListener);
+ }
+
+ void showErrorMessage(@Nullable CharSequence message) {
+ if (TextUtils.isEmpty(message)) {
+ message = getResources().getText(R.string.wallet_error_generic);
+ }
+ mErrorView.setText(message);
+ mErrorView.setVisibility(VISIBLE);
+ mCardCarouselContainer.setVisibility(GONE);
+ mEmptyStateView.setVisibility(GONE);
+ }
+
+ void hide() {
+ setVisibility(GONE);
+ }
+
+ void show() {
+ setVisibility(VISIBLE);
+ }
+
+ void hideErrorMessage() {
+ mErrorView.setVisibility(GONE);
+ }
+
+ WalletCardCarousel getCardCarousel() {
+ return mCardCarousel;
+ }
+
+ Button getWalletButton() {
+ return mWalletButton;
+ }
+
+ @VisibleForTesting
+ TextView getErrorView() {
+ return mErrorView;
+ }
+
+ @VisibleForTesting
+ ViewGroup getEmptyStateView() {
+ return mEmptyStateView;
+ }
+
+ @VisibleForTesting
+ ViewGroup getCardCarouselContainer() {
+ return mCardCarouselContainer;
+ }
+
+ private static Drawable resizeDrawable(Resources resources, Drawable drawable) {
+ Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
+ return new BitmapDrawable(resources, Bitmap.createScaledBitmap(
+ bitmap, CONTACTLESS_ICON_SIZE, CONTACTLESS_ICON_SIZE, true));
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java
index 82dad68f238c..2216a915b0d9 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/TvPipModule.java
@@ -34,6 +34,7 @@ import com.android.wm.shell.pip.PipAnimationController;
import com.android.wm.shell.pip.PipBoundsAlgorithm;
import com.android.wm.shell.pip.PipBoundsState;
import com.android.wm.shell.pip.PipMediaController;
+import com.android.wm.shell.pip.PipSnapAlgorithm;
import com.android.wm.shell.pip.PipSurfaceTransactionHelper;
import com.android.wm.shell.pip.PipTaskOrganizer;
import com.android.wm.shell.pip.PipTransitionController;
@@ -85,9 +86,15 @@ public abstract class TvPipModule {
@WMSingleton
@Provides
- static PipBoundsAlgorithm providePipBoundsHandler(Context context,
- PipBoundsState pipBoundsState) {
- return new PipBoundsAlgorithm(context, pipBoundsState);
+ static PipSnapAlgorithm providePipSnapAlgorithm() {
+ return new PipSnapAlgorithm();
+ }
+
+ @WMSingleton
+ @Provides
+ static PipBoundsAlgorithm providePipBoundsAlgorithm(Context context,
+ PipBoundsState pipBoundsState, PipSnapAlgorithm pipSnapAlgorithm) {
+ return new PipBoundsAlgorithm(context, pipBoundsState, pipSnapAlgorithm);
}
@WMSingleton
diff --git a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java
index af94876b1f8c..33b2d67e462e 100644
--- a/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java
+++ b/packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java
@@ -43,6 +43,7 @@ import com.android.wm.shell.pip.PipAnimationController;
import com.android.wm.shell.pip.PipBoundsAlgorithm;
import com.android.wm.shell.pip.PipBoundsState;
import com.android.wm.shell.pip.PipMediaController;
+import com.android.wm.shell.pip.PipSnapAlgorithm;
import com.android.wm.shell.pip.PipSurfaceTransactionHelper;
import com.android.wm.shell.pip.PipTaskOrganizer;
import com.android.wm.shell.pip.PipTransition;
@@ -51,6 +52,7 @@ import com.android.wm.shell.pip.PipUiEventLogger;
import com.android.wm.shell.pip.phone.PhonePipMenuController;
import com.android.wm.shell.pip.phone.PipAppOpsListener;
import com.android.wm.shell.pip.phone.PipController;
+import com.android.wm.shell.pip.phone.PipMotionHelper;
import com.android.wm.shell.pip.phone.PipTouchHandler;
import com.android.wm.shell.transition.Transitions;
@@ -140,9 +142,15 @@ public class WMShellModule {
@WMSingleton
@Provides
- static PipBoundsAlgorithm providesPipBoundsHandler(Context context,
- PipBoundsState pipBoundsState) {
- return new PipBoundsAlgorithm(context, pipBoundsState);
+ static PipSnapAlgorithm providePipSnapAlgorithm() {
+ return new PipSnapAlgorithm();
+ }
+
+ @WMSingleton
+ @Provides
+ static PipBoundsAlgorithm providesPipBoundsAlgorithm(Context context,
+ PipBoundsState pipBoundsState, PipSnapAlgorithm pipSnapAlgorithm) {
+ return new PipBoundsAlgorithm(context, pipBoundsState, pipSnapAlgorithm);
}
// Handler is used by Icon.loadDrawableAsync
@@ -162,12 +170,12 @@ public class WMShellModule {
PhonePipMenuController menuPhoneController, PipBoundsAlgorithm pipBoundsAlgorithm,
PipBoundsState pipBoundsState,
PipTaskOrganizer pipTaskOrganizer,
- PipTransitionController pipTransitionController,
+ PipMotionHelper pipMotionHelper,
FloatingContentCoordinator floatingContentCoordinator,
PipUiEventLogger pipUiEventLogger,
@ShellMainThread ShellExecutor mainExecutor) {
return new PipTouchHandler(context, menuPhoneController, pipBoundsAlgorithm,
- pipBoundsState, pipTaskOrganizer, pipTransitionController,
+ pipBoundsState, pipTaskOrganizer, pipMotionHelper,
floatingContentCoordinator, pipUiEventLogger, mainExecutor);
}
@@ -208,4 +216,16 @@ public class WMShellModule {
return new PipTransition(context, pipBoundsState, pipMenuController,
pipBoundsAlgorithm, pipAnimationController, transitions, shellTaskOrganizer);
}
+
+ @WMSingleton
+ @Provides
+ static PipMotionHelper providePipMotionHelper(Context context,
+ PipBoundsState pipBoundsState, PipTaskOrganizer pipTaskOrganizer,
+ PhonePipMenuController menuController, PipSnapAlgorithm pipSnapAlgorithm,
+ PipTransitionController pipTransitionController,
+ FloatingContentCoordinator floatingContentCoordinator) {
+ return new PipMotionHelper(context, pipBoundsState, pipTaskOrganizer,
+ menuController, pipSnapAlgorithm, pipTransitionController,
+ floatingContentCoordinator);
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java
index 714f1f235c52..4d526508ce0f 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardHostViewControllerTest.java
@@ -124,4 +124,11 @@ public class KeyguardHostViewControllerTest extends SysuiTestCase {
((FrameLayout.LayoutParams) mKeyguardHostView.getLayoutParams()).gravity,
Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM);
}
+
+ @Test
+ public void testUpdateKeyguardPositionDelegatesToSecurityContainer() {
+ mKeyguardHostViewController.updateKeyguardPosition(1.0f);
+
+ verify(mKeyguardSecurityContainerController).updateKeyguardPosition(1.0f);
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
index 99b3f6f19f81..ca857c5dd05b 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerControllerTest.java
@@ -177,4 +177,10 @@ public class KeyguardSecurityContainerControllerTest extends SysuiTestCase {
mKeyguardSecurityContainerController.updateResources();
verify(mView, times(1)).updateLayoutForSecurityMode(any());
}
+
+ @Test
+ public void updateKeyguardPosition_callsThroughToView() {
+ mKeyguardSecurityContainerController.updateKeyguardPosition(1.0f);
+ verify(mView).updateKeyguardPosition(1.0f);
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
index 104318e0f4ae..9557d5cdb982 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardSecurityContainerTest.java
@@ -19,6 +19,9 @@ package com.android.keyguard;
import static android.view.WindowInsets.Type.ime;
import static android.view.WindowInsets.Type.systemBars;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -198,6 +201,46 @@ public class KeyguardSecurityContainerTest extends SysuiTestCase {
verify(mSecurityViewFlipper).measure(FAKE_MEASURE_SPEC, expectedHeightMeasureSpec);
}
+ private void setupForUpdateKeyguardPosition(SecurityMode securityMode) {
+ setUpKeyguard(
+ /* deviceConfigCanUseOneHandedKeyguard= */true,
+ /* sysuiResourceCanUseOneHandedKeyguard= */ true,
+ securityMode);
+
+ mKeyguardSecurityContainer.measure(FAKE_MEASURE_SPEC, FAKE_MEASURE_SPEC);
+ mKeyguardSecurityContainer.layout(0, 0, SCREEN_WIDTH, SCREEN_WIDTH);
+
+ // Start off left-aligned. This should happen anyway, but just do this to ensure
+ // definitely move to the left.
+ mKeyguardSecurityContainer.updateKeyguardPosition(0.0f);
+
+ // Clear any interactions with the mock so we know the interactions definitely come from the
+ // below testing.
+ reset(mSecurityViewFlipper);
+ }
+
+ @Test
+ public void updateKeyguardPosition_movesKeyguard() {
+ setupForUpdateKeyguardPosition(ONE_HANDED_SECURITY_MODE);
+
+ mKeyguardSecurityContainer.updateKeyguardPosition((SCREEN_WIDTH / 4f) * 3f);
+ verify(mSecurityViewFlipper).setTranslationX(SCREEN_WIDTH / 2.0f);
+
+ mKeyguardSecurityContainer.updateKeyguardPosition(0.0f);
+ verify(mSecurityViewFlipper).setTranslationX(0.0f);
+ }
+
+ @Test
+ public void updateKeyguardPosition_doesntMoveTwoHandedKeyguard() {
+ setupForUpdateKeyguardPosition(TWO_HANDED_SECURITY_MODE);
+
+ mKeyguardSecurityContainer.updateKeyguardPosition((SCREEN_WIDTH / 4f) * 3f);
+ verify(mSecurityViewFlipper, never()).setTranslationX(anyInt());
+
+ mKeyguardSecurityContainer.updateKeyguardPosition(0.0f);
+ verify(mSecurityViewFlipper, never()).setTranslationX(anyInt());
+ }
+
private void setUpKeyguard(
boolean deviceConfigCanUseOneHandedKeyguard,
boolean sysuiResourceCanUseOneHandedKeyguard,
diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
index 44c3b26189c4..d544f7378f8a 100644
--- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
+++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java
@@ -881,6 +881,51 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
}
@Test
+ public void testShouldNotListenForUdfps_whenTrustEnabled() {
+ // GIVEN a "we should listen for udfps" state
+ setKeyguardBouncerVisibility(false /* isVisible */);
+ mStatusBarStateListener.onStateChanged(StatusBarState.KEYGUARD);
+ when(mStrongAuthTracker.hasUserAuthenticatedSinceBoot()).thenReturn(true);
+
+ // WHEN trust is enabled (ie: via smartlock)
+ mKeyguardUpdateMonitor.onTrustChanged(true /* enabled */,
+ KeyguardUpdateMonitor.getCurrentUser(), 0 /* flags */);
+
+ // THEN we shouldn't listen for udfps
+ assertThat(mKeyguardUpdateMonitor.shouldListenForUdfps()).isEqualTo(false);
+ }
+
+ @Test
+ public void testShouldNotListenForUdfps_whenFaceAuthenticated() {
+ // GIVEN a "we should listen for udfps" state
+ setKeyguardBouncerVisibility(false /* isVisible */);
+ mStatusBarStateListener.onStateChanged(StatusBarState.KEYGUARD);
+ when(mStrongAuthTracker.hasUserAuthenticatedSinceBoot()).thenReturn(true);
+
+ // WHEN face authenticated
+ mKeyguardUpdateMonitor.onFaceAuthenticated(
+ KeyguardUpdateMonitor.getCurrentUser(), false);
+
+ // THEN we shouldn't listen for udfps
+ assertThat(mKeyguardUpdateMonitor.shouldListenForUdfps()).isEqualTo(false);
+ }
+
+ @Test
+ public void testShouldNotListenForUdfps_whenInLockDown() {
+ // GIVEN a "we should listen for udfps" state
+ setKeyguardBouncerVisibility(false /* isVisible */);
+ mStatusBarStateListener.onStateChanged(StatusBarState.KEYGUARD);
+ when(mStrongAuthTracker.hasUserAuthenticatedSinceBoot()).thenReturn(true);
+
+ // WHEN device in lock down
+ when(mStrongAuthTracker.getStrongAuthForUser(anyInt())).thenReturn(
+ KeyguardUpdateMonitor.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_USER_LOCKDOWN);
+
+ // THEN we shouldn't listen for udfps
+ assertThat(mKeyguardUpdateMonitor.shouldListenForUdfps()).isEqualTo(false);
+ }
+
+ @Test
public void testRequireUnlockForNfc_Broadcast() {
KeyguardUpdateMonitorCallback callback = mock(KeyguardUpdateMonitorCallback.class);
mKeyguardUpdateMonitor.registerCallback(callback);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java
index 1565dee932cd..36a031a6ae35 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/AuthBiometricViewTest.java
@@ -26,11 +26,7 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import android.content.Context;
-import android.hardware.biometrics.ComponentInfoInternal;
import android.hardware.biometrics.PromptInfo;
-import android.hardware.biometrics.SensorProperties;
-import android.hardware.fingerprint.FingerprintSensorProperties;
-import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
import android.os.Bundle;
import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
@@ -50,9 +46,6 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import java.util.ArrayList;
-import java.util.List;
-
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
@SmallTest
@@ -334,86 +327,6 @@ public class AuthBiometricViewTest extends SysuiTestCase {
verify(mCallback).onAction(AuthBiometricView.Callback.ACTION_USE_DEVICE_CREDENTIAL);
}
- @Test
- public void testUdfpsBottomSpacerHeightForPortrait() {
- final int displayHeightPx = 3000;
- final int navbarHeightPx = 10;
- final int dialogBottomMarginPx = 20;
- final int buttonBarHeightPx = 100;
- final int textIndicatorHeightPx = 200;
-
- final int sensorLocationX = 540;
- final int sensorLocationY = 1600;
- final int sensorRadius = 100;
-
- final List<ComponentInfoInternal> componentInfo = new ArrayList<>();
- componentInfo.add(new ComponentInfoInternal("faceSensor" /* componentId */,
- "vendor/model/revision" /* hardwareVersion */, "1.01" /* firmwareVersion */,
- "00000001" /* serialNumber */, "" /* softwareVersion */));
- componentInfo.add(new ComponentInfoInternal("matchingAlgorithm" /* componentId */,
- "" /* hardwareVersion */, "" /* firmwareVersion */, "" /* serialNumber */,
- "vendor/version/revision" /* softwareVersion */));
-
- final FingerprintSensorPropertiesInternal props = new FingerprintSensorPropertiesInternal(
- 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */,
- componentInfo,
- FingerprintSensorProperties.TYPE_UDFPS_OPTICAL,
- true /* resetLockoutRequiresHardwareAuthToken */, sensorLocationX, sensorLocationY,
- sensorRadius);
-
- assertEquals(970,
- AuthBiometricUdfpsView.calculateBottomSpacerHeightForPortrait(
- props, displayHeightPx, textIndicatorHeightPx, buttonBarHeightPx,
- dialogBottomMarginPx, navbarHeightPx
- ));
- }
-
- @Test
- public void testUdfpsBottomSpacerHeightForLandscape() {
- final int titleHeightPx = 320;
- final int subtitleHeightPx = 240;
- final int descriptionHeightPx = 200;
- final int topSpacerHeightPx = 550;
- final int textIndicatorHeightPx = 190;
- final int buttonBarHeightPx = 160;
- final int navbarBottomInsetPx = 75;
-
- assertEquals(885,
- AuthBiometricUdfpsView.calculateBottomSpacerHeightForLandscape(
- titleHeightPx, subtitleHeightPx, descriptionHeightPx, topSpacerHeightPx,
- textIndicatorHeightPx, buttonBarHeightPx, navbarBottomInsetPx));
- }
-
- @Test
- public void testUdfpsHorizontalSpacerWidthForLandscape() {
- final int displayWidthPx = 3000;
- final int dialogMarginPx = 20;
- final int navbarHorizontalInsetPx = 75;
-
- final int sensorLocationX = 540;
- final int sensorLocationY = 1600;
- final int sensorRadius = 100;
-
- final List<ComponentInfoInternal> componentInfo = new ArrayList<>();
- componentInfo.add(new ComponentInfoInternal("faceSensor" /* componentId */,
- "vendor/model/revision" /* hardwareVersion */, "1.01" /* firmwareVersion */,
- "00000001" /* serialNumber */, "" /* softwareVersion */));
- componentInfo.add(new ComponentInfoInternal("matchingAlgorithm" /* componentId */,
- "" /* hardwareVersion */, "" /* firmwareVersion */, "" /* serialNumber */,
- "vendor/version/revision" /* softwareVersion */));
-
- final FingerprintSensorPropertiesInternal props = new FingerprintSensorPropertiesInternal(
- 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */,
- componentInfo,
- FingerprintSensorProperties.TYPE_UDFPS_OPTICAL,
- true /* resetLockoutRequiresHardwareAuthToken */, sensorLocationX, sensorLocationY,
- sensorRadius);
-
- assertEquals(1205,
- AuthBiometricUdfpsView.calculateHorizontalSpacerWidthForLandscape(
- props, displayWidthPx, dialogMarginPx, navbarHorizontalInsetPx));
- }
-
private PromptInfo buildPromptInfo(boolean allowDeviceCredential) {
PromptInfo promptInfo = new PromptInfo();
promptInfo.setTitle("Title");
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
index d3694ddedae4..beca96549fb9 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsControllerTest.java
@@ -43,6 +43,7 @@ import android.view.WindowManager;
import androidx.test.filters.SmallTest;
+import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
@@ -100,6 +101,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
@Mock
private AuthRippleController mAuthRippleController;
@Mock
+ private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
+ @Mock
private IUdfpsOverlayControllerCallback mUdfpsOverlayControllerCallback;
private FakeExecutor mFgExecutor;
@@ -151,7 +154,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
mStatusBar,
mStatusBarKeyguardViewManager,
mDumpManager,
- mAuthRippleController);
+ mAuthRippleController,
+ mKeyguardUpdateMonitor);
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
mOverlayController = mOverlayCaptor.getValue();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java
new file mode 100644
index 000000000000..ee13d2366285
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsDialogMeasureAdapterTest.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.biometrics;
+
+import static org.junit.Assert.assertEquals;
+
+import android.hardware.biometrics.ComponentInfoInternal;
+import android.hardware.biometrics.SensorProperties;
+import android.hardware.fingerprint.FingerprintSensorProperties;
+import android.hardware.fingerprint.FingerprintSensorPropertiesInternal;
+import android.testing.AndroidTestingRunner;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(AndroidTestingRunner.class)
+@SmallTest
+public class UdfpsDialogMeasureAdapterTest extends SysuiTestCase {
+ @Test
+ public void testUdfpsBottomSpacerHeightForPortrait() {
+ final int displayHeightPx = 3000;
+ final int navbarHeightPx = 10;
+ final int dialogBottomMarginPx = 20;
+ final int buttonBarHeightPx = 100;
+ final int textIndicatorHeightPx = 200;
+
+ final int sensorLocationX = 540;
+ final int sensorLocationY = 1600;
+ final int sensorRadius = 100;
+
+ final List<ComponentInfoInternal> componentInfo = new ArrayList<>();
+ componentInfo.add(new ComponentInfoInternal("faceSensor" /* componentId */,
+ "vendor/model/revision" /* hardwareVersion */, "1.01" /* firmwareVersion */,
+ "00000001" /* serialNumber */, "" /* softwareVersion */));
+ componentInfo.add(new ComponentInfoInternal("matchingAlgorithm" /* componentId */,
+ "" /* hardwareVersion */, "" /* firmwareVersion */, "" /* serialNumber */,
+ "vendor/version/revision" /* softwareVersion */));
+
+ final FingerprintSensorPropertiesInternal props = new FingerprintSensorPropertiesInternal(
+ 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */,
+ componentInfo,
+ FingerprintSensorProperties.TYPE_UDFPS_OPTICAL,
+ true /* resetLockoutRequiresHardwareAuthToken */, sensorLocationX, sensorLocationY,
+ sensorRadius);
+
+ assertEquals(970,
+ UdfpsDialogMeasureAdapter.calculateBottomSpacerHeightForPortrait(
+ props, displayHeightPx, textIndicatorHeightPx, buttonBarHeightPx,
+ dialogBottomMarginPx, navbarHeightPx
+ ));
+ }
+
+ @Test
+ public void testUdfpsBottomSpacerHeightForLandscape() {
+ final int titleHeightPx = 320;
+ final int subtitleHeightPx = 240;
+ final int descriptionHeightPx = 200;
+ final int topSpacerHeightPx = 550;
+ final int textIndicatorHeightPx = 190;
+ final int buttonBarHeightPx = 160;
+ final int navbarBottomInsetPx = 75;
+
+ assertEquals(885,
+ UdfpsDialogMeasureAdapter.calculateBottomSpacerHeightForLandscape(
+ titleHeightPx, subtitleHeightPx, descriptionHeightPx, topSpacerHeightPx,
+ textIndicatorHeightPx, buttonBarHeightPx, navbarBottomInsetPx));
+ }
+
+ @Test
+ public void testUdfpsHorizontalSpacerWidthForLandscape() {
+ final int displayWidthPx = 3000;
+ final int dialogMarginPx = 20;
+ final int navbarHorizontalInsetPx = 75;
+
+ final int sensorLocationX = 540;
+ final int sensorLocationY = 1600;
+ final int sensorRadius = 100;
+
+ final List<ComponentInfoInternal> componentInfo = new ArrayList<>();
+ componentInfo.add(new ComponentInfoInternal("faceSensor" /* componentId */,
+ "vendor/model/revision" /* hardwareVersion */, "1.01" /* firmwareVersion */,
+ "00000001" /* serialNumber */, "" /* softwareVersion */));
+ componentInfo.add(new ComponentInfoInternal("matchingAlgorithm" /* componentId */,
+ "" /* hardwareVersion */, "" /* firmwareVersion */, "" /* serialNumber */,
+ "vendor/version/revision" /* softwareVersion */));
+
+ final FingerprintSensorPropertiesInternal props = new FingerprintSensorPropertiesInternal(
+ 0 /* sensorId */, SensorProperties.STRENGTH_STRONG, 5 /* maxEnrollmentsPerUser */,
+ componentInfo,
+ FingerprintSensorProperties.TYPE_UDFPS_OPTICAL,
+ true /* resetLockoutRequiresHardwareAuthToken */, sensorLocationX, sensorLocationY,
+ sensorRadius);
+
+ assertEquals(1205,
+ UdfpsDialogMeasureAdapter.calculateHorizontalSpacerWidthForLandscape(
+ props, displayWidthPx, dialogMarginPx, navbarHorizontalInsetPx));
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
index 44109924f9f5..879cdbfb775f 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/biometrics/UdfpsKeyguardViewControllerTest.java
@@ -27,12 +27,14 @@ import android.testing.TestableLooper.RunWithLooper;
import androidx.test.filters.SmallTest;
+import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.util.concurrency.DelayableExecutor;
import org.junit.Before;
import org.junit.Test;
@@ -59,6 +61,10 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
@Mock
private DumpManager mDumpManager;
+ @Mock
+ private DelayableExecutor mExecutor;
+ @Mock
+ private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
private UdfpsKeyguardViewController mController;
@@ -82,6 +88,8 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
mStatusBarStateController,
mStatusBar,
mStatusBarKeyguardViewManager,
+ mKeyguardUpdateMonitor,
+ mExecutor,
mDumpManager);
}
@@ -168,13 +176,13 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
sendStatusBarStateChanged(StatusBarState.SHADE_LOCKED);
assertTrue(mController.shouldPauseAuth());
- mAltAuthInterceptor.showAlternativeAuthMethod(); // force show
+ mAltAuthInterceptor.showAlternateAuthBouncer(); // force show
assertFalse(mController.shouldPauseAuth());
- assertTrue(mAltAuthInterceptor.isShowingAlternateAuth());
+ assertTrue(mAltAuthInterceptor.isShowingAlternateAuthBouncer());
- mAltAuthInterceptor.resetForceShow(); // stop force show
+ mAltAuthInterceptor.hideAlternateAuthBouncer(); // stop force show
assertTrue(mController.shouldPauseAuth());
- assertFalse(mAltAuthInterceptor.isShowingAlternateAuth());
+ assertFalse(mAltAuthInterceptor.isShowingAlternateAuthBouncer());
}
@Test
@@ -184,13 +192,13 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
captureStatusBarStateListeners();
captureAltAuthInterceptor();
- mAltAuthInterceptor.showAlternativeAuthMethod(); // alt auth force show
+ mAltAuthInterceptor.showAlternateAuthBouncer(); // alt auth force show
// WHEN view is detached
mController.onViewDetached();
// THEN alt auth state reports not showing
- assertFalse(mAltAuthInterceptor.isShowingAlternateAuth());
+ assertFalse(mAltAuthInterceptor.isShowingAlternateAuthBouncer());
}
private void sendStatusBarStateChanged(int statusBarState) {
diff --git a/packages/SystemUI/tests/src/com/android/systemui/camera/CameraIntentsTest.kt b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraIntentsTest.kt
new file mode 100644
index 000000000000..feaedc53fbc1
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/camera/CameraIntentsTest.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.camera
+
+import android.content.Intent
+import android.test.suitebuilder.annotation.SmallTest
+import android.testing.AndroidTestingRunner
+import com.android.systemui.SysuiTestCase
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@SmallTest
+@RunWith(AndroidTestingRunner::class)
+class CameraIntentsTest : SysuiTestCase() {
+ companion object {
+ val VALID_SECURE_INTENT = Intent(CameraIntents.DEFAULT_SECURE_CAMERA_INTENT_ACTION)
+ val VALID_INSECURE_INTENT = Intent(CameraIntents.DEFAULT_INSECURE_CAMERA_INTENT_ACTION)
+ }
+
+ @Test
+ fun testIsSecureCameraIntent() {
+ assertTrue(CameraIntents.isSecureCameraIntent(VALID_SECURE_INTENT))
+ // an intent with a specific package is still a valid secure camera intent
+ assertTrue(CameraIntents.isSecureCameraIntent(
+ Intent(VALID_SECURE_INTENT).setPackage("com.example")))
+ assertFalse(CameraIntents.isSecureCameraIntent(null))
+ assertFalse(CameraIntents.isSecureCameraIntent(Intent()))
+ assertFalse(CameraIntents.isSecureCameraIntent(Intent(Intent.ACTION_MAIN)))
+ }
+ @Test
+ fun testIsInsecureCameraIntent() {
+ assertTrue(CameraIntents.isInsecureCameraIntent(VALID_INSECURE_INTENT))
+ // an intent with a specific package is still a valid secure camera intent
+ assertTrue(CameraIntents.isInsecureCameraIntent(
+ Intent(VALID_INSECURE_INTENT).setPackage("com.example")))
+ assertFalse(CameraIntents.isInsecureCameraIntent(null))
+ assertFalse(CameraIntents.isInsecureCameraIntent(Intent()))
+ assertFalse(CameraIntents.isInsecureCameraIntent(Intent(Intent.ACTION_MAIN)))
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java
index ebdda67a90d0..42387bcf9adc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingDataProviderTest.java
@@ -16,9 +16,12 @@
package com.android.systemui.classifier;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.Matchers.closeTo;
-import static org.junit.Assert.assertThat;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
import android.testing.AndroidTestingRunner;
import android.util.DisplayMetrics;
@@ -26,6 +29,7 @@ import android.view.MotionEvent;
import androidx.test.filters.SmallTest;
+import com.android.systemui.classifier.FalsingDataProvider.GestureFinalizedListener;
import com.android.systemui.utils.leaks.FakeBatteryController;
import org.junit.After;
@@ -67,19 +71,19 @@ public class FalsingDataProviderTest extends ClassifierTest {
mDataProvider.onMotionEvent(appendUpEvent(6, 5));
List<MotionEvent> motionEventList = mDataProvider.getRecentMotionEvents();
- assertThat(motionEventList.size(), is(3));
- assertThat(motionEventList.get(0).getActionMasked(), is(MotionEvent.ACTION_DOWN));
- assertThat(motionEventList.get(1).getActionMasked(), is(MotionEvent.ACTION_MOVE));
- assertThat(motionEventList.get(2).getActionMasked(), is(MotionEvent.ACTION_UP));
- assertThat(motionEventList.get(0).getEventTime(), is(1L));
- assertThat(motionEventList.get(1).getEventTime(), is(2L));
- assertThat(motionEventList.get(2).getEventTime(), is(3L));
- assertThat(motionEventList.get(0).getX(), is(2f));
- assertThat(motionEventList.get(1).getX(), is(4f));
- assertThat(motionEventList.get(2).getX(), is(6f));
- assertThat(motionEventList.get(0).getY(), is(9f));
- assertThat(motionEventList.get(1).getY(), is(7f));
- assertThat(motionEventList.get(2).getY(), is(5f));
+ assertThat(motionEventList.size()).isEqualTo(3);
+ assertThat(motionEventList.get(0).getActionMasked()).isEqualTo(MotionEvent.ACTION_DOWN);
+ assertThat(motionEventList.get(1).getActionMasked()).isEqualTo(MotionEvent.ACTION_MOVE);
+ assertThat(motionEventList.get(2).getActionMasked()).isEqualTo(MotionEvent.ACTION_UP);
+ assertThat(motionEventList.get(0).getEventTime()).isEqualTo(1L);
+ assertThat(motionEventList.get(1).getEventTime()).isEqualTo(2L);
+ assertThat(motionEventList.get(2).getEventTime()).isEqualTo(3L);
+ assertThat(motionEventList.get(0).getX()).isEqualTo(2f);
+ assertThat(motionEventList.get(1).getX()).isEqualTo(4f);
+ assertThat(motionEventList.get(2).getX()).isEqualTo(6f);
+ assertThat(motionEventList.get(0).getY()).isEqualTo(9f);
+ assertThat(motionEventList.get(1).getY()).isEqualTo(7f);
+ assertThat(motionEventList.get(2).getY()).isEqualTo(5f);
}
@Test
@@ -88,28 +92,28 @@ public class FalsingDataProviderTest extends ClassifierTest {
mDataProvider.onMotionEvent(appendMoveEvent(4, 7, 800));
List<MotionEvent> motionEventList = mDataProvider.getRecentMotionEvents();
- assertThat(motionEventList.size(), is(2));
- assertThat(motionEventList.get(0).getActionMasked(), is(MotionEvent.ACTION_DOWN));
- assertThat(motionEventList.get(1).getActionMasked(), is(MotionEvent.ACTION_MOVE));
- assertThat(motionEventList.get(0).getEventTime(), is(1L));
- assertThat(motionEventList.get(1).getEventTime(), is(800L));
- assertThat(motionEventList.get(0).getX(), is(2f));
- assertThat(motionEventList.get(1).getX(), is(4f));
- assertThat(motionEventList.get(0).getY(), is(9f));
- assertThat(motionEventList.get(1).getY(), is(7f));
+ assertThat(motionEventList.size()).isEqualTo(2);
+ assertThat(motionEventList.get(0).getActionMasked()).isEqualTo(MotionEvent.ACTION_DOWN);
+ assertThat(motionEventList.get(1).getActionMasked()).isEqualTo(MotionEvent.ACTION_MOVE);
+ assertThat(motionEventList.get(0).getEventTime()).isEqualTo(1L);
+ assertThat(motionEventList.get(1).getEventTime()).isEqualTo(800L);
+ assertThat(motionEventList.get(0).getX()).isEqualTo(2f);
+ assertThat(motionEventList.get(1).getX()).isEqualTo(4f);
+ assertThat(motionEventList.get(0).getY()).isEqualTo(9f);
+ assertThat(motionEventList.get(1).getY()).isEqualTo(7f);
mDataProvider.onMotionEvent(appendUpEvent(6, 5, 1200));
// Still two events, but event a is gone.
- assertThat(motionEventList.size(), is(2));
- assertThat(motionEventList.get(0).getActionMasked(), is(MotionEvent.ACTION_MOVE));
- assertThat(motionEventList.get(1).getActionMasked(), is(MotionEvent.ACTION_UP));
- assertThat(motionEventList.get(0).getEventTime(), is(800L));
- assertThat(motionEventList.get(1).getEventTime(), is(1200L));
- assertThat(motionEventList.get(0).getX(), is(4f));
- assertThat(motionEventList.get(1).getX(), is(6f));
- assertThat(motionEventList.get(0).getY(), is(7f));
- assertThat(motionEventList.get(1).getY(), is(5f));
+ assertThat(motionEventList.size()).isEqualTo(2);
+ assertThat(motionEventList.get(0).getActionMasked()).isEqualTo(MotionEvent.ACTION_MOVE);
+ assertThat(motionEventList.get(1).getActionMasked()).isEqualTo(MotionEvent.ACTION_UP);
+ assertThat(motionEventList.get(0).getEventTime()).isEqualTo(800L);
+ assertThat(motionEventList.get(1).getEventTime()).isEqualTo(1200L);
+ assertThat(motionEventList.get(0).getX()).isEqualTo(4f);
+ assertThat(motionEventList.get(1).getX()).isEqualTo(6f);
+ assertThat(motionEventList.get(0).getY()).isEqualTo(7f);
+ assertThat(motionEventList.get(1).getY()).isEqualTo(5f);
}
@Test
@@ -126,19 +130,19 @@ public class FalsingDataProviderTest extends ClassifierTest {
mDataProvider.onMotionEvent(motionEventA);
List<MotionEvent> motionEventList = mDataProvider.getRecentMotionEvents();
- assertThat(motionEventList.size(), is(3));
- assertThat(motionEventList.get(0).getActionMasked(), is(MotionEvent.ACTION_MOVE));
- assertThat(motionEventList.get(1).getActionMasked(), is(MotionEvent.ACTION_MOVE));
- assertThat(motionEventList.get(2).getActionMasked(), is(MotionEvent.ACTION_MOVE));
- assertThat(motionEventList.get(0).getEventTime(), is(1L));
- assertThat(motionEventList.get(1).getEventTime(), is(2L));
- assertThat(motionEventList.get(2).getEventTime(), is(3L));
- assertThat(motionEventList.get(0).getX(), is(2f));
- assertThat(motionEventList.get(1).getX(), is(4f));
- assertThat(motionEventList.get(2).getX(), is(6f));
- assertThat(motionEventList.get(0).getY(), is(9f));
- assertThat(motionEventList.get(1).getY(), is(7f));
- assertThat(motionEventList.get(2).getY(), is(5f));
+ assertThat(motionEventList.size()).isEqualTo(3);
+ assertThat(motionEventList.get(0).getActionMasked()).isEqualTo(MotionEvent.ACTION_MOVE);
+ assertThat(motionEventList.get(1).getActionMasked()).isEqualTo(MotionEvent.ACTION_MOVE);
+ assertThat(motionEventList.get(2).getActionMasked()).isEqualTo(MotionEvent.ACTION_MOVE);
+ assertThat(motionEventList.get(0).getEventTime()).isEqualTo(1L);
+ assertThat(motionEventList.get(1).getEventTime()).isEqualTo(2L);
+ assertThat(motionEventList.get(2).getEventTime()).isEqualTo(3L);
+ assertThat(motionEventList.get(0).getX()).isEqualTo(2f);
+ assertThat(motionEventList.get(1).getX()).isEqualTo(4f);
+ assertThat(motionEventList.get(2).getX()).isEqualTo(6f);
+ assertThat(motionEventList.get(0).getY()).isEqualTo(9f);
+ assertThat(motionEventList.get(1).getY()).isEqualTo(7f);
+ assertThat(motionEventList.get(2).getY()).isEqualTo(5f);
}
@Test
@@ -147,18 +151,18 @@ public class FalsingDataProviderTest extends ClassifierTest {
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(1, 1));
- assertThat((double) mDataProvider.getAngle(), closeTo(Math.PI / 4, .001));
+ assertThat((double) mDataProvider.getAngle()).isWithin(.001).of(Math.PI / 4);
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(-1, -1));
- assertThat((double) mDataProvider.getAngle(), closeTo(5 * Math.PI / 4, .001));
+ assertThat((double) mDataProvider.getAngle()).isWithin(.001).of(5 * Math.PI / 4);
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(2, 0));
- assertThat((double) mDataProvider.getAngle(), closeTo(0, .001));
+ assertThat((double) mDataProvider.getAngle()).isWithin(.001).of(0);
mDataProvider.onSessionEnd();
}
@@ -168,17 +172,17 @@ public class FalsingDataProviderTest extends ClassifierTest {
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(1, 1));
- assertThat(mDataProvider.isHorizontal(), is(false));
+ assertThat(mDataProvider.isHorizontal()).isFalse();
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(2, 1));
- assertThat(mDataProvider.isHorizontal(), is(true));
+ assertThat(mDataProvider.isHorizontal()).isTrue();
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(-3, -1));
- assertThat(mDataProvider.isHorizontal(), is(true));
+ assertThat(mDataProvider.isHorizontal()).isTrue();
mDataProvider.onSessionEnd();
}
@@ -188,17 +192,17 @@ public class FalsingDataProviderTest extends ClassifierTest {
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(1, 0));
- assertThat(mDataProvider.isVertical(), is(false));
+ assertThat(mDataProvider.isVertical()).isFalse();
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(0, 1));
- assertThat(mDataProvider.isVertical(), is(true));
+ assertThat(mDataProvider.isVertical()).isTrue();
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(-3, -10));
- assertThat(mDataProvider.isVertical(), is(true));
+ assertThat(mDataProvider.isVertical()).isTrue();
mDataProvider.onSessionEnd();
}
@@ -208,17 +212,17 @@ public class FalsingDataProviderTest extends ClassifierTest {
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(1, 1));
- assertThat(mDataProvider.isRight(), is(true));
+ assertThat(mDataProvider.isRight()).isTrue();
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(0, 1));
- assertThat(mDataProvider.isRight(), is(false));
+ assertThat(mDataProvider.isRight()).isFalse();
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(-3, -10));
- assertThat(mDataProvider.isRight(), is(false));
+ assertThat(mDataProvider.isRight()).isFalse();
mDataProvider.onSessionEnd();
}
@@ -230,25 +234,60 @@ public class FalsingDataProviderTest extends ClassifierTest {
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(1, -1));
- assertThat(mDataProvider.isUp(), is(true));
+ assertThat(mDataProvider.isUp()).isTrue();
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(0, 0));
- assertThat(mDataProvider.isUp(), is(false));
+ assertThat(mDataProvider.isUp()).isFalse();
mDataProvider.onSessionEnd();
mDataProvider.onMotionEvent(motionEventOrigin);
mDataProvider.onMotionEvent(appendMoveEvent(-3, 10));
- assertThat(mDataProvider.isUp(), is(false));
+ assertThat(mDataProvider.isUp()).isFalse();
mDataProvider.onSessionEnd();
}
@Test
public void test_isWirelessCharging() {
- assertThat(mDataProvider.isWirelessCharging(), is(false));
+ assertThat(mDataProvider.isWirelessCharging()).isFalse();
mFakeBatteryController.setWirelessCharging(true);
- assertThat(mDataProvider.isWirelessCharging(), is(true));
+ assertThat(mDataProvider.isWirelessCharging()).isTrue();
+ }
+
+ @Test
+ public void test_GestureFinalizedListener() {
+ GestureFinalizedListener listener = mock(GestureFinalizedListener.class);
+
+ mDataProvider.addGestureCompleteListener(listener);
+
+ mDataProvider.onMotionEvent(appendDownEvent(0, 0));
+ mDataProvider.onMotionEventComplete();
+ verify(listener, never()).onGestureFinalized(anyLong());
+ mDataProvider.onMotionEvent(appendMoveEvent(0, 0));
+ mDataProvider.onMotionEventComplete();
+ verify(listener, never()).onGestureFinalized(anyLong());
+ mDataProvider.onMotionEvent(appendUpEvent(0, 0, 100));
+ verify(listener, never()).onGestureFinalized(anyLong());
+
+ mDataProvider.onMotionEventComplete();
+ verify(listener).onGestureFinalized(100);
+ }
+
+ @Test
+ public void test_GestureFinalizedListener_SkipCompletion() {
+ GestureFinalizedListener listener = mock(GestureFinalizedListener.class);
+
+ mDataProvider.addGestureCompleteListener(listener);
+
+ mDataProvider.onMotionEvent(appendDownEvent(0, 0));
+ mDataProvider.onMotionEvent(appendMoveEvent(0, 0));
+ mDataProvider.onMotionEvent(appendUpEvent(0, 0, 100));
+ verify(listener, never()).onGestureFinalized(anyLong());
+
+ // The start of a new gesture should finalized the prior one.
+ mDataProvider.onMotionEvent(appendDownEvent(0, 200));
+ verify(listener).onGestureFinalized(100);
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java
new file mode 100644
index 000000000000..80716f9398f3
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogLiteTest.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.globalactions;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.IActivityManager;
+import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
+import android.content.res.Resources;
+import android.graphics.Color;
+import android.media.AudioManager;
+import android.os.Handler;
+import android.os.UserManager;
+import android.service.dreams.IDreamManager;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+import android.view.IWindowManager;
+import android.view.WindowManagerPolicyConstants;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.internal.colorextraction.ColorExtractor;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.UiEventLogger;
+import com.android.internal.statusbar.IStatusBarService;
+import com.android.internal.widget.LockPatternUtils;
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.broadcast.BroadcastDispatcher;
+import com.android.systemui.colorextraction.SysuiColorExtractor;
+import com.android.systemui.model.SysUiState;
+import com.android.systemui.plugins.GlobalActions;
+import com.android.systemui.settings.UserContextProvider;
+import com.android.systemui.statusbar.NotificationShadeDepthController;
+import com.android.systemui.statusbar.NotificationShadeWindowController;
+import com.android.systemui.statusbar.policy.ConfigurationController;
+import com.android.systemui.statusbar.policy.KeyguardStateController;
+import com.android.systemui.telephony.TelephonyListenerManager;
+import com.android.systemui.util.RingerModeLiveData;
+import com.android.systemui.util.RingerModeTracker;
+import com.android.systemui.util.settings.GlobalSettings;
+import com.android.systemui.util.settings.SecureSettings;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.List;
+import java.util.concurrent.Executor;
+
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper(setAsMainLooper = true)
+public class GlobalActionsDialogLiteTest extends SysuiTestCase {
+ private GlobalActionsDialogLite mGlobalActionsDialogLite;
+
+ @Mock private GlobalActions.GlobalActionsManager mWindowManagerFuncs;
+ @Mock private AudioManager mAudioManager;
+ @Mock private IDreamManager mDreamManager;
+ @Mock private DevicePolicyManager mDevicePolicyManager;
+ @Mock private LockPatternUtils mLockPatternUtils;
+ @Mock private BroadcastDispatcher mBroadcastDispatcher;
+ @Mock private TelephonyListenerManager mTelephonyListenerManager;
+ @Mock private GlobalSettings mGlobalSettings;
+ @Mock private SecureSettings mSecureSettings;
+ @Mock private Resources mResources;
+ @Mock private ConfigurationController mConfigurationController;
+ @Mock private KeyguardStateController mKeyguardStateController;
+ @Mock private UserManager mUserManager;
+ @Mock private TrustManager mTrustManager;
+ @Mock private IActivityManager mActivityManager;
+ @Mock private MetricsLogger mMetricsLogger;
+ @Mock private NotificationShadeDepthController mDepthController;
+ @Mock private SysuiColorExtractor mColorExtractor;
+ @Mock private IStatusBarService mStatusBarService;
+ @Mock private NotificationShadeWindowController mNotificationShadeWindowController;
+ @Mock private IWindowManager mWindowManager;
+ @Mock private Executor mBackgroundExecutor;
+ @Mock private UiEventLogger mUiEventLogger;
+ @Mock private RingerModeTracker mRingerModeTracker;
+ @Mock private RingerModeLiveData mRingerModeLiveData;
+ @Mock private SysUiState mSysUiState;
+ @Mock private Handler mHandler;
+ @Mock private UserContextProvider mUserContextProvider;
+
+ private TestableLooper mTestableLooper;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ mTestableLooper = TestableLooper.get(this);
+ allowTestableLooperAsMainThread();
+
+ when(mRingerModeTracker.getRingerMode()).thenReturn(mRingerModeLiveData);
+ when(mUserContextProvider.getUserContext()).thenReturn(mContext);
+
+ mGlobalActionsDialogLite = new GlobalActionsDialogLite(mContext,
+ mWindowManagerFuncs,
+ mAudioManager,
+ mDreamManager,
+ mDevicePolicyManager,
+ mLockPatternUtils,
+ mBroadcastDispatcher,
+ mTelephonyListenerManager,
+ mGlobalSettings,
+ mSecureSettings,
+ null,
+ mResources,
+ mConfigurationController,
+ mKeyguardStateController,
+ mUserManager,
+ mTrustManager,
+ mActivityManager,
+ null,
+ mMetricsLogger,
+ mDepthController,
+ mColorExtractor,
+ mStatusBarService,
+ mNotificationShadeWindowController,
+ mWindowManager,
+ mBackgroundExecutor,
+ mUiEventLogger,
+ mRingerModeTracker,
+ mSysUiState,
+ mHandler
+ );
+ mGlobalActionsDialogLite.setZeroDialogPressDelayForTesting();
+
+ ColorExtractor.GradientColors backdropColors = new ColorExtractor.GradientColors();
+ backdropColors.setMainColor(Color.BLACK);
+ when(mColorExtractor.getNeutralColors()).thenReturn(backdropColors);
+ when(mSysUiState.setFlag(anyInt(), anyBoolean())).thenReturn(mSysUiState);
+ }
+
+ @Test
+ public void testShouldLogShow() {
+ mGlobalActionsDialogLite.onShow(null);
+ mTestableLooper.processAllMessages();
+ verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_POWER_MENU_OPEN);
+ }
+
+ @Test
+ public void testShouldLogDismiss() {
+ mGlobalActionsDialogLite.onDismiss(mGlobalActionsDialogLite.mDialog);
+ mTestableLooper.processAllMessages();
+ verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_POWER_MENU_CLOSE);
+ }
+
+ @Test
+ public void testShouldLogBugreportPress() throws InterruptedException {
+ GlobalActionsDialog.BugReportAction bugReportAction =
+ mGlobalActionsDialogLite.makeBugReportActionForTesting();
+ bugReportAction.onPress();
+ verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_BUGREPORT_PRESS);
+ }
+
+ @Test
+ public void testShouldLogBugreportLongPress() {
+ GlobalActionsDialog.BugReportAction bugReportAction =
+ mGlobalActionsDialogLite.makeBugReportActionForTesting();
+ bugReportAction.onLongPress();
+ verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_BUGREPORT_LONG_PRESS);
+ }
+
+ @Test
+ public void testShouldLogEmergencyDialerPress() {
+ GlobalActionsDialog.EmergencyDialerAction emergencyDialerAction =
+ mGlobalActionsDialogLite.makeEmergencyDialerActionForTesting();
+ emergencyDialerAction.onPress();
+ verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_EMERGENCY_DIALER_PRESS);
+ }
+
+ @Test
+ public void testShouldLogScreenshotPress() {
+ GlobalActionsDialog.ScreenshotAction screenshotAction =
+ mGlobalActionsDialogLite.makeScreenshotActionForTesting();
+ screenshotAction.onPress();
+ verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent.GA_SCREENSHOT_PRESS);
+ }
+
+ @Test
+ public void testShouldShowScreenshot() {
+ mContext.getOrCreateTestableResources().addOverride(
+ com.android.internal.R.integer.config_navBarInteractionMode,
+ WindowManagerPolicyConstants.NAV_BAR_MODE_2BUTTON);
+
+ GlobalActionsDialog.ScreenshotAction screenshotAction =
+ mGlobalActionsDialogLite.makeScreenshotActionForTesting();
+ assertThat(screenshotAction.shouldShow()).isTrue();
+ }
+
+ @Test
+ public void testShouldNotShowScreenshot() {
+ mContext.getOrCreateTestableResources().addOverride(
+ com.android.internal.R.integer.config_navBarInteractionMode,
+ WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON);
+
+ GlobalActionsDialog.ScreenshotAction screenshotAction =
+ mGlobalActionsDialogLite.makeScreenshotActionForTesting();
+ assertThat(screenshotAction.shouldShow()).isFalse();
+ }
+
+ private void verifyLogPosted(GlobalActionsDialog.GlobalActionsEvent event) {
+ mTestableLooper.processAllMessages();
+ verify(mUiEventLogger, times(1))
+ .log(event);
+ }
+
+ @SafeVarargs
+ private static <T> void assertItemsOfType(List<T> stuff, Class<? extends T>... classes) {
+ assertThat(stuff).hasSize(classes.length);
+ for (int i = 0; i < stuff.size(); i++) {
+ assertThat(stuff.get(i)).isInstanceOf(classes[i]);
+ }
+ }
+
+ @Test
+ public void testCreateActionItems_lockdownEnabled_doesShowLockdown() {
+ mGlobalActionsDialogLite = spy(mGlobalActionsDialogLite);
+ doReturn(4).when(mGlobalActionsDialogLite).getMaxShownPowerItems();
+ doReturn(true).when(mGlobalActionsDialogLite).shouldDisplayLockdown(any());
+ doReturn(true).when(mGlobalActionsDialogLite).shouldShowAction(any());
+ String[] actions = {
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART,
+ };
+ doReturn(actions).when(mGlobalActionsDialogLite).getDefaultActions();
+ mGlobalActionsDialogLite.createActionItems();
+
+ assertItemsOfType(mGlobalActionsDialogLite.mItems,
+ GlobalActionsDialog.EmergencyAction.class,
+ GlobalActionsDialog.LockDownAction.class,
+ GlobalActionsDialog.ShutDownAction.class,
+ GlobalActionsDialog.RestartAction.class);
+ assertThat(mGlobalActionsDialogLite.mOverflowItems).isEmpty();
+ assertThat(mGlobalActionsDialogLite.mPowerItems).isEmpty();
+ }
+
+ @Test
+ public void testCreateActionItems_lockdownDisabled_doesNotShowLockdown() {
+ mGlobalActionsDialogLite = spy(mGlobalActionsDialogLite);
+ doReturn(4).when(mGlobalActionsDialogLite).getMaxShownPowerItems();
+ // make sure lockdown action will NOT be shown
+ doReturn(false).when(mGlobalActionsDialogLite).shouldDisplayLockdown(any());
+ String[] actions = {
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_EMERGENCY,
+ // lockdown action not allowed
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_LOCKDOWN,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_POWER,
+ GlobalActionsDialog.GLOBAL_ACTION_KEY_RESTART,
+ };
+ doReturn(actions).when(mGlobalActionsDialogLite).getDefaultActions();
+ mGlobalActionsDialogLite.createActionItems();
+
+ assertItemsOfType(mGlobalActionsDialogLite.mItems,
+ GlobalActionsDialog.EmergencyAction.class,
+ GlobalActionsDialog.ShutDownAction.class,
+ GlobalActionsDialog.RestartAction.class);
+ assertThat(mGlobalActionsDialogLite.mOverflowItems).isEmpty();
+ assertThat(mGlobalActionsDialogLite.mPowerItems).isEmpty();
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java
index 8add93032caa..93769c4600de 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/GlobalActionsDialogTest.java
@@ -33,12 +33,10 @@ import static org.mockito.Mockito.when;
import android.app.IActivityManager;
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
-import android.content.ContentResolver;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.graphics.Color;
import android.media.AudioManager;
-import android.net.ConnectivityManager;
import android.os.Handler;
import android.os.RemoteException;
import android.os.UserManager;
@@ -77,6 +75,7 @@ import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.telephony.TelephonyListenerManager;
import com.android.systemui.util.RingerModeLiveData;
import com.android.systemui.util.RingerModeTracker;
+import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.SecureSettings;
import org.junit.Before;
@@ -105,9 +104,8 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
@Mock private DevicePolicyManager mDevicePolicyManager;
@Mock private LockPatternUtils mLockPatternUtils;
@Mock private BroadcastDispatcher mBroadcastDispatcher;
- @Mock private ConnectivityManager mConnectivityManager;
@Mock private TelephonyListenerManager mTelephonyListenerManager;
- @Mock private ContentResolver mContentResolver;
+ @Mock private GlobalSettings mGlobalSettings;
@Mock private Resources mResources;
@Mock private ConfigurationController mConfigurationController;
@Mock private ActivityStarter mActivityStarter;
@@ -166,9 +164,9 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
mDevicePolicyManager,
mLockPatternUtils,
mBroadcastDispatcher,
- mConnectivityManager,
mTelephonyListenerManager,
- mContentResolver,
+ mGlobalSettings,
+ mSecureSettings,
null,
mResources,
mConfigurationController,
@@ -520,7 +518,8 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
mGlobalActionsDialog.showOrHideDialog(false, true, mWalletPlugin);
- GlobalActionsDialog.ActionsDialog dialog = mGlobalActionsDialog.mDialog;
+ GlobalActionsDialog.ActionsDialog dialog =
+ (GlobalActionsDialog.ActionsDialog) mGlobalActionsDialog.mDialog;
assertThat(dialog).isNotNull();
assertThat(dialog.mLockMessageContainer.getVisibility()).isEqualTo(View.VISIBLE);
@@ -543,7 +542,8 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
mGlobalActionsDialog.showOrHideDialog(false, true, mWalletPlugin);
- GlobalActionsDialog.ActionsDialog dialog = mGlobalActionsDialog.mDialog;
+ GlobalActionsDialog.ActionsDialog dialog =
+ (GlobalActionsDialog.ActionsDialog) mGlobalActionsDialog.mDialog;
assertThat(dialog).isNotNull();
assertThat(dialog.mLockMessageContainer.getVisibility()).isEqualTo(View.GONE);
@@ -568,7 +568,8 @@ public class GlobalActionsDialogTest extends SysuiTestCase {
mGlobalActionsDialog.showOrHideDialog(false, true, mWalletPlugin);
- GlobalActionsDialog.ActionsDialog dialog = mGlobalActionsDialog.mDialog;
+ GlobalActionsDialog.ActionsDialog dialog =
+ (GlobalActionsDialog.ActionsDialog) mGlobalActionsDialog.mDialog;
assertThat(dialog).isNotNull();
assertThat(dialog.mLockMessageContainer.getVisibility()).isEqualTo(View.GONE);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/KeyButtonViewTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/KeyButtonViewTest.java
index fa29fd4f94ae..853684ab8dfc 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/KeyButtonViewTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/buttons/KeyButtonViewTest.java
@@ -24,6 +24,7 @@ import static android.view.KeyEvent.KEYCODE_0;
import static android.view.KeyEvent.KEYCODE_APP_SWITCH;
import static android.view.KeyEvent.KEYCODE_BACK;
import static android.view.KeyEvent.KEYCODE_HOME;
+import static android.view.KeyEvent.KEYCODE_UNKNOWN;
import static com.android.systemui.navigationbar.buttons.KeyButtonView.NavBarButtonEvent.NAVBAR_BACK_BUTTON_LONGPRESS;
import static com.android.systemui.navigationbar.buttons.KeyButtonView.NavBarButtonEvent.NAVBAR_BACK_BUTTON_TAP;
@@ -88,7 +89,7 @@ public class KeyButtonViewTest extends SysuiTestCase {
}
@Test
- public void testLogOverviewPress() {
+ public void testLogOverviewPress() {
checkmetrics(KEYCODE_APP_SWITCH, ACTION_UP, 0, NAVBAR_OVERVIEW_BUTTON_TAP);
}
@@ -134,6 +135,22 @@ public class KeyButtonViewTest extends SysuiTestCase {
checkmetrics(KEYCODE_0, ACTION_UP, 0, null);
}
+ @Test
+ public void testEventInjectedOnAbortGesture() {
+ mKeyButtonView.setCode(KEYCODE_HOME);
+ mKeyButtonView.abortCurrentGesture();
+ verify(mInputManager, times(1))
+ .injectInputEvent(any(KeyEvent.class), any(Integer.class));
+ }
+
+ @Test
+ public void testNoEventInjectedOnAbortUnknownGesture() {
+ mKeyButtonView.setCode(KEYCODE_UNKNOWN);
+ mKeyButtonView.abortCurrentGesture();
+ verify(mInputManager, never())
+ .injectInputEvent(any(KeyEvent.class), any(Integer.class));
+ }
+
private void checkmetrics(int code, int action, int flag,
KeyButtonView.NavBarButtonEvent expected) {
mKeyButtonView.setCode(code);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java
index d40e6a4586b8..650ee50f13af 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSFooterViewControllerTest.java
@@ -38,6 +38,7 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.systemui.Dependency;
import com.android.systemui.R;
+import com.android.systemui.globalactions.GlobalActionsDialogLite;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.statusbar.phone.MultiUserSwitch;
@@ -91,6 +92,8 @@ public class QSFooterViewControllerTest extends LeakCheckedTest {
private MultiUserSwitch mMultiUserSwitch;
@Mock
private View mPowerMenuLiteView;
+ @Mock
+ private GlobalActionsDialogLite mGlobalActionsDialog;
private QSFooterViewController mController;
@@ -118,7 +121,7 @@ public class QSFooterViewControllerTest extends LeakCheckedTest {
mController = new QSFooterViewController(mView, mUserManager, mUserInfoController,
mActivityStarter, mDeviceProvisionedController, mUserTracker, mQSPanelController,
new QSDetailDisplayer(), mQuickQSPanelController, mFakeTunerService,
- mMetricsLogger, false);
+ mMetricsLogger, false, mGlobalActionsDialog);
mController.init();
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java
index a2113b94740b..1f066d81793a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java
@@ -131,7 +131,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
when(mQSPanel.getTileLayout()).thenReturn(mPagedTileLayout);
when(mQSTile.getTileSpec()).thenReturn("dnd");
when(mQSTileHost.getTiles()).thenReturn(Collections.singleton(mQSTile));
- when(mQSTileHost.createTileView(eq(mQSTile), anyBoolean())).thenReturn(mQSTileView);
+ when(mQSTileHost.createTileView(any(), eq(mQSTile), anyBoolean())).thenReturn(mQSTileView);
when(mQSTileRevealControllerFactory.create(any(), any()))
.thenReturn(mQSTileRevealController);
when(mMediaHost.getDisappearParameters()).thenReturn(new DisappearParameters());
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java
index a2a179ea29df..bacc4930815b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerTest.java
@@ -108,7 +108,7 @@ public class QSPanelControllerTest extends SysuiTestCase {
when(mQSPanel.createRegularTileLayout()).thenReturn(mPagedTileLayout);
when(mQSPanel.getTileLayout()).thenReturn(mPagedTileLayout);
when(mQSTileHost.getTiles()).thenReturn(Collections.singleton(mQSTile));
- when(mQSTileHost.createTileView(eq(mQSTile), anyBoolean())).thenReturn(mQSTileView);
+ when(mQSTileHost.createTileView(any(), eq(mQSTile), anyBoolean())).thenReturn(mQSTileView);
when(mToggleSliderViewControllerFactory.create(any(), any()))
.thenReturn(mBrightnessSlider);
when(mBrightnessControllerFactory.create(any(ToggleSlider.class)))
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
index 3e12c89f7196..acedf59bdd14 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelTest.java
@@ -89,7 +89,7 @@ public class QSPanelTest extends SysuiTestCase {
when(dndTile.getTileSpec()).thenReturn("dnd");
when(mHost.getTiles()).thenReturn(Collections.emptyList());
- when(mHost.createTileView(any(), anyBoolean())).thenReturn(mQSTileView);
+ when(mHost.createTileView(any(), any(), anyBoolean())).thenReturn(mQSTileView);
mQsPanel.addTile(mDndTileRecord);
mQsPanel.setCallback(mCallback);
});
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt
index cb380d51bd79..0604e1b42c9d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QuickQSPanelControllerTest.kt
@@ -75,7 +75,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
`when`(quickQSPanel.tileLayout).thenReturn(tileLayout)
`when`(quickQSPanel.dumpableTag).thenReturn("")
- `when`(qsTileHost.createTileView(any(), anyBoolean())).thenReturn(tileView)
+ `when`(qsTileHost.createTileView(any(), any(), anyBoolean())).thenReturn(tileView)
controller = QuickQSPanelController(
quickQSPanel,
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSession.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSession.java
new file mode 100644
index 000000000000..9c68f0d8a7ff
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSession.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.screenshot;
+
+import static android.util.MathUtils.constrain;
+
+import static com.google.common.util.concurrent.Futures.immediateFuture;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import static java.lang.Math.abs;
+import static java.lang.Math.max;
+import static java.lang.Math.min;
+
+import android.graphics.Rect;
+import android.hardware.HardwareBuffer;
+import android.media.Image;
+import android.util.Log;
+
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+/**
+ * A flexible test double for {@link ScrollCaptureClient.Session}.
+ * <p>
+ * FakeSession provides the ability to emulate both the available scrollable content range as well
+ * as the current visible bounds. Visible bounds may vary because the target view itself may be
+ * slid vertically during capture, with portions may become clipped by parent views. This scenario
+ * frequently occurs with UIs constructed from nested scrolling views or collapsing headers.
+ */
+class FakeSession implements ScrollCaptureClient.Session {
+ private static final String TAG = "FakeSession";
+ // Available range of content
+ private final Rect mAvailable;
+
+ /** bounds for scrollDelta (y), range with bottom adjusted to account for page height. */
+ private final Rect mAvailableTop;
+
+ private final Rect mVisiblePage;
+ private final int mTileHeight;
+ private final int mMaxTiles;
+
+ private int mScrollDelta;
+ private int mPageHeight;
+
+ FakeSession(int pageHeight, float maxPages, int tileHeight, int visiblePageTop,
+ int visiblePageBottom, int availableTop, int availableBottom) {
+ mPageHeight = pageHeight;
+ mTileHeight = tileHeight;
+ mAvailable = new Rect(0, availableTop, getPageWidth(), availableBottom);
+ mAvailableTop = new Rect(mAvailable);
+ mAvailableTop.inset(0, 0, 0, pageHeight);
+ mVisiblePage = new Rect(0, visiblePageTop, getPageWidth(), visiblePageBottom);
+ mMaxTiles = (int) Math.ceil((pageHeight * maxPages) / mTileHeight);
+ }
+
+ private static Image mockImage() {
+ Image image = mock(Image.class);
+ when(image.getHardwareBuffer()).thenReturn(mock(HardwareBuffer.class));
+ return image;
+ }
+
+ public int getScrollDelta() {
+ return mScrollDelta;
+ }
+
+ @Override
+ public ListenableFuture<ScrollCaptureClient.CaptureResult> requestTile(int requestedTop) {
+ Rect requested = new Rect(0, requestedTop, getPageWidth(), requestedTop + getTileHeight());
+ Log.d(TAG, "requested: " + requested);
+ Rect page = new Rect(0, 0, getPageWidth(), mPageHeight);
+ page.offset(0, mScrollDelta);
+ Log.d(TAG, "page: " + page);
+ // Simulate behavior from lower levels by replicating 'requestChildRectangleOnScreen'
+ if (!page.contains(requested)) {
+ Log.d(TAG, "requested not within page, scrolling");
+ // distance+direction needed to scroll to align each edge of request with
+ // corresponding edge of the page
+ int distTop = requested.top - page.top; // positive means already visible
+ int distBottom = requested.bottom - page.bottom; // negative means already visible
+ Log.d(TAG, "distTop = " + distTop);
+ Log.d(TAG, "distBottom = " + distBottom);
+
+ boolean scrollUp = false;
+ if (distTop < 0 && distBottom > 0) {
+ scrollUp = abs(distTop) < distBottom;
+ } else if (distTop < 0) {
+ scrollUp = true;
+ }
+
+ // determine which edges are currently clipped
+ if (scrollUp) {
+ Log.d(TAG, "trying to scroll up by " + -distTop + " px");
+ // need to scroll up to align top edge to visible-top
+ mScrollDelta += distTop;
+ Log.d(TAG, "new scrollDelta = " + mScrollDelta);
+ } else {
+ Log.d(TAG, "trying to scroll down by " + distBottom + " px");
+ // scroll down to align bottom edge with visible bottom, but keep top visible
+ int topEdgeDistance = max(0, requestedTop - page.top);
+ mScrollDelta += min(distBottom, topEdgeDistance);
+ Log.d(TAG, "new scrollDelta = " + mScrollDelta);
+ }
+
+ // Clamp to available content
+ mScrollDelta = constrain(mScrollDelta, mAvailableTop.top, mAvailableTop.bottom);
+ Log.d(TAG, "scrollDelta, adjusted to available range = " + mScrollDelta);
+
+ // Reset to apply a changed scroll delta possibly.
+ page.offsetTo(0, 0);
+ page.offset(0, mScrollDelta);
+
+ Log.d(TAG, "page (after scroll): " + page);
+ Log.d(TAG, "requested (after scroll): " + requested);
+ }
+ Log.d(TAG, "mVisiblePage = " + mVisiblePage);
+ Log.d(TAG, "scrollDelta = " + mScrollDelta);
+
+ Rect target = new Rect(requested);
+ Rect visible = new Rect(mVisiblePage);
+ visible.offset(0, mScrollDelta);
+
+ Log.d(TAG, "target: " + target);
+ Log.d(TAG, "visible: " + visible);
+
+ // if any of the requested rect is available to scroll into the view:
+ if (target.intersect(page) && target.intersect(visible)) {
+ Log.d(TAG, "returning captured = " + target);
+ ScrollCaptureClient.CaptureResult result =
+ new ScrollCaptureClient.CaptureResult(mockImage(), requested, target);
+ return immediateFuture(result);
+ }
+ Log.d(TAG, "no part of requested rect is within page, returning empty");
+ ScrollCaptureClient.CaptureResult result =
+ new ScrollCaptureClient.CaptureResult(null, requested, new Rect());
+ return immediateFuture(result);
+ }
+
+
+ @Override
+ public int getMaxTiles() {
+ return mMaxTiles;
+ }
+
+ @Override
+ public int getTileHeight() {
+ return mTileHeight;
+ }
+
+ @Override
+ public int getPageWidth() {
+ return 100;
+ }
+
+ @Override
+ public int getPageHeight() {
+ return mPageHeight;
+ }
+
+ @Override
+ public Rect getWindowBounds() {
+ throw new IllegalStateException("Not implemented");
+ }
+
+ @Override
+ public ListenableFuture<Void> end() {
+ return Futures.immediateVoidFuture();
+ }
+
+ @Override
+ public void release() {
+ }
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSessionTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSessionTest.java
new file mode 100644
index 000000000000..2520af94380c
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/FakeSessionTest.java
@@ -0,0 +1,293 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.screenshot;
+
+import static com.google.common.util.concurrent.Futures.getUnchecked;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import android.testing.AndroidTestingRunner;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+/**
+ * Tests for {@link FakeSession}, a a test double for a ScrollCaptureClient.Session.
+ * <p>
+ * These tests verify a single tile request behaves similarly to a live scroll capture
+ * client/connection.
+ */
+@SmallTest
+@RunWith(AndroidTestingRunner.class)
+public class FakeSessionTest extends SysuiTestCase {
+ @Test
+ public void testMaxTiles() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 2.25f,
+ /* tileHeight */ 10,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -250,
+ /* availableBottom */ 250);
+
+ // (pageHeight * maxPages) / tileHeight
+ assertEquals("getMaxTiles()", 23, session.getMaxTiles());
+ }
+
+ @Test
+ public void testNonEmptyResult_hasImage() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 1.0f,
+ /* tileHeight */ 10,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ 0,
+ /* availableBottom */ 100);
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(0));
+ assertNotNull("result.image", result.image);
+ assertNotNull("result.image.getHardwareBuffer()", result.image.getHardwareBuffer());
+ }
+
+ @Test
+ public void testEmptyResult_hasNullImage() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 1.0f,
+ /* tileHeight */ 10,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ 0,
+ /* availableBottom */ 100);
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(-100));
+ assertNull("result.image", result.image);
+ }
+
+ @Test
+ public void testCaptureAtZero() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 2.5f,
+ /* tileHeight */ 10,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -250,
+ /* availableBottom */ 250);
+
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(0));
+ assertEquals("requested top", 0, result.requested.top);
+ assertEquals("requested bottom", 10, result.requested.bottom);
+ assertEquals("captured top", 0, result.captured.top);
+ assertEquals("captured bottom", 10, result.captured.bottom);
+ assertEquals("scroll delta", 0, session.getScrollDelta());
+ }
+
+ @Test
+ public void testCaptureAtPageBottom() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 2.5f,
+ /* tileHeight */ 10,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -250,
+ /* availableBottom */ 250);
+
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(90));
+ assertEquals("requested top", 90, result.requested.top);
+ assertEquals("requested bottom", 100, result.requested.bottom);
+ assertEquals("captured top", 90, result.captured.top);
+ assertEquals("captured bottom", 100, result.captured.bottom);
+ assertEquals("scroll delta", 0, session.getScrollDelta());
+ }
+
+ @Test
+ public void testCaptureFromPreviousPage() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 2.5f,
+ /* tileHeight */ 10,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -250,
+ /* availableBottom */ 250);
+
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(-100));
+ assertEquals("requested top", -100, result.requested.top);
+ assertEquals("requested bottom", -90, result.requested.bottom);
+ assertEquals("captured top", -100, result.captured.top);
+ assertEquals("captured bottom", -90, result.captured.bottom);
+ assertEquals("scroll delta", -100, session.getScrollDelta());
+ }
+
+ @Test
+ public void testCaptureFromNextPage() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 2.5f,
+ /* tileHeight */ 10,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -250,
+ /* availableBottom */ 250);
+
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(150));
+ assertEquals("requested top", 150, result.requested.top);
+ assertEquals("requested bottom", 160, result.requested.bottom);
+ assertEquals("captured top", 150, result.captured.top);
+ assertEquals("captured bottom", 160, result.captured.bottom);
+ assertEquals("scroll delta", 60, session.getScrollDelta());
+ }
+
+ @Test
+ public void testCaptureTopPartiallyUnavailable() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 3f,
+ /* tileHeight */ 50,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -100,
+ /* availableBottom */ 100);
+
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(-125));
+ assertEquals("requested top", -125, result.requested.top);
+ assertEquals("requested bottom", -75, result.requested.bottom);
+ assertEquals("captured top", -100, result.captured.top);
+ assertEquals("captured bottom", -75, result.captured.bottom);
+ assertEquals("scroll delta", -100, session.getScrollDelta());
+ }
+
+ @Test
+ public void testCaptureBottomPartiallyUnavailable() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 3f,
+ /* tileHeight */ 50,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -100,
+ /* availableBottom */ 100);
+
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(75));
+ assertEquals("requested top", 75, result.requested.top);
+ assertEquals("requested bottom", 125, result.requested.bottom);
+ assertEquals("captured top", 75, result.captured.top);
+ assertEquals("captured bottom", 100, result.captured.bottom);
+ assertEquals("scroll delta", 0, session.getScrollDelta());
+ }
+
+ /**
+ * Set visiblePageTop > 0 to cause the returned request's top edge to be cropped.
+ */
+ @Test
+ public void testCaptureTopPartiallyInvisible() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 3f,
+ /* tileHeight */ 50,
+ /* visiblePageTop */ 25, // <<--
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -150,
+ /* availableBottom */ 150);
+
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(-150));
+ assertEquals("requested top", -150, result.requested.top);
+ assertEquals("requested bottom", -100, result.requested.bottom);
+ assertEquals("captured top", -125, result.captured.top);
+ assertEquals("captured bottom", -100, result.captured.bottom);
+ assertEquals("scroll delta", -150, session.getScrollDelta());
+ }
+
+ /**
+ * Set visiblePageBottom < pageHeight to cause the returned request's bottom edge to be cropped.
+ */
+ @Test
+ public void testCaptureBottomPartiallyInvisible() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 3f,
+ /* tileHeight */ 50,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 75,
+ /* availableTop */ -150,
+ /* availableBottom */ 150);
+
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(50));
+ assertEquals("requested top", 50, result.requested.top);
+ assertEquals("requested bottom", 100, result.requested.bottom);
+ assertEquals("captured top", 50, result.captured.top);
+ assertEquals("captured bottom", 75, result.captured.bottom);
+ assertEquals("scroll delta", 0, session.getScrollDelta());
+ }
+
+ @Test
+ public void testEmptyResult_aboveAvailableTop() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 3.0f,
+ /* tileHeight */ 50,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -100,
+ /* availableBottom */ 200);
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(-150));
+ assertTrue("captured rect is empty", result.captured.isEmpty());
+ }
+
+ @Test
+ public void testEmptyResult_belowAvailableBottom() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 3.0f,
+ /* tileHeight */ 50,
+ /* visiblePageTop */ 0,
+ /* visiblePageBottom */ 100,
+ /* availableTop */ -100,
+ /* availableBottom */ 200);
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(200));
+ assertTrue("captured rect is empty", result.captured.isEmpty());
+ }
+
+ @Test
+ public void testEmptyResult_notVisible() {
+ FakeSession session = new FakeSession(
+ /* pageHeight */ 100,
+ /* maxPages */ 3f,
+ /* tileHeight */ 50,
+ /* visiblePageTop */ 60, // <<---
+ /* visiblePageBottom */ 0,
+ /* availableTop */ -150,
+ /* availableBottom */ 150);
+
+ ScrollCaptureClient.CaptureResult result = getUnchecked(session.requestTile(0));
+ assertEquals("requested top", 0, result.requested.top);
+ assertEquals("requested bottom", 50, result.requested.bottom);
+ assertEquals("captured top", 0, result.captured.top);
+ assertEquals("captured bottom", 0, result.captured.bottom);
+ assertEquals("scroll delta", 0, session.getScrollDelta());
+ }
+
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureControllerTest.java
index 7fe178c81ea8..1c32cd4b612a 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/screenshot/ScrollCaptureControllerTest.java
@@ -16,35 +16,30 @@
package com.android.systemui.screenshot;
+import static com.google.common.util.concurrent.Futures.getUnchecked;
+import static com.google.common.util.concurrent.Futures.immediateFuture;
+
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyFloat;
-import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
+import static java.lang.Math.abs;
+
import android.content.Context;
-import android.graphics.Rect;
-import android.hardware.HardwareBuffer;
-import android.media.Image;
import android.testing.AndroidTestingRunner;
import android.view.ScrollCaptureResponse;
import androidx.test.filters.SmallTest;
-import androidx.test.platform.app.InstrumentationRegistry;
import com.android.systemui.SysuiTestCase;
+import com.android.systemui.screenshot.ScrollCaptureClient.Session;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-
-import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import java.util.concurrent.ExecutionException;
-
/**
* Tests for ScrollCaptureController which manages sequential image acquisition for long
* screenshots.
@@ -53,169 +48,177 @@ import java.util.concurrent.ExecutionException;
@RunWith(AndroidTestingRunner.class)
public class ScrollCaptureControllerTest extends SysuiTestCase {
- private static class FakeSession implements ScrollCaptureClient.Session {
- public int availableTop = Integer.MIN_VALUE;
- public int availableBottom = Integer.MAX_VALUE;
- // If true, return an empty rect any time a partial result would have been returned.
- public boolean emptyInsteadOfPartial = false;
- private int mPreviousTopRequested = 0;
-
- @Override
- public ListenableFuture<ScrollCaptureClient.CaptureResult> requestTile(int top) {
- // Ensure we don't request a tile more than a tile away.
- assertTrue(Math.abs(top - mPreviousTopRequested) <= getTileHeight());
- mPreviousTopRequested = top;
- Rect requested = new Rect(0, top, getPageWidth(), top + getTileHeight());
- Rect fullContent = new Rect(0, availableTop, getPageWidth(), availableBottom);
- Rect captured = new Rect(requested);
- assertTrue(captured.intersect(fullContent));
- if (emptyInsteadOfPartial && captured.height() != getTileHeight()) {
- captured = new Rect();
- }
- Image image = mock(Image.class);
- when(image.getHardwareBuffer()).thenReturn(mock(HardwareBuffer.class));
- ScrollCaptureClient.CaptureResult result =
- new ScrollCaptureClient.CaptureResult(image, requested, captured);
- return Futures.immediateFuture(result);
- }
-
- public int getMaxHeight() {
- return getTileHeight() * getMaxTiles();
- }
-
- @Override
- public int getMaxTiles() {
- return 10;
- }
-
- @Override
- public int getTileHeight() {
- return 50;
- }
-
- @Override
- public int getPageHeight() {
- return 100;
- }
-
- @Override
- public int getPageWidth() {
- return 100;
- }
-
- @Override
- public Rect getWindowBounds() {
- return null;
- }
+ private static final ScrollCaptureResponse EMPTY_RESPONSE =
+ new ScrollCaptureResponse.Builder().build();
- @Override
- public ListenableFuture<Void> end() {
- return Futures.immediateVoidFuture();
- }
+ @Test
+ public void testInfinite() {
+ ScrollCaptureController controller = new TestScenario()
+ .withPageHeight(100)
+ .withMaxPages(2.5f)
+ .withTileHeight(10)
+ .withAvailableRange(Integer.MIN_VALUE, Integer.MAX_VALUE)
+ .createController(mContext);
- @Override
- public void release() {
+ ScrollCaptureController.LongScreenshot screenshot =
+ getUnchecked(controller.run(EMPTY_RESPONSE));
+
+ assertEquals("top", -90, screenshot.getTop());
+ assertEquals("bottom", 160, screenshot.getBottom());
+
+ // Test that top portion is >= getTargetTopSizeRatio()
+ // (Due to tileHeight, top will almost always be larger than the target)
+ float topPortion = abs(screenshot.getTop()) / abs((float) screenshot.getBottom());
+ if (topPortion < controller.getTargetTopSizeRatio()) {
+ fail("expected top portion > "
+ + (controller.getTargetTopSizeRatio() * 100) + "%"
+ + " but was " + (topPortion * 100));
}
}
- private ScrollCaptureController mController;
- private FakeSession mSession;
- private ScrollCaptureClient mScrollCaptureClient;
-
- @Before
- public void setUp() {
- Context context = InstrumentationRegistry.getInstrumentation().getContext();
- mSession = new FakeSession();
- mScrollCaptureClient = mock(ScrollCaptureClient.class);
- when(mScrollCaptureClient.request(anyInt(), anyInt())).thenReturn(
- Futures.immediateFuture(new ScrollCaptureResponse.Builder().build()));
- when(mScrollCaptureClient.start(any(), anyFloat())).thenReturn(
- Futures.immediateFuture(mSession));
- mController = new ScrollCaptureController(context, context.getMainExecutor(),
- mScrollCaptureClient, new ImageTileSet(context.getMainThreadHandler()));
- }
-
@Test
- public void testInfinite() throws ExecutionException, InterruptedException {
- ScrollCaptureController.LongScreenshot screenshot =
- mController.run(new ScrollCaptureResponse.Builder().build()).get();
- assertEquals(mSession.getMaxHeight(), screenshot.getHeight());
- // TODO: the top and bottom ratio in the infinite case should be extracted and tested.
- assertEquals(-150, screenshot.getTop());
- assertEquals(350, screenshot.getBottom());
- }
+ public void testLimitedBottom() {
+ ScrollCaptureController controller = new TestScenario()
+ .withPageHeight(100)
+ .withMaxPages(2.5f)
+ .withTileHeight(10)
+ .withAvailableRange(Integer.MIN_VALUE, 150)
+ .createController(mContext);
- @Test
- public void testLimitedBottom() throws ExecutionException, InterruptedException {
- // We hit the bottom of the content, so expect it to scroll back up and go above the -150
- // default top position
- mSession.availableBottom = 275;
ScrollCaptureController.LongScreenshot screenshot =
- mController.run(new ScrollCaptureResponse.Builder().build()).get();
- // Bottom tile will be 25px tall, 10 tiles total
- assertEquals(mSession.getMaxHeight() - 25, screenshot.getHeight());
- assertEquals(-200, screenshot.getTop());
- assertEquals(mSession.availableBottom, screenshot.getBottom());
- }
+ getUnchecked(controller.run(EMPTY_RESPONSE));
- @Test
- public void testLimitedTopAndBottom() throws ExecutionException, InterruptedException {
- mSession.availableBottom = 275;
- mSession.availableTop = -200;
- ScrollCaptureController.LongScreenshot screenshot =
- mController.run(new ScrollCaptureResponse.Builder().build()).get();
- assertEquals(mSession.availableBottom - mSession.availableTop, screenshot.getHeight());
- assertEquals(mSession.availableTop, screenshot.getTop());
- assertEquals(mSession.availableBottom, screenshot.getBottom());
+ assertEquals("top", -100, screenshot.getTop());
+ assertEquals("bottom", 150, screenshot.getBottom());
}
@Test
- public void testVeryLimitedTopInfiniteBottom() throws ExecutionException, InterruptedException {
- // Hit the boundary before the "headroom" is hit in the up direction, then go down
- // infinitely.
- mSession.availableTop = -55;
+ public void testLimitedTopAndBottom() {
+ ScrollCaptureController controller = new TestScenario()
+ .withPageHeight(100)
+ .withMaxPages(2.5f)
+ .withTileHeight(10)
+ .withAvailableRange(-50, 150)
+ .createController(mContext);
+
ScrollCaptureController.LongScreenshot screenshot =
- mController.run(new ScrollCaptureResponse.Builder().build()).get();
- // The top tile will be 5px tall, so subtract 45px from the theoretical max.
- assertEquals(mSession.getMaxHeight() - 45, screenshot.getHeight());
- assertEquals(mSession.availableTop, screenshot.getTop());
- assertEquals(mSession.availableTop + mSession.getMaxHeight() - 45, screenshot.getBottom());
+ getUnchecked(controller.run(EMPTY_RESPONSE));
+
+ assertEquals("top", -50, screenshot.getTop());
+ assertEquals("bottom", 150, screenshot.getBottom());
}
@Test
- public void testVeryLimitedTopLimitedBottom() throws ExecutionException, InterruptedException {
- mSession.availableBottom = 275;
- mSession.availableTop = -55;
+ public void testVeryLimitedTopInfiniteBottom() {
+ ScrollCaptureController controller = new TestScenario()
+ .withPageHeight(100)
+ .withMaxPages(2.5f)
+ .withTileHeight(10)
+ .withAvailableRange(-10, Integer.MAX_VALUE)
+ .createController(mContext);
+
ScrollCaptureController.LongScreenshot screenshot =
- mController.run(new ScrollCaptureResponse.Builder().build()).get();
- assertEquals(mSession.availableBottom - mSession.availableTop, screenshot.getHeight());
- assertEquals(mSession.availableTop, screenshot.getTop());
- assertEquals(mSession.availableBottom, screenshot.getBottom());
+ getUnchecked(controller.run(EMPTY_RESPONSE));
+
+ assertEquals("top", -10, screenshot.getTop());
+ assertEquals("bottom", 240, screenshot.getBottom());
}
@Test
- public void testLimitedTopAndBottomWithEmpty() throws ExecutionException, InterruptedException {
- mSession.emptyInsteadOfPartial = true;
- mSession.availableBottom = 275;
- mSession.availableTop = -167;
+ public void testVeryLimitedTopLimitedBottom() {
+ ScrollCaptureController controller = new TestScenario()
+ .withPageHeight(100)
+ .withMaxPages(2.5f)
+ .withTileHeight(10)
+ .withAvailableRange(-10, 200)
+ .createController(mContext);
+
ScrollCaptureController.LongScreenshot screenshot =
- mController.run(new ScrollCaptureResponse.Builder().build()).get();
- // Expecting output from -150 to 250
- assertEquals(400, screenshot.getHeight());
- assertEquals(-150, screenshot.getTop());
- assertEquals(250, screenshot.getBottom());
+ getUnchecked(controller.run(EMPTY_RESPONSE));
+
+ assertEquals("top", -10, screenshot.getTop());
+ assertEquals("bottom", 200, screenshot.getBottom());
}
- @Test
- public void testVeryLimitedTopWithEmpty() throws ExecutionException, InterruptedException {
- // Hit the boundary before the "headroom" is hit in the up direction, then go down
- // infinitely.
- mSession.availableTop = -55;
- mSession.emptyInsteadOfPartial = true;
- ScrollCaptureController.LongScreenshot screenshot =
- mController.run(new ScrollCaptureResponse.Builder().build()).get();
- assertEquals(mSession.getMaxHeight(), screenshot.getHeight());
- assertEquals(-50, screenshot.getTop());
- assertEquals(-50 + mSession.getMaxHeight(), screenshot.getBottom());
+ /**
+ * Build and configure a stubbed controller for each test case.
+ */
+ private static class TestScenario {
+ private int mPageHeight = -1;
+ private int mTileHeight = -1;
+ private boolean mAvailableRangeSet;
+ private int mAvailableTop;
+ private int mAvailableBottom;
+ private int mLocalVisibleTop;
+ private int mLocalVisibleBottom = -1;
+ private float mMaxPages = -1;
+
+ TestScenario withPageHeight(int pageHeight) {
+ if (pageHeight < 0) {
+ throw new IllegalArgumentException("pageHeight must be positive");
+ }
+ mPageHeight = pageHeight;
+ return this;
+ }
+
+ TestScenario withTileHeight(int tileHeight) {
+ if (tileHeight < 0) {
+ throw new IllegalArgumentException("tileHeight must be positive");
+ }
+ mTileHeight = tileHeight;
+ return this;
+ }
+
+ TestScenario withAvailableRange(int top, int bottom) {
+ mAvailableRangeSet = true;
+ mAvailableTop = top;
+ mAvailableBottom = bottom;
+ return this;
+ }
+
+ TestScenario withMaxPages(float maxPages) {
+ if (maxPages < 0) {
+ throw new IllegalArgumentException("maxPages must be positive");
+ }
+ mMaxPages = maxPages;
+ return this;
+ }
+
+ TestScenario withPageVisibleRange(int top, int bottom) {
+ if (top < 0 || bottom < 0) {
+ throw new IllegalArgumentException("top and bottom must be positive");
+ }
+ mLocalVisibleTop = top;
+ mLocalVisibleBottom = bottom;
+ return this;
+ }
+
+
+ ScrollCaptureController createController(Context context) {
+ if (mTileHeight < 0) {
+ throw new IllegalArgumentException("tileHeight not set");
+ }
+ if (!mAvailableRangeSet) {
+ throw new IllegalArgumentException("availableRange not set");
+ }
+ if (mPageHeight < 0) {
+ throw new IllegalArgumentException("pageHeight not set");
+ }
+
+ if (mMaxPages < 0) {
+ throw new IllegalArgumentException("maxPages not set");
+ }
+ // Default: page fully visible
+ if (mLocalVisibleBottom < 0) {
+ mLocalVisibleBottom = mPageHeight;
+ }
+ Session session = new FakeSession(mPageHeight, mMaxPages, mTileHeight,
+ mLocalVisibleTop, mLocalVisibleBottom, mAvailableTop, mAvailableBottom);
+ ScrollCaptureClient client = mock(ScrollCaptureClient.class);
+ when(client.start(/* response */ any(), /* maxPages */ anyFloat()))
+ .thenReturn(immediateFuture(session));
+ return new ScrollCaptureController(context, context.getMainExecutor(),
+ client, new ImageTileSet(context.getMainThreadHandler()));
+ }
}
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/AppOpsCoordinatorTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/AppOpsCoordinatorTest.java
index 278456859735..f2e7081e096b 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/AppOpsCoordinatorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/coordinator/AppOpsCoordinatorTest.java
@@ -28,8 +28,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.app.Notification;
-import android.os.Bundle;
+import android.graphics.Color;
import android.os.UserHandle;
import android.service.notification.StatusBarNotification;
import android.testing.AndroidTestingRunner;
@@ -120,7 +119,8 @@ public class AppOpsCoordinatorTest extends SysuiTestCase {
mEntryBuilder
.setFlag(mContext, FLAG_FOREGROUND_SERVICE, true)
.setImportance(IMPORTANCE_DEFAULT)
- .modifyNotification(mContext).setColorized(true);
+ .modifyNotification(mContext)
+ .setColorized(true).setColor(Color.WHITE);
// THEN the entry is in the fgs section
assertTrue(mFgsSection.isInSection(mEntryBuilder.build()));
@@ -132,7 +132,8 @@ public class AppOpsCoordinatorTest extends SysuiTestCase {
mEntryBuilder
.setFlag(mContext, FLAG_FOREGROUND_SERVICE, true)
.setImportance(IMPORTANCE_MIN)
- .modifyNotification(mContext).setColorized(true);
+ .modifyNotification(mContext)
+ .setColorized(true).setColor(Color.WHITE);
// THEN the entry is NOT in the fgs section
assertFalse(mFgsSection.isInSection(mEntryBuilder.build()));
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
index 18481bca1aa6..bfce2a568c78 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/row/NotificationGutsManagerTest.java
@@ -51,6 +51,7 @@ import android.content.Intent;
import android.content.pm.LauncherApps;
import android.content.pm.PackageManager;
import android.content.pm.ShortcutManager;
+import android.graphics.Color;
import android.os.Binder;
import android.os.Handler;
import android.provider.Settings;
@@ -486,7 +487,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase {
Notification.Builder nb = new Notification.Builder(mContext,
mTestNotificationChannel.getId())
.setContentTitle("foo")
- .setColorized(true)
+ .setColorized(true).setColor(Color.RED)
.setFlag(Notification.FLAG_CAN_COLORIZE, true)
.setSmallIcon(android.R.drawable.sym_def_app_icon);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java
index 781f875fd868..96cdaf98d964 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragmentTest.java
@@ -23,7 +23,10 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.when;
+import android.app.Fragment;
import android.app.StatusBarManager;
+import android.content.Context;
+import android.os.Bundle;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.view.View;
@@ -34,6 +37,7 @@ import androidx.test.filters.SmallTest;
import com.android.systemui.R;
import com.android.systemui.SysuiBaseFragmentTest;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
+import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import org.junit.Before;
import org.junit.Test;
@@ -157,4 +161,9 @@ public class CollapsedStatusBarFragmentTest extends SysuiBaseFragmentTest {
Mockito.verify(mStatusBarStateController).isDozing();
Mockito.verify(mNotificationAreaInner, atLeast(1)).setVisibility(eq(View.VISIBLE));
}
+
+ @Override
+ protected Fragment instantiate(Context context, String className, Bundle arguments) {
+ return new CollapsedStatusBarFragment(mock(OngoingCallController.class));
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
index d9e938948f5e..e5f2aa7a93c7 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/KeyguardBouncerTest.java
@@ -441,4 +441,12 @@ public class KeyguardBouncerTest extends SysuiTestCase {
// mKeyguardViewController.init(), only updateResources above.
verify(mKeyguardHostViewController).updateResources();
}
+
+ @Test
+ public void testUpdateKeyguardPosition_delegatesToRootView() {
+ mBouncer.ensureView();
+ mBouncer.updateKeyguardPosition(1.0f);
+
+ verify(mKeyguardHostViewController).updateKeyguardPosition(1.0f);
+ }
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
index 45b791715904..20261e060601 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManagerTest.java
@@ -283,4 +283,11 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
verify(mBouncer).updateResources();
}
+
+ @Test
+ public void updateKeyguardPosition_delegatesToBouncer() {
+ mStatusBarKeyguardViewManager.updateKeyguardPosition(1.0f);
+
+ verify(mBouncer).updateKeyguardPosition(1.0f);
+ }
}
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 781cde6c48b5..39f0db5228bc 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
@@ -132,6 +132,7 @@ import com.android.systemui.statusbar.notification.stack.NotificationListContain
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayout;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
+import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
@@ -263,6 +264,7 @@ public class StatusBarTest extends SysuiTestCase {
@Mock private Lazy<NotificationShadeDepthController> mNotificationShadeDepthControllerLazy;
@Mock private BrightnessSlider.Factory mBrightnessSliderFactory;
@Mock private WiredChargingRippleController mWiredChargingRippleController;
+ @Mock private OngoingCallController mOngoingCallController;
@Mock private FeatureFlags mFeatureFlags;
private ShadeController mShadeController;
private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
@@ -296,7 +298,7 @@ public class StatusBarTest extends SysuiTestCase {
when(mCommandQueue.asBinder()).thenReturn(new Binder());
- mContext.setTheme(R.style.Theme_SystemUI_Light);
+ mContext.setTheme(R.style.Theme_SystemUI_LightWallpaper);
when(mStackScroller.getController()).thenReturn(mStackScrollerController);
when(mStackScrollerController.getView()).thenReturn(mStackScroller);
@@ -427,6 +429,7 @@ public class StatusBarTest extends SysuiTestCase {
mNotificationIconAreaController,
mBrightnessSliderFactory,
mWiredChargingRippleController,
+ mOngoingCallController,
mFeatureFlags);
when(mNotificationShadeWindowView.findViewById(R.id.lock_icon_container)).thenReturn(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
index ef3317288e4c..4471778a03ab 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerBaseTest.java
@@ -77,6 +77,8 @@ import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
import com.android.systemui.telephony.TelephonyListenerManager;
+import com.android.systemui.util.concurrency.FakeExecutor;
+import com.android.systemui.util.time.FakeSystemClock;
import org.junit.After;
import org.junit.Before;
@@ -123,10 +125,12 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
protected DeviceProvisionedListener mUserCallback;
protected Instrumentation mInstrumentation;
protected DemoModeController mDemoModeController;
+ protected FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
protected int mSubId;
private NetworkCapabilities mNetCapabilities;
+ private Network mNetwork;
private ConnectivityManager.NetworkCallback mDefaultCallbackInWifiTracker;
private ConnectivityManager.NetworkCallback mDefaultCallbackInNetworkController;
private ConnectivityManager.NetworkCallback mNetworkCallback;
@@ -171,8 +175,10 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mMockCm = mock(ConnectivityManager.class);
mMockBd = mock(BroadcastDispatcher.class);
mMockNsm = mock(NetworkScoreManager.class);
+ mNetwork = mock(Network.class);
mMockSubDefaults = mock(SubscriptionDefaults.class);
mNetCapabilities = new NetworkCapabilities();
+ when(mNetwork.getNetId()).thenReturn(0);
when(mMockTm.isDataCapable()).thenReturn(true);
when(mMockTm.createForSubscriptionId(anyInt())).thenReturn(mMockTm);
doAnswer(invocation -> {
@@ -222,6 +228,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mMockSm,
mConfig,
TestableLooper.get(this).getLooper(),
+ mFakeExecutor,
mCallbackHandler,
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class),
@@ -291,7 +298,8 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
NetworkControllerImpl networkControllerNoMobile =
new NetworkControllerImpl(mContext, mMockCm, mMockTm, mTelephonyListenerManager,
mMockWm, mMockNsm, mMockSm,
- mConfig, TestableLooper.get(this).getLooper(), mCallbackHandler,
+ mConfig, TestableLooper.get(this).getLooper(), mFakeExecutor,
+ mCallbackHandler,
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class), mMockSubDefaults,
mock(DeviceProvisionedController.class), mMockBd, mDemoModeController);
@@ -318,7 +326,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
mNetCapabilities.setTransportInfo(info);
setConnectivityCommon(networkType, validated, isConnected);
mDefaultCallbackInNetworkController.onCapabilitiesChanged(
- mock(Network.class), new NetworkCapabilities(mNetCapabilities));
+ mNetwork, new NetworkCapabilities(mNetCapabilities));
}
public void setConnectivityViaCallbackInNetworkController(
@@ -328,7 +336,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
}
setConnectivityCommon(networkType, validated, isConnected);
mDefaultCallbackInNetworkController.onCapabilitiesChanged(
- mock(Network.class), new NetworkCapabilities(mNetCapabilities));
+ mNetwork, new NetworkCapabilities(mNetCapabilities));
}
public void setConnectivityViaCallbackInWifiTracker(
@@ -339,12 +347,12 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
setConnectivityCommon(networkType, validated, isConnected);
if (networkType == NetworkCapabilities.TRANSPORT_WIFI) {
if (isConnected) {
- mNetworkCallback.onAvailable(mock(Network.class),
+ mNetworkCallback.onAvailable(mNetwork,
new NetworkCapabilities(mNetCapabilities), new LinkProperties(), false);
mNetworkCallback.onCapabilitiesChanged(
- mock(Network.class), new NetworkCapabilities(mNetCapabilities));
+ mNetwork, new NetworkCapabilities(mNetCapabilities));
} else {
- mNetworkCallback.onLost(mock(Network.class));
+ mNetworkCallback.onLost(mNetwork);
}
}
}
@@ -355,14 +363,14 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
setConnectivityCommon(networkType, validated, isConnected);
if (networkType == NetworkCapabilities.TRANSPORT_CELLULAR) {
if (isConnected) {
- mNetworkCallback.onAvailable(mock(Network.class),
+ mNetworkCallback.onAvailable(mNetwork,
new NetworkCapabilities(mNetCapabilities), new LinkProperties(), false);
mNetworkCallback.onCapabilitiesChanged(
- mock(Network.class), new NetworkCapabilities(mNetCapabilities));
+ mNetwork, new NetworkCapabilities(mNetCapabilities));
mDefaultCallbackInWifiTracker.onCapabilitiesChanged(
- mock(Network.class), new NetworkCapabilities(mNetCapabilities));
+ mNetwork, new NetworkCapabilities(mNetCapabilities));
} else {
- mNetworkCallback.onLost(mock(Network.class));
+ mNetworkCallback.onLost(mNetwork);
}
}
}
@@ -374,7 +382,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
}
setConnectivityCommon(networkType, validated, isConnected);
mDefaultCallbackInWifiTracker.onCapabilitiesChanged(
- mock(Network.class), new NetworkCapabilities(mNetCapabilities));
+ mNetwork, new NetworkCapabilities(mNetCapabilities));
}
private void setConnectivityCommon(
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
index f4ad819acf57..6219fafc98db 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerDataTest.java
@@ -108,7 +108,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
mConfig.show4gForLte = true;
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm,
mTelephonyListenerManager, mMockWm,
- mMockNsm, mMockSm, mConfig, Looper.getMainLooper(), mCallbackHandler,
+ mMockNsm, mMockSm, mConfig, Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
mock(AccessPointControllerImpl.class),
mock(DataUsageController.class), mMockSubDefaults,
mock(DeviceProvisionedController.class), mMockBd, mDemoModeController);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
index 3c5cbb69eef6..8d3e403f1189 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/NetworkControllerSignalTest.java
@@ -63,7 +63,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
// Create a new NetworkController as this is currently handled in constructor.
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm,
mTelephonyListenerManager, mMockWm, mMockNsm, mMockSm, mConfig,
- Looper.getMainLooper(), mCallbackHandler,
+ Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
mDemoModeController);
@@ -83,7 +83,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm,
mTelephonyListenerManager, mMockWm, mMockNsm, mMockSm, mConfig,
- Looper.getMainLooper(), mCallbackHandler,
+ Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
mDemoModeController);
@@ -151,7 +151,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
// Create a new NetworkController as this is currently handled in constructor.
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm,
mTelephonyListenerManager, mMockWm, mMockNsm, mMockSm, mConfig,
- Looper.getMainLooper(), mCallbackHandler,
+ Looper.getMainLooper(), mFakeExecutor, mCallbackHandler,
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
mMockSubDefaults, mock(DeviceProvisionedController.class), mMockBd,
mDemoModeController);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java
index 8ad6271bfc7e..64127b9d1e6e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java
@@ -66,10 +66,6 @@ public class FakeStatusBarIconController extends BaseLeakChecker<IconManager>
}
@Override
- public void setCallStrengthIcons(String slot, List<CallIndicatorIconState> states) {
- }
-
- @Override
public void setNoCallingIcons(String slot, List<CallIndicatorIconState> states) {
}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/wallet/ui/WalletScreenControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/wallet/ui/WalletScreenControllerTest.java
new file mode 100644
index 000000000000..f85962b6859b
--- /dev/null
+++ b/packages/SystemUI/tests/src/com/android/systemui/wallet/ui/WalletScreenControllerTest.java
@@ -0,0 +1,274 @@
+/*
+ * Copyright (C) 2021 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.wallet.ui;
+
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.os.Handler;
+import android.service.quickaccesswallet.GetWalletCardsError;
+import android.service.quickaccesswallet.GetWalletCardsRequest;
+import android.service.quickaccesswallet.GetWalletCardsResponse;
+import android.service.quickaccesswallet.QuickAccessWalletClient;
+import android.service.quickaccesswallet.QuickAccessWalletService;
+import android.service.quickaccesswallet.WalletCard;
+import android.service.quickaccesswallet.WalletServiceEvent;
+import android.testing.AndroidTestingRunner;
+import android.testing.TestableLooper;
+
+import androidx.test.filters.SmallTest;
+
+import com.android.systemui.SysuiTestCase;
+import com.android.systemui.plugins.ActivityStarter;
+import com.android.systemui.settings.UserTracker;
+
+import com.google.common.util.concurrent.MoreExecutors;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Collections;
+
+@RunWith(AndroidTestingRunner.class)
+@TestableLooper.RunWithLooper
+@SmallTest
+public class WalletScreenControllerTest extends SysuiTestCase {
+
+ private static final int MAX_CARDS = 10;
+ private static final String CARD_ID = "card_id";
+ private static final CharSequence SHORTCUT_SHORT_LABEL = "View all";
+ private static final CharSequence SHORTCUT_LONG_LABEL = "Add a payment method";
+ private static final CharSequence SERVICE_LABEL = "Wallet app";
+ private final WalletView mWalletView = new WalletView(mContext);
+ private final Drawable mWalletLogo = mContext.getDrawable(android.R.drawable.ic_lock_lock);
+ private final Intent mWalletIntent = new Intent(QuickAccessWalletService.ACTION_VIEW_WALLET)
+ .setComponent(new ComponentName(mContext.getPackageName(), "WalletActivity"));
+
+ @Mock
+ QuickAccessWalletClient mWalletClient;
+ @Mock
+ ActivityStarter mActivityStarter;
+ @Mock
+ UserTracker mUserTracker;
+ @Captor
+ ArgumentCaptor<Intent> mIntentCaptor;
+ @Captor
+ ArgumentCaptor<GetWalletCardsRequest> mRequestCaptor;
+ @Captor
+ ArgumentCaptor<QuickAccessWalletClient.OnWalletCardsRetrievedCallback> mCallbackCaptor;
+ @Captor
+ ArgumentCaptor<QuickAccessWalletClient.WalletServiceEventListener> mListenerCaptor;
+ private WalletScreenController mController;
+ private TestableLooper mTestableLooper;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mTestableLooper = TestableLooper.get(this);
+ when(mUserTracker.getUserContext()).thenReturn(mContext);
+ when(mWalletClient.getLogo()).thenReturn(mWalletLogo);
+ when(mWalletClient.getShortcutLongLabel()).thenReturn(SHORTCUT_LONG_LABEL);
+ when(mWalletClient.getShortcutShortLabel()).thenReturn(SHORTCUT_SHORT_LABEL);
+ when(mWalletClient.getServiceLabel()).thenReturn(SERVICE_LABEL);
+ when(mWalletClient.createWalletIntent()).thenReturn(mWalletIntent);
+ mController = new WalletScreenController(
+ mContext,
+ mWalletView,
+ mWalletClient,
+ mActivityStarter,
+ MoreExecutors.directExecutor(),
+ new Handler(mTestableLooper.getLooper()),
+ mUserTracker,
+ /* isDeviceLocked= */false);
+ }
+
+ @Test
+ public void queryCards_hasCards_showCarousel() {
+ GetWalletCardsResponse response =
+ new GetWalletCardsResponse(
+ Collections.singletonList(createWalletCard(mContext)), 0);
+
+ mController.queryWalletCards();
+ mTestableLooper.processAllMessages();
+
+ verify(mWalletClient).getWalletCards(any(), any(), mCallbackCaptor.capture());
+
+ mCallbackCaptor.getValue().onWalletCardsRetrieved(response);
+ mTestableLooper.processAllMessages();
+
+ assertEquals(VISIBLE, mWalletView.getCardCarouselContainer().getVisibility());
+ assertEquals(GONE, mWalletView.getErrorView().getVisibility());
+ }
+
+ @Test
+ public void queryCards_noCards_showEmptyState() {
+ GetWalletCardsResponse response = new GetWalletCardsResponse(Collections.EMPTY_LIST, 0);
+
+ mController.queryWalletCards();
+ mTestableLooper.processAllMessages();
+
+ verify(mWalletClient).getWalletCards(any(), any(), mCallbackCaptor.capture());
+
+ mCallbackCaptor.getValue().onWalletCardsRetrieved(response);
+ mTestableLooper.processAllMessages();
+
+ assertEquals(GONE, mWalletView.getCardCarouselContainer().getVisibility());
+ assertEquals(VISIBLE, mWalletView.getEmptyStateView().getVisibility());
+ assertEquals(GONE, mWalletView.getErrorView().getVisibility());
+ }
+
+ @Test
+ public void queryCards_error_showErrorView() {
+ String errorMessage = "getWalletCardsError";
+ GetWalletCardsError error = new GetWalletCardsError(createIcon(), errorMessage);
+
+ mController.queryWalletCards();
+ mTestableLooper.processAllMessages();
+
+ verify(mWalletClient).getWalletCards(any(), any(), mCallbackCaptor.capture());
+
+ mCallbackCaptor.getValue().onWalletCardRetrievalError(error);
+ mTestableLooper.processAllMessages();
+
+ assertEquals(GONE, mWalletView.getCardCarouselContainer().getVisibility());
+ assertEquals(GONE, mWalletView.getEmptyStateView().getVisibility());
+ assertEquals(VISIBLE, mWalletView.getErrorView().getVisibility());
+ assertEquals(errorMessage, mWalletView.getErrorView().getText().toString());
+ }
+
+ @Test
+ public void onWalletServiceEvent_nfcPaymentStart_dismiss() {
+ WalletServiceEvent event =
+ new WalletServiceEvent(WalletServiceEvent.TYPE_NFC_PAYMENT_STARTED);
+
+ mController.onWalletServiceEvent(event);
+ mTestableLooper.processAllMessages();
+
+ assertNull(mController.mSelectedCardId);
+ assertTrue(mController.mIsDismissed);
+ verify(mWalletClient).notifyWalletDismissed();
+ }
+
+ @Test
+ public void onWalletServiceEvent_walletCardsUpdate_queryCards() {
+ mController.queryWalletCards();
+
+ verify(mWalletClient).addWalletServiceEventListener(mListenerCaptor.capture());
+
+ WalletServiceEvent event =
+ new WalletServiceEvent(WalletServiceEvent.TYPE_WALLET_CARDS_UPDATED);
+
+ QuickAccessWalletClient.WalletServiceEventListener listener = mListenerCaptor.getValue();
+ listener.onWalletServiceEvent(event);
+ mTestableLooper.processAllMessages();
+
+ verify(mWalletClient, times(2))
+ .getWalletCards(any(), mRequestCaptor.capture(), mCallbackCaptor.capture());
+
+ GetWalletCardsRequest request = mRequestCaptor.getValue();
+
+ assertEquals(MAX_CARDS, request.getMaxCards());
+ }
+
+ @Test
+ public void onCardSelected() {
+ mController.onCardSelected(createCardViewInfo());
+
+ assertEquals(CARD_ID, mController.mSelectedCardId);
+ }
+
+ @Test
+ public void onCardClicked_startIntent() {
+ WalletCardViewInfo walletCardViewInfo = createCardViewInfo();
+
+ mController.onCardClicked(walletCardViewInfo);
+
+ verify(mActivityStarter).startActivity(mIntentCaptor.capture(), eq(true));
+
+ assertEquals(mWalletIntent.getAction(), mIntentCaptor.getValue().getAction());
+ assertEquals(mWalletIntent.getComponent(), mIntentCaptor.getValue().getComponent());
+ }
+
+ @Test
+ public void onWalletCardsRetrieved_cardDataEmpty_intentIsNull_hidesWallet() {
+ when(mWalletClient.createWalletIntent()).thenReturn(null);
+ GetWalletCardsResponse response = new GetWalletCardsResponse(Collections.emptyList(), 0);
+
+ mController.onWalletCardsRetrieved(response);
+ mTestableLooper.processAllMessages();
+
+ assertEquals(GONE, mWalletView.getVisibility());
+ }
+
+ @Test
+ public void onWalletCardsRetrieved_cardDataEmpty_logoIsNull_hidesWallet() {
+ when(mWalletClient.getLogo()).thenReturn(null);
+ GetWalletCardsResponse response = new GetWalletCardsResponse(Collections.emptyList(), 0);
+
+ mController.onWalletCardsRetrieved(response);
+ mTestableLooper.processAllMessages();
+
+ assertEquals(GONE, mWalletView.getVisibility());
+ }
+
+ @Test
+ public void onWalletCardsRetrieved_cardDataEmpty_labelIsEmpty_hidesWallet() {
+ when(mWalletClient.getShortcutLongLabel()).thenReturn("");
+ GetWalletCardsResponse response = new GetWalletCardsResponse(Collections.emptyList(), 0);
+
+ mController.onWalletCardsRetrieved(response);
+ mTestableLooper.processAllMessages();
+
+ assertEquals(GONE, mWalletView.getVisibility());
+ }
+
+ private WalletCard createWalletCard(Context context) {
+ PendingIntent pendingIntent =
+ PendingIntent.getActivity(context, 0, mWalletIntent, PendingIntent.FLAG_IMMUTABLE);
+ return new WalletCard.Builder(CARD_ID, createIcon(), "description", pendingIntent).build();
+ }
+
+ private static Icon createIcon() {
+ return Icon.createWithBitmap(Bitmap.createBitmap(70, 44, Bitmap.Config.ARGB_8888));
+ }
+
+ private WalletCardViewInfo createCardViewInfo() {
+ return new WalletScreenController.QAWalletCardViewInfo(
+ mContext, createWalletCard(mContext));
+ }
+}
diff --git a/rs/java/Android.bp b/rs/java/Android.bp
index 9f854f7d5cb7..1c2b575e7c8d 100644
--- a/rs/java/Android.bp
+++ b/rs/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-rs-sources",
srcs: ["**/*.java"],
diff --git a/sax/java/Android.bp b/sax/java/Android.bp
index 97751891559c..0ed69e4bfb8e 100644
--- a/sax/java/Android.bp
+++ b/sax/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-sax-sources",
srcs: ["**/*.java"],
diff --git a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
index 88e6b66e23a3..e9c9899023b1 100644
--- a/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
+++ b/services/accessibility/java/com/android/server/accessibility/AbstractAccessibilityServiceConnection.java
@@ -22,6 +22,7 @@ import static android.accessibilityservice.AccessibilityService.KEY_ACCESSIBILIT
import static android.accessibilityservice.AccessibilityService.KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP;
import static android.accessibilityservice.AccessibilityServiceInfo.DEFAULT;
import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
+import static android.view.accessibility.AccessibilityInteractionClient.CALL_STACK;
import static android.view.accessibility.AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS;
import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS;
import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK;
@@ -1979,4 +1980,15 @@ abstract class AbstractAccessibilityServiceConnection extends IAccessibilityServ
"strokeWidth=" + strokeWidth + ";color=" + color);
}
}
+
+ @Override
+ public void logTrace(long timestamp, String where, String callingParams, int processId,
+ long threadId, int callingUid, Bundle callingStack) {
+ if (mTrace.isA11yTracingEnabled()) {
+ ArrayList<StackTraceElement> list =
+ (ArrayList<StackTraceElement>) callingStack.getSerializable(CALL_STACK);
+ mTrace.logTrace(timestamp, where, callingParams, processId, threadId, callingUid,
+ list.toArray(new StackTraceElement[list.size()]));
+ }
+ }
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index e7ffb1a64d4f..8e803b3619fb 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -1409,7 +1409,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
}
private int getClientStateLocked(AccessibilityUserState userState) {
- return userState.getClientStateLocked(mUiAutomationManager.isUiAutomationRunningLocked());
+ return userState.getClientStateLocked(
+ mUiAutomationManager.isUiAutomationRunningLocked(),
+ mA11yController.isAccessibilityTracingEnabled());
}
private InteractionBridge getInteractionBridge() {
@@ -3322,7 +3324,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
mConnectionId = service.mId;
- mClient = AccessibilityInteractionClient.getInstance();
+ mClient = AccessibilityInteractionClient.getInstance(mContext);
mClient.addConnection(mConnectionId, service);
//TODO: (multi-display) We need to support multiple displays.
@@ -3866,6 +3868,24 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
}
@Override
+ public void startTrace() {
+ if (!mA11yController.isAccessibilityTracingEnabled()) {
+ mA11yController.startTrace();
+ final AccessibilityUserState userState = getUserStateLocked(UserHandle.USER_SYSTEM);
+ scheduleUpdateClientsIfNeededLocked(userState);
+ }
+ }
+
+ @Override
+ public void stopTrace() {
+ if (mA11yController.isAccessibilityTracingEnabled()) {
+ mA11yController.stopTrace();
+ final AccessibilityUserState userState = getUserStateLocked(UserHandle.USER_SYSTEM);
+ scheduleUpdateClientsIfNeededLocked(userState);
+ }
+ }
+
+ @Override
public void logTrace(String where) {
logTrace(where, "");
}
@@ -3875,4 +3895,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
mA11yController.logTrace(where, callingParams, "".getBytes(),
Binder.getCallingUid(), Thread.currentThread().getStackTrace());
}
+
+ @Override
+ public void logTrace(long timestamp, String where, String callingParams, int processId,
+ long threadId, int callingUid, StackTraceElement[] callStack) {
+ if (mA11yController.isAccessibilityTracingEnabled()) {
+ mA11yController.logTrace(where, callingParams, "".getBytes(), callingUid, callStack,
+ timestamp, processId, threadId);
+ }
+ }
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityShellCommand.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityShellCommand.java
index 0d323fb186c9..16ce177c56cf 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityShellCommand.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityShellCommand.java
@@ -108,16 +108,12 @@ final class AccessibilityShellCommand extends ShellCommand {
}
private int startTrace() {
- WindowManagerInternal.AccessibilityControllerInternal ac =
- mWindowManagerService.getAccessibilityController();
- ac.startTrace();
+ mService.startTrace();
return 0;
}
private int stopTrace() {
- WindowManagerInternal.AccessibilityControllerInternal ac =
- mWindowManagerService.getAccessibilityController();
- ac.stopTrace();
+ mService.stopTrace();
return 0;
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityTrace.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityTrace.java
index 0c03877d6e44..03914138cd42 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityTrace.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityTrace.java
@@ -25,6 +25,16 @@ public interface AccessibilityTrace {
boolean isA11yTracingEnabled();
/**
+ * Start tracing.
+ */
+ void startTrace();
+
+ /**
+ * Stop tracing.
+ */
+ void stopTrace();
+
+ /**
* Log one trace entry.
* @param where A string to identify this log entry, which can be used to filter/search
* through the tracing file.
@@ -38,4 +48,19 @@ public interface AccessibilityTrace {
* @param callingParams The parameters for the method to be logged.
*/
void logTrace(String where, String callingParams);
+
+ /**
+ * Log one trace entry. Accessibility services using AccessibilityInteractionClient to
+ * make screen content related requests use this API to log entry when receive callback.
+ * @param timestamp The timestamp when a callback is received.
+ * @param where A string to identify this log entry, which can be used to filter/search
+ * through the tracing file.
+ * @param callingParams The parameters for the callback.
+ * @param processId The process id of the calling component.
+ * @param threadId The threadId of the calling component.
+ * @param callingUid The calling uid of the callback.
+ * @param callStack The call stack of the callback.
+ */
+ void logTrace(long timestamp, String where, String callingParams, int processId,
+ long threadId, int callingUid, StackTraceElement[] callStack);
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
index eb30fdeddd90..df349c863128 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java
@@ -391,7 +391,7 @@ class AccessibilityUserState {
return mBoundServices;
}
- int getClientStateLocked(boolean isUiAutomationRunning) {
+ int getClientStateLocked(boolean isUiAutomationRunning, boolean isTracingEnabled) {
int clientState = 0;
final boolean a11yEnabled = isUiAutomationRunning
|| isHandlingAccessibilityEventsLocked();
@@ -407,6 +407,9 @@ class AccessibilityUserState {
if (mIsTextHighContrastEnabled) {
clientState |= AccessibilityManager.STATE_FLAG_HIGH_TEXT_CONTRAST_ENABLED;
}
+ if (isTracingEnabled) {
+ clientState |= AccessibilityManager.STATE_FLAG_ACCESSIBILITY_TRACING_ENABLED;
+ }
return clientState;
}
diff --git a/services/backup/OWNERS b/services/backup/OWNERS
index ba2a63abb62d..cc36b47029a2 100644
--- a/services/backup/OWNERS
+++ b/services/backup/OWNERS
@@ -9,4 +9,3 @@ niagra@google.com
niamhfw@google.com
philippov@google.com
rthakohov@google.com
-tobiast@google.com
diff --git a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
index 483f67a91c19..e9b2ed30aa09 100644
--- a/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
+++ b/services/companion/java/com/android/server/companion/CompanionDeviceManagerService.java
@@ -637,6 +637,8 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
return association;
}
}));
+
+ restartBleScan();
}
@Override
@@ -1118,11 +1120,18 @@ public class CompanionDeviceManagerService extends SystemService implements Bind
}
ComponentName componentName = packageResolveInfos.get(0).serviceInfo.getComponentName();
Slog.i(LOG_TAG, "Initializing CompanionDeviceService binding for " + componentName);
- return new ServiceConnector.Impl<>(getContext(),
+ return new ServiceConnector.Impl<ICompanionDeviceService>(getContext(),
new Intent(CompanionDeviceService.SERVICE_INTERFACE).setComponent(componentName),
BIND_IMPORTANT,
a.getUserId(),
- ICompanionDeviceService.Stub::asInterface);
+ ICompanionDeviceService.Stub::asInterface) {
+
+ @Override
+ protected long getAutoDisconnectTimeoutMs() {
+ // Service binding is managed manually based on corresponding device being nearby
+ return Long.MAX_VALUE;
+ }
+ };
}
private class BleScanCallback extends ScanCallback {
diff --git a/services/core/java/com/android/server/VcnManagementService.java b/services/core/java/com/android/server/VcnManagementService.java
index d66d82d1f23f..ed579f2df4fc 100644
--- a/services/core/java/com/android/server/VcnManagementService.java
+++ b/services/core/java/com/android/server/VcnManagementService.java
@@ -40,7 +40,6 @@ import android.net.vcn.IVcnManagementService;
import android.net.vcn.IVcnStatusCallback;
import android.net.vcn.IVcnUnderlyingNetworkPolicyListener;
import android.net.vcn.VcnConfig;
-import android.net.vcn.VcnManager;
import android.net.vcn.VcnManager.VcnErrorCode;
import android.net.vcn.VcnManager.VcnStatusCode;
import android.net.vcn.VcnUnderlyingNetworkPolicy;
@@ -531,11 +530,12 @@ public class VcnManagementService extends IVcnManagementService.Stub {
if (mVcns.containsKey(subscriptionGroup)) {
final Vcn vcn = mVcns.get(subscriptionGroup);
- final boolean isActive = vcn.isActive();
+ final int status = vcn.getStatus();
vcn.updateConfig(config);
+ // TODO(b/183174340): Remove this once opportunistic-safe-mode is supported
// Only notify VcnStatusCallbacks if this VCN was previously in Safe Mode
- if (!isActive) {
+ if (status == VCN_STATUS_CODE_SAFE_MODE) {
// TODO(b/181789060): invoke asynchronously after Vcn notifies through VcnCallback
notifyAllPermissionedStatusCallbacksLocked(
subscriptionGroup, VCN_STATUS_CODE_ACTIVE);
@@ -768,7 +768,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
synchronized (mLock) {
final Vcn vcn = mVcns.get(subGrp);
if (vcn != null) {
- if (vcn.isActive()) {
+ if (vcn.getStatus() == VCN_STATUS_CODE_ACTIVE) {
isVcnManagedNetwork = true;
}
@@ -879,20 +879,23 @@ public class VcnManagementService extends IVcnManagementService.Stub {
// now that callback is registered, send it the VCN's current status
final VcnConfig vcnConfig = mConfigs.get(subGroup);
final Vcn vcn = mVcns.get(subGroup);
- final int vcnStatus;
+ final int vcnStatus =
+ vcn == null ? VCN_STATUS_CODE_NOT_CONFIGURED : vcn.getStatus();
+ final int resultStatus;
if (vcnConfig == null || !isCallbackPermissioned(cbInfo, subGroup)) {
- vcnStatus = VcnManager.VCN_STATUS_CODE_NOT_CONFIGURED;
+ resultStatus = VCN_STATUS_CODE_NOT_CONFIGURED;
} else if (vcn == null) {
- vcnStatus = VcnManager.VCN_STATUS_CODE_INACTIVE;
- } else if (vcn.isActive()) {
- vcnStatus = VcnManager.VCN_STATUS_CODE_ACTIVE;
+ resultStatus = VCN_STATUS_CODE_INACTIVE;
+ } else if (vcnStatus == VCN_STATUS_CODE_ACTIVE
+ || vcnStatus == VCN_STATUS_CODE_SAFE_MODE) {
+ resultStatus = vcnStatus;
} else {
- // TODO(b/181789060): create Vcn.getStatus() and Log.WTF() for unknown status
- vcnStatus = VcnManager.VCN_STATUS_CODE_SAFE_MODE;
+ Slog.wtf(TAG, "Unknown VCN status: " + vcnStatus);
+ resultStatus = VCN_STATUS_CODE_NOT_CONFIGURED;
}
try {
- cbInfo.mCallback.onVcnStatusChanged(vcnStatus);
+ cbInfo.mCallback.onVcnStatusChanged(resultStatus);
} catch (RemoteException e) {
Slog.d(TAG, "VcnStatusCallback threw on VCN status change", e);
}
@@ -930,7 +933,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
/** Called by a Vcn to signal that an error occurred. */
void onGatewayConnectionError(
- @NonNull int[] networkCapabilities,
+ @NonNull String gatewayConnectionName,
@VcnErrorCode int errorCode,
@Nullable String exceptionClass,
@Nullable String exceptionMessage);
@@ -959,7 +962,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
@Override
public void onGatewayConnectionError(
- @NonNull int[] networkCapabilities,
+ @NonNull String gatewayConnectionName,
@VcnErrorCode int errorCode,
@Nullable String exceptionClass,
@Nullable String exceptionMessage) {
@@ -975,7 +978,7 @@ public class VcnManagementService extends IVcnManagementService.Stub {
Binder.withCleanCallingIdentity(
() ->
cbInfo.mCallback.onGatewayConnectionError(
- networkCapabilities,
+ gatewayConnectionName,
errorCode,
exceptionClass,
exceptionMessage));
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index c360190d58a3..5c2fd2647df2 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -279,7 +279,7 @@ public class AccountManagerService
mAppOpsManager = mContext.getSystemService(AppOpsManager.class);
mHandler = new MessageHandler(injector.getMessageHandlerLooper());
mAuthenticatorCache = mInjector.getAccountAuthenticatorCache();
- mAuthenticatorCache.setListener(this, mHandler);
+ mAuthenticatorCache.setListener(this, null /* Handler */);
sThis.set(this);
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index b1543ee86565..c1ab6cc89eac 100644
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -24,6 +24,8 @@ import static android.app.ActivityManager.PROCESS_STATE_TOP;
import static android.content.pm.PackageManager.PERMISSION_GRANTED;
import static android.content.pm.ServiceInfo.FOREGROUND_SERVICE_TYPE_MANIFEST;
import static android.os.PowerExemptionManager.REASON_ACTIVITY_VISIBILITY_GRACE_PERIOD;
+import static android.os.PowerExemptionManager.REASON_OP_ACTIVATE_PLATFORM_VPN;
+import static android.os.PowerExemptionManager.REASON_OP_ACTIVATE_VPN;
import static android.os.PowerWhitelistManager.REASON_ACTIVITY_STARTER;
import static android.os.PowerWhitelistManager.REASON_ALLOWLISTED_PACKAGE;
import static android.os.PowerWhitelistManager.REASON_BACKGROUND_ACTIVITY_PERMISSION;
@@ -189,6 +191,15 @@ public final class ActiveServices {
// calling startForeground() before we ANR + stop it.
static final int SERVICE_START_FOREGROUND_TIMEOUT = 10 * 1000 * Build.HW_TIMEOUT_MULTIPLIER;
+ // Foreground service types that always get immediate notification display,
+ // expressed in the same bitmask format that ServiceRecord.foregroundServiceType
+ // uses.
+ static final int FGS_IMMEDIATE_DISPLAY_MASK =
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
+ | ServiceInfo.FOREGROUND_SERVICE_TYPE_PHONE_CALL
+ | ServiceInfo.FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
+ | ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION;
+
final ActivityManagerService mAm;
// Maximum number of services that we allow to start in the background
@@ -2018,15 +2029,12 @@ public final class ActiveServices {
}
// or is this an type of FGS that always shows immediately?
if (!showNow) {
- switch (r.foregroundServiceType) {
- case ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK:
- case ServiceInfo.FOREGROUND_SERVICE_TYPE_PHONE_CALL:
- case ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION:
- if (DEBUG_FOREGROUND_SERVICE) {
- Slog.d(TAG_SERVICE, "FGS " + r
- + " type gets immediate display");
- }
- showNow = true;
+ if ((r.foregroundServiceType & FGS_IMMEDIATE_DISPLAY_MASK) != 0) {
+ if (DEBUG_FOREGROUND_SERVICE) {
+ Slog.d(TAG_SERVICE, "FGS " + r
+ + " type gets immediate display");
+ }
+ showNow = true;
}
}
} else {
@@ -5865,6 +5873,17 @@ public final class ActiveServices {
}
}
+ if (ret == REASON_DENIED) {
+ final AppOpsManager appOpsManager = mAm.getAppOpsManager();
+ if (appOpsManager.checkOpNoThrow(AppOpsManager.OP_ACTIVATE_VPN, callingUid,
+ callingPackage) == AppOpsManager.MODE_ALLOWED) {
+ ret = REASON_OP_ACTIVATE_VPN;
+ } else if (appOpsManager.checkOpNoThrow(AppOpsManager.OP_ACTIVATE_PLATFORM_VPN,
+ callingUid, callingPackage) == AppOpsManager.MODE_ALLOWED) {
+ ret = REASON_OP_ACTIVATE_PLATFORM_VPN;
+ }
+ }
+
return ret;
}
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index 7f2eae8ff153..a5474d0b8c72 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -638,6 +638,7 @@ public final class BroadcastQueue {
+ filter);
skip = true;
}
+ // Check that the sender has permission to send to this receiver
if (filter.requiredPermission != null) {
int perm = mService.checkComponentPermission(filter.requiredPermission,
r.callingPid, r.callingUid, -1, true);
@@ -666,6 +667,46 @@ public final class BroadcastQueue {
}
}
}
+
+ if (!skip && (filter.receiverList.app == null || filter.receiverList.app.isKilled()
+ || filter.receiverList.app.mErrorState.isCrashing())) {
+ Slog.w(TAG, "Skipping deliver [" + mQueueName + "] " + r
+ + " to " + filter.receiverList + ": process gone or crashing");
+ skip = true;
+ }
+
+ // Ensure that broadcasts are only sent to other Instant Apps if they are marked as
+ // visible to Instant Apps.
+ final boolean visibleToInstantApps =
+ (r.intent.getFlags() & Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS) != 0;
+
+ if (!skip && !visibleToInstantApps && filter.instantApp
+ && filter.receiverList.uid != r.callingUid) {
+ Slog.w(TAG, "Instant App Denial: receiving "
+ + r.intent.toString()
+ + " to " + filter.receiverList.app
+ + " (pid=" + filter.receiverList.pid
+ + ", uid=" + filter.receiverList.uid + ")"
+ + " due to sender " + r.callerPackage
+ + " (uid " + r.callingUid + ")"
+ + " not specifying FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS");
+ skip = true;
+ }
+
+ if (!skip && !filter.visibleToInstantApp && r.callerInstantApp
+ && filter.receiverList.uid != r.callingUid) {
+ Slog.w(TAG, "Instant App Denial: receiving "
+ + r.intent.toString()
+ + " to " + filter.receiverList.app
+ + " (pid=" + filter.receiverList.pid
+ + ", uid=" + filter.receiverList.uid + ")"
+ + " requires receiver be visible to instant apps"
+ + " due to sender " + r.callerPackage
+ + " (uid " + r.callingUid + ")");
+ skip = true;
+ }
+
+ // Check that the receiver has the required permission(s) to receive this broadcast.
if (!skip && r.requiredPermissions != null && r.requiredPermissions.length > 0) {
for (int i = 0; i < r.requiredPermissions.length; i++) {
String requiredPermission = r.requiredPermissions[i];
@@ -717,6 +758,7 @@ public final class BroadcastQueue {
skip = true;
}
}
+ // If the broadcast also requires an app op check that as well.
if (!skip && r.appOp != AppOpsManager.OP_NONE
&& mService.getAppOpsManager().noteOpNoThrow(r.appOp,
filter.receiverList.uid, filter.packageName, filter.featureId,
@@ -733,44 +775,6 @@ public final class BroadcastQueue {
skip = true;
}
- if (!skip && (filter.receiverList.app == null || filter.receiverList.app.isKilled()
- || filter.receiverList.app.mErrorState.isCrashing())) {
- Slog.w(TAG, "Skipping deliver [" + mQueueName + "] " + r
- + " to " + filter.receiverList + ": process gone or crashing");
- skip = true;
- }
-
- // Ensure that broadcasts are only sent to other Instant Apps if they are marked as
- // visible to Instant Apps.
- final boolean visibleToInstantApps =
- (r.intent.getFlags() & Intent.FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS) != 0;
-
- if (!skip && !visibleToInstantApps && filter.instantApp
- && filter.receiverList.uid != r.callingUid) {
- Slog.w(TAG, "Instant App Denial: receiving "
- + r.intent.toString()
- + " to " + filter.receiverList.app
- + " (pid=" + filter.receiverList.pid
- + ", uid=" + filter.receiverList.uid + ")"
- + " due to sender " + r.callerPackage
- + " (uid " + r.callingUid + ")"
- + " not specifying FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS");
- skip = true;
- }
-
- if (!skip && !filter.visibleToInstantApp && r.callerInstantApp
- && filter.receiverList.uid != r.callingUid) {
- Slog.w(TAG, "Instant App Denial: receiving "
- + r.intent.toString()
- + " to " + filter.receiverList.app
- + " (pid=" + filter.receiverList.pid
- + ", uid=" + filter.receiverList.uid + ")"
- + " requires receiver be visible to instant apps"
- + " due to sender " + r.callerPackage
- + " (uid " + r.callingUid + ")");
- skip = true;
- }
-
if (skip) {
r.delivery[index] = BroadcastRecord.DELIVERY_SKIPPED;
return;
@@ -1415,43 +1419,6 @@ public final class BroadcastQueue {
skip = true;
}
}
- if (!skip && info.activityInfo.applicationInfo.uid != Process.SYSTEM_UID &&
- r.requiredPermissions != null && r.requiredPermissions.length > 0) {
- for (int i = 0; i < r.requiredPermissions.length; i++) {
- String requiredPermission = r.requiredPermissions[i];
- try {
- perm = AppGlobals.getPackageManager().
- checkPermission(requiredPermission,
- info.activityInfo.applicationInfo.packageName,
- UserHandle
- .getUserId(info.activityInfo.applicationInfo.uid));
- } catch (RemoteException e) {
- perm = PackageManager.PERMISSION_DENIED;
- }
- if (perm != PackageManager.PERMISSION_GRANTED) {
- Slog.w(TAG, "Permission Denial: receiving "
- + r.intent + " to "
- + component.flattenToShortString()
- + " requires " + requiredPermission
- + " due to sender " + r.callerPackage
- + " (uid " + r.callingUid + ")");
- skip = true;
- break;
- }
- int appOp = AppOpsManager.permissionToOpCode(requiredPermission);
- if (appOp != AppOpsManager.OP_NONE && appOp != r.appOp) {
- if (!noteOpForManifestReceiver(appOp, r, info, component)) {
- skip = true;
- break;
- }
- }
- }
- }
- if (!skip && r.appOp != AppOpsManager.OP_NONE) {
- if (!noteOpForManifestReceiver(r.appOp, r, info, component)) {
- skip = true;
- }
- }
boolean isSingleton = false;
try {
isSingleton = mService.isSingleton(info.activityInfo.processName,
@@ -1586,6 +1553,44 @@ public final class BroadcastQueue {
+ info.activityInfo.applicationInfo.uid + " : user is not running");
}
+ if (!skip && info.activityInfo.applicationInfo.uid != Process.SYSTEM_UID &&
+ r.requiredPermissions != null && r.requiredPermissions.length > 0) {
+ for (int i = 0; i < r.requiredPermissions.length; i++) {
+ String requiredPermission = r.requiredPermissions[i];
+ try {
+ perm = AppGlobals.getPackageManager().
+ checkPermission(requiredPermission,
+ info.activityInfo.applicationInfo.packageName,
+ UserHandle
+ .getUserId(info.activityInfo.applicationInfo.uid));
+ } catch (RemoteException e) {
+ perm = PackageManager.PERMISSION_DENIED;
+ }
+ if (perm != PackageManager.PERMISSION_GRANTED) {
+ Slog.w(TAG, "Permission Denial: receiving "
+ + r.intent + " to "
+ + component.flattenToShortString()
+ + " requires " + requiredPermission
+ + " due to sender " + r.callerPackage
+ + " (uid " + r.callingUid + ")");
+ skip = true;
+ break;
+ }
+ int appOp = AppOpsManager.permissionToOpCode(requiredPermission);
+ if (appOp != AppOpsManager.OP_NONE && appOp != r.appOp) {
+ if (!noteOpForManifestReceiver(appOp, r, info, component)) {
+ skip = true;
+ break;
+ }
+ }
+ }
+ }
+ if (!skip && r.appOp != AppOpsManager.OP_NONE) {
+ if (!noteOpForManifestReceiver(r.appOp, r, info, component)) {
+ skip = true;
+ }
+ }
+
if (skip) {
if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST,
"Skipping delivery of ordered [" + mQueueName + "] "
diff --git a/services/core/java/com/android/server/app/GameManagerService.java b/services/core/java/com/android/server/app/GameManagerService.java
index 57de70858179..b103defbbe21 100644
--- a/services/core/java/com/android/server/app/GameManagerService.java
+++ b/services/core/java/com/android/server/app/GameManagerService.java
@@ -34,7 +34,7 @@ import android.app.ActivityManager;
import android.app.GameManager;
import android.app.GameManager.GameMode;
import android.app.IGameManagerService;
-import android.compat.Compatibility;
+import android.app.compat.PackageOverride;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -61,13 +61,12 @@ import android.util.Slog;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.compat.CompatibilityChangeConfig;
+import com.android.internal.compat.CompatibilityOverrideConfig;
import com.android.internal.compat.IPlatformCompat;
import com.android.server.ServiceThread;
import com.android.server.SystemService;
import java.io.FileDescriptor;
-import java.util.HashSet;
import java.util.List;
/**
@@ -87,6 +86,10 @@ public final class GameManagerService extends IGameManagerService.Stub {
static final int REMOVE_SETTINGS = 2;
static final int POPULATE_GAME_MODE_SETTINGS = 3;
static final int WRITE_SETTINGS_DELAY = 10 * 1000; // 10 seconds
+ static final PackageOverride COMPAT_ENABLED = new PackageOverride.Builder().setEnabled(true)
+ .build();
+ static final PackageOverride COMPAT_DISABLED = new PackageOverride.Builder().setEnabled(false)
+ .build();
private final Context mContext;
private final Object mLock = new Object();
@@ -578,17 +581,14 @@ public final class GameManagerService extends IGameManagerService.Stub {
private void disableCompatScale(String packageName) {
final long uid = Binder.clearCallingIdentity();
try {
- final HashSet<Long> disabledSet = new HashSet<>();
- disabledSet.add(DOWNSCALED);
- final CompatibilityChangeConfig changeConfig = new CompatibilityChangeConfig(
- new Compatibility.ChangeConfig(new HashSet<>(), disabledSet));
- // TODO: switch to new API provided by aosp/1599153 once merged
+ final ArrayMap<Long, PackageOverride> overrides = new ArrayMap<>();
+ overrides.put(DOWNSCALED, COMPAT_DISABLED);
+ final CompatibilityOverrideConfig changeConfig = new CompatibilityOverrideConfig(
+ overrides);
try {
- mPlatformCompat.setOverridesForTest(changeConfig, packageName);
- } catch (SecurityException e) {
- Slog.e(TAG, "Missing compat override permission", e);
+ mPlatformCompat.setOverridesOnReleaseBuilds(changeConfig, packageName);
} catch (RemoteException e) {
- Slog.e(TAG, "Failed to call IPlatformCompat#setOverridesForTest", e);
+ Slog.e(TAG, "Failed to call IPlatformCompat#setOverridesOnReleaseBuilds", e);
}
} finally {
Binder.restoreCallingIdentity(uid);
@@ -598,25 +598,20 @@ public final class GameManagerService extends IGameManagerService.Stub {
private void enableCompatScale(String packageName, long scaleId) {
final long uid = Binder.clearCallingIdentity();
try {
- final HashSet<Long> disabledSet = new HashSet<>();
- final HashSet<Long> enabledSet = new HashSet<>();
- disabledSet.add(DOWNSCALE_50);
- disabledSet.add(DOWNSCALE_60);
- disabledSet.add(DOWNSCALE_70);
- disabledSet.add(DOWNSCALE_80);
- disabledSet.add(DOWNSCALE_90);
- disabledSet.remove(scaleId);
- enabledSet.add(DOWNSCALED);
- enabledSet.add(scaleId);
- final CompatibilityChangeConfig changeConfig = new CompatibilityChangeConfig(
- new Compatibility.ChangeConfig(enabledSet, disabledSet));
- // TODO: switch to new API provided by aosp/1599153 once merged
+ final ArrayMap<Long, PackageOverride> overrides = new ArrayMap<>();
+ overrides.put(DOWNSCALED, COMPAT_ENABLED);
+ overrides.put(DOWNSCALE_50, COMPAT_DISABLED);
+ overrides.put(DOWNSCALE_60, COMPAT_DISABLED);
+ overrides.put(DOWNSCALE_70, COMPAT_DISABLED);
+ overrides.put(DOWNSCALE_80, COMPAT_DISABLED);
+ overrides.put(DOWNSCALE_90, COMPAT_DISABLED);
+ overrides.put(scaleId, COMPAT_ENABLED);
+ final CompatibilityOverrideConfig changeConfig = new CompatibilityOverrideConfig(
+ overrides);
try {
- mPlatformCompat.setOverridesForTest(changeConfig, packageName);
- } catch (SecurityException e) {
- Slog.e(TAG, "Missing compat override permission", e);
+ mPlatformCompat.setOverridesOnReleaseBuilds(changeConfig, packageName);
} catch (RemoteException e) {
- Slog.e(TAG, "Failed to call IPlatformCompat#setOverridesForTest", e);
+ Slog.e(TAG, "Failed to call IPlatformCompat#setOverridesOnReleaseBuilds", e);
}
} finally {
Binder.restoreCallingIdentity(uid);
diff --git a/services/core/java/com/android/server/appop/DiscreteRegistry.java b/services/core/java/com/android/server/appop/DiscreteRegistry.java
index e16a6cc6fefc..232005b7559b 100644
--- a/services/core/java/com/android/server/appop/DiscreteRegistry.java
+++ b/services/core/java/com/android/server/appop/DiscreteRegistry.java
@@ -89,6 +89,10 @@ final class DiscreteRegistry {
private static final String PROPERTY_DISCRETE_HISTORY_CUTOFF = "discrete_history_cutoff_millis";
private static final String PROPERTY_DISCRETE_HISTORY_QUANTIZATION =
"discrete_history_quantization_millis";
+ private static final String PROPERTY_DISCRETE_FLAGS = "discrete_history_op_flags";
+ private static final String PROPERTY_DISCRETE_OPS_LIST = "discrete_history_ops_cslist";
+ private static final String DEFAULT_DISCRETE_OPS = OP_CAMERA + "," + OP_RECORD_AUDIO + ","
+ + OP_FINE_LOCATION + "," + OP_COARSE_LOCATION;
private static final long DEFAULT_DISCRETE_HISTORY_CUTOFF = Duration.ofHours(24).toMillis();
private static final long MAXIMUM_DISCRETE_HISTORY_CUTOFF = Duration.ofDays(30).toMillis();
private static final long DEFAULT_DISCRETE_HISTORY_QUANTIZATION =
@@ -96,6 +100,9 @@ final class DiscreteRegistry {
private static long sDiscreteHistoryCutoff;
private static long sDiscreteHistoryQuantization;
+ private static int[] sDiscreteOps;
+ private static int sDiscreteFlags;
+
private static final String TAG_HISTORY = "h";
private static final String ATTR_VERSION = "v";
@@ -155,6 +162,10 @@ final class DiscreteRegistry {
PROPERTY_DISCRETE_HISTORY_CUTOFF, DEFAULT_DISCRETE_HISTORY_CUTOFF);
sDiscreteHistoryQuantization = DeviceConfig.getLong(DeviceConfig.NAMESPACE_PRIVACY,
PROPERTY_DISCRETE_HISTORY_QUANTIZATION, DEFAULT_DISCRETE_HISTORY_QUANTIZATION);
+ sDiscreteFlags = DeviceConfig.getInt(DeviceConfig.NAMESPACE_PRIVACY,
+ PROPERTY_DISCRETE_FLAGS, OP_FLAGS_DISCRETE);
+ sDiscreteOps = parseOpsList(DeviceConfig.getString(DeviceConfig.NAMESPACE_PRIVACY,
+ PROPERTY_DISCRETE_OPS_LIST, DEFAULT_DISCRETE_OPS));
}
private void setDiscreteHistoryParameters(DeviceConfig.Properties p) {
@@ -174,6 +185,13 @@ final class DiscreteRegistry {
sDiscreteHistoryQuantization);
}
}
+ if (p.getKeyset().contains(PROPERTY_DISCRETE_FLAGS)) {
+ sDiscreteFlags = p.getInt(PROPERTY_DISCRETE_FLAGS, OP_FLAGS_DISCRETE);
+ }
+ if (p.getKeyset().contains(PROPERTY_DISCRETE_OPS_LIST)) {
+ sDiscreteOps = parseOpsList(p.getString(PROPERTY_DISCRETE_OPS_LIST,
+ DEFAULT_DISCRETE_OPS));
+ }
}
private void createDiscreteAccessDir() {
@@ -323,28 +341,13 @@ final class DiscreteRegistry {
}
public static boolean isDiscreteOp(int op, int uid, @AppOpsManager.OpFlags int flags) {
- if (!isDiscreteOp(op)) {
+ if (!ArrayUtils.contains(sDiscreteOps, op)) {
return false;
}
- if (!isDiscreteUid(uid)) {
- return false;
- }
- if ((flags & (OP_FLAGS_DISCRETE)) == 0) {
- return false;
- }
- return true;
- }
-
- static boolean isDiscreteOp(int op) {
- if (op != OP_CAMERA && op != OP_RECORD_AUDIO && op != OP_FINE_LOCATION
- && op != OP_COARSE_LOCATION) {
+ if (uid < Process.FIRST_APPLICATION_UID) {
return false;
}
- return true;
- }
-
- static boolean isDiscreteUid(int uid) {
- if (uid < Process.FIRST_APPLICATION_UID) {
+ if ((flags & (sDiscreteFlags)) == 0) {
return false;
}
return true;
@@ -876,6 +879,26 @@ final class DiscreteRegistry {
}
}
+ private static int[] parseOpsList(String opsList) {
+ String[] strArr;
+ if (opsList.isEmpty()) {
+ strArr = new String[0];
+ } else {
+ strArr = opsList.split(",");
+ }
+ int nOps = strArr.length;
+ int[] result = new int[nOps];
+ try {
+ for (int i = 0; i < nOps; i++) {
+ result[i] = Integer.parseInt(strArr[i]);
+ }
+ } catch (NumberFormatException e) {
+ Slog.e(TAG, "Failed to parse Discrete ops list: " + e.getMessage());
+ return parseOpsList(DEFAULT_DISCRETE_OPS);
+ }
+ return result;
+ }
+
private static List<DiscreteOpEvent> stableListMerge(List<DiscreteOpEvent> a,
List<DiscreteOpEvent> b) {
int nA = a.size();
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 16a962683707..2de2fdf1f188 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -128,6 +128,7 @@ import android.os.UserHandle;
import android.os.UserManager;
import android.os.VibrationEffect;
import android.os.Vibrator;
+import android.os.VibratorManager;
import android.provider.Settings;
import android.provider.Settings.System;
import android.service.notification.ZenModeConfig;
@@ -1092,6 +1093,33 @@ public class AudioService extends IAudioService.Stub
}
}
+ private void updateVibratorInfos() {
+ VibratorManager vibratorManager = mContext.getSystemService(VibratorManager.class);
+ if (vibratorManager == null) {
+ Slog.e(TAG, "Vibrator manager is not found");
+ return;
+ }
+ int[] vibratorIds = vibratorManager.getVibratorIds();
+ if (vibratorIds.length == 0) {
+ Slog.d(TAG, "No vibrator found");
+ return;
+ }
+ List<Vibrator> vibrators = new ArrayList<>(vibratorIds.length);
+ for (int id : vibratorIds) {
+ Vibrator vibrator = vibratorManager.getVibrator(id);
+ if (vibrator != null) {
+ vibrators.add(vibrator);
+ } else {
+ Slog.w(TAG, "Vibrator(" + id + ") is not found");
+ }
+ }
+ if (vibrators.isEmpty()) {
+ Slog.w(TAG, "Cannot find any available vibrator");
+ return;
+ }
+ AudioSystem.setVibratorInfos(vibrators);
+ }
+
public void onSystemReady() {
mSystemReady = true;
scheduleLoadSoundEffects();
@@ -1149,6 +1177,8 @@ public class AudioService extends IAudioService.Stub
setMicMuteFromSwitchInput();
initMinStreamVolumeWithoutModifyAudioSettings();
+
+ updateVibratorInfos();
}
RoleObserver mRoleObserver;
@@ -1231,7 +1261,7 @@ public class AudioService extends IAudioService.Stub
// Restore call state
synchronized (mDeviceBroker.mSetModeLock) {
onUpdateAudioMode(AudioSystem.MODE_CURRENT, android.os.Process.myPid(),
- mContext.getPackageName());
+ mContext.getPackageName(), true /*force*/);
}
final int forSys;
synchronized (mSettingsLock) {
@@ -1341,6 +1371,9 @@ public class AudioService extends IAudioService.Stub
setMicrophoneMuteNoCallerCheck(getCurrentUserId()); // will also update the mic mute cache
setMicMuteFromSwitchInput();
+
+ // Restore vibrator info
+ updateVibratorInfos();
}
private void onReinitVolumes(@NonNull String caller) {
@@ -4614,7 +4647,8 @@ public class AudioService extends IAudioService.Stub
}
@GuardedBy("mDeviceBroker.mSetModeLock")
- void onUpdateAudioMode(int requestedMode, int requesterPid, String requesterPackage) {
+ void onUpdateAudioMode(int requestedMode, int requesterPid, String requesterPackage,
+ boolean force) {
if (requestedMode == AudioSystem.MODE_CURRENT) {
requestedMode = getMode();
}
@@ -4631,7 +4665,7 @@ public class AudioService extends IAudioService.Stub
Log.v(TAG, "onUpdateAudioMode() new mode: " + mode + ", current mode: "
+ mMode.get() + " requested mode: " + requestedMode);
}
- if (mode != mMode.get()) {
+ if (mode != mMode.get() || force) {
final long identity = Binder.clearCallingIdentity();
int status = mAudioSystem.setPhoneState(mode, uid);
Binder.restoreCallingIdentity(identity);
@@ -7402,8 +7436,8 @@ public class AudioService extends IAudioService.Stub
h.setPlaybackActive(mPlaybackMonitor.isPlaybackActiveForUid(h.getUid()));
h.setRecordingActive(mRecordMonitor.isRecordingActiveForUid(h.getUid()));
if (wasActive != h.isActive()) {
- onUpdateAudioMode(AudioSystem.MODE_CURRENT,
- android.os.Process.myPid(), mContext.getPackageName());
+ onUpdateAudioMode(AudioSystem.MODE_CURRENT, android.os.Process.myPid(),
+ mContext.getPackageName(), false /*force*/);
}
}
break;
@@ -7428,7 +7462,7 @@ public class AudioService extends IAudioService.Stub
case MSG_UPDATE_AUDIO_MODE:
synchronized (mDeviceBroker.mSetModeLock) {
- onUpdateAudioMode(msg.arg1, msg.arg2, (String) msg.obj);
+ onUpdateAudioMode(msg.arg1, msg.arg2, (String) msg.obj, false /*force*/);
}
break;
}
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
index 729667917024..88e47a0efd83 100644
--- a/services/core/java/com/android/server/biometrics/AuthService.java
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
@@ -48,10 +48,12 @@ import android.hardware.face.IFaceService;
import android.hardware.fingerprint.IFingerprintService;
import android.hardware.iris.IIrisService;
import android.os.Binder;
+import android.os.Build;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserHandle;
+import android.provider.Settings;
import android.util.Slog;
import com.android.internal.R;
@@ -70,6 +72,9 @@ import java.util.List;
public class AuthService extends SystemService {
private static final String TAG = "AuthService";
private static final boolean DEBUG = false;
+ private static final String SETTING_HIDL_DISABLED =
+ "com.android.server.biometrics.AuthService.hidlDisabled";
+ private static final int DEFAULT_HIDL_DISABLED = 0;
private final Injector mInjector;
@@ -142,6 +147,18 @@ public class AuthService extends SystemService {
public AppOpsManager getAppOps(Context context) {
return context.getSystemService(AppOpsManager.class);
}
+
+ /**
+ * Allows to ignore HIDL HALs on debug builds based on a secure setting.
+ */
+ @VisibleForTesting
+ public boolean isHidlDisabled(Context context) {
+ if (Build.IS_ENG || Build.IS_USERDEBUG) {
+ return Settings.Secure.getIntForUser(context.getContentResolver(),
+ SETTING_HIDL_DISABLED, DEFAULT_HIDL_DISABLED, UserHandle.USER_CURRENT) == 1;
+ }
+ return false;
+ }
}
private final class AuthServiceImpl extends IAuthService.Stub {
@@ -561,12 +578,14 @@ public class AuthService extends SystemService {
public void onStart() {
mBiometricService = mInjector.getBiometricService();
- final String[] configs = mInjector.getConfiguration(getContext());
- for (String config : configs) {
- try {
- registerAuthenticator(new SensorConfig(config));
- } catch (RemoteException e) {
- Slog.e(TAG, "Remote exception", e);
+ if (!mInjector.isHidlDisabled(getContext())) {
+ final String[] configs = mInjector.getConfiguration(getContext());
+ for (String config : configs) {
+ try {
+ registerAuthenticator(new SensorConfig(config));
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Remote exception", e);
+ }
}
}
diff --git a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java
index 972071c6f3ee..24e867afedd7 100644
--- a/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java
+++ b/services/core/java/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProvider.java
@@ -52,7 +52,6 @@ import com.android.server.biometrics.Utils;
import com.android.server.biometrics.sensors.AuthenticationClient;
import com.android.server.biometrics.sensors.BaseClientMonitor;
import com.android.server.biometrics.sensors.ClientMonitorCallbackConverter;
-import com.android.server.biometrics.sensors.HalClientMonitor;
import com.android.server.biometrics.sensors.InvalidationRequesterClient;
import com.android.server.biometrics.sensors.LockoutResetDispatcher;
import com.android.server.biometrics.sensors.PerformanceTracker;
@@ -153,7 +152,10 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
prop.commonProps.maxEnrollmentsPerUser,
componentInfo,
prop.sensorType,
- true /* resetLockoutRequiresHardwareAuthToken */);
+ true /* resetLockoutRequiresHardwareAuthToken */,
+ prop.sensorLocations[0].sensorLocationX,
+ prop.sensorLocations[0].sensorLocationY,
+ prop.sensorLocations[0].sensorRadius);
final Sensor sensor = new Sensor(getTag() + "/" + sensorId, this, mContext, mHandler,
internalProp, gestureAvailabilityDispatcher);
@@ -388,7 +390,7 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
public void scheduleRemove(int sensorId, @NonNull IBinder token,
@NonNull IFingerprintServiceReceiver receiver, int fingerId, int userId,
@NonNull String opPackageName) {
- scheduleRemoveSpecifiedIds(sensorId, token, new int[] {fingerId}, userId, receiver,
+ scheduleRemoveSpecifiedIds(sensorId, token, new int[]{fingerId}, userId, receiver,
opPackageName);
}
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index 75aa6c97d323..2bc81cb56996 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -234,7 +234,6 @@ public class ClipboardService extends SystemService {
private final AppOpsManager mAppOps;
private final ContentCaptureManagerInternal mContentCaptureInternal;
private final AutofillManagerInternal mAutofillInternal;
- private final TextClassificationManager mTextClassificationManager;
private final IBinder mPermissionOwner;
private final HostClipboardMonitor mHostClipboardMonitor;
private final Handler mWorkerHandler;
@@ -265,8 +264,6 @@ public class ClipboardService extends SystemService {
mAppOps = (AppOpsManager) getContext().getSystemService(Context.APP_OPS_SERVICE);
mContentCaptureInternal = LocalServices.getService(ContentCaptureManagerInternal.class);
mAutofillInternal = LocalServices.getService(AutofillManagerInternal.class);
- mTextClassificationManager = (TextClassificationManager)
- getContext().getSystemService(Context.TEXT_CLASSIFICATION_SERVICE);
final IBinder permOwner = mUgmInternal.newUriPermissionOwner("clipboard");
mPermissionOwner = permOwner;
if (IS_EMULATOR) {
@@ -659,12 +656,12 @@ public class ClipboardService extends SystemService {
}
}
+ final int userId = UserHandle.getUserId(uid);
if (clip != null) {
- startClassificationLocked(clip);
+ startClassificationLocked(clip, userId);
}
// Update this user
- final int userId = UserHandle.getUserId(uid);
setPrimaryClipInternalLocked(getClipboardLocked(userId), clip, uid, sourcePackage);
// Update related users
@@ -763,14 +760,15 @@ public class ClipboardService extends SystemService {
}
@GuardedBy("mLock")
- private void startClassificationLocked(@NonNull ClipData clip) {
+ private void startClassificationLocked(@NonNull ClipData clip, @UserIdInt int userId) {
TextClassifier classifier;
final long ident = Binder.clearCallingIdentity();
try {
- classifier = mTextClassificationManager.createTextClassificationSession(
- new TextClassificationContext.Builder(
- getContext().getPackageName(),
- TextClassifier.WIDGET_TYPE_CLIPBOARD
+ classifier = createTextClassificationManagerAsUser(userId)
+ .createTextClassificationSession(
+ new TextClassificationContext.Builder(
+ getContext().getPackageName(),
+ TextClassifier.WIDGET_TYPE_CLIPBOARD
).build()
);
} finally {
@@ -1125,4 +1123,8 @@ public class ClipboardService extends SystemService {
&& item.getIntent() == null;
}
+ private TextClassificationManager createTextClassificationManagerAsUser(@UserIdInt int userId) {
+ Context context = getContext().createContextAsUser(UserHandle.of(userId), /* flags= */ 0);
+ return context.getSystemService(TextClassificationManager.class);
+ }
}
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 3ac11da5fb3b..ed8ea186b1d4 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -3541,15 +3541,16 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
InputBindResult res = null;
// We shows the IME when the system allows the IME focused target window to restore the
// IME visibility (e.g. switching to the app task when last time the IME is visible).
- if (isTextEditor && mWindowManagerInternal.shouldRestoreImeVisibility(windowToken)) {
- if (attribute != null) {
- res = startInputUncheckedLocked(cs, inputContext, missingMethods,
- attribute, startInputFlags, startInputReason);
- showCurrentInputLocked(windowToken, InputMethodManager.SHOW_IMPLICIT, null,
- SoftInputShowHideReason.SHOW_RESTORE_IME_VISIBILITY);
- } else {
- res = InputBindResult.NULL_EDITOR_INFO;
- }
+ // Note that we don't restore IME visibility for some cases (e.g. when the soft input
+ // state is ALWAYS_HIDDEN or STATE_HIDDEN with forward navigation).
+ // Because the app might leverage these flags to hide soft-keyboard with showing their own
+ // UI for input.
+ if (isTextEditor && attribute != null
+ && shouldRestoreImeVisibility(windowToken, softInputMode)) {
+ res = startInputUncheckedLocked(cs, inputContext, missingMethods, attribute,
+ startInputFlags, startInputReason);
+ showCurrentInputLocked(windowToken, InputMethodManager.SHOW_IMPLICIT, null,
+ SoftInputShowHideReason.SHOW_RESTORE_IME_VISIBILITY);
return res;
}
@@ -3673,6 +3674,19 @@ public class InputMethodManagerService extends IInputMethodManager.Stub
return res;
}
+ private boolean shouldRestoreImeVisibility(IBinder windowToken,
+ @SoftInputModeFlags int softInputMode) {
+ switch (softInputMode & LayoutParams.SOFT_INPUT_MASK_STATE) {
+ case LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN:
+ return false;
+ case LayoutParams.SOFT_INPUT_STATE_HIDDEN:
+ if ((softInputMode & LayoutParams.SOFT_INPUT_IS_FORWARD_NAVIGATION) != 0) {
+ return false;
+ }
+ }
+ return mWindowManagerInternal.shouldRestoreImeVisibility(windowToken);
+ }
+
private boolean isImeVisible() {
return (mImeWindowVis & InputMethodService.IME_VISIBLE) != 0;
}
diff --git a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
index 31edf43679e9..5286bce67b37 100644
--- a/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
+++ b/services/core/java/com/android/server/media/MediaRouter2ServiceImpl.java
@@ -113,6 +113,22 @@ class MediaRouter2ServiceImpl {
////////////////////////////////////////////////////////////////
@NonNull
+ public void checkModifyAudioRoutingPermission() {
+ final int pid = Binder.getCallingPid();
+ final int uid = Binder.getCallingUid();
+ final long token = Binder.clearCallingIdentity();
+
+ try {
+ if (mContext.checkPermission(android.Manifest.permission.MODIFY_AUDIO_ROUTING, pid, uid)
+ != PackageManager.PERMISSION_GRANTED) {
+ throw new SecurityException("Must hold the MODIFY_AUDIO_ROUTING permission.");
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ @NonNull
public List<MediaRoute2Info> getSystemRoutes() {
final int uid = Binder.getCallingUid();
final int userId = UserHandle.getUserHandleForUid(uid).getIdentifier();
diff --git a/services/core/java/com/android/server/media/MediaRouterService.java b/services/core/java/com/android/server/media/MediaRouterService.java
index b6d6cc48d0cd..b85cea7a637d 100644
--- a/services/core/java/com/android/server/media/MediaRouterService.java
+++ b/services/core/java/com/android/server/media/MediaRouterService.java
@@ -438,6 +438,12 @@ public final class MediaRouterService extends IMediaRouterService.Stub
// Binder call
@Override
+ public void checkModifyAudioRoutingPermission() {
+ mService2.checkModifyAudioRoutingPermission();
+ }
+
+ // Binder call
+ @Override
public List<MediaRoute2Info> getSystemRoutes() {
return mService2.getSystemRoutes();
}
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 40eefca096b9..7bd3ee2b33e3 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -3198,23 +3198,19 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
// Verify they're not lying about package name
mAppOps.checkPackage(callingUid, callingPackage);
- final SubscriptionManager sm;
- final SubscriptionInfo si;
final PersistableBundle config;
+ final TelephonyManager tm;
final long token = Binder.clearCallingIdentity();
try {
- sm = mContext.getSystemService(SubscriptionManager.class);
- si = sm.getActiveSubscriptionInfo(subId);
config = mCarrierConfigManager.getConfigForSubId(subId);
+ tm = mContext.getSystemService(TelephonyManager.class);
} finally {
Binder.restoreCallingIdentity(token);
}
- // First check: is caller the CarrierService?
- if (si != null) {
- if (si.isEmbedded() && sm.canManageSubscription(si, callingPackage)) {
- return;
- }
+ // First check: does caller have carrier privilege?
+ if (tm != null && tm.hasCarrierPrivileges(subId)) {
+ return;
}
// Second check: has the CarrierService delegated access?
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 671fccf0e9ef..7b71be98834c 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -4132,6 +4132,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
}
private void destroyInternal() {
+ final IncrementalFileStorages incrementalFileStorages;
synchronized (mLock) {
mSealed = true;
if (!params.isStaged) {
@@ -4144,16 +4145,17 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
for (FileBridge bridge : mBridges) {
bridge.forceClose();
}
- if (mIncrementalFileStorages != null) {
- mIncrementalFileStorages.cleanUp();
- mIncrementalFileStorages = null;
- }
+ incrementalFileStorages = mIncrementalFileStorages;
+ mIncrementalFileStorages = null;
}
// For staged sessions, we don't delete the directory where the packages have been copied,
// since these packages are supposed to be read on reboot.
// Those dirs are deleted when the staged session has reached a final state.
if (stageDir != null && !params.isStaged) {
try {
+ if (incrementalFileStorages != null) {
+ incrementalFileStorages.cleanUp();
+ }
mPm.mInstaller.rmPackageDir(stageDir.getAbsolutePath());
} catch (InstallerException ignored) {
}
@@ -4171,13 +4173,15 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
}
private void cleanStageDir() {
+ final IncrementalFileStorages incrementalFileStorages;
synchronized (mLock) {
- if (mIncrementalFileStorages != null) {
- mIncrementalFileStorages.cleanUp();
- mIncrementalFileStorages = null;
- }
+ incrementalFileStorages = mIncrementalFileStorages;
+ mIncrementalFileStorages = null;
}
try {
+ if (incrementalFileStorages != null) {
+ incrementalFileStorages.cleanUp();
+ }
mPm.mInstaller.rmPackageDir(stageDir.getAbsolutePath());
} catch (InstallerException ignored) {
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 1279025b1485..cb68cc9d5e45 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -12580,10 +12580,21 @@ public class PackageManagerService extends IPackageManager.Stub
@GuardedBy("mInstallLock")
void removeCodePathLI(File codePath) {
if (codePath.isDirectory()) {
- File codePathParent = codePath.getParentFile();
+ final File codePathParent = codePath.getParentFile();
+ final boolean needRemoveParent = codePathParent.getName().startsWith(RANDOM_DIR_PREFIX);
try {
+ final boolean isIncremental = (mIncrementalManager != null && isIncrementalPath(
+ codePath.getAbsolutePath()));
+ if (isIncremental) {
+ if (needRemoveParent) {
+ mIncrementalManager.rmPackageDir(codePathParent);
+ } else {
+ mIncrementalManager.rmPackageDir(codePath);
+ }
+ }
+
mInstaller.rmPackageDir(codePath.getAbsolutePath());
- if (codePathParent.getName().startsWith(RANDOM_DIR_PREFIX)) {
+ if (needRemoveParent) {
mInstaller.rmPackageDir(codePathParent.getAbsolutePath());
removeCachedResult(codePathParent);
}
@@ -18126,16 +18137,7 @@ public class PackageManagerService extends IPackageManager.Stub
if (codeFile == null || !codeFile.exists()) {
return false;
}
-
- final boolean isIncremental = (mIncrementalManager != null && isIncrementalPath(
- codeFile.getAbsolutePath()));
-
removeCodePathLI(codeFile);
-
- if (isIncremental) {
- mIncrementalManager.onPackageRemoved(codeFile);
- }
-
return true;
}
@@ -24776,7 +24778,7 @@ public class PackageManagerService extends IPackageManager.Stub
final int fileToDeleteCount = filesToDelete.size();
for (int i = 0; i < fileToDeleteCount; i++) {
File fileToDelete = filesToDelete.get(i);
- logCriticalInfo(Log.WARN, "Destroying orphaned" + fileToDelete);
+ logCriticalInfo(Log.WARN, "Destroying orphaned at " + fileToDelete);
synchronized (mInstallLock) {
removeCodePathLI(fileToDelete);
}
diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java
index b02a21da3d69..19c56f82d7bf 100644
--- a/services/core/java/com/android/server/pm/ShortcutPackage.java
+++ b/services/core/java/com/android/server/pm/ShortcutPackage.java
@@ -19,33 +19,18 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.Person;
-import android.app.appsearch.AppSearchManager;
-import android.app.appsearch.AppSearchResult;
import android.app.appsearch.AppSearchSession;
-import android.app.appsearch.GenericDocument;
-import android.app.appsearch.GetByUriRequest;
import android.app.appsearch.PackageIdentifier;
-import android.app.appsearch.PutDocumentsRequest;
-import android.app.appsearch.RemoveByUriRequest;
-import android.app.appsearch.ReportUsageRequest;
-import android.app.appsearch.SearchResult;
-import android.app.appsearch.SearchResults;
-import android.app.appsearch.SearchSpec;
-import android.app.appsearch.SetSchemaRequest;
import android.content.ComponentName;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.LocusId;
-import android.content.pm.AppSearchPerson;
-import android.content.pm.AppSearchShortcutInfo;
import android.content.pm.PackageInfo;
import android.content.pm.ShortcutInfo;
import android.content.pm.ShortcutManager;
import android.content.res.Resources;
import android.graphics.drawable.Icon;
-import android.os.Binder;
import android.os.PersistableBundle;
-import android.os.StrictMode;
import android.text.format.Formatter;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -58,10 +43,8 @@ import android.util.Xml;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.infra.AndroidFuture;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.CollectionUtils;
-import com.android.internal.util.ConcurrentUtils;
import com.android.internal.util.Preconditions;
import com.android.internal.util.XmlUtils;
import com.android.server.pm.ShortcutService.DumpFilter;
@@ -81,17 +64,13 @@ import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
-import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
-import java.util.function.Function;
import java.util.function.Predicate;
/**
@@ -158,9 +137,9 @@ class ShortcutPackage extends ShortcutPackageItem {
private static final String KEY_BITMAP_BYTES = "bitmapBytes";
/**
- * An temp in-memory copy of shortcuts for this package that was loaded from xml, keyed on IDs.
+ * All the shortcuts from the package, keyed on IDs.
*/
- final ArraySet<ShortcutInfo> mShortcuts = new ArraySet<>();
+ private final ArrayMap<String, ShortcutInfo> mShortcuts = new ArrayMap<>();
/**
* All the share targets from the package
@@ -220,9 +199,7 @@ class ShortcutPackage extends ShortcutPackageItem {
}
public int getShortcutCount() {
- final int[] count = new int[1];
- forEachShortcut(si -> count[0]++);
- return count[0];
+ return mShortcuts.size();
}
@Override
@@ -236,20 +213,17 @@ class ShortcutPackage extends ShortcutPackageItem {
// - Unshadow all shortcuts.
// - Set disabled reason.
// - Disable if needed.
- forEachShortcutMutateIf(si -> {
- if (!si.hasFlags(ShortcutInfo.FLAG_SHADOW)
- && si.getDisabledReason() == restoreBlockReason
- && restoreBlockReason == ShortcutInfo.DISABLED_REASON_NOT_DISABLED) {
- return false;
- }
- si.clearFlags(ShortcutInfo.FLAG_SHADOW);
-
- si.setDisabledReason(restoreBlockReason);
- if (restoreBlockReason != ShortcutInfo.DISABLED_REASON_NOT_DISABLED) {
- si.addFlags(ShortcutInfo.FLAG_DISABLED);
- }
- return true;
- });
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ ShortcutInfo si = mShortcuts.valueAt(i);
+ mutateShortcut(si.getId(), si, shortcut -> {
+ shortcut.clearFlags(ShortcutInfo.FLAG_SHADOW);
+
+ shortcut.setDisabledReason(restoreBlockReason);
+ if (restoreBlockReason != ShortcutInfo.DISABLED_REASON_NOT_DISABLED) {
+ shortcut.addFlags(ShortcutInfo.FLAG_DISABLED);
+ }
+ });
+ }
// Because some launchers may not have been restored (e.g. allowBackup=false),
// we need to re-calculate the pinned shortcuts.
refreshPinnedFlags();
@@ -260,7 +234,7 @@ class ShortcutPackage extends ShortcutPackageItem {
*/
@Nullable
public ShortcutInfo findShortcutById(String id) {
- return getShortcutById(id);
+ return mShortcuts.get(id);
}
public boolean isShortcutExistsAndInvisibleToPublisher(String id) {
@@ -326,9 +300,8 @@ class ShortcutPackage extends ShortcutPackageItem {
* Delete a shortcut by ID. This will *always* remove it even if it's immutable or invisible.
*/
private ShortcutInfo forceDeleteShortcutInner(@NonNull String id) {
- final ShortcutInfo shortcut = getShortcutById(id);
+ final ShortcutInfo shortcut = mShortcuts.remove(id);
if (shortcut != null) {
- removeShortcut(id);
mShortcutUser.mService.removeIconLocked(shortcut);
shortcut.clearFlags(ShortcutInfo.FLAG_DYNAMIC | ShortcutInfo.FLAG_PINNED
| ShortcutInfo.FLAG_MANIFEST | ShortcutInfo.FLAG_CACHED_ALL);
@@ -345,10 +318,10 @@ class ShortcutPackage extends ShortcutPackageItem {
forceDeleteShortcutInner(newShortcut.getId());
+ // Extract Icon and update the icon res ID and the bitmap path.
s.saveIconAndFixUpShortcutLocked(newShortcut);
s.fixUpShortcutResourceNamesAndValues(newShortcut);
-
- saveShortcut(newShortcut);
+ mShortcuts.put(newShortcut.getId(), newShortcut);
}
/**
@@ -437,16 +410,6 @@ class ShortcutPackage extends ShortcutPackageItem {
}
forceReplaceShortcutInner(newShortcut);
- // TODO: Report usage can be filed async
- runInAppSearch(session -> {
- final AndroidFuture<Boolean> future = new AndroidFuture<>();
- session.reportUsage(
- new ReportUsageRequest.Builder(getPackageName())
- .setUri(newShortcut.getId()).build(),
- mShortcutUser.mExecutor, result -> future.complete(result.isSuccess()));
- return future;
- });
-
return deleted;
}
@@ -456,12 +419,19 @@ class ShortcutPackage extends ShortcutPackageItem {
* @return List of removed shortcuts.
*/
private List<ShortcutInfo> removeOrphans() {
- final List<ShortcutInfo> removeList = new ArrayList<>(1);
- forEachShortcut(si -> {
- if (si.isAlive()) return;
+ List<ShortcutInfo> removeList = null;
+
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
+
+ if (si.isAlive()) continue;
+
+ if (removeList == null) {
+ removeList = new ArrayList<>();
+ }
removeList.add(si);
- });
- if (!removeList.isEmpty()) {
+ }
+ if (removeList != null) {
for (int i = removeList.size() - 1; i >= 0; i--) {
forceDeleteShortcutInner(removeList.get(i).getId());
}
@@ -478,19 +448,20 @@ class ShortcutPackage extends ShortcutPackageItem {
public List<ShortcutInfo> deleteAllDynamicShortcuts(boolean ignoreInvisible) {
final long now = mShortcutUser.mService.injectCurrentTimeMillis();
- final boolean[] changed = new boolean[1];
- forEachShortcutMutateIf(si -> {
+ boolean changed = false;
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
if (si.isDynamic() && (!ignoreInvisible || si.isVisibleToPublisher())) {
- changed[0] = true;
+ changed = true;
- si.setTimestamp(now);
- si.clearFlags(ShortcutInfo.FLAG_DYNAMIC);
- si.setRank(0); // It may still be pinned, so clear the rank.
- return true;
+ mutateShortcut(si.getId(), si, shortcut -> {
+ shortcut.setTimestamp(now);
+ shortcut.clearFlags(ShortcutInfo.FLAG_DYNAMIC);
+ shortcut.setRank(0); // It may still be pinned, so clear the rank.
+ });
}
- return false;
- });
- if (changed[0]) {
+ }
+ if (changed) {
return removeOrphans();
}
return null;
@@ -635,6 +606,11 @@ class ShortcutPackage extends ShortcutPackageItem {
* <p>Then remove all shortcuts that are not dynamic and no longer pinned either.
*/
public void refreshPinnedFlags() {
+ final List<ShortcutInfo> shortcuts = new ArrayList<>(mShortcuts.values());
+ final Map<String, ShortcutInfo> shortcutMap = new ArrayMap<>(shortcuts.size());
+ for (ShortcutInfo si : shortcuts) {
+ shortcutMap.put(si.getId(), si);
+ }
final Set<String> pinnedShortcuts = new ArraySet<>();
// First, for the pinned set for each launcher, keep track of their id one by one.
@@ -644,20 +620,31 @@ class ShortcutPackage extends ShortcutPackageItem {
if (pinned == null || pinned.size() == 0) {
return;
}
- pinnedShortcuts.addAll(pinned);
+ for (int i = pinned.size() - 1; i >= 0; i--) {
+ final String id = pinned.valueAt(i);
+ final ShortcutInfo si = shortcutMap.get(id);
+ if (si == null) {
+ // This happens if a launcher pinned shortcuts from this package, then backup&
+ // restored, but this package doesn't allow backing up.
+ // In that case the launcher ends up having a dangling pinned shortcuts.
+ // That's fine, when the launcher is restored, we'll fix it.
+ continue;
+ }
+ pinnedShortcuts.add(si.getId());
+ }
});
// Then, update the pinned state if necessary
- forEachShortcutMutateIf(si -> {
+ for (int i = shortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = shortcuts.get(i);
if (pinnedShortcuts.contains(si.getId()) && !si.isPinned()) {
- si.addFlags(ShortcutInfo.FLAG_PINNED);
- return true;
+ mutateShortcut(si.getId(), si,
+ shortcut -> shortcut.addFlags(ShortcutInfo.FLAG_PINNED));
}
if (!pinnedShortcuts.contains(si.getId()) && si.isPinned()) {
- si.clearFlags(ShortcutInfo.FLAG_PINNED);
- return true;
+ mutateShortcut(si.getId(), si, shortcut ->
+ shortcut.clearFlags(ShortcutInfo.FLAG_PINNED));
}
- return false;
- });
+ }
// Lastly, remove the ones that are no longer pinned, cached nor dynamic.
removeOrphans();
@@ -772,7 +759,9 @@ class ShortcutPackage extends ShortcutPackageItem {
final ArraySet<String> pinnedByCallerSet = (callingLauncher == null) ? null
: s.getLauncherShortcutsLocked(callingLauncher, getPackageUserId(), launcherUserId)
.getPinnedShortcutIds(getPackageName(), getPackageUserId());
- forEachShortcut(si -> {
+
+ for (int i = 0; i < mShortcuts.size(); i++) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
// Need to adjust PINNED flag depending on the caller.
// Basically if the caller is a launcher (callingLauncher != null) and the launcher
// isn't pinning it, then we need to clear PINNED for this caller.
@@ -782,7 +771,7 @@ class ShortcutPackage extends ShortcutPackageItem {
if (!getPinnedByAnyLauncher) {
if (si.isFloating() && !si.isCached()) {
if (!isPinnedByCaller) {
- return;
+ continue;
}
}
}
@@ -802,7 +791,7 @@ class ShortcutPackage extends ShortcutPackageItem {
}
result.add(clone);
}
- });
+ }
}
public void resetThrottling() {
@@ -872,7 +861,7 @@ class ShortcutPackage extends ShortcutPackageItem {
* the app's Xml resource.
*/
int getSharingShortcutCount() {
- if (getShortcutCount() == 0 || mShareTargets.isEmpty()) {
+ if (mShortcuts.isEmpty() || mShareTargets.isEmpty()) {
return 0;
}
@@ -910,12 +899,14 @@ class ShortcutPackage extends ShortcutPackageItem {
* Return the filenames (excluding path names) of icon bitmap files from this package.
*/
public ArraySet<String> getUsedBitmapFiles() {
- final ArraySet<String> usedFiles = new ArraySet<>(1);
- forEachShortcut(si -> {
+ final ArraySet<String> usedFiles = new ArraySet<>(mShortcuts.size());
+
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
if (si.getBitmapPath() != null) {
usedFiles.add(getFileName(si.getBitmapPath()));
}
- });
+ }
return usedFiles;
}
@@ -932,29 +923,30 @@ class ShortcutPackage extends ShortcutPackageItem {
* @return false if any of the target activities are no longer enabled.
*/
private boolean areAllActivitiesStillEnabled() {
+ if (mShortcuts.size() == 0) {
+ return true;
+ }
final ShortcutService s = mShortcutUser.mService;
// Normally the number of target activities is 1 or so, so no need to use a complex
// structure like a set.
final ArrayList<ComponentName> checked = new ArrayList<>(4);
- final boolean[] reject = new boolean[1];
- forEachShortcutStopWhen(si -> {
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
final ComponentName activity = si.getActivity();
if (checked.contains(activity)) {
- return false; // Already checked.
+ continue; // Already checked.
}
checked.add(activity);
if ((activity != null)
&& !s.injectIsActivityEnabledAndExported(activity, getOwnerUserId())) {
- reject[0] = true;
- return true; // Found at least 1 activity is disabled, so skip the rest.
+ return false;
}
- return false;
- });
- return !reject[0];
+ }
+ return true;
}
/**
@@ -1037,32 +1029,32 @@ class ShortcutPackage extends ShortcutPackageItem {
// See if there are any shortcuts that were prevented restoring because the app was of a
// lower version, and re-enable them.
- forEachShortcutMutateIf(si -> {
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
if (si.getDisabledReason() != ShortcutInfo.DISABLED_REASON_VERSION_LOWER) {
- return false;
+ continue;
}
if (getPackageInfo().getBackupSourceVersionCode() > newVersionCode) {
if (ShortcutService.DEBUG) {
Slog.d(TAG, String.format("Shortcut %s require version %s, still not restored.",
si.getId(), getPackageInfo().getBackupSourceVersionCode()));
}
- return false;
+ continue;
}
Slog.i(TAG, String.format("Restoring shortcut: %s", si.getId()));
- if (si.hasFlags(ShortcutInfo.FLAG_DISABLED)
- || si.getDisabledReason() != ShortcutInfo.DISABLED_REASON_NOT_DISABLED) {
- si.clearFlags(ShortcutInfo.FLAG_DISABLED);
- si.setDisabledReason(ShortcutInfo.DISABLED_REASON_NOT_DISABLED);
- return true;
- }
- return false;
- });
+ mutateShortcut(si.getId(), si, shortcut -> {
+ shortcut.clearFlags(ShortcutInfo.FLAG_DISABLED);
+ shortcut.setDisabledReason(ShortcutInfo.DISABLED_REASON_NOT_DISABLED);
+ });
+ }
// For existing shortcuts, update timestamps if they have any resources.
// Also check if shortcuts' activities are still main activities. Otherwise, disable them.
if (!isNewApp) {
- final Resources publisherRes = getPackageResources();
- forEachShortcutMutateIf(si -> {
+ Resources publisherRes = null;
+
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
// Disable dynamic shortcuts whose target activity is gone.
if (si.isDynamic()) {
if (si.getActivity() == null) {
@@ -1075,26 +1067,33 @@ class ShortcutPackage extends ShortcutPackageItem {
getPackageName(), si.getId()));
if (disableDynamicWithId(si.getId(), /*ignoreInvisible*/ false,
ShortcutInfo.DISABLED_REASON_APP_CHANGED) != null) {
- return false; // Actually removed.
+ continue; // Actually removed.
}
// Still pinned, so fall-through and possibly update the resources.
}
}
- if (!si.hasAnyResources() || publisherRes == null) {
- return false;
- }
+ if (si.hasAnyResources()) {
+ if (publisherRes == null) {
+ publisherRes = getPackageResources();
+ if (publisherRes == null) {
+ break; // Resources couldn't be loaded.
+ }
+ }
- if (!si.isOriginallyFromManifest()) {
- si.lookupAndFillInResourceIds(publisherRes);
- }
+ final Resources res = publisherRes;
+ mutateShortcut(si.getId(), si, shortcut -> {
+ if (!shortcut.isOriginallyFromManifest()) {
+ shortcut.lookupAndFillInResourceIds(res);
+ }
- // If this shortcut is not from a manifest, then update all resource IDs
- // from resource names. (We don't allow resource strings for
- // non-manifest at the moment, but icons can still be resources.)
- si.setTimestamp(s.injectCurrentTimeMillis());
- return true;
- });
+ // If this shortcut is not from a manifest, then update all resource IDs
+ // from resource names. (We don't allow resource strings for
+ // non-manifest at the moment, but icons can still be resources.)
+ shortcut.setTimestamp(s.injectCurrentTimeMillis());
+ });
+ }
+ }
}
// (Re-)publish manifest shortcut.
@@ -1120,12 +1119,17 @@ class ShortcutPackage extends ShortcutPackageItem {
boolean changed = false;
// Keep the previous IDs.
- final ArraySet<String> toDisableList = new ArraySet<>(1);
- forEachShortcut(si -> {
+ ArraySet<String> toDisableList = null;
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
+
if (si.isManifestShortcut()) {
+ if (toDisableList == null) {
+ toDisableList = new ArraySet<>();
+ }
toDisableList.add(si.getId());
}
- });
+ }
// Publish new ones.
if (newManifestShortcutList != null) {
@@ -1165,7 +1169,7 @@ class ShortcutPackage extends ShortcutPackageItem {
// regardless.
forceReplaceShortcutInner(newShortcut); // This will clean up the old one too.
- if (!newDisabled && !toDisableList.isEmpty()) {
+ if (!newDisabled && toDisableList != null) {
// Still alive, don't remove.
toDisableList.remove(id);
}
@@ -1173,7 +1177,7 @@ class ShortcutPackage extends ShortcutPackageItem {
}
// Disable the previous manifest shortcuts that are no longer in the manifest.
- if (!toDisableList.isEmpty()) {
+ if (toDisableList != null) {
if (ShortcutService.DEBUG) {
Slog.d(TAG, String.format(
"Package %s: disabling %d stale shortcuts", getPackageName(),
@@ -1188,8 +1192,8 @@ class ShortcutPackage extends ShortcutPackageItem {
/* overrideImmutable=*/ true, /*ignoreInvisible=*/ false,
ShortcutInfo.DISABLED_REASON_APP_CHANGED);
}
+ removeOrphans();
}
- removeOrphans();
adjustRanks();
return changed;
@@ -1262,21 +1266,25 @@ class ShortcutPackage extends ShortcutPackageItem {
private ArrayMap<ComponentName, ArrayList<ShortcutInfo>> sortShortcutsToActivities() {
final ArrayMap<ComponentName, ArrayList<ShortcutInfo>> activitiesToShortcuts
= new ArrayMap<>();
- forEachShortcut(si -> {
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
if (si.isFloating()) {
- return; // Ignore floating shortcuts, which are not tied to any activities.
+ continue; // Ignore floating shortcuts, which are not tied to any activities.
}
final ComponentName activity = si.getActivity();
if (activity == null) {
mShortcutUser.mService.wtf("null activity detected.");
- return;
+ continue;
}
- ArrayList<ShortcutInfo> list = activitiesToShortcuts.computeIfAbsent(activity,
- k -> new ArrayList<>());
+ ArrayList<ShortcutInfo> list = activitiesToShortcuts.get(activity);
+ if (list == null) {
+ list = new ArrayList<>();
+ activitiesToShortcuts.put(activity, list);
+ }
list.add(si);
- });
+ }
return activitiesToShortcuts;
}
@@ -1312,13 +1320,14 @@ class ShortcutPackage extends ShortcutPackageItem {
// (If it's for update, then don't count dynamic shortcuts, since they'll be replaced
// anyway.)
final ArrayMap<ComponentName, Integer> counts = new ArrayMap<>(4);
- forEachShortcut(shortcut -> {
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo shortcut = mShortcuts.valueAt(i);
if (shortcut.isManifestShortcut()) {
incrementCountForActivity(counts, shortcut.getActivity(), 1);
} else if (shortcut.isDynamic() && (operation != ShortcutService.OPERATION_SET)) {
incrementCountForActivity(counts, shortcut.getActivity(), 1);
}
- });
+ }
for (int i = newList.size() - 1; i >= 0; i--) {
final ShortcutInfo newShortcut = newList.get(i);
@@ -1331,7 +1340,7 @@ class ShortcutPackage extends ShortcutPackageItem {
continue; // Activity can be null for update.
}
- final ShortcutInfo original = findShortcutById(newShortcut.getId());
+ final ShortcutInfo original = mShortcuts.get(newShortcut.getId());
if (original == null) {
if (operation == ShortcutService.OPERATION_UPDATE) {
continue; // When updating, ignore if there's no target.
@@ -1370,17 +1379,31 @@ class ShortcutPackage extends ShortcutPackageItem {
public void resolveResourceStrings() {
final ShortcutService s = mShortcutUser.mService;
- final Resources publisherRes = getPackageResources();
- final List<ShortcutInfo> changedShortcuts = new ArrayList<>(1);
+ List<ShortcutInfo> changedShortcuts = null;
- if (publisherRes != null) {
- forEachShortcutMutateIf(si -> {
- if (!si.hasStringResources()) return false;
- si.resolveResourceStrings(publisherRes);
- si.setTimestamp(s.injectCurrentTimeMillis());
+ Resources publisherRes = null;
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
+
+ if (si.hasStringResources()) {
+ if (publisherRes == null) {
+ publisherRes = getPackageResources();
+ if (publisherRes == null) {
+ break; // Resources couldn't be loaded.
+ }
+ }
+
+ final Resources res = publisherRes;
+ mutateShortcut(si.getId(), si, shortcut -> {
+ shortcut.resolveResourceStrings(res);
+ shortcut.setTimestamp(s.injectCurrentTimeMillis());
+ });
+
+ if (changedShortcuts == null) {
+ changedShortcuts = new ArrayList<>(1);
+ }
changedShortcuts.add(si);
- return true;
- });
+ }
}
if (!CollectionUtils.isEmpty(changedShortcuts)) {
s.packageShortcutsChanged(getPackageName(), getPackageUserId(), changedShortcuts, null);
@@ -1389,7 +1412,10 @@ class ShortcutPackage extends ShortcutPackageItem {
/** Clears the implicit ranks for all shortcuts. */
public void clearAllImplicitRanks() {
- forEachShortcutMutate(ShortcutInfo::clearImplicitRankAndRankChangedFlag);
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
+ mutateShortcut(si.getId(), si, ShortcutInfo::clearImplicitRankAndRankChangedFlag);
+ }
}
/**
@@ -1429,16 +1455,17 @@ class ShortcutPackage extends ShortcutPackageItem {
final long now = s.injectCurrentTimeMillis();
// First, clear ranks for floating shortcuts.
- forEachShortcutMutateIf(si -> {
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
if (si.isFloating()) {
if (si.getRank() != 0) {
- si.setTimestamp(now);
- si.setRank(0);
- return true;
+ mutateShortcut(si.getId(), si, shortcut -> {
+ shortcut.setTimestamp(now);
+ shortcut.setRank(0);
+ });
}
}
- return false;
- });
+ }
// Then adjust ranks. Ranks are unique for each activity, so we first need to sort
// shortcuts to each activity.
@@ -1463,7 +1490,7 @@ class ShortcutPackage extends ShortcutPackageItem {
}
// At this point, it must be dynamic.
if (!si.isDynamic()) {
- s.wtf("Non-dynamic shortcut found.: " + si.toInsecureString());
+ s.wtf("Non-dynamic shortcut found.");
continue;
}
final int thisRank = rank++;
@@ -1480,14 +1507,13 @@ class ShortcutPackage extends ShortcutPackageItem {
/** @return true if there's any shortcuts that are not manifest shortcuts. */
public boolean hasNonManifestShortcuts() {
final boolean[] condition = new boolean[1];
- forEachShortcutStopWhen(si -> {
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
if (!si.isDeclaredInManifest()) {
- condition[0] = true;
return true;
}
- return false;
- });
- return condition[0];
+ }
+ return false;
}
public void dump(@NonNull PrintWriter pw, @NonNull String prefix, DumpFilter filter) {
@@ -1527,8 +1553,11 @@ class ShortcutPackage extends ShortcutPackageItem {
pw.print(prefix);
pw.println(" Shortcuts:");
- final long[] totalBitmapSize = new long[1];
- forEachShortcut(si -> {
+ long totalBitmapSize = 0;
+ final ArrayMap<String, ShortcutInfo> shortcuts = mShortcuts;
+ final int size = shortcuts.size();
+ for (int i = 0; i < size; i++) {
+ final ShortcutInfo si = shortcuts.valueAt(i);
pw.println(si.toDumpString(prefix + " "));
if (si.getBitmapPath() != null) {
final long len = new File(si.getBitmapPath()).length();
@@ -1537,15 +1566,15 @@ class ShortcutPackage extends ShortcutPackageItem {
pw.print("bitmap size=");
pw.println(len);
- totalBitmapSize[0] += len;
+ totalBitmapSize += len;
}
- });
+ }
pw.print(prefix);
pw.print(" ");
pw.print("Total bitmap size: ");
- pw.print(totalBitmapSize[0]);
+ pw.print(totalBitmapSize);
pw.print(" (");
- pw.print(Formatter.formatFileSize(mShortcutUser.mService.mContext, totalBitmapSize[0]));
+ pw.print(Formatter.formatFileSize(mShortcutUser.mService.mContext, totalBitmapSize));
pw.println(")");
}
@@ -1560,39 +1589,46 @@ class ShortcutPackage extends ShortcutPackageItem {
| (matchManifest ? ShortcutInfo.FLAG_MANIFEST : 0)
| (matchCached ? ShortcutInfo.FLAG_CACHED_ALL : 0);
- forEachShortcut(si -> {
+ final ArrayMap<String, ShortcutInfo> shortcuts = mShortcuts;
+ final int size = shortcuts.size();
+ for (int i = 0; i < size; i++) {
+ final ShortcutInfo si = shortcuts.valueAt(i);
if ((si.getFlags() & shortcutFlags) != 0) {
pw.println(si.toDumpString(""));
}
- });
+ }
}
@Override
public JSONObject dumpCheckin(boolean clear) throws JSONException {
final JSONObject result = super.dumpCheckin(clear);
- final int[] numDynamic = new int[1];
- final int[] numPinned = new int[1];
- final int[] numManifest = new int[1];
- final int[] numBitmaps = new int[1];
- final long[] totalBitmapSize = new long[1];
+ int numDynamic = 0;
+ int numPinned = 0;
+ int numManifest = 0;
+ int numBitmaps = 0;
+ long totalBitmapSize = 0;
- forEachShortcut(si -> {
- if (si.isDynamic()) numDynamic[0]++;
- if (si.isDeclaredInManifest()) numManifest[0]++;
- if (si.isPinned()) numPinned[0]++;
+ final ArrayMap<String, ShortcutInfo> shortcuts = mShortcuts;
+ final int size = shortcuts.size();
+ for (int i = 0; i < size; i++) {
+ final ShortcutInfo si = shortcuts.valueAt(i);
+
+ if (si.isDynamic()) numDynamic++;
+ if (si.isDeclaredInManifest()) numManifest++;
+ if (si.isPinned()) numPinned++;
if (si.getBitmapPath() != null) {
- numBitmaps[0]++;
- totalBitmapSize[0] += new File(si.getBitmapPath()).length();
+ numBitmaps++;
+ totalBitmapSize += new File(si.getBitmapPath()).length();
}
- });
+ }
- result.put(KEY_DYNAMIC, numDynamic[0]);
- result.put(KEY_MANIFEST, numManifest[0]);
- result.put(KEY_PINNED, numPinned[0]);
- result.put(KEY_BITMAPS, numBitmaps[0]);
- result.put(KEY_BITMAP_BYTES, totalBitmapSize[0]);
+ result.put(KEY_DYNAMIC, numDynamic);
+ result.put(KEY_MANIFEST, numManifest);
+ result.put(KEY_PINNED, numPinned);
+ result.put(KEY_BITMAPS, numBitmaps);
+ result.put(KEY_BITMAP_BYTES, totalBitmapSize);
// TODO Log update frequency too.
@@ -1616,15 +1652,9 @@ class ShortcutPackage extends ShortcutPackageItem {
ShortcutService.writeAttr(out, ATTR_LAST_RESET, mLastResetTime);
getPackageInfo().saveToXml(mShortcutUser.mService, out, forBackup);
- if (forBackup) {
- // Shortcuts are persisted in AppSearch, xml is only needed for backup.
- forEachShortcut(si -> {
- try {
- saveShortcut(out, si, forBackup, getPackageInfo().isBackupAllowed());
- } catch (IOException | XmlPullParserException e) {
- throw new RuntimeException(e);
- }
- });
+ for (int j = 0; j < size; j++) {
+ saveShortcut(out, mShortcuts.valueAt(j), forBackup,
+ getPackageInfo().isBackupAllowed());
}
if (!forBackup) {
@@ -1741,14 +1771,12 @@ class ShortcutPackage extends ShortcutPackageItem {
}
final Intent[] intentsNoExtras = si.getIntentsNoExtras();
final PersistableBundle[] intentsExtras = si.getIntentPersistableExtrases();
- if (intentsNoExtras != null && intentsExtras != null) {
- final int numIntents = intentsNoExtras.length;
- for (int i = 0; i < numIntents; i++) {
- out.startTag(null, TAG_INTENT);
- ShortcutService.writeAttr(out, ATTR_INTENT_NO_EXTRA, intentsNoExtras[i]);
- ShortcutService.writeTagExtra(out, TAG_EXTRAS, intentsExtras[i]);
- out.endTag(null, TAG_INTENT);
- }
+ final int numIntents = intentsNoExtras.length;
+ for (int i = 0; i < numIntents; i++) {
+ out.startTag(null, TAG_INTENT);
+ ShortcutService.writeAttr(out, ATTR_INTENT_NO_EXTRA, intentsNoExtras[i]);
+ ShortcutService.writeTagExtra(out, TAG_EXTRAS, intentsExtras[i]);
+ out.endTag(null, TAG_INTENT);
}
ShortcutService.writeTagExtra(out, TAG_EXTRAS, si.getExtras());
@@ -1836,7 +1864,7 @@ class ShortcutPackage extends ShortcutPackageItem {
final ShortcutInfo si = parseShortcut(parser, packageName,
shortcutUser.getUserId(), fromBackup);
// Don't use addShortcut(), we don't need to save the icon.
- ret.mShortcuts.add(si);
+ ret.mShortcuts.put(si.getId(), si);
continue;
case TAG_SHARE_TARGET:
ret.mShareTargets.add(ShareTargetInfo.loadFromXml(parser));
@@ -2032,9 +2060,7 @@ class ShortcutPackage extends ShortcutPackageItem {
@VisibleForTesting
List<ShortcutInfo> getAllShortcutsForTest() {
- final List<ShortcutInfo> ret = new ArrayList<>(1);
- forEachShortcut(ret::add);
- return ret;
+ return new ArrayList<>(mShortcuts.values());
}
@VisibleForTesting
@@ -2046,7 +2072,7 @@ class ShortcutPackage extends ShortcutPackageItem {
public void verifyStates() {
super.verifyStates();
- final boolean[] failed = new boolean[1];
+ boolean failed = false;
final ShortcutService s = mShortcutUser.mService;
@@ -2057,7 +2083,7 @@ class ShortcutPackage extends ShortcutPackageItem {
for (int outer = all.size() - 1; outer >= 0; outer--) {
final ArrayList<ShortcutInfo> list = all.valueAt(outer);
if (list.size() > mShortcutUser.mService.getMaxActivityShortcuts()) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": activity " + all.keyAt(outer)
+ " has " + all.valueAt(outer).size() + " shortcuts.");
}
@@ -2077,60 +2103,61 @@ class ShortcutPackage extends ShortcutPackageItem {
}
// Verify each shortcut's status.
- forEachShortcut(si -> {
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
if (!(si.isDeclaredInManifest() || si.isDynamic() || si.isPinned() || si.isCached())) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " is not manifest, dynamic or pinned.");
}
if (si.isDeclaredInManifest() && si.isDynamic()) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " is both dynamic and manifest at the same time.");
}
if (si.getActivity() == null && !si.isFloating()) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " has null activity, but not floating.");
}
if ((si.isDynamic() || si.isManifestShortcut()) && !si.isEnabled()) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " is not floating, but is disabled.");
}
if (si.isFloating() && si.getRank() != 0) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " is floating, but has rank=" + si.getRank());
}
if (si.getIcon() != null) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " still has an icon");
}
if (si.hasAdaptiveBitmap() && !(si.hasIconFile() || si.hasIconUri())) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " has adaptive bitmap but was not saved to a file nor has icon uri.");
}
if (si.hasIconFile() && si.hasIconResource()) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " has both resource and bitmap icons");
}
if (si.hasIconFile() && si.hasIconUri()) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " has both url and bitmap icons");
}
if (si.hasIconUri() && si.hasIconResource()) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " has both url and resource icons");
}
if (si.isEnabled()
!= (si.getDisabledReason() == ShortcutInfo.DISABLED_REASON_NOT_DISABLED)) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " isEnabled() and getDisabledReason() disagree: "
+ si.isEnabled() + " vs " + si.getDisabledReason());
@@ -2138,18 +2165,18 @@ class ShortcutPackage extends ShortcutPackageItem {
if ((si.getDisabledReason() == ShortcutInfo.DISABLED_REASON_VERSION_LOWER)
&& (getPackageInfo().getBackupSourceVersionCode()
== ShortcutInfo.VERSION_CODE_UNKNOWN)) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " RESTORED_VERSION_LOWER with no backup source version code.");
}
if (s.isDummyMainActivity(si.getActivity())) {
- failed[0] = true;
+ failed = true;
Log.e(TAG_VERIFY, "Package " + getPackageName() + ": shortcut " + si.getId()
+ " has a dummy target activity");
}
- });
+ }
- if (failed[0]) {
+ if (failed) {
throw new IllegalStateException("See logcat for errors");
}
}
@@ -2160,7 +2187,6 @@ class ShortcutPackage extends ShortcutPackageItem {
} else {
mPackageIdentifiers.remove(packageName);
}
- resetAppSearch(session -> AndroidFuture.completedFuture(true));
}
void mutateShortcut(@NonNull final String id, @Nullable final ShortcutInfo shortcut,
@@ -2170,302 +2196,23 @@ class ShortcutPackage extends ShortcutPackageItem {
synchronized (mLock) {
if (shortcut != null) {
transform.accept(shortcut);
+ } else {
+ transform.accept(findShortcutById(id));
}
- final ShortcutInfo si = getShortcutById(id);
- if (si == null) {
- return;
- }
- transform.accept(si);
- saveShortcut(si);
+ // TODO: Load ShortcutInfo from AppSearch, apply transformation logic and save
}
}
- private void saveShortcut(@NonNull final ShortcutInfo... shortcuts) {
- Objects.requireNonNull(shortcuts);
- saveShortcut(Arrays.asList(shortcuts));
- }
-
- private void saveShortcut(@NonNull final Collection<ShortcutInfo> shortcuts) {
- Objects.requireNonNull(shortcuts);
- if (shortcuts.isEmpty()) {
- // No need to invoke AppSearch when there's nothing to save.
- return;
- }
- ConcurrentUtils.waitForFutureNoInterrupt(
- runInAppSearch(session -> {
- final AndroidFuture<Boolean> future = new AndroidFuture<>();
- session.put(new PutDocumentsRequest.Builder()
- .addGenericDocuments(
- AppSearchShortcutInfo.toGenericDocuments(shortcuts))
- .build(),
- mShortcutUser.mExecutor,
- result -> {
- if (!result.isSuccess()) {
- for (AppSearchResult<Void> k : result.getFailures().values()) {
- Slog.e(TAG, k.getErrorMessage());
- }
- future.completeExceptionally(new RuntimeException(
- "failed to save shortcuts"));
- return;
- }
- future.complete(true);
- });
- return future;
- }),
- "saving shortcut");
- }
-
/**
* Removes shortcuts from AppSearch.
*/
void removeShortcuts() {
- awaitInAppSearch("removing shortcuts", session -> {
- final AndroidFuture<Boolean> future = new AndroidFuture<>();
- session.remove("",
- new SearchSpec.Builder()
- .addFilterSchemas(AppSearchShortcutInfo.SCHEMA_TYPE)
- .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY)
- .build(),
- mShortcutUser.mExecutor, result -> {
- if (!result.isSuccess()) {
- future.completeExceptionally(new RuntimeException(
- "Failed to cleanup shortcuts " + result.getErrorMessage()));
- return;
- }
- future.complete(true);
- });
- return future;
- });
- }
-
- private void removeShortcut(@NonNull final String id) {
- Objects.requireNonNull(id);
- awaitInAppSearch("removing shortcut with id=" + id, session -> {
- final AndroidFuture<Boolean> future = new AndroidFuture<>();
- session.remove(new RemoveByUriRequest.Builder(getPackageName()).addUris(id).build(),
- mShortcutUser.mExecutor, result -> {
- if (!result.isSuccess()) {
- final Map<String, AppSearchResult<Void>> failures =
- result.getFailures();
- for (String key : failures.keySet()) {
- Slog.e(TAG, "Failed deleting " + key + ", error message:"
- + failures.get(key).getErrorMessage());
- }
- future.completeExceptionally(new RuntimeException(
- "Failed to delete shortcut: " + id));
- return;
- }
- future.complete(true);
- });
- return future;
- });
- }
-
- private ShortcutInfo getShortcutById(String id) {
- return awaitInAppSearch("getting shortcut with id=" + id, session -> {
- final AndroidFuture<ShortcutInfo> future = new AndroidFuture<>();
- session.getByUri(
- new GetByUriRequest.Builder(getPackageName()).addUris(id).build(),
- mShortcutUser.mExecutor,
- results -> {
- if (results.isSuccess()) {
- Map<String, GenericDocument> documents = results.getSuccesses();
- for (GenericDocument doc : documents.values()) {
- final ShortcutInfo info = new AppSearchShortcutInfo(doc)
- .toShortcutInfo(mShortcutUser.getUserId());
- future.complete(info);
- return;
- }
- }
- future.complete(null);
- });
- return future;
- });
- }
-
- private void forEachShortcut(
- @NonNull final Consumer<ShortcutInfo> cb) {
- forEachShortcutStopWhen(si -> {
- cb.accept(si);
- return false;
- });
- }
-
- private void forEachShortcutMutate(@NonNull final Consumer<ShortcutInfo> cb) {
- forEachShortcutMutateIf(si -> {
- cb.accept(si);
- return true;
- });
- }
-
- private void forEachShortcutMutateIf(@NonNull final Function<ShortcutInfo, Boolean> cb) {
- final SearchResults res = awaitInAppSearch("mutating shortcuts", session ->
- AndroidFuture.completedFuture(session.search("", new SearchSpec.Builder()
- .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY).build())));
- if (res == null) return;
- List<ShortcutInfo> shortcuts = getNextPage(res);
- while (!shortcuts.isEmpty()) {
- final List<ShortcutInfo> changed = new ArrayList<>(1);
- for (ShortcutInfo si : shortcuts) {
- if (cb.apply(si)) changed.add(si);
- }
- saveShortcut(changed);
- shortcuts = getNextPage(res);
- }
- }
-
- private void forEachShortcutStopWhen(
- @NonNull final Function<ShortcutInfo, Boolean> cb) {
- forEachShortcutStopWhen("", cb);
- }
-
- private void forEachShortcutStopWhen(
- @NonNull final String query, @NonNull final Function<ShortcutInfo, Boolean> cb) {
- final SearchResults res = awaitInAppSearch("iterating shortcuts", session ->
- AndroidFuture.completedFuture(session.search(query, new SearchSpec.Builder()
- .setTermMatch(SearchSpec.TERM_MATCH_EXACT_ONLY).build())));
- if (res == null) return;
- List<ShortcutInfo> shortcuts = getNextPage(res);
- while (!shortcuts.isEmpty()) {
- for (ShortcutInfo si : shortcuts) {
- if (cb.apply(si)) return;
- }
- shortcuts = getNextPage(res);
- }
- }
-
- private List<ShortcutInfo> getNextPage(@NonNull final SearchResults res) {
- final AndroidFuture<List<ShortcutInfo>> future = new AndroidFuture<>();
- final List<ShortcutInfo> ret = new ArrayList<>();
- final long callingIdentity = Binder.clearCallingIdentity();
- try {
- res.getNextPage(mShortcutUser.mExecutor, nextPage -> {
- if (!nextPage.isSuccess()) {
- future.complete(ret);
- return;
- }
- final List<SearchResult> results = nextPage.getResultValue();
- if (results.isEmpty()) {
- future.complete(ret);
- return;
- }
- final List<ShortcutInfo> page = new ArrayList<>(results.size());
- for (SearchResult result : results) {
- final ShortcutInfo si = new AppSearchShortcutInfo(result.getGenericDocument())
- .toShortcutInfo(mShortcutUser.getUserId());
- page.add(si);
- }
- ret.addAll(page);
- future.complete(ret);
- });
- return ConcurrentUtils.waitForFutureNoInterrupt(future,
- "getting next batch of shortcuts");
- } finally {
- Binder.restoreCallingIdentity(callingIdentity);
- }
- }
-
- @Nullable
- private <T> T awaitInAppSearch(
- @NonNull final String description,
- @NonNull final Function<AppSearchSession, CompletableFuture<T>> cb) {
- return ConcurrentUtils.waitForFutureNoInterrupt(runInAppSearch(cb), description);
- }
-
- @Nullable
- private <T> CompletableFuture<T> runInAppSearch(
- @NonNull final Function<AppSearchSession, CompletableFuture<T>> cb) {
- synchronized (mLock) {
- final StrictMode.ThreadPolicy oldPolicy = StrictMode.getThreadPolicy();
- try {
- StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
- .detectAll()
- .penaltyLog() // TODO: change this to penaltyDeath to fix the call-site
- .build());
- if (mAppSearchSession != null) {
- final long callingIdentity = Binder.clearCallingIdentity();
- try {
- return AndroidFuture.supply(() -> mAppSearchSession).thenCompose(cb);
- } finally {
- Binder.restoreCallingIdentity(callingIdentity);
- }
- } else {
- return resetAppSearch(cb);
- }
- } finally {
- StrictMode.setThreadPolicy(oldPolicy);
- }
- }
- }
-
- private <T> CompletableFuture<T> resetAppSearch(
- @NonNull final Function<AppSearchSession, CompletableFuture<T>> cb) {
- final long callingIdentity = Binder.clearCallingIdentity();
- final AppSearchManager.SearchContext searchContext =
- new AppSearchManager.SearchContext.Builder(getPackageName()).build();
- final AppSearchSession session;
- try {
- session = ConcurrentUtils.waitForFutureNoInterrupt(
- mShortcutUser.getAppSearch(searchContext), "resetting app search");
- ConcurrentUtils.waitForFutureNoInterrupt(setupSchema(session), "setting up schema");
- mAppSearchSession = session;
- return cb.apply(mAppSearchSession);
- } catch (Exception e) {
- Slog.e(TAG, "Failed to initiate app search for shortcut package "
- + getPackageName() + " user " + mShortcutUser.getUserId(), e);
- return AndroidFuture.completedFuture(null);
- } finally {
- Binder.restoreCallingIdentity(callingIdentity);
- }
- }
-
- void closeAppSearchSession() {
- synchronized (mLock) {
- if (mAppSearchSession != null) {
- final long callingIdentity = Binder.clearCallingIdentity();
- try {
- mAppSearchSession.close();
- } finally {
- Binder.restoreCallingIdentity(callingIdentity);
- }
- }
- mAppSearchSession = null;
- }
- }
-
- @NonNull
- private AndroidFuture<AppSearchSession> setupSchema(
- @NonNull final AppSearchSession session) {
- SetSchemaRequest.Builder schemaBuilder = new SetSchemaRequest.Builder()
- .addSchemas(AppSearchPerson.SCHEMA, AppSearchShortcutInfo.SCHEMA);
- for (PackageIdentifier pi : mPackageIdentifiers.values()) {
- schemaBuilder = schemaBuilder
- .setSchemaTypeVisibilityForPackage(
- AppSearchPerson.SCHEMA_TYPE, true, pi)
- .setSchemaTypeVisibilityForPackage(
- AppSearchShortcutInfo.SCHEMA_TYPE, true, pi);
- }
- final AndroidFuture<AppSearchSession> future = new AndroidFuture<>();
- session.setSchema(
- schemaBuilder.build(), mShortcutUser.mExecutor, mShortcutUser.mExecutor, result -> {
- if (!result.isSuccess()) {
- future.completeExceptionally(
- new IllegalArgumentException(result.getErrorMessage()));
- return;
- }
- future.complete(session);
- });
- return future;
}
/**
* Merge/replace shortcuts parsed from xml file.
*/
void restoreParsedShortcuts(final boolean replace) {
- if (replace) {
- removeShortcuts();
- }
- saveShortcut(mShortcuts);
}
private boolean verifyRanksSequential(List<ShortcutInfo> list) {
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java
index 4cfa353b36f8..8e999de80707 100644
--- a/services/core/java/com/android/server/pm/ShortcutService.java
+++ b/services/core/java/com/android/server/pm/ShortcutService.java
@@ -1051,8 +1051,6 @@ public class ShortcutService extends IShortcutService.Stub {
}
final ShortcutUser user = getUserShortcutsLocked(userId);
- // Close AppSearchSession to flush pending changes.
- user.forAllPackages(ShortcutPackage::closeAppSearchSession);
user.logSharingShortcutStats(mMetricsLogger);
}
@@ -5083,17 +5081,6 @@ public class ShortcutService extends IShortcutService.Stub {
}
@VisibleForTesting
- void updatePackageShortcutForTest(String packageName, String shortcutId, int userId,
- Consumer<ShortcutInfo> cb) {
- synchronized (mLock) {
- final ShortcutPackage pkg = getPackageShortcutForTest(packageName, userId);
- if (pkg == null) return;
-
- pkg.mutateShortcut(shortcutId, null, cb);
- }
- }
-
- @VisibleForTesting
ShortcutLauncher getLauncherShortcutForTest(String packageName, int userId) {
synchronized (mLock) {
final ShortcutUser user = mUsers.get(userId);
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index f931df8d7704..c7789eecc68f 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -1092,7 +1092,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
break;
case LONG_PRESS_POWER_ASSISTANT:
mPowerKeyHandled = true;
- performHapticFeedback(HapticFeedbackConstants.LONG_PRESS, false,
+ performHapticFeedback(HapticFeedbackConstants.ASSISTANT_BUTTON, false,
"Power - Long Press - Go To Assistant");
final int powerKeyDeviceId = Integer.MIN_VALUE;
launchAssistAction(null, powerKeyDeviceId, eventTime);
@@ -5073,6 +5073,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
pattern = mSafeModeEnabledVibePattern;
break;
+ case HapticFeedbackConstants.ASSISTANT_BUTTON:
+ if (mVibrator.areAllPrimitivesSupported(
+ VibrationEffect.Composition.PRIMITIVE_QUICK_RISE)) {
+ // quiet ramp, short pause, then sharp tick
+ return VibrationEffect.startComposition()
+ .addPrimitive(VibrationEffect.Composition.PRIMITIVE_QUICK_RISE, 0.25f)
+ .addPrimitive(VibrationEffect.Composition.PRIMITIVE_TICK, 1f, 50)
+ .compose();
+ }
+ // fallback for devices without composition support
+ return VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK);
+
default:
return null;
}
diff --git a/services/core/java/com/android/server/vcn/UnderlyingNetworkTracker.java b/services/core/java/com/android/server/vcn/UnderlyingNetworkTracker.java
index 069c5c3fc714..ab9de77005b3 100644
--- a/services/core/java/com/android/server/vcn/UnderlyingNetworkTracker.java
+++ b/services/core/java/com/android/server/vcn/UnderlyingNetworkTracker.java
@@ -118,7 +118,7 @@ public class UnderlyingNetworkTracker {
if (!mIsQuitting) {
mRouteSelectionCallback = new RouteSelectionCallback();
mConnectivityManager.requestBackgroundNetwork(
- getBaseNetworkRequestBuilder().build(), mHandler, mRouteSelectionCallback);
+ getRouteSelectionRequest(), mHandler, mRouteSelectionCallback);
mWifiBringupCallback = new NetworkBringupCallback();
mConnectivityManager.requestBackgroundNetwork(
@@ -149,12 +149,48 @@ public class UnderlyingNetworkTracker {
}
}
+ /**
+ * Builds the Route selection request
+ *
+ * <p>This request is guaranteed to select carrier-owned, non-VCN underlying networks by virtue
+ * of a populated set of subIds as expressed in NetworkCapabilities#getSubIds(). Only carrier
+ * owned networks may be selected, as the request specifies only subIds in the VCN's
+ * subscription group, while the VCN networks are excluded by virtue of not having subIds set on
+ * the VCN-exposed networks.
+ */
+ private NetworkRequest getRouteSelectionRequest() {
+ return getBaseNetworkRequestBuilder()
+ .setSubIds(mLastSnapshot.getAllSubIdsInGroup(mSubscriptionGroup))
+ .build();
+ }
+
+ /**
+ * Builds the WiFi bringup request
+ *
+ * <p>This request is built specifically to match only carrier-owned WiFi networks, but is also
+ * built to ONLY keep Carrier WiFi Networks alive (but never bring them up). This is a result of
+ * the WifiNetworkFactory not advertising a list of subIds, and therefore not accepting this
+ * request. As such, it will bind to a Carrier WiFi Network that has already been brought up,
+ * but will NEVER bring up a Carrier WiFi network itself.
+ */
private NetworkRequest getWifiNetworkRequest() {
return getBaseNetworkRequestBuilder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+ .setSubIds(mLastSnapshot.getAllSubIdsInGroup(mSubscriptionGroup))
.build();
}
+ /**
+ * Builds a Cellular bringup request for a given subId
+ *
+ * <p>This request is filed in order to ensure that the Telephony stack always has a
+ * NetworkRequest to bring up a VCN underlying cellular network. It is required in order to
+ * ensure that even when a VCN (appears as Cellular) satisfies the default request, Telephony
+ * will bring up additional underlying Cellular networks.
+ *
+ * <p>Since this request MUST make it to the TelephonyNetworkFactory, subIds are not specified
+ * in the NetworkCapabilities, but rather in the TelephonyNetworkSpecifier.
+ */
private NetworkRequest getCellNetworkRequestForSubId(int subId) {
return getBaseNetworkRequestBuilder()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
@@ -164,20 +200,13 @@ public class UnderlyingNetworkTracker {
/**
* Builds and returns a NetworkRequest builder common to all Underlying Network requests
- *
- * <p>This request is guaranteed to select carrier-owned, non-VCN underlying networks by virtue
- * of a populated set of subIds as expressed in NetworkCapabilities#getSubIds(). Only carrier
- * owned networks may be selected, as the request specifies only subIds in the VCN's
- * subscription group, while the VCN networks are excluded by virtue of not having subIds set on
- * the VCN-exposed networks.
*/
private NetworkRequest.Builder getBaseNetworkRequestBuilder() {
return new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
- .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED)
- .setSubIds(mLastSnapshot.getAllSubIdsInGroup(mSubscriptionGroup));
+ .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED);
}
/**
diff --git a/services/core/java/com/android/server/vcn/Vcn.java b/services/core/java/com/android/server/vcn/Vcn.java
index 89ed956b3aef..54689358802f 100644
--- a/services/core/java/com/android/server/vcn/Vcn.java
+++ b/services/core/java/com/android/server/vcn/Vcn.java
@@ -17,6 +17,9 @@
package com.android.server.vcn;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED;
+import static android.net.vcn.VcnManager.VCN_STATUS_CODE_ACTIVE;
+import static android.net.vcn.VcnManager.VCN_STATUS_CODE_INACTIVE;
+import static android.net.vcn.VcnManager.VCN_STATUS_CODE_SAFE_MODE;
import static com.android.server.VcnManagementService.VDBG;
@@ -44,7 +47,6 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
/**
* Represents an single instance of a VCN.
@@ -137,17 +139,14 @@ public class Vcn extends Handler {
@NonNull private TelephonySubscriptionSnapshot mLastSnapshot;
/**
- * Whether this Vcn instance is active and running.
+ * The current status of this Vcn instance
*
- * <p>The value will be {@code true} while running. It will be {@code false} if the VCN has been
- * shut down or has entered safe mode.
- *
- * <p>This AtomicBoolean is required in order to ensure consistency and correctness across
- * multiple threads. Unlike the rest of the Vcn, this is queried synchronously on Binder threads
- * from VcnManagementService, and therefore cannot rely on guarantees of running on the VCN
- * Looper.
+ * <p>The value will be {@link VCN_STATUS_CODE_ACTIVE} while all VcnGatewayConnections are in
+ * good standing, {@link VCN_STATUS_CODE_SAFE_MODE} if any VcnGatewayConnections are in safe
+ * mode, and {@link VCN_STATUS_CODE_INACTIVE} once a teardown has been commanded.
*/
- private final AtomicBoolean mIsActive = new AtomicBoolean(true);
+ // Accessed from different threads, but always under lock in VcnManagementService
+ private volatile int mCurrentStatus = VCN_STATUS_CODE_ACTIVE;
public Vcn(
@NonNull VcnContext vcnContext,
@@ -199,9 +198,15 @@ public class Vcn extends Handler {
sendMessageAtFrontOfQueue(obtainMessage(MSG_CMD_TEARDOWN));
}
- /** Synchronously checks whether this Vcn is active. */
- public boolean isActive() {
- return mIsActive.get();
+ /** Synchronously retrieves the current status code. */
+ public int getStatus() {
+ return mCurrentStatus;
+ }
+
+ /** Sets the status of this VCN */
+ @VisibleForTesting(visibility = Visibility.PRIVATE)
+ public void setStatus(int status) {
+ mCurrentStatus = status;
}
/** Get current Gateways for testing purposes */
@@ -217,12 +222,6 @@ public class Vcn extends Handler {
return Collections.unmodifiableMap(new HashMap<>(mVcnGatewayConnections));
}
- /** Set whether this Vcn is active for testing purposes */
- @VisibleForTesting(visibility = Visibility.PRIVATE)
- public void setIsActive(boolean isActive) {
- mIsActive.set(isActive);
- }
-
private class VcnNetworkRequestListener implements VcnNetworkProvider.NetworkRequestListener {
@Override
public void onNetworkRequested(@NonNull NetworkRequest request, int score, int providerId) {
@@ -264,7 +263,8 @@ public class Vcn extends Handler {
mConfig = config;
- if (mIsActive.getAndSet(true)) {
+ // TODO(b/183174340): Remove this once opportunistic safe mode is supported.
+ if (mCurrentStatus == VCN_STATUS_CODE_ACTIVE) {
// VCN is already active - teardown any GatewayConnections whose configs have been
// removed and get all current requests
for (final Entry<VcnGatewayConnectionConfig, VcnGatewayConnection> entry :
@@ -288,11 +288,15 @@ public class Vcn extends Handler {
// Trigger a re-evaluation of all NetworkRequests (to make sure any that can be
// satisfied start a new GatewayConnection)
mVcnContext.getVcnNetworkProvider().resendAllRequests(mRequestListener);
- } else {
+ } else if (mCurrentStatus == VCN_STATUS_CODE_SAFE_MODE) {
// If this VCN was not previously active, it is exiting Safe Mode. Re-register the
// request listener to get NetworkRequests again (and all cached requests).
mVcnContext.getVcnNetworkProvider().registerListener(mRequestListener);
+ } else {
+ // Ignored; VCN was not active; config updates ignored.
+ return;
}
+ mCurrentStatus = VCN_STATUS_CODE_ACTIVE;
}
private void handleTeardown() {
@@ -302,18 +306,20 @@ public class Vcn extends Handler {
gatewayConnection.teardownAsynchronously();
}
- mIsActive.set(false);
+ mCurrentStatus = VCN_STATUS_CODE_INACTIVE;
}
private void handleEnterSafeMode() {
+ // TODO(b/183174340): Remove this once opportunistic-safe-mode is supported
handleTeardown();
+ mCurrentStatus = VCN_STATUS_CODE_SAFE_MODE;
mVcnCallback.onEnteredSafeMode();
}
private void handleNetworkRequested(
@NonNull NetworkRequest request, int score, int providerId) {
- if (!isActive()) {
+ if (mCurrentStatus != VCN_STATUS_CODE_ACTIVE) {
Slog.v(getLogTag(), "Received NetworkRequest while inactive. Ignore for now");
return;
}
@@ -370,8 +376,8 @@ public class Vcn extends Handler {
mVcnGatewayConnections.remove(config);
// Trigger a re-evaluation of all NetworkRequests (to make sure any that can be satisfied
- // start a new GatewayConnection), but only if the Vcn is still active
- if (isActive()) {
+ // start a new GatewayConnection), but only if the Vcn is still alive
+ if (mCurrentStatus == VCN_STATUS_CODE_ACTIVE) {
mVcnContext.getVcnNetworkProvider().resendAllRequests(mRequestListener);
}
}
@@ -379,7 +385,7 @@ public class Vcn extends Handler {
private void handleSubscriptionsChanged(@NonNull TelephonySubscriptionSnapshot snapshot) {
mLastSnapshot = snapshot;
- if (isActive()) {
+ if (mCurrentStatus == VCN_STATUS_CODE_ACTIVE) {
for (VcnGatewayConnection gatewayConnection : mVcnGatewayConnections.values()) {
gatewayConnection.updateSubscriptionSnapshot(mLastSnapshot);
}
@@ -417,7 +423,7 @@ public class Vcn extends Handler {
/** Callback by a VcnGatewayConnection to indicate that an error occurred. */
void onGatewayConnectionError(
- @NonNull int[] networkCapabilities,
+ @NonNull String gatewayConnectionName,
@VcnErrorCode int errorCode,
@Nullable String exceptionClass,
@Nullable String exceptionMessage);
@@ -445,12 +451,12 @@ public class Vcn extends Handler {
@Override
public void onGatewayConnectionError(
- @NonNull int[] networkCapabilities,
+ @NonNull String gatewayConnectionName,
@VcnErrorCode int errorCode,
@Nullable String exceptionClass,
@Nullable String exceptionMessage) {
mVcnCallback.onGatewayConnectionError(
- networkCapabilities, errorCode, exceptionClass, exceptionMessage);
+ gatewayConnectionName, errorCode, exceptionClass, exceptionMessage);
}
}
diff --git a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
index 9589505ef251..2ba8edd3b1d0 100644
--- a/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
+++ b/services/core/java/com/android/server/vcn/VcnGatewayConnection.java
@@ -980,7 +980,7 @@ public class VcnGatewayConnection extends StateMachine {
// IkeSessionCallback.onClosedExceptionally(), which calls sessionClosed()
if (exception != null) {
mGatewayStatusCallback.onGatewayConnectionError(
- mConnectionConfig.getExposedCapabilities(),
+ mConnectionConfig.getGatewayConnectionName(),
VCN_ERROR_CODE_INTERNAL_ERROR,
RuntimeException.class.getName(),
"Received "
@@ -1017,7 +1017,7 @@ public class VcnGatewayConnection extends StateMachine {
}
mGatewayStatusCallback.onGatewayConnectionError(
- mConnectionConfig.getExposedCapabilities(),
+ mConnectionConfig.getGatewayConnectionName(),
errorCode,
exceptionClass,
exceptionMessage);
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 9dc68f28ab8e..89b7bbd45072 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -1300,8 +1300,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
if (callbacks == null) return;
callbacks.broadcast(c -> {
try {
- int targetDisplayId =
+ Integer targetDisplayId =
callbackDisplayIds.get(c.asBinder());
+ if (targetDisplayId == null) return;
if (targetDisplayId == displayId) c.onColorsChanged(area, colors);
} catch (RemoteException e) {
e.printStackTrace();
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index 16692e169a3d..d23579a1da89 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -1903,6 +1903,14 @@ final class AccessibilityController {
StackTraceElement[] stackTrace) {
mTracing.logState(where, callingParams, a11yDump, callingUid, stackTrace);
}
+
+ @Override
+ public void logTrace(
+ String where, String callingParams, byte[] a11yDump, int callingUid,
+ StackTraceElement[] callStack, long timeStamp, int processId, long threadId) {
+ mTracing.logState(where, callingParams, a11yDump, callingUid, callStack, timeStamp,
+ processId, threadId);
+ }
}
private static final class AccessibilityTracing {
@@ -1916,7 +1924,7 @@ final class AccessibilityController {
}
}
- private static final int BUFFER_CAPACITY = 4096 * 1024;
+ private static final int BUFFER_CAPACITY = 1024 * 1024 * 12;
private static final String TRACE_FILENAME = "/data/misc/a11ytrace/a11y_trace.pb";
private static final String TRACE_DIRECTORY = "/data/misc/a11ytrace/";
private static final String TAG = "AccessibilityTracing";
@@ -2034,7 +2042,22 @@ final class AccessibilityController {
return;
}
- log(where, callingParams, a11yDump, callingUid, stackTrace);
+ log(where, callingParams, a11yDump, callingUid, stackTrace,
+ SystemClock.elapsedRealtimeNanos(),
+ Process.myPid() + ":" + Application.getProcessName(),
+ Thread.currentThread().getId() + ":" + Thread.currentThread().getName());
+ }
+
+ /**
+ * Write an accessibility trace log entry.
+ */
+ void logState(String where, String callingParams, byte[] a11yDump, int callingUid,
+ StackTraceElement[] callingStack, long timeStamp, int processId, long threadId) {
+ if (!mEnabled) {
+ return;
+ }
+ log(where, callingParams, a11yDump, callingUid, callingStack, timeStamp,
+ String.valueOf(processId), String.valueOf(threadId));
}
private String toStackTraceString(StackTraceElement[] stackTraceElements) {
@@ -2058,18 +2081,17 @@ final class AccessibilityController {
* Write the current state to the buffer
*/
private void log(String where, String callingParams, byte[] a11yDump, int callingUid,
- StackTraceElement[] stackTrace) {
- SimpleDateFormat fm = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
+ StackTraceElement[] callingStack, long timeStamp, String processName,
+ String threadName) {
SomeArgs args = SomeArgs.obtain();
- args.arg1 = SystemClock.elapsedRealtimeNanos();
- args.arg2 = fm.format(new Date()).toString();
- args.arg3 = where;
- args.arg4 = Process.myPid() + ":" + Application.getProcessName();
- args.arg5 = Thread.currentThread().getId() + ":" + Thread.currentThread().getName();
- args.arg6 = callingUid;
- args.arg7 = callingParams;
- args.arg8 = stackTrace;
- args.arg9 = a11yDump;
+ args.arg1 = timeStamp;
+ args.arg2 = where;
+ args.arg3 = processName;
+ args.arg4 = threadName;
+ args.arg5 = callingUid;
+ args.arg6 = callingParams;
+ args.arg7 = callingStack;
+ args.arg8 = a11yDump;
mHandler.obtainMessage(LogHandler.MESSAGE_LOG_TRACE_ENTRY, args).sendToTarget();
}
@@ -2100,17 +2122,26 @@ final class AccessibilityController {
long tokenOuter = os.start(ENTRY);
String callingStack =
- toStackTraceString((StackTraceElement[]) args.arg8);
-
- os.write(ELAPSED_REALTIME_NANOS, (long) args.arg1);
- os.write(CALENDAR_TIME, (String) args.arg2);
- os.write(WHERE, (String) args.arg3);
- os.write(PROCESS_NAME, (String) args.arg4);
- os.write(THREAD_ID_NAME, (String) args.arg5);
- os.write(CALLING_PKG, pmInternal.getNameForUid((int) args.arg6));
- os.write(CALLING_PARAMS, (String) args.arg7);
+ toStackTraceString((StackTraceElement[]) args.arg7);
+
+ long reportedTimeStampNanos = (long) args.arg1;
+ long currentElapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos();
+ long timeDiffNanos =
+ currentElapsedRealtimeNanos - reportedTimeStampNanos;
+ long currentTimeMillis = (new Date()).getTime();
+ long reportedTimeMillis =
+ currentTimeMillis - (long) (timeDiffNanos / 1000000);
+ SimpleDateFormat fm = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
+
+ os.write(ELAPSED_REALTIME_NANOS, reportedTimeStampNanos);
+ os.write(CALENDAR_TIME, fm.format(reportedTimeMillis).toString());
+ os.write(WHERE, (String) args.arg2);
+ os.write(PROCESS_NAME, (String) args.arg3);
+ os.write(THREAD_ID_NAME, (String) args.arg4);
+ os.write(CALLING_PKG, pmInternal.getNameForUid((int) args.arg5));
+ os.write(CALLING_PARAMS, (String) args.arg6);
os.write(CALLING_STACKS, callingStack);
- os.write(ACCESSIBILITY_SERVICE, (byte[]) args.arg9);
+ os.write(ACCESSIBILITY_SERVICE, (byte[]) args.arg8);
long tokenInner = os.start(WINDOW_MANAGER_SERVICE);
synchronized (mService.mGlobalLock) {
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index a9d33dc29467..c9af62bcfd61 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -3750,6 +3750,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
@VisibleForTesting
void setImeInputTarget(WindowState target) {
mImeInputTarget = target;
+ boolean canScreenshot = mImeInputTarget == null || !mImeInputTarget.isSecureLocked();
+ if (mImeWindowsContainer.setCanScreenshot(canScreenshot)) {
+ mWmService.requestTraversal();
+ }
}
@VisibleForTesting
@@ -3867,7 +3871,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
void updateImeInputAndControlTarget(WindowState target) {
if (mImeInputTarget != target) {
ProtoLog.i(WM_DEBUG_IME, "setInputMethodInputTarget %s", target);
- mImeInputTarget = target;
+ setImeInputTarget(target);
updateImeControlTarget();
}
}
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index a5843d496add..070a7252a3bf 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -3321,4 +3321,12 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
@WindowManager.LayoutParams.WindowType int getWindowType() {
return INVALID_WINDOW_TYPE;
}
+
+ boolean setCanScreenshot(boolean canScreenshot) {
+ if (mSurfaceControl == null) {
+ return false;
+ }
+ getPendingTransaction().setSecure(mSurfaceControl, !canScreenshot);
+ return true;
+ }
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java
index ab515d448f30..47087cfbd147 100644
--- a/services/core/java/com/android/server/wm/WindowManagerInternal.java
+++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java
@@ -81,6 +81,22 @@ public abstract class WindowManagerInternal {
void logTrace(
String where, String callingParams, byte[] a11yDump, int callingUid,
StackTraceElement[] stackTrace);
+
+ /**
+ * Add an accessibility trace entry.
+ *
+ * @param where A string to identify this log entry, which can be used to filter/search
+ * through the tracing file.
+ * @param callingParams The parameters for the method to be logged.
+ * @param a11yDump The proto byte array for a11y state when the entry is generated.
+ * @param callingUid The calling uid.
+ * @param callStack The call stack of the method to be logged.
+ * @param timeStamp The time when the method to be logged is called.
+ * @param processId The calling process Id.
+ * @param threadId The calling thread Id.
+ */
+ void logTrace(String where, String callingParams, byte[] a11yDump, int callingUid,
+ StackTraceElement[] callStack, long timeStamp, int processId, long threadId);
}
/**
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 3ef7ccd6bfab..ca38bb90f19c 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -538,21 +538,17 @@ class WindowStateAnimator {
// The sync transaction will contain the buffer so the bounds change transaction
// will only be applied with the buffer.
t.merge(task.getMainWindowSizeChangeTransaction());
+ task.setMainWindowSizeChangeTransaction(null);
} else {
- // Use pending transaction here instead of the transaction passed in because we
- // want to ensure the defer transaction is applied on the main transaction and
- // not on the sync transaction. This is because the sync transaction could
- // contain the buffer and we'd defer the transaction that contains the buffer
- // we're deferring on.
- SurfaceControl.Transaction pendingTransaction = mWin.getPendingTransaction();
- pendingTransaction.deferTransactionUntil(
- task.getMainWindowSizeChangeTask().getSurfaceControl(),
- mWin.getClientViewRootSurface(), mWin.getFrameNumber());
- pendingTransaction.deferTransactionUntil(mSurfaceController.mSurfaceControl,
- mWin.getClientViewRootSurface(), mWin.getFrameNumber());
- pendingTransaction.merge(task.getMainWindowSizeChangeTransaction());
+ mWin.applyWithNextDraw(finishedFrame -> {
+ final SurfaceControl.Transaction sizeChangedTransaction =
+ task.getMainWindowSizeChangeTransaction();
+ if (sizeChangedTransaction != null) {
+ finishedFrame.merge(sizeChangedTransaction);
+ task.setMainWindowSizeChangeTransaction(null);
+ }
+ });
}
- task.setMainWindowSizeChangeTransaction(null);
}
}
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 0a02a86e71a6..9f25daf0732f 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -104,7 +104,6 @@ cc_defaults {
"libhardware",
"libhardware_legacy",
"libhidlbase",
- "libkeystore_binder",
"libmeminfo",
"libmtp",
"libnativehelper",
diff --git a/services/core/jni/gnss/GnssMeasurementCallback.cpp b/services/core/jni/gnss/GnssMeasurementCallback.cpp
index 945694649f92..646aabd79e55 100644
--- a/services/core/jni/gnss/GnssMeasurementCallback.cpp
+++ b/services/core/jni/gnss/GnssMeasurementCallback.cpp
@@ -302,6 +302,10 @@ void GnssMeasurementCallbackAidl::translateSingleGnssMeasurement(JNIEnv* env,
SET(Cn0DbHz, measurement.antennaCN0DbHz);
SET(ConstellationType, static_cast<int32_t>(measurement.signalType.constellation));
+ // Half cycle state is reported in the AIDL version of GnssMeasurement
+ SET(AccumulatedDeltaRangeState,
+ (static_cast<int32_t>(measurement.accumulatedDeltaRangeState) |
+ ADR_STATE_HALF_CYCLE_REPORTED));
if (measurement.flags & static_cast<uint32_t>(GnssMeasurement::HAS_CARRIER_FREQUENCY)) {
SET(CarrierFrequencyHz, static_cast<float>(measurement.signalType.carrierFrequencyHz));
@@ -481,7 +485,7 @@ void GnssMeasurementCallbackHidl::translateSingleGnssMeasurement<
JavaObject& object) {
translateSingleGnssMeasurement(measurement_V1_1.v1_0, object);
- // Set the V1_1 flag, and mark that new field has valid information for Java Layer
+ // Half cycle state is reported in HIDL v1.1 or newer.
SET(AccumulatedDeltaRangeState,
(static_cast<int32_t>(measurement_V1_1.accumulatedDeltaRangeState) |
ADR_STATE_HALF_CYCLE_REPORTED));
diff --git a/services/tests/servicestests/AndroidManifest.xml b/services/tests/servicestests/AndroidManifest.xml
index 7c30b4553786..d1cd7cd526d1 100644
--- a/services/tests/servicestests/AndroidManifest.xml
+++ b/services/tests/servicestests/AndroidManifest.xml
@@ -92,6 +92,8 @@
<uses-permission android:name="android.permission.CONTROL_DEVICE_STATE"/>
<uses-permission android:name="android.permission.READ_PROJECTION_STATE"/>
<uses-permission android:name="android.permission.KILL_UID"/>
+ <uses-permission
+ android:name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD"/>
<!-- Uses API introduced in O (26) -->
<uses-sdk android:minSdkVersion="1"
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java b/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java
index e4be448f6b18..10a7a5000317 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/AuthServiceTest.java
@@ -96,6 +96,7 @@ public class AuthServiceTest {
when(mInjector.getFaceService()).thenReturn(mFaceService);
when(mInjector.getIrisService()).thenReturn(mIrisService);
when(mInjector.getAppOps(any())).thenReturn(mAppOpsManager);
+ when(mInjector.isHidlDisabled(any())).thenReturn(false);
}
@Test
diff --git a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProviderTest.java b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProviderTest.java
index 94cc666d740c..35c37efa16b4 100644
--- a/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProviderTest.java
+++ b/services/tests/servicestests/src/com/android/server/biometrics/sensors/fingerprint/aidl/FingerprintProviderTest.java
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.hardware.biometrics.common.CommonProps;
import android.hardware.biometrics.fingerprint.IFingerprint;
+import android.hardware.biometrics.fingerprint.SensorLocation;
import android.hardware.biometrics.fingerprint.SensorProps;
import android.os.UserManager;
import android.platform.test.annotations.Presubmit;
@@ -33,7 +34,6 @@ import androidx.annotation.NonNull;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
-import com.android.server.biometrics.sensors.BaseClientMonitor;
import com.android.server.biometrics.sensors.BiometricScheduler;
import com.android.server.biometrics.sensors.HalClientMonitor;
import com.android.server.biometrics.sensors.LockoutResetDispatcher;
@@ -77,9 +77,11 @@ public class FingerprintProviderTest {
final SensorProps sensor1 = new SensorProps();
sensor1.commonProps = new CommonProps();
sensor1.commonProps.sensorId = 0;
+ sensor1.sensorLocations = new SensorLocation[] {new SensorLocation()};
final SensorProps sensor2 = new SensorProps();
sensor2.commonProps = new CommonProps();
sensor2.commonProps.sensorId = 1;
+ sensor2.sensorLocations = new SensorLocation[] {new SensorLocation()};
mSensorProps = new SensorProps[] {sensor1, sensor2};
diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
index 88b06511cc74..589b3b403e6c 100644
--- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
@@ -2041,11 +2041,6 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase {
return mService.getPackageShortcutForTest(packageName, shortcutId, userId);
}
- protected void updatePackageShortcut(String packageName, String shortcutId, int userId,
- Consumer<ShortcutInfo> cb) {
- mService.updatePackageShortcutForTest(packageName, shortcutId, userId, cb);
- }
-
protected void assertShortcutExists(String packageName, String shortcutId, int userId) {
assertTrue(getPackageShortcut(packageName, shortcutId, userId) != null);
}
@@ -2241,10 +2236,6 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase {
return getPackageShortcut(getCallingPackage(), shortcutId, getCallingUserId());
}
- protected void updateCallerShortcut(String shortcutId, Consumer<ShortcutInfo> cb) {
- updatePackageShortcut(getCallingPackage(), shortcutId, getCallingUserId(), cb);
- }
-
protected List<ShortcutInfo> getLauncherShortcuts(String launcher, int userId, int queryFlags) {
final List<ShortcutInfo>[] ret = new List[1];
runWithCaller(launcher, userId, () -> {
@@ -2404,8 +2395,6 @@ public abstract class BaseShortcutManagerTest extends InstrumentationTestCase {
deleteAllSavedFiles();
- mMockAppSearchManager.removeShortcuts();
-
initService();
mService.applyRestore(payload, USER_0);
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
index 3f680e6c8d22..4d0beef99cca 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
@@ -1385,7 +1385,6 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
mService.waitForBitmapSavesForTest();
assertWith(getCallerShortcuts())
.forShortcutWithId("s1", si -> {
- Log.d("ShortcutManagerTest1", si.toString());
assertTrue(si.hasIconFile());
});
@@ -1703,8 +1702,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
// Because setDynamicShortcuts will update the timestamps when ranks are changing,
// we explicitly set timestamps here.
- updateCallerShortcut("s1", si -> si.setTimestamp(5000));
- updateCallerShortcut("s2", si -> si.setTimestamp(1000));
+ getCallerShortcut("s1").setTimestamp(5000);
+ getCallerShortcut("s2").setTimestamp(1000);
setCaller(CALLING_PACKAGE_2);
final ShortcutInfo s2_2 = makeShortcut("s2");
@@ -1714,9 +1713,9 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
makeComponent(ShortcutActivity.class));
assertTrue(mManager.setDynamicShortcuts(list(s2_2, s2_3, s2_4)));
- updateCallerShortcut("s2", si -> si.setTimestamp(1500));
- updateCallerShortcut("s3", si -> si.setTimestamp(3000));
- updateCallerShortcut("s4", si -> si.setTimestamp(500));
+ getCallerShortcut("s2").setTimestamp(1500);
+ getCallerShortcut("s3").setTimestamp(3000);
+ getCallerShortcut("s4").setTimestamp(500);
setCaller(CALLING_PACKAGE_3);
final ShortcutInfo s3_2 = makeShortcutWithLocusId("s3", makeLocusId("l2"));
@@ -1724,7 +1723,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
assertTrue(mManager.setDynamicShortcuts(list(s3_2)));
- updateCallerShortcut("s3", si -> si.setTimestamp(START_TIME + 5000));
+ getCallerShortcut("s3").setTimestamp(START_TIME + 5000);
setCaller(LAUNCHER_1);
@@ -7687,7 +7686,7 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
assertEquals("http://www/", si.getIntent().getData().toString());
assertEquals("foo/bar", si.getIntent().getType());
assertEquals(
- new ComponentName("abc", "abc.xyz"), si.getIntent().getComponent());
+ new ComponentName("abc", ".xyz"), si.getIntent().getComponent());
assertEquals(set("cat1", "cat2"), si.getIntent().getCategories());
assertEquals("value1", si.getIntent().getStringExtra("key1"));
diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java
index a37d5c8a956a..9433bf28e237 100644
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationComparatorTest.java
@@ -31,6 +31,7 @@ import android.app.NotificationManager;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.graphics.Color;
import android.os.Build;
import android.os.UserHandle;
import android.provider.Settings;
@@ -193,7 +194,7 @@ public class NotificationComparatorTest extends UiServiceTestCase {
Notification n11 = new Notification.Builder(mContext, TEST_CHANNEL_ID)
.setCategory(Notification.CATEGORY_MESSAGE)
- .setColorized(true)
+ .setColorized(true).setColor(Color.WHITE)
.build();
mRecordCheaterColorized = new NotificationRecord(mContext, new StatusBarNotification(pkg2,
pkg2, 1, "cheater", uid2, uid2, n11, new UserHandle(userId),
@@ -202,7 +203,7 @@ public class NotificationComparatorTest extends UiServiceTestCase {
Notification n12 = new Notification.Builder(mContext, TEST_CHANNEL_ID)
.setCategory(Notification.CATEGORY_MESSAGE)
- .setColorized(true)
+ .setColorized(true).setColor(Color.WHITE)
.setStyle(new Notification.MediaStyle())
.build();
mNoMediaSessionMedia = new NotificationRecord(mContext, new StatusBarNotification(
@@ -212,7 +213,7 @@ public class NotificationComparatorTest extends UiServiceTestCase {
Notification n13 = new Notification.Builder(mContext, TEST_CHANNEL_ID)
.setFlag(Notification.FLAG_FOREGROUND_SERVICE, true)
- .setColorized(true /* colorized */)
+ .setColorized(true).setColor(Color.WHITE)
.build();
mRecordColorized = new NotificationRecord(mContext, new StatusBarNotification(pkg2,
pkg2, 1, "colorized", uid2, uid2, n13,
@@ -221,7 +222,7 @@ public class NotificationComparatorTest extends UiServiceTestCase {
Notification n14 = new Notification.Builder(mContext, TEST_CHANNEL_ID)
.setCategory(Notification.CATEGORY_CALL)
- .setColorized(true)
+ .setColorized(true).setColor(Color.WHITE)
.setFlag(Notification.FLAG_FOREGROUND_SERVICE, true)
.build();
mRecordColorizedCall = new NotificationRecord(mContext, new StatusBarNotification(callPkg,
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 b24e78828f86..9a63782a4079 100755
--- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java
@@ -3284,7 +3284,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase {
Notification.Builder nb = new Notification.Builder(mContext,
mTestNotificationChannel.getId())
.setContentTitle("foo")
- .setColorized(true)
+ .setColorized(true).setColor(Color.WHITE)
.setFlag(Notification.FLAG_CAN_COLORIZE, true)
.setSmallIcon(android.R.drawable.sym_def_app_icon);
StatusBarNotification sbn = new StatusBarNotification(PKG, PKG, 1,
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java
index 402fd22416fc..004e45a8be4b 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java
@@ -66,8 +66,14 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase {
public void landscape() {
final DisplayInfo di = displayInfoForRotation(ROTATION_90, false /* withCutout */);
- verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT, 0);
- verifyNonDecorInsets(di, 0, 0, NAV_BAR_HEIGHT, 0);
+ if (mDisplayPolicy.navigationBarCanMove()) {
+ verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT, 0);
+ verifyNonDecorInsets(di, 0, 0, NAV_BAR_HEIGHT, 0);
+ } else {
+ // if the navigation bar cannot move then it is always on the bottom
+ verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+ verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT);
+ }
verifyConsistency(di);
}
@@ -75,8 +81,14 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase {
public void landscape_withCutout() {
final DisplayInfo di = displayInfoForRotation(ROTATION_90, true /* withCutout */);
- verifyStableInsets(di, DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT, 0);
- verifyNonDecorInsets(di, DISPLAY_CUTOUT_HEIGHT, 0, NAV_BAR_HEIGHT, 0);
+ if (mDisplayPolicy.navigationBarCanMove()) {
+ verifyStableInsets(di, DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, NAV_BAR_HEIGHT, 0);
+ verifyNonDecorInsets(di, DISPLAY_CUTOUT_HEIGHT, 0, NAV_BAR_HEIGHT, 0);
+ } else {
+ // if the navigation bar cannot move then it is always on the bottom
+ verifyStableInsets(di, DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+ verifyNonDecorInsets(di, DISPLAY_CUTOUT_HEIGHT, 0, 0, NAV_BAR_HEIGHT);
+ }
verifyConsistency(di);
}
@@ -84,8 +96,14 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase {
public void seascape() {
final DisplayInfo di = displayInfoForRotation(ROTATION_270, false /* withCutout */);
- verifyStableInsets(di, NAV_BAR_HEIGHT, STATUS_BAR_HEIGHT, 0, 0);
- verifyNonDecorInsets(di, NAV_BAR_HEIGHT, 0, 0, 0);
+ if (mDisplayPolicy.navigationBarCanMove()) {
+ verifyStableInsets(di, NAV_BAR_HEIGHT, STATUS_BAR_HEIGHT, 0, 0);
+ verifyNonDecorInsets(di, NAV_BAR_HEIGHT, 0, 0, 0);
+ } else {
+ // if the navigation bar cannot move then it is always on the bottom
+ verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT);
+ verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT);
+ }
verifyConsistency(di);
}
@@ -93,8 +111,14 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase {
public void seascape_withCutout() {
final DisplayInfo di = displayInfoForRotation(ROTATION_270, true /* withCutout */);
- verifyStableInsets(di, NAV_BAR_HEIGHT, STATUS_BAR_HEIGHT, DISPLAY_CUTOUT_HEIGHT, 0);
- verifyNonDecorInsets(di, NAV_BAR_HEIGHT, 0, DISPLAY_CUTOUT_HEIGHT, 0);
+ if (mDisplayPolicy.navigationBarCanMove()) {
+ verifyStableInsets(di, NAV_BAR_HEIGHT, STATUS_BAR_HEIGHT, DISPLAY_CUTOUT_HEIGHT, 0);
+ verifyNonDecorInsets(di, NAV_BAR_HEIGHT, 0, DISPLAY_CUTOUT_HEIGHT, 0);
+ } else {
+ // if the navigation bar cannot move then it is always on the bottom
+ verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT);
+ verifyNonDecorInsets(di, 0, 0, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT);
+ }
verifyConsistency(di);
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
index 16d83d133fbe..a3b5fc7ba872 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java
@@ -470,7 +470,7 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener {
ModelData modelData = getKeyphraseModelDataLocked(keyphraseId);
if (modelData == null || !modelData.isKeyphraseModel()) {
- Slog.e(TAG, "No model exists for given keyphrase Id " + keyphraseId);
+ Slog.w(TAG, "No model exists for given keyphrase Id " + keyphraseId);
return STATUS_ERROR;
}
diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
index a9300f3d33ae..eac21b492f10 100644
--- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
+++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java
@@ -142,7 +142,7 @@ public class SoundTriggerService extends SystemService {
}
if (stat.mIsStarted) {
- Slog.e(TAG, "error onStart(): Model " + id + " already started");
+ Slog.w(TAG, "error onStart(): Model " + id + " already started");
return;
}
@@ -154,12 +154,12 @@ public class SoundTriggerService extends SystemService {
public synchronized void onStop(UUID id) {
SoundModelStat stat = mModelStats.get(id);
if (stat == null) {
- Slog.e(TAG, "error onStop(): Model " + id + " has no stats available");
+ Slog.w(TAG, "error onStop(): Model " + id + " has no stats available");
return;
}
if (!stat.mIsStarted) {
- Slog.e(TAG, "error onStop(): Model " + id + " already stopped");
+ Slog.w(TAG, "error onStop(): Model " + id + " already stopped");
return;
}
@@ -314,7 +314,7 @@ public class SoundTriggerService extends SystemService {
GenericSoundModel model = getSoundModel(parcelUuid);
if (model == null) {
- Slog.e(TAG, "Null model in database for id: " + parcelUuid);
+ Slog.w(TAG, "Null model in database for id: " + parcelUuid);
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"startRecognition(): Null model in database for id: " + parcelUuid));
@@ -409,7 +409,7 @@ public class SoundTriggerService extends SystemService {
try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
enforceCallingPermission(Manifest.permission.MANAGE_SOUND_TRIGGER);
if (soundModel == null || soundModel.getUuid() == null) {
- Slog.e(TAG, "Invalid sound model");
+ Slog.w(TAG, "Invalid sound model");
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"loadGenericSoundModel(): Invalid sound model"));
@@ -445,7 +445,7 @@ public class SoundTriggerService extends SystemService {
try (SafeCloseable ignored = ClearCallingIdentityContext.create()) {
enforceCallingPermission(Manifest.permission.MANAGE_SOUND_TRIGGER);
if (soundModel == null || soundModel.getUuid() == null) {
- Slog.e(TAG, "Invalid sound model");
+ Slog.w(TAG, "Invalid sound model");
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"loadKeyphraseSoundModel(): Invalid sound model"));
@@ -453,7 +453,7 @@ public class SoundTriggerService extends SystemService {
return STATUS_ERROR;
}
if (soundModel.getKeyphrases() == null || soundModel.getKeyphrases().length != 1) {
- Slog.e(TAG, "Only one keyphrase per model is currently supported.");
+ Slog.w(TAG, "Only one keyphrase per model is currently supported.");
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"loadKeyphraseSoundModel(): Only one keyphrase per model"
@@ -513,7 +513,7 @@ public class SoundTriggerService extends SystemService {
synchronized (mLock) {
SoundModel soundModel = mLoadedModels.get(soundModelId.getUuid());
if (soundModel == null) {
- Slog.e(TAG, soundModelId + " is not loaded");
+ Slog.w(TAG, soundModelId + " is not loaded");
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"startRecognitionForService():" + soundModelId + " is not loaded"));
@@ -525,7 +525,7 @@ public class SoundTriggerService extends SystemService {
existingCallback = mCallbacks.get(soundModelId.getUuid());
}
if (existingCallback != null) {
- Slog.e(TAG, soundModelId + " is already running");
+ Slog.w(TAG, soundModelId + " is already running");
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"startRecognitionForService():"
@@ -580,7 +580,7 @@ public class SoundTriggerService extends SystemService {
synchronized (mLock) {
SoundModel soundModel = mLoadedModels.get(soundModelId.getUuid());
if (soundModel == null) {
- Slog.e(TAG, soundModelId + " is not loaded");
+ Slog.w(TAG, soundModelId + " is not loaded");
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"stopRecognitionForService(): " + soundModelId
@@ -593,7 +593,7 @@ public class SoundTriggerService extends SystemService {
callback = mCallbacks.get(soundModelId.getUuid());
}
if (callback == null) {
- Slog.e(TAG, soundModelId + " is not running");
+ Slog.w(TAG, soundModelId + " is not running");
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"stopRecognitionForService(): " + soundModelId
@@ -648,7 +648,7 @@ public class SoundTriggerService extends SystemService {
synchronized (mLock) {
SoundModel soundModel = mLoadedModels.get(soundModelId.getUuid());
if (soundModel == null) {
- Slog.e(TAG, soundModelId + " is not loaded");
+ Slog.w(TAG, soundModelId + " is not loaded");
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"unloadSoundModel(): " + soundModelId + " is not loaded"));
@@ -715,7 +715,7 @@ public class SoundTriggerService extends SystemService {
synchronized (mLock) {
SoundModel soundModel = mLoadedModels.get(soundModelId.getUuid());
if (soundModel == null) {
- Slog.e(TAG, soundModelId + " is not loaded");
+ Slog.w(TAG, soundModelId + " is not loaded");
sEventLogger.log(new SoundTriggerLogger.StringEvent("getModelState(): "
+ soundModelId + " is not loaded"));
@@ -777,7 +777,7 @@ public class SoundTriggerService extends SystemService {
synchronized (mLock) {
SoundModel soundModel = mLoadedModels.get(soundModelId.getUuid());
if (soundModel == null) {
- Slog.e(TAG, soundModelId + " is not loaded. Loaded models: "
+ Slog.w(TAG, soundModelId + " is not loaded. Loaded models: "
+ mLoadedModels.toString());
sEventLogger.log(new SoundTriggerLogger.StringEvent("setParameter(): "
@@ -810,7 +810,7 @@ public class SoundTriggerService extends SystemService {
synchronized (mLock) {
SoundModel soundModel = mLoadedModels.get(soundModelId.getUuid());
if (soundModel == null) {
- Slog.e(TAG, soundModelId + " is not loaded");
+ Slog.w(TAG, soundModelId + " is not loaded");
sEventLogger.log(new SoundTriggerLogger.StringEvent("getParameter(): "
+ soundModelId + " is not loaded"));
@@ -841,7 +841,7 @@ public class SoundTriggerService extends SystemService {
synchronized (mLock) {
SoundModel soundModel = mLoadedModels.get(soundModelId.getUuid());
if (soundModel == null) {
- Slog.e(TAG, soundModelId + " is not loaded");
+ Slog.w(TAG, soundModelId + " is not loaded");
sEventLogger.log(new SoundTriggerLogger.StringEvent(
"queryParameter(): "
diff --git a/telecomm/java/Android.bp b/telecomm/java/Android.bp
index bac7228ca03b..3bd595352a55 100644
--- a/telecomm/java/Android.bp
+++ b/telecomm/java/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-telecomm-sources",
srcs: [
diff --git a/telephony/common/Android.bp b/telephony/common/Android.bp
index 9572c695c552..201ab530fe86 100644
--- a/telephony/common/Android.bp
+++ b/telephony/common/Android.bp
@@ -1,3 +1,12 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-telephony-common-sources",
srcs: [
diff --git a/telephony/java/Android.bp b/telephony/java/Android.bp
index 1bd582789572..3941b300206f 100644
--- a/telephony/java/Android.bp
+++ b/telephony/java/Android.bp
@@ -1,3 +1,13 @@
+package {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ // SPDX-license-identifier-BSD
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
filegroup {
name: "framework-telephony-sources",
srcs: [
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 1cc9c6fc5bc5..234cc4d133f1 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -5467,7 +5467,7 @@ public class CarrierConfigManager {
sDefaults.putStringArray(KEY_MISSED_INCOMING_CALL_SMS_ORIGINATOR_STRING_ARRAY,
new String[0]);
sDefaults.putStringArray(KEY_APN_PRIORITY_STRING_ARRAY, new String[] {
- "default:0", "enterprise:1", "mms:2", "supl:2", "dun:2", "hipri:3", "fota:2",
+ "enterprise:0", "default:1", "mms:2", "supl:2", "dun:2", "hipri:3", "fota:2",
"ims:2", "cbs:2", "ia:2", "emergency:2", "mcx:3", "xcap:3"
});
sDefaults.putStringArray(KEY_MISSED_INCOMING_CALL_SMS_PATTERN_STRING_ARRAY, new String[0]);
diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java
index 6441565d731b..4004e37dc4e0 100644
--- a/telephony/java/android/telephony/SubscriptionInfo.java
+++ b/telephony/java/android/telephony/SubscriptionInfo.java
@@ -151,13 +151,14 @@ public class SubscriptionInfo implements Parcelable {
/**
* The access rules for this subscription, if it is embedded and defines any.
+ * This does not include access rules for non-embedded subscriptions.
*/
@Nullable
private UiccAccessRule[] mNativeAccessRules;
/**
* The carrier certificates for this subscription that are saved in carrier configs.
- * The other carrier certificates are embedded on Uicc and stored as part of mNativeAccessRules.
+ * This does not include access rules from the Uicc, whether embedded or non-embedded.
*/
@Nullable
private UiccAccessRule[] mCarrierConfigAccessRules;
@@ -664,7 +665,6 @@ public class SubscriptionInfo implements Parcelable {
* is authorized to manage this subscription.
* TODO and fix it properly in R / master: either deprecate this and have 3 APIs
* native + carrier + all, or have this return all by default.
- * @throws UnsupportedOperationException if this subscription is not embedded.
* @hide
*/
@SystemApi
diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java
index 67fe783ee7a4..7b760ae52911 100644
--- a/telephony/java/android/telephony/SubscriptionManager.java
+++ b/telephony/java/android/telephony/SubscriptionManager.java
@@ -2867,6 +2867,10 @@ public class SubscriptionManager {
* Checks whether the app with the given context is authorized to manage the given subscription
* according to its metadata.
*
+ * Only supported for embedded subscriptions (if {@link SubscriptionInfo#isEmbedded} returns
+ * true). To check for permissions for non-embedded subscription as well,
+ * {@see android.telephony.TelephonyManager#hasCarrierPrivileges}.
+ *
* @param info The subscription to check.
* @return whether the app is authorized to manage this subscription per its metadata.
*/
@@ -2879,6 +2883,10 @@ public class SubscriptionManager {
* be authorized if it is included in the {@link android.telephony.UiccAccessRule} of the
* {@link android.telephony.SubscriptionInfo} with the access status.
*
+ * Only supported for embedded subscriptions (if {@link SubscriptionInfo#isEmbedded} returns
+ * true). To check for permissions for non-embedded subscription as well,
+ * {@see android.telephony.TelephonyManager#hasCarrierPrivileges}.
+ *
* @param info The subscription to check.
* @param packageName Package name of the app to check.
* @return whether the app is authorized to manage this subscription per its access rules.
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 5b68be5e17b7..75c80313cd12 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -8968,6 +8968,9 @@ public class TelephonyManager {
* call will return true. This access is granted by the owner of the UICC
* card and does not depend on the registered carrier.
*
+ * Note that this API applies to both physical and embedded subscriptions and
+ * is a superset of the checks done in SubscriptionManager#canManageSubscription.
+ *
* @return true if the app has carrier privileges.
*/
public boolean hasCarrierPrivileges() {
@@ -8981,6 +8984,9 @@ public class TelephonyManager {
* call will return true. This access is granted by the owner of the UICC
* card and does not depend on the registered carrier.
*
+ * Note that this API applies to both physical and embedded subscriptions and
+ * is a superset of the checks done in SubscriptionManager#canManageSubscription.
+ *
* @param subId The subscription to use.
* @return true if the app has carrier privileges.
* @hide
diff --git a/tests/SilkFX/src/com/android/test/silkfx/common/ColorModeControls.kt b/tests/SilkFX/src/com/android/test/silkfx/common/ColorModeControls.kt
index 5c2644844e14..b41ee3a9ef2c 100644
--- a/tests/SilkFX/src/com/android/test/silkfx/common/ColorModeControls.kt
+++ b/tests/SilkFX/src/com/android/test/silkfx/common/ColorModeControls.kt
@@ -19,7 +19,11 @@ package com.android.test.silkfx.common
import android.content.Context
import android.content.pm.ActivityInfo
import android.hardware.display.DisplayManager
+import android.os.IBinder
import android.util.AttributeSet
+import android.util.Log
+import android.view.SurfaceControl
+import android.view.SurfaceControlHdrLayerInfoListener
import android.view.Window
import android.widget.Button
import android.widget.LinearLayout
@@ -35,6 +39,7 @@ class ColorModeControls : LinearLayout, WindowObserver {
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {
displayManager = context.getSystemService(DisplayManager::class.java)!!
displayId = context.getDisplayId()
+ displayToken = SurfaceControl.getInternalDisplayToken()
}
private var window: Window? = null
@@ -42,6 +47,7 @@ class ColorModeControls : LinearLayout, WindowObserver {
private val displayManager: DisplayManager
private var targetSdrWhitePointIndex = 0
private var displayId: Int
+ private var displayToken: IBinder
private val whitePoint get() = SDR_WHITE_POINTS[targetSdrWhitePointIndex]
@@ -109,6 +115,7 @@ class ColorModeControls : LinearLayout, WindowObserver {
// Imperfect, but close enough, synchronization by waiting for frame commit to set the value
viewTreeObserver.registerFrameCommitCallback {
try {
+ SurfaceControl.setDisplayBrightness(displayToken, level)
displayManager.setTemporaryBrightness(displayId, level)
} catch (ex: Exception) {
// Ignore a permission denied rejection - it doesn't meaningfully change much
@@ -116,9 +123,28 @@ class ColorModeControls : LinearLayout, WindowObserver {
}
}
+ private val listener = object : SurfaceControlHdrLayerInfoListener() {
+ override fun onHdrInfoChanged(
+ displayToken: IBinder?,
+ numberOfHdrLayers: Int,
+ maxW: Int,
+ maxH: Int,
+ flags: Int
+ ) {
+ Log.d("HDRInfo", "onHdrInfoChanged: numLayer = $numberOfHdrLayers ($maxW x $maxH)" +
+ ", flags = $flags")
+ }
+ }
+
override fun onAttachedToWindow() {
super.onAttachedToWindow()
threadedRenderer?.setColorMode(window!!.colorMode, whitePoint)
+ listener.register(displayToken)
+ }
+
+ override fun onDetachedFromWindow() {
+ super.onDetachedFromWindow()
+ listener.unregister(displayToken)
}
} \ No newline at end of file
diff --git a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
index 429e676155f8..ef324e7c1377 100644
--- a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
+++ b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
@@ -25,27 +25,22 @@ import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
-import android.content.Context;
import android.content.ContentResolver;
+import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Icon;
import android.media.AudioAttributes;
+import android.net.Uri;
import android.os.Bundle;
-import android.os.Vibrator;
import android.os.Handler;
-import android.os.UserHandle;
-import android.util.Log;
-import android.net.Uri;
+import android.os.PowerManager;
import android.os.SystemClock;
+import android.os.Vibrator;
+import android.util.Log;
import android.widget.RemoteViews;
-import android.os.PowerManager;
-
-// private NM API
-import android.app.INotificationManager;
import android.widget.Toast;
public class NotificationTestList extends TestActivity
@@ -185,6 +180,7 @@ public class NotificationTestList extends TestActivity
.setContentTitle("default priority group 1")
.setGroup("group1")
.setOngoing(true)
+ .setColor(Color.WHITE)
.setColorized(true)
.build();
mNM.notify(6002, n);
diff --git a/tests/vcn/java/android/net/vcn/VcnConfigTest.java b/tests/vcn/java/android/net/vcn/VcnConfigTest.java
index c1ef350e5c4a..7ac51b7e3342 100644
--- a/tests/vcn/java/android/net/vcn/VcnConfigTest.java
+++ b/tests/vcn/java/android/net/vcn/VcnConfigTest.java
@@ -79,6 +79,18 @@ public class VcnConfigTest {
}
@Test
+ public void testBuilderRequiresUniqueGatewayConnectionNames() {
+ final VcnGatewayConnectionConfig config = VcnGatewayConnectionConfigTest.buildTestConfig();
+ try {
+ new VcnConfig.Builder(mContext)
+ .addGatewayConnectionConfig(config)
+ .addGatewayConnectionConfig(config);
+ fail("Expected exception due to duplicate gateway connection name");
+ } catch (IllegalArgumentException e) {
+ }
+ }
+
+ @Test
public void testBuilderAndGetters() {
final VcnConfig config = buildTestConfig(mContext);
diff --git a/tests/vcn/java/android/net/vcn/VcnGatewayConnectionConfigTest.java b/tests/vcn/java/android/net/vcn/VcnGatewayConnectionConfigTest.java
index 8a0c923d5fb0..4ee4d611e9b0 100644
--- a/tests/vcn/java/android/net/vcn/VcnGatewayConnectionConfigTest.java
+++ b/tests/vcn/java/android/net/vcn/VcnGatewayConnectionConfigTest.java
@@ -19,6 +19,7 @@ package android.net.vcn;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import android.net.NetworkCapabilities;
@@ -61,13 +62,20 @@ public class VcnGatewayConnectionConfigTest {
public static final VcnControlPlaneConfig CONTROL_PLANE_CONFIG =
VcnControlPlaneIkeConfigTest.buildTestConfig();
+ public static final String GATEWAY_CONNECTION_NAME_PREFIX = "gatewayConnectionName-";
+ private static int sGatewayConnectionConfigCount = 0;
+
// Public for use in VcnGatewayConnectionTest
public static VcnGatewayConnectionConfig buildTestConfig() {
return buildTestConfigWithExposedCaps(EXPOSED_CAPS);
}
private static VcnGatewayConnectionConfig.Builder newBuilder() {
- return new VcnGatewayConnectionConfig.Builder(CONTROL_PLANE_CONFIG);
+ // Append a unique identifier to the name prefix to guarantee that all created
+ // VcnGatewayConnectionConfigs have a unique name (required by VcnConfig).
+ return new VcnGatewayConnectionConfig.Builder(
+ GATEWAY_CONNECTION_NAME_PREFIX + sGatewayConnectionConfigCount++,
+ CONTROL_PLANE_CONFIG);
}
// Public for use in VcnGatewayConnectionTest
@@ -87,9 +95,23 @@ public class VcnGatewayConnectionConfigTest {
}
@Test
+ public void testBuilderRequiresNonNullGatewayConnectionName() {
+ try {
+ new VcnGatewayConnectionConfig.Builder(
+ null /* gatewayConnectionName */, CONTROL_PLANE_CONFIG)
+ .build();
+
+ fail("Expected exception due to invalid gateway connection name");
+ } catch (NullPointerException e) {
+ }
+ }
+
+ @Test
public void testBuilderRequiresNonNullControlPlaneConfig() {
try {
- new VcnGatewayConnectionConfig.Builder(null).build();
+ new VcnGatewayConnectionConfig.Builder(
+ GATEWAY_CONNECTION_NAME_PREFIX, null /* ctrlPlaneConfig */)
+ .build();
fail("Expected exception due to invalid control plane config");
} catch (NullPointerException e) {
@@ -139,6 +161,8 @@ public class VcnGatewayConnectionConfigTest {
public void testBuilderAndGetters() {
final VcnGatewayConnectionConfig config = buildTestConfig();
+ assertTrue(config.getGatewayConnectionName().startsWith(GATEWAY_CONNECTION_NAME_PREFIX));
+
int[] exposedCaps = config.getExposedCapabilities();
Arrays.sort(exposedCaps);
assertArrayEquals(EXPOSED_CAPS, exposedCaps);
diff --git a/tests/vcn/java/android/net/vcn/VcnManagerTest.java b/tests/vcn/java/android/net/vcn/VcnManagerTest.java
index 516c206672d2..8461de6d877b 100644
--- a/tests/vcn/java/android/net/vcn/VcnManagerTest.java
+++ b/tests/vcn/java/android/net/vcn/VcnManagerTest.java
@@ -50,9 +50,7 @@ import java.util.concurrent.Executor;
public class VcnManagerTest {
private static final ParcelUuid SUB_GROUP = new ParcelUuid(new UUID(0, 0));
- private static final int[] UNDERLYING_NETWORK_CAPABILITIES = {
- NetworkCapabilities.NET_CAPABILITY_IMS, NetworkCapabilities.NET_CAPABILITY_INTERNET
- };
+ private static final String GATEWAY_CONNECTION_NAME = "gatewayConnectionName";
private static final Executor INLINE_EXECUTOR = Runnable::run;
private IVcnManagementService mMockVcnManagementService;
@@ -207,13 +205,13 @@ public class VcnManagerTest {
verify(mMockStatusCallback).onStatusChanged(VCN_STATUS_CODE_ACTIVE);
cbBinder.onGatewayConnectionError(
- UNDERLYING_NETWORK_CAPABILITIES,
+ GATEWAY_CONNECTION_NAME,
VcnManager.VCN_ERROR_CODE_NETWORK_ERROR,
UnknownHostException.class.getName(),
"exception_message");
verify(mMockStatusCallback)
.onGatewayConnectionError(
- eq(UNDERLYING_NETWORK_CAPABILITIES),
+ eq(GATEWAY_CONNECTION_NAME),
eq(VcnManager.VCN_ERROR_CODE_NETWORK_ERROR),
any(UnknownHostException.class));
}
diff --git a/tests/vcn/java/com/android/server/VcnManagementServiceTest.java b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java
index c88b0c154712..4ad7136aabb2 100644
--- a/tests/vcn/java/com/android/server/VcnManagementServiceTest.java
+++ b/tests/vcn/java/com/android/server/VcnManagementServiceTest.java
@@ -19,6 +19,8 @@ package com.android.server;
import static android.net.NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED;
import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
+import static android.net.vcn.VcnManager.VCN_STATUS_CODE_ACTIVE;
+import static android.net.vcn.VcnManager.VCN_STATUS_CODE_SAFE_MODE;
import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
import static android.telephony.TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
@@ -695,7 +697,9 @@ public class VcnManagementServiceTest {
hasCarrierPrivileges);
final Vcn vcn = startAndGetVcnInstance(subGrp);
- doReturn(isVcnActive).when(vcn).isActive();
+ doReturn(isVcnActive ? VCN_STATUS_CODE_ACTIVE : VCN_STATUS_CODE_SAFE_MODE)
+ .when(vcn)
+ .getStatus();
doReturn(true)
.when(mLocationPermissionChecker)
diff --git a/tests/vcn/java/com/android/server/vcn/UnderlyingNetworkTrackerTest.java b/tests/vcn/java/com/android/server/vcn/UnderlyingNetworkTrackerTest.java
index ed2e4d9b9946..b592000e38f9 100644
--- a/tests/vcn/java/com/android/server/vcn/UnderlyingNetworkTrackerTest.java
+++ b/tests/vcn/java/com/android/server/vcn/UnderlyingNetworkTrackerTest.java
@@ -158,7 +158,7 @@ public class UnderlyingNetworkTrackerTest {
for (final int subId : expectedSubIds) {
verify(mConnectivityManager)
.requestBackgroundNetwork(
- eq(getCellRequestForSubId(subId, expectedSubIds)),
+ eq(getCellRequestForSubId(subId)),
any(),
any(NetworkBringupCallback.class));
}
@@ -189,30 +189,30 @@ public class UnderlyingNetworkTrackerTest {
}
private NetworkRequest getWifiRequest(Set<Integer> netCapsSubIds) {
- return getExpectedRequestBase(netCapsSubIds)
+ return getExpectedRequestBase()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+ .setSubIds(netCapsSubIds)
.build();
}
- private NetworkRequest getCellRequestForSubId(int subId, Set<Integer> netCapsSubIds) {
- return getExpectedRequestBase(netCapsSubIds)
+ private NetworkRequest getCellRequestForSubId(int subId) {
+ return getExpectedRequestBase()
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.setNetworkSpecifier(new TelephonyNetworkSpecifier(subId))
.build();
}
private NetworkRequest getRouteSelectionRequest(Set<Integer> netCapsSubIds) {
- return getExpectedRequestBase(netCapsSubIds).build();
+ return getExpectedRequestBase().setSubIds(netCapsSubIds).build();
}
- private NetworkRequest.Builder getExpectedRequestBase(Set<Integer> subIds) {
+ private NetworkRequest.Builder getExpectedRequestBase() {
final NetworkRequest.Builder builder =
new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
- .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED)
- .setSubIds(subIds);
+ .removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED);
return builder;
}
diff --git a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
index ca6448ca9b8c..2fadd44440f3 100644
--- a/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
+++ b/tests/vcn/java/com/android/server/vcn/VcnGatewayConnectionConnectedStateTest.java
@@ -241,7 +241,7 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
verify(mGatewayStatusCallback)
.onGatewayConnectionError(
- eq(mConfig.getExposedCapabilities()),
+ eq(mConfig.getGatewayConnectionName()),
eq(VCN_ERROR_CODE_INTERNAL_ERROR),
any(),
any());
@@ -275,7 +275,10 @@ public class VcnGatewayConnectionConnectedStateTest extends VcnGatewayConnection
verify(mGatewayStatusCallback)
.onGatewayConnectionError(
- eq(mConfig.getExposedCapabilities()), eq(expectedErrorType), any(), any());
+ eq(mConfig.getGatewayConnectionName()),
+ eq(expectedErrorType),
+ any(),
+ any());
}
@Test
diff --git a/tests/vcn/java/com/android/server/vcn/VcnTest.java b/tests/vcn/java/com/android/server/vcn/VcnTest.java
index c853fc50fdf7..540be38ed798 100644
--- a/tests/vcn/java/com/android/server/vcn/VcnTest.java
+++ b/tests/vcn/java/com/android/server/vcn/VcnTest.java
@@ -19,10 +19,12 @@ package com.android.server.vcn;
import static android.net.NetworkCapabilities.NET_CAPABILITY_DUN;
import static android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET;
import static android.net.NetworkCapabilities.NET_CAPABILITY_MMS;
+import static android.net.vcn.VcnManager.VCN_STATUS_CODE_ACTIVE;
+import static android.net.vcn.VcnManager.VCN_STATUS_CODE_INACTIVE;
+import static android.net.vcn.VcnManager.VCN_STATUS_CODE_SAFE_MODE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.argThat;
import static org.mockito.Matchers.eq;
@@ -51,7 +53,9 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
+import java.util.ArrayList;
import java.util.Arrays;
+import java.util.List;
import java.util.Set;
import java.util.UUID;
@@ -140,7 +144,7 @@ public class VcnTest {
mTestLooper.dispatchAll();
}
- private void verifyUpdateSubscriptionSnapshotNotifiesConnectionGateways(boolean isActive) {
+ private void verifyUpdateSubscriptionSnapshotNotifiesGatewayConnections(int status) {
final NetworkRequestListener requestListener = verifyAndGetRequestListener();
startVcnGatewayWithCapabilities(requestListener, TEST_CAPS[0]);
@@ -150,25 +154,25 @@ public class VcnTest {
final TelephonySubscriptionSnapshot updatedSnapshot =
mock(TelephonySubscriptionSnapshot.class);
- mVcn.setIsActive(isActive);
+ mVcn.setStatus(status);
mVcn.updateSubscriptionSnapshot(updatedSnapshot);
mTestLooper.dispatchAll();
for (final VcnGatewayConnection gateway : gatewayConnections) {
- verify(gateway, isActive ? times(1) : never())
+ verify(gateway, status == VCN_STATUS_CODE_ACTIVE ? times(1) : never())
.updateSubscriptionSnapshot(eq(updatedSnapshot));
}
}
@Test
public void testSubscriptionSnapshotUpdatesVcnGatewayConnections() {
- verifyUpdateSubscriptionSnapshotNotifiesConnectionGateways(true /* isActive */);
+ verifyUpdateSubscriptionSnapshotNotifiesGatewayConnections(VCN_STATUS_CODE_ACTIVE);
}
@Test
- public void testSubscriptionSnapshotUpdatesVcnGatewayConnectionsWhileInactive() {
- verifyUpdateSubscriptionSnapshotNotifiesConnectionGateways(false /* isActive */);
+ public void testSubscriptionSnapshotUpdatesVcnGatewayConnectionsInSafeMode() {
+ verifyUpdateSubscriptionSnapshotNotifiesGatewayConnections(VCN_STATUS_CODE_SAFE_MODE);
}
private void triggerVcnRequestListeners(NetworkRequestListener requestListener) {
@@ -199,7 +203,7 @@ public class VcnTest {
private void verifySafeMode(
NetworkRequestListener requestListener,
Set<VcnGatewayConnection> expectedGatewaysTornDown) {
- assertFalse(mVcn.isActive());
+ assertEquals(VCN_STATUS_CODE_SAFE_MODE, mVcn.getStatus());
for (final VcnGatewayConnection gatewayConnection : expectedGatewaysTornDown) {
verify(gatewayConnection).teardownAsynchronously();
}
@@ -274,11 +278,12 @@ public class VcnTest {
assertEquals(2, mVcn.getVcnGatewayConnectionConfigMap().size());
// Create VcnConfig with only one VcnGatewayConnectionConfig so a gateway connection is torn
- // down
- final VcnGatewayConnectionConfig activeConfig =
- VcnGatewayConnectionConfigTest.buildTestConfigWithExposedCaps(TEST_CAPS[0]);
- final VcnGatewayConnectionConfig removedConfig =
- VcnGatewayConnectionConfigTest.buildTestConfigWithExposedCaps(TEST_CAPS[1]);
+ // down. Reuse existing VcnGatewayConnectionConfig so that the gateway connection name
+ // matches.
+ final List<VcnGatewayConnectionConfig> currentConfigs =
+ new ArrayList<>(mVcn.getVcnGatewayConnectionConfigMap().keySet());
+ final VcnGatewayConnectionConfig activeConfig = currentConfigs.get(0);
+ final VcnGatewayConnectionConfig removedConfig = currentConfigs.get(1);
final VcnConfig updatedConfig =
new VcnConfig.Builder(mContext).addGatewayConnectionConfig(activeConfig).build();
@@ -316,7 +321,7 @@ public class VcnTest {
// Registered on start, then re-registered with new configs
verify(mVcnNetworkProvider, times(2)).registerListener(eq(requestListener));
- assertTrue(mVcn.isActive());
+ assertEquals(VCN_STATUS_CODE_ACTIVE, mVcn.getStatus());
for (final int[] caps : TEST_CAPS) {
// Expect each gateway connection created only on initial startup
verify(mDeps)
@@ -331,7 +336,7 @@ public class VcnTest {
@Test
public void testIgnoreNetworkRequestWhileInactive() {
- mVcn.setIsActive(false /* isActive */);
+ mVcn.setStatus(VCN_STATUS_CODE_INACTIVE);
final NetworkRequestListener requestListener = verifyAndGetRequestListener();
triggerVcnRequestListeners(requestListener);
diff --git a/tools/aapt2/cmd/Link_test.cpp b/tools/aapt2/cmd/Link_test.cpp
index dfdac6b9d93e..d1e6d3922f3f 100644
--- a/tools/aapt2/cmd/Link_test.cpp
+++ b/tools/aapt2/cmd/Link_test.cpp
@@ -466,11 +466,19 @@ TEST_F(LinkTest, StagedAndroidApi) {
const std::string android_r_java = android_java + "/android/R.java";
std::string android_r_contents;
ASSERT_TRUE(android::base::ReadFileToString(android_r_java, &android_r_contents));
- EXPECT_THAT(android_r_contents, HasSubstr(" public static final int finalized_res=0x01010001;"));
- EXPECT_THAT(android_r_contents, HasSubstr(" public static int staged_s_res=0x01010050;"));
- EXPECT_THAT(android_r_contents, HasSubstr(" public static int staged_s2_res=0x01ff0049;"));
- EXPECT_THAT(android_r_contents, HasSubstr(" public static int staged_t_res=0x01fe0063;"));
- EXPECT_THAT(android_r_contents, HasSubstr(" public static int staged_t_string=0x01fd0072;"));
+ EXPECT_THAT(android_r_contents, HasSubstr("public static final int finalized_res=0x01010001;"));
+ EXPECT_THAT(
+ android_r_contents,
+ HasSubstr("public static final int staged_s_res; static { staged_s_res=0x01010050; }"));
+ EXPECT_THAT(
+ android_r_contents,
+ HasSubstr("public static final int staged_s2_res; static { staged_s2_res=0x01ff0049; }"));
+ EXPECT_THAT(
+ android_r_contents,
+ HasSubstr("public static final int staged_t_res; static { staged_t_res=0x01fe0063; }"));
+ EXPECT_THAT(
+ android_r_contents,
+ HasSubstr("public static final int staged_t_string; static { staged_t_string=0x01fd0072; }"));
// Build an app that uses the framework attribute in a declare-styleable
const std::string client_res = GetTestPath("app-res");
diff --git a/tools/aapt2/format/binary/BinaryResourceParser.cpp b/tools/aapt2/format/binary/BinaryResourceParser.cpp
index bfb8d5854d6d..f1b350fe90f7 100644
--- a/tools/aapt2/format/binary/BinaryResourceParser.cpp
+++ b/tools/aapt2/format/binary/BinaryResourceParser.cpp
@@ -393,8 +393,15 @@ bool BinaryResourceParser::ParseType(const ResourceTablePackage* package,
.SetAllowMangled(true);
if (entry->flags & ResTable_entry::FLAG_PUBLIC) {
- res_builder.SetVisibility(Visibility{Visibility::Level::kPublic});
+ Visibility visibility{Visibility::Level::kPublic};
+ auto spec_flags = entry_type_spec_flags_.find(res_id);
+ if (spec_flags != entry_type_spec_flags_.end() &&
+ spec_flags->second & ResTable_typeSpec::SPEC_STAGED_API) {
+ visibility.staged_api = true;
+ }
+
+ res_builder.SetVisibility(visibility);
// Erase the ID from the map once processed, so that we don't mark the same symbol more than
// once.
entry_type_spec_flags_.erase(res_id);
diff --git a/tools/aapt2/java/ClassDefinition.h b/tools/aapt2/java/ClassDefinition.h
index d3648c8aae52..2acdadb3c034 100644
--- a/tools/aapt2/java/ClassDefinition.h
+++ b/tools/aapt2/java/ClassDefinition.h
@@ -78,10 +78,18 @@ class PrimitiveMember : public ClassMember {
ClassMember::Print(final, printer, strip_api_annotations);
printer->Print("public static ");
- if (final && !staged_api_) {
+ if (final) {
printer->Print("final ");
}
- printer->Print("int ").Print(name_).Print("=").Print(to_string(val_)).Print(";");
+ printer->Print("int ").Print(name_);
+ if (staged_api_) {
+ // Prevent references to staged apis from being inline by setting their value out-of-line.
+ printer->Print("; static { ").Print(name_);
+ }
+ printer->Print("=").Print(to_string(val_)).Print(";");
+ if (staged_api_) {
+ printer->Print(" }");
+ }
}
private: